• 评论情感分析----多种机器学习模型测试总结


    2022/12/27更新,目前代码+数据集+停用词已上传GitHub,点击此处跳转下载。

    前言

    本文章总结了许多机器学习模型对于情感分析的性能,包括模型训练、预测的时间、训练集、测试集的预测准确度。

    Step1: 读取评论文件

    加载评论信息文件, 并获取所有评论内容及情感(其中共读取13499条评论数据,情绪有好有坏)
    在这里插入图片描述

    在这里插入图片描述

    如下是代码实现

    import csv
    import numpy as np
    
    def loadCommentFile(file_name):
        all_sentences = []
        
        with open(file_name, 'r', encoding='utf-8') as fp:                                    #读取文件
            reader = csv.reader(fp)
            
            #读取迭代器内的所有评论信息
            all_sentences = np.array([[comment[0],comment[1]] for comment in reader])         #保存格式[['评论1','评论情感标签']]         
        
        print('Step1:read {} comments in file...'.format(len(all_sentences)))
        return all_sentences                                                                  #返回numpy数组形式的所有评论内容及对应标签
    

    Step2: 去除重复评论信息

    去除评论数据集中的重复评论信息

    import pandas as pd
    
    def removeSameComment(all_sentences):
        
        data = pd.DataFrame(all_sentences)
        same_sentence_num = data.duplicated().sum()                                           #统计重复的评论内容个数
        
        if same_sentence_num > 0:
            print('Step2:remove {} of same comments...'.format(same_sentence_num))
            data = data.drop_duplicates()                                                     #删除重复的评论内容  
        
        return data.values                                                                   #返回numpy数组形式的评论内容信息
    
    

    Step3: 使用jieba库进行分词操作

    使用jieba库对中文评论语句及逆行切分操作

    import jieba
    
    def getAllWords(all_sentences):
        all_words = []
        
        for sentence in all_sentences:
            words = jieba.lcut(sentence[0])                                                  #将评论切词,并存放所有切分后的评论语句
            all_words.append(words)
        
        print('Step3:jieba cut successfully...')
        return np.array(all_words)
    

    Step4: 去除停用词

    去除评论词语中已经停用的词语

    def removeStopWords(file_name, all_words):
        stop_words = []
        with open(file_name, 'r', encoding='utf-8') as fp:                      #读取所有停用词
            stop_words = fp.read().split('\n')                                   #存到stop_words列表中(以换行符切分)
        
        for sentence in all_words:                                              #双重循环去除评论中的停用词
            for word in sentence:
                if word in stop_words:
                    sentence.remove(word)
        
        print('Step4:remove stop-words successfully...')
        return np.array(all_words)                                              #以numpy数组返回
    
    

    Step5: 生成词典

    将所有评论信息中存在的词语生成一个词典

    def getDictionary(all_words):
        dictionary = []
        
        for sentence in all_words:
            for word in sentence:
                
                if word not in dictionary:
                    dictionary.append(word)                                     #将所有评论中出现的词语存入词典
        
        print('Step5:{} words in total...'.format(len(dictionary)))
        return dictionary
    

    Step6: 生成one-hot编码(暂未用到)

    把所有评论中的词语信息都进行编码,编码形式为one-hot

    def getOneHot(dictionary):
        one_hots = []
        
        for index,word in enumerate(dictionary):              #使用one-hot编码把出现的词语转化为向量
            one_hot = np.zeros(len(dictionary))
            one_hot[index] = 1
            
            one_hots.append(one_hot)
        
        print('Step6:one-hot encoding successfully...')
        return np.array(one_hots)
        
    

    Step7: Word2vec编码

    将评论的词语信息以word2vec的方式进行编码,并存储(这里直接使用gensim库)

    from gensim.models import Word2Vec
    
    def getWord2Vec(all_words):
        
        #调用Word2Vec模型,将所有词语信息转化为向量
        model = Word2Vec(all_words, sg=0, vector_size=300, window=5, min_count=1, epochs=7, negative=10)
        model.save('word2vec_model')
        
        print('word2vec encoding successfully...')
        return model
    

    Step8: 封装数据预处理过程

    封装所有的操作过程,最后结果返回所有预处理过后的评论数组,word2vec模型,词语词典

    def getData():
        all_sentences = loadCommentFile('../datasets/comments.csv')
        all_sentences = removeSameComment(all_sentences)
        target = all_sentences[:,1]
        all_words = getAllWords(all_sentences)
        all_words = removeStopWords('../file/cn-stopwords.txt', all_words)
        dictionary = getDictionary(all_words)
        one_hots = getOneHot(dictionary)
        
        print('get all data successfully...')
        
        return all_words, target, dictionary
    

    Step9: 构建评论语句向量

    求和评论中每个词语的word_vector,然后取平均值,即为评论语句的向量

    def getSentenceVec(all_words, word2vec_model):
        sentences_vector = []
        
        for sentence in all_words:
            
            sentence_vector = np.zeros(word2vec_model.wv.vector_size)
            
            #取出评论中每个单词的向量累加
            for word in sentence:
                sentence_vector += word2vec_model.wv.get_vector(word)
    
            #取最终结果的平均值,作为评论语句的向量,并添加到评论向量列表中
            sentences_vector.append(sentence_vector/len(sentence))
        
        #返回numpy类型的评论列表
        return np.array(sentences_vector)
    

    Step10: 拆分数据集为训练集与测试集

    调用数据预处理的封装函数进行数据预处理,将每个词语使用word2vec模型转化为向量,并将所有评论转化为向量

    然后对数据集进行切分为数据集与测试集

    from sklearn.model_selection import train_test_split         #引入拆分训练集与测试集的方法
    
    all_words, target, dictionary = getData()                     #获取评论的分词形式列表、对应标签、词典
    
    word2vec_model = getWord2Vec(all_words)                       #训练Word2Vec模型
    word2vec_model.save('word2vec_model')                         #保存文件
    
    #将每一句评论信息转化为对应的评论向量
    sentences_vector = getSentenceVec(all_words, word2vec_model)
    
    #拆分数据集为训练集与测试集
    X_train, X_test, y_train, y_test = train_test_split(sentences_vector, target)
    print('train_test_split successfully!')
    
    Step1:read 13499 comments in file...
    Step2:remove 1016 of same comments...
    Step3:jieba cut successfully...
    Step4:remove stop-words successfully...
    Step5:15834 words in total...
    Step6:one-hot encoding successfully...
    get all data successfully...
    word2vec encoding successfully...
    train_test_split successfully!
    

    Step11: 训练多种监督模型,准备评论情感预测

    KNN算法模型的训练与评估
    from sklearn.neighbors import KNeighborsClassifier               #引入KNN算法模型
    import time
    
    start = time.time()
    
    knn = KNeighborsClassifier(n_neighbors=5)                         #K近邻模型训练中,n邻居个数越多越欠拟合,越少越过拟合
    knn.fit(X_train, y_train)                                         #训练KNN模型
    
    end = time.time()
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    It is take 0.014011383056640625 seconds
    
    start = time.time()
    
    train_score = knn.score(X_train, y_train)
    test_score = knn.score(X_test, y_test)
    
    end = time.time()
    
    print('Train score:{}'.format(train_score))
    print('Test score:{}'.format(test_score))
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    Train score:0.9629352702414015
    Test score:0.9487343800064082
    It is take 4.137312889099121 seconds
    
    逻辑回归模型的训练与评估
    from sklearn.linear_model import LogisticRegression              #引入LogisticRegression逻辑回归模型
    
    import time
    
    start = time.time()
    
    #弱正则化对应过拟合,强正则化对应欠拟合
    logistic_regression = LogisticRegression(C=50)                    #在逻辑回归中,参数C控制正则化强弱,C越大正则化越弱,C越小正则化越强
    logistic_regression.fit(X_train, y_train)                         #训练逻辑回归模型
    
    end = time.time()
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    
    It is take 1.5031111240386963 seconds
    
    start = time.time()
    
    train_score = logistic_regression.score(X_train, y_train)
    test_score = logistic_regression.score(X_test, y_test)
    
    end = time.time()
    
    print('Train score:{}'.format(train_score))
    print('Test score:{}'.format(test_score))
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    Train score:0.967955565050203
    Test score:0.962191605254726
    It is take 0.032012939453125 seconds
    
    支持向量机分类器的训练与评估
    from sklearn.svm import SVC                                      #引入支持向量机分类器
    
    
    start = time.time()
    
    svc = SVC(gamma=0.1, C=100)                                       #gamma控制类别的相似度程度,越小越好,C控制正则化程度,适中即可
    svc.fit(X_train, y_train)                                         #训练支持向量机分类器
    
    end = time.time()
    
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    It is take 3.914299249649048 seconds
    
    start = time.time()
    
    train_score = svc.score(X_train, y_train)
    test_score = svc.score(X_test, y_test)
    
    end = time.time()
    
    print('Train score:{}'.format(train_score))
    print('Test score:{}'.format(test_score))
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    Train score:0.9948728904080325
    Test score:0.9724447292534444
    It is take 3.5872702598571777 seconds
    
    伯努利贝叶斯模型的训练与评估
    from sklearn.naive_bayes import BernoulliNB                      #引入伯努利贝叶斯模型
    start = time.time()
    bernoulli_bayes = BernoulliNB()
    bernoulli_bayes.fit(X_train, y_train)                             #训练伯努利贝叶斯模型
    end = time.time()
    
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    It is take 0.09700345993041992 seconds
    
    start = time.time()
    
    train_score = bernoulli_bayes.score(X_train, y_train)
    test_score = bernoulli_bayes.score(X_test, y_test)
    
    end = time.time()
    
    print('Train score:{}'.format(train_score))
    print('Test score:{}'.format(test_score))
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    Train score:0.913052766502884
    Test score:0.9160525472604935
    It is take 0.11000585556030273 seconds
    
    决策树模型的训练与评估
    from sklearn.tree import DecisionTreeClassifier                  #引入决策树模型
    start = time.time()   
    decision_tree = DecisionTreeClassifier(max_depth=5)               #设置决策树的最大深度为5,避免出现过拟合现象           
    decision_tree.fit(X_train, y_train)                               #训练多项式贝叶斯模型
    end = time.time()
    
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    It is take 1.640122652053833 seconds
    
    start = time.time()
    
    train_score = decision_tree.score(X_train, y_train)
    test_score = decision_tree.score(X_test, y_test)
    
    end = time.time()
    
    print('Train score:{}'.format(train_score))
    print('Test score:{}'.format(test_score))
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    Train score:0.9573809015167699
    Test score:0.93784043575777
    It is take 0.031012535095214844 seconds
    
    随机森林模型的训练与评估
    from sklearn.ensemble import RandomForestClassifier              #引入随机森林模型
    start = time.time()
    random_forest = RandomForestClassifier(n_estimators=100)
    random_forest.fit(X_train, y_train)                               #训练随机森林模型
    end = time.time()
    
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    It is take 19.40948247909546 seconds
    
    start = time.time()
    
    train_score = random_forest.score(X_train, y_train)
    test_score = random_forest.score(X_test, y_test)
    
    end = time.time()
    
    print('Train score:{}'.format(train_score))
    print('Test score:{}'.format(test_score))
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    Train score:1.0
    Test score:0.9615507850048062
    It is take 0.35802292823791504 seconds
    
    梯度提升分类器模型的训练与评估
    from sklearn.ensemble import GradientBoostingClassifier          #引入梯度提升分类树模型
    start = time.time()
    gradient_boosting_tree = GradientBoostingClassifier()
    gradient_boosting_tree.fit(X_train, y_train)                      #训练梯度提升分类树模型
    end = time.time()
    
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    It is take 307.464230298996 seconds
    
    start = time.time()
    
    train_score = gradient_boosting_tree.score(X_train, y_train)
    test_score = gradient_boosting_tree.score(X_test, y_test)
    
    end = time.time()
    
    print('Train score:{}'.format(train_score))
    print('Test score:{}'.format(test_score))
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    Train score:0.9818414868617816
    Test score:0.9602691445049664
    It is take 0.31026268005371094 seconds
    
    MLP神经网络多层感知机模型的训练与评估
    from sklearn.neural_network import MLPClassifier                 #引入神经网络多层感知机模型
    start = time.time()
    mlp = MLPClassifier()
    mlp.fit(X_train, y_train)                                        #训练神经网络MLP多层感知机模型
    end = time.time()
    
    
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    It is take 23.577603578567505 seconds
    
    start = time.time()
    
    train_score = mlp.score(X_train, y_train)
    test_score = mlp.score(X_test, y_test)
    
    end = time.time()
    
    print('Train score:{}'.format(train_score))
    print('Test score:{}'.format(test_score))
    print('It is take {} seconds'.format(end-start))                  #输出训练所需的时间
    
    Train score:0.9900662251655629
    Test score:0.975008010253124
    It is take 0.07800674438476562 seconds
    

    Step12: 使用模型随机预测评论情感

    取出测试集中的100条测试数据,使用**支持向量机分类器(SVC)**进行评论预测,并输出结果

    import random
    
    dic_len = len(dictionary)
    
    start = random.randint(100,2400)
    
    #从测试集中随机抽取50条数据,准备测试
    X_data = X_test[start:start+50]
    y_data = y_test[start:start+50]
    
    success_test = 0
    
    #对 50 条评论信息进行预测
    for sequence_index in range(len(X_data)):
        
        #找到该评论在数组中的位置
        loc = np.where((sentences_vector == X_data[sequence_index]).all(axis=1))
        
        #输出该评论语句
        print('/'.join(all_words[loc[0][0]]))
        
        
        res = svc.predict([X_data[sequence_index]])                #使用支持向量机进行预测
        
    
        #0 代表好评, 1代表差评
        if res == '0':             
            print('Predict result : 好评', end='\t')              #输出好评
        else:              
            print('Predict result : 差评', end='\t')             #否则输出差评
        
        #实际该评论的结果
        if y_data[sequence_index] == '0':
            print('Actual results: 好评', end='\t')
        else:   
            print('Actual results: 差评', end='\t')
            
        #判断是否预测正确
        if res == y_data[sequence_index]:
            print('Predict success!', end='\t')
            success_test += 1
        else:
            print('Predict fail!', end='\t')
    
    
        print('\n\n')
    
    print('本次测试预测准确度为: {}'.format(success_test/50))
    
    学大/数据/大学/狗/听/有人/说/MacBook/适合/工科/买来/一段时间/感觉/还好/性能/很强/不愧/M1/ /Pro/没买/Max/版本/感觉/不到/32/核/GPU/16G/内存/我/够用/了/。
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    开机/划痕/心情/郁闷/提醒/这种/退换货/还是/官网/买
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    外形/外观/好看/ /选/颜色/对/屏幕/音效/屏幕/120hz/刷新/太爽了/ /用回/xr/真/卡/拍照/效果/拍照/清晰/运行/速度/速度/快/待机时间/玩/一把/游戏/掉电/ /续航/不错/,/其他/特色/充电/速度/快/ /23/分钟/37/ /真的/很快/了
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    完美/机/听筒/缝隙/屏幕显示/正常/拍照/重点/京东/发货/真的/太牛/超级/21/号/下单/已经/错过/前两天/抢购/情况/25/号/下午/收到/货/?/?/以为/好久/我/手机/壳/没/买/快递/员/打电话/知道/又/火速/京/东京/造买/了/手机/壳/没想到/壳/不错/。/我/仔细/看过/镜头/没有/灰尘/边框/没有/划痕/绝大多数/机子/没有/,/让/知道/都/有/发出/来显/的/问题/,/外形/外观/完美/,/拍照/效果/无敌/,/运行/速度/超级
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    买来/疫情/在家/办公/外观/时尚/大气/颜色/深/我心/自重/轻/出差/携带/发货/的/久/一点/但/值得/另外/,/小妹/导购/15/态度/很/好/,/赞/!
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    苹果/生产/技术/工艺/真的/太赞/熟悉/开机/声音/干脆/铝合金/打造/金属/机身/科技/感/十足/16/寸/大家伙/有点/重/但是/接受/毕竟/屏蔽/啊/运行/流畅/很棒/感觉/京东/物流/真的/,/快递/小哥/服务态度/很/不错/,
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    入手/打开/包装/很/惊艳/漂亮/看着/高级/安装/系统/简单/ /明/自带/OFF/运行/速度/超快/流畅/ /屏幕显示/超棒/不愧/大/品牌/,/爱/爱/!
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    京东/快递/送货/很快/艰难/条件/停运/收到/电脑/保证/不错/电脑/是/理想/华为/品牌/靠得住/~/一些/激活/注册/问题/不会/操作/,/问/客服/也/是/很/耐心/解答
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    运行/速度/开机/速度/特别/运行/流畅/运行/屏幕/效果/屏幕/清晰/视觉/舒适/散热/性能/用/几个/小时/发热/情况/风扇/静音/外形/外观/颜色/好看/商务/感强/上档次/轻薄/程度/厚度/合适/携带/轻便/其他/特色/隐形/摄像头/美观/,/指纹/解锁/便捷/华为/荣耀/手机/直连/文件/转移/,/触控/鼠标/快捷/功能/操作/很/方便/,/玩游戏/,/作为/办公/商务/电脑/值得/购买/,/性价比/超高
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    东北/暴雪/缘故/晚到/几天/但用/时候/手感/好/更加/人/欣慰/是/高频/分辨率/用/非常/舒适/不/电池/续航/怎么样/还/观望/中/希望/令人/失望
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    外观/好看/好看/颜值/爆表/开机/速度/很快/人脸识别/灵敏/屏幕/效果/很/清晰/大小/合适/电池/很/耐用/充电/速度/快/,/京东/快递/很/力
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    垃圾/都/不想/说/刚刚/拿到/可惜/发现/晚/自己/看吧/,/联网/不/退/,/一点/不好/垃圾/电脑
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    凌晨/付款/现在/拿到/货/迫不及待/开机/比/想象/要/薄/一点/屏幕/漂亮/宽/很窄/颜色/很/正/超级/爱/相信/品牌/,/质量/保证/下/一步/其他/配置/整齐/。
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    外形/外观/简单/大气/四方/边框/拿/很/舒适/屏幕/音效/拍照/清晰/防抖/性能/不错/运行/速度/运行/不卡顿/处理/流畅/待机时间/待机/时长/比较/优秀/充满/电/不/玩游戏/正常/6/小时
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    体验/感/不好/我/办公室/网络/办法/电脑/我/天天/热点/真是/方便/但是/店家/不/退货/这/不合理/这么/贵买/服务/太差/建议/买/在/外面/办事/网络/,/用/网络/不好/。
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    是/太棒了/我/喜欢/运行/速度/快/屏幕/效果/好/散热/性能/好
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    电脑/隔天/收到/快递/速度/很快/屏幕/90hz/效果/好/也/保护/眼睛/开机/秒/开/,/办公室/着/方便/,/整体/效果/好/这款/电脑
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    不错/手机/手感/好/方方正正/着/舒服/5g/速度/很快/幸好/以前/办/大/流量/卡/流量/还够用/系统/着/流畅/,/游戏/性能/好
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    电脑/毛病/多连个/蓝牙/磨磨/唧唧/一会/好使/一会/不好/千万别/入坑
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    屏幕/效果/非常/运行/速度/?/外形/外观/好看/其他/特色/音响/不错/我/很/爱/大家/这部/不用/犹豫/,/冲/!
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    电脑/价格/10/天降/两次/申请/保价/说/了/保价/期/,/明明/说/是/保价/一个月/,/给/说/周期
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    窄/宽/加持/ /16/mac/ /整体/尺寸/上/一代/无/变化/ /争议/刘海/屏/实际/mac/系统/运行/无/影响/ /系统/工具栏/专属/位/ /复古/方正/设计/ /了/稳重/气息/ /就/符合/这代/pro/整体/定位/ / /历代/最强/芯/最强/屏/最强/扬声/系统/足够/震撼/ /回归/磁吸/ /多/拓展/接口/是/惊喜/满满/想要/换新/这代/真的/不用/了/ /体验/感拉满
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    运行/速度/很快/外形/外观/很/好看
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    在/买/活动/时候/价格/美丽/发货/速度/贼/质量/不错/应该/正品/挺/和/想象/中/随意/搭/好看/满意/每/都/很/满意/,/这次/选/的/宝贝/满意/,/以后/还会/一如既往/地买/包装/,/物流/,/价格/实惠/,/散热/挺/,/风扇/声/还行
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    买来/上网/课用/电脑/不错/噢/而且/到货/不/熟悉/11/系统/不会/就/问/导购/37/小姐姐/,/她/耐心/解答/好/喔
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    品控/之差/屏幕/三个/暗点/坏点/人脸/解锁/几次/正常/识别/换货/等于/抽奖/315
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    轻薄/程度/轻薄/外形/外观/非常/好看/高级/屏幕/效果/显色/很/好/散热/性能/散热/发热/其他/特色/快递/物流/疫情/不/因素/很快/快递/疫情/原因/滞留/10/天/,/今天/到/,/包装/还是/很/不错/的/。
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    运行/速度/5/秒/开机/爆赞/屏幕/效果/高色域/无色差/散热/性能/非常/静音/整机/散热
    Predict result : 差评	Actual results: 好评	Predict fail!	
    
    
    差评/差评/差评/差评/差评/刚/拿来/有/黑屏/电视剧/屏幕/就/花掉
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    运行/速度/感觉/很快/日常/完全/问题/屏幕/效果/屏幕/流畅/非常/清晰/颜色/正/,/外形/外观/好看/,/轻薄/程度/轻薄
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    对比/买下/这款/轻薄/16.1/寸/屏幕/看着/舒服/平时/做作业/,/办公/,/性能/足够/,/银色/高级/,/还/继续/探索/中
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    纠结/好久/选/这个/颜色/不/沾/指纹/大小/合适/外观设计/精美/拍摄/效果/好/运行/速度/待机时间/长/,/屏幕/清晰度/高/,/手感/好
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    手机/充电/头/自己/配
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    买/还/几天/掉价儿/还/保价/强烈/差评
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    垃圾/东西/就/几天/时间/降/700/块钱/保价/服务/没用/慎买
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    隔天/收到/电脑/ /喜欢/ /朋友/推荐/买/华为/笔记本/ /是/了/好几年/说好/ /轻薄/小巧/ /携带/ /运行/速度/快/ /喜欢
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    好/便携/电脑/尺寸/配置/很强/独立/显卡/荣耀/几年/产品设计/越来越/特点/!/家人/后/反馈/好/系统/很/流畅/,/十分/推荐
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    到手/惊艳/ /这块/屏幕/确实/不错/ /显示/效果/很/细腻/ /1080p/16/寸大屏/确实/逐渐/淘汰/ /在/自带/管家/调/色调/ /对比度/ /也/很/ /一个/贴心/小/功能/ /开盖/开机/ /很/ /实测/七八次/样子/ /挺/灵敏/ /多/的/东西/ /慢慢/测好
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    收到/笔记本/特意/了/三天/评价/感觉/整体/很/不错/速度/静音/易上/手/操作/只是/包裹/外包装/破损/,/以后/注意/,/笔记本/内包装/完好/,/推荐/购买
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    登录/WIFI/显示/密码/错误/同/密码/家里/两部/华为/手机/可以/登录/WIFI/申请/售后/换货/售后/说/帮/调试/,/拿到/手机/试用/登录/WIFI/密码/错误
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    感谢/服务/那么/电脑/下来/反应速度/快/我/买/游戏/本作/做/文职/的/工作/,/来看/是/问题/了/,/谢谢/,/谢谢/的/。
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    粉红色/外观/电脑/颜值/挺/高/运行/速度/很快/没有/声音/散热/性能/好/,/价格/优惠
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    开机/速度慢/花头/精/多
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    电脑/喜欢/想象/中/一样/简单/大方/轻薄/办公/够用/运行/速度/,/到货/后用/才/评价/,/小巧玲珑/,/静谧/银/好看
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    商品/发烫/退货/检修/原机/退回/,
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    运行/速度/很快/ /不卡/流畅/屏幕/效果/分辨率/高/散热/性能/很/,/外形/外观/很/简约/大气
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    超级/轻薄/外观/满分/性价比/极高/值得/推荐/运行/速度/非常/!/屏幕/效果/非常/清晰/散热/性能/非常/,/外形/外观/外观/10/颗星/,/轻薄/程度/非常/轻薄
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    不好/ /屏幕/一点/不灵敏
    Predict result : 差评	Actual results: 差评	Predict success!	
    
    
    没用过/贵/笔记本/苹果/笔记本/很/精致
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    颜色/漂亮/存储空间/足够/处理器/速度/满足/需求/发货/速度/很快/满意/,/推荐/购买/上班族/足够/,/打游戏/可以/,/速度/杠杠/滴
    Predict result : 好评	Actual results: 好评	Predict success!	
    
    
    本次测试预测准确度为: 0.98
    

    可见,支持向量机模型对结果的预测准确度达到98%,也较为不错

    表格对比各机器学习模型在情感识别方面的性能

    前提,评论文本信息已经完成一系列的预处理操作,如

    • 评论去重
    • 评论分词
    • 去除停用词
    • one-hot词向量(效率低,未用到)
    • word2vec词向量

    现在列举各机器学习模型对于评论情感分析的性能(训练数据13499 条)

    模型名称训练耗时测试耗时训练集预测精度测试集预测精度
    KNN模型0.01401s4.13731s96.3%94.9%
    逻辑回归模型1.50311s0.03201s96.8%96.2%
    支持向量机模型3.91430s3.58727s99.5%97.2%
    伯努利贝叶斯模型0.09700s0.11001s91.3%91.6%
    决策树模型1.64012s0.03101s95.7%93.8%
    随机森林模型19.40948s0.35802s100%96.2%
    梯度提升分类树模型307.46423s0.31026s98.2%96.0%
    神经网络MLP多层感知器模型23.57760s0.0780099.0%97.5%

    小结

    本次统计测试结果不一定完全准确,因为没有涉及到细节的调参问题或者数据缩放问题

    尤其是随机森林模型,过拟合较为严重,后续若有新的学习进展,会陆续更新改进,若有小伙伴们有疑问或指导,欢迎下方留言

  • 相关阅读:
    【教学类-38-02】20230724京剧脸谱2.0——竖版(小彩图 大面具)(Python 彩图彩照转素描线描稿)
    微信小程序获取元素的高度
    网络I/O模型 解读
    字节跳动企业软件:用日活评判企业软件,跟95后打行业
    掌握Java中的volatile关键字
    SAP Fiori应用索引大全工具和 SAP Fiori Tools 的使用介绍
    开源药店商城系统源码比较:哪个适合你的药品电商业务
    微服务集成smart-doc和Torna
    Node学习笔记之HTTP 模块
    【黄啊码】MySQL入门—5、掌握这些数据筛选技能比你学python还有用-2
  • 原文地址:https://blog.csdn.net/weixin_43479947/article/details/126940752