当前位置:   article > 正文

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

评论情感分析模型

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数组形式的所有评论内容及对应标签
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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数组形式的评论内容信息

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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数组返回

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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)
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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!')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
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!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
It is take 0.014011383056640625 seconds
  • 1
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
Train score:0.9629352702414015
Test score:0.9487343800064082
It is take 4.137312889099121 seconds
  • 1
  • 2
  • 3
逻辑回归模型的训练与评估
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))                  #输出训练所需的时间

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
It is take 1.5031111240386963 seconds
  • 1
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
Train score:0.967955565050203
Test score:0.962191605254726
It is take 0.032012939453125 seconds
  • 1
  • 2
  • 3
支持向量机分类器的训练与评估
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
It is take 3.914299249649048 seconds
  • 1
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
Train score:0.9948728904080325
Test score:0.9724447292534444
It is take 3.5872702598571777 seconds
  • 1
  • 2
  • 3
伯努利贝叶斯模型的训练与评估
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
It is take 0.09700345993041992 seconds
  • 1
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
Train score:0.913052766502884
Test score:0.9160525472604935
It is take 0.11000585556030273 seconds
  • 1
  • 2
  • 3
决策树模型的训练与评估
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
It is take 1.640122652053833 seconds
  • 1
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
Train score:0.9573809015167699
Test score:0.93784043575777
It is take 0.031012535095214844 seconds
  • 1
  • 2
  • 3
随机森林模型的训练与评估
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
It is take 19.40948247909546 seconds
  • 1
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
Train score:1.0
Test score:0.9615507850048062
It is take 0.35802292823791504 seconds
  • 1
  • 2
  • 3
梯度提升分类器模型的训练与评估
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
It is take 307.464230298996 seconds
  • 1
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
Train score:0.9818414868617816
Test score:0.9602691445049664
It is take 0.31026268005371094 seconds
  • 1
  • 2
  • 3
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
It is take 23.577603578567505 seconds
  • 1
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))                  #输出训练所需的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
Train score:0.9900662251655629
Test score:0.975008010253124
It is take 0.07800674438476562 seconds
  • 1
  • 2
  • 3

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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
学大/数据/大学/狗/听/有人/说/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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201

可见,支持向量机模型对结果的预测准确度达到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%

小结

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/724323
推荐阅读
相关标签
  

闽ICP备14008679号