此示例显示如何使用带有的正面和负面情绪单词的注释列表和备用字嵌入的注释列表训练分类器进行情感分析。
倒置的单词嵌入在此工作流程中扮演多个角色。它将单词转换为数字向量,并形成分类器的基础。然后,您可以使用分类器来使用其向量表示来预测其他单词的情绪,并使用这些分类来计算一块文本的情绪。培训和使用情感分类器有四个步骤:
加载预训练字嵌入。
加载意见Lexicon列表正面和否定词。
使用正面和否定词的字向量训练情绪分类器。
计算一篇文本中单词的平均情绪分数。
Word Embeddings在词汇表中的映射单词到数字向量。这些嵌入物可以捕获单词的语义细节,以便类似的单词具有类似的向量。它们还通过矢量算法模拟了单词之间的关系。例如,关系罗马是巴黎,因为意大利是法国由等式描述 。
使用使用的倒置的Word嵌入倒置的单词fastTextWordEmbedding
功能。此功能需要文本分析工具箱™模型对于FastText英语160亿令牌字嵌入金宝app支持包。如果未安装此支持金宝app包,则该函数提供了下载链接。
EMB = fastTextWordEmbedding;
加载从看来词典(也称为情感词典)从正和负字https://www.cs.uic.edu/~liub/fbs/sentiment-analysis.html.。[1]首先,从中提取文件.rar程序
文件到命名的文件夹中意见 - 词典 - 英语
,然后导入文本。
使用功能加载数据Readlexicon.
在本实施例的末尾列出。输出数据
是变量表单词
包含单词,和标签
含有分类情绪的标签,积极的
要么消极的
。
数据= readLexicon;
查看标有正面的前几个单词。
IDX = data.Label ==“积极的”;头(数据(idx,:))
ANS =8×2表字标签____________ ________“A +”积极“比比皆是”积极“盛产”积极的“丰”正面“丰富的”积极“accessable”正“接近”正面“喝彩”正
查看标有否定的前几个单词。
IDX = data.Label ==“消极的”;头(数据(idx,:))
ANS =8×2表字标签_____________ ________“2面”负“2面”2面“负面”异常“负”消极“废弃”消极“可恶”消极“令人憎恶”消极“憎恶”消极“憎恶”消极
要培训情感分类器,请使用预先灌注的单词嵌入将单词转换为字向量胚胎
。首先删除未出现在嵌入单词中的单词胚胎
。
idx =〜IsVocabularyword(emb,data.word);数据(IDX,:) = [];
在随机设置的话留出10%用于测试。
NUMWORDS =大小(数据,1);CVP = cvpartition(NUMWORDS,'坚持',0.1);DataTrain =数据(培训(CVP),:);dataTest =数据(测试(CVP),:);
将培训数据中的单词转换为单词向量使用Word2vec.
。
WordStrain = DataTrain.Word;xtrain = word2vec(emb,wordstrain);ytrain = dataTrain.label;
训练支持向量机(金宝appSVM)分类器进行分类字矢量为正和负的类别。
mdl = fitcsvm(Xtrain,Ytrain);
将测试数据中的单词转换为单词向量使用Word2vec.
。
WordStest = dataTest.Word;xtest = word2vec(emb,wordstest);ytest = datatest.label;
预测测试字向量的情绪标签。
[ypred,scores] =预测(mdl,xtest);
可视化混淆矩阵的分类精度。
图杂志(YEST,YPRED);
可视化Word云中的分类。用与预测分数对应的单词云中的云云中具有正面和负面情绪的单词。
图副区(1,2,1)IDX = YPred ==“积极的”;wordcloud(wordsTest(IDX),分数(IDX,1));标题(“预测的情绪积极”)子图(1,2,2)WordCloud(WordSt(〜IDX),分数(〜IDX,2));标题(“预测的负面情绪”)
为了计算一块文本的情绪,例如社交媒体的更新,预测文本中每个单词的情绪得分,并采取均值的情感分数。
filename =.“waydendupdates.xlsx”;TBL = readtable(文件名,'texttype'那“字符串”);的TextData = tbl.TextData;的TextData(1:10)
ANS =10×1字符串数组"Happy anniversary! ❤ Next stop: Paris! ✈ #vacation" "Haha, BBQ on the beach, engage smug mode! ❤ #vacation" "getting ready for Saturday night #yum #weekend " "Say it with me - I NEED A #VACATION!!! ☹" " Chilling at home for the first time in ages…This is the life! #weekend" "My last #weekend before the exam ." "can’t believe my #vacation is over so unfair" "Can’t wait for tennis this #weekend " "I had so much fun! Best trip EVER! #vacation #weekend" "Hot weather and air con broke in car #sweaty #roadtrip #vacation"
其创建和标记化预处理的文本数据,因此它可以被用于分析的功能。功能preprocessText
在示例的末尾列出,按顺序执行以下步骤:
使用令牌化文本令人畏缩的鳕文
。
擦除使用标点符号侵蚀
。
使用拆下停止词(例如,“和”,“中”,和“该”)removeStopWords
。
转换为小写使用较低
。
使用预处理功能preprocessText
准备文本数据。这一步可能需要几分钟才能运行。
文档= preprocesstext(textdata);
从嵌入单词中删除未出现的文档中的单词胚胎
。
idx =〜IsVocabularyword(emb,documents.vocabulary);文档= removewords(文档,IDX);
要可视化情绪分类器的概括为新文本,对文本中发生的单词的情绪分类,但不在培训数据中,并在Word云中可视化它们。使用Word云手动检查分类器的行为是否正常。
词语= documents.Vocabulary;字(ismember(即,wordsTrain))= [];VEC = word2vec(EMB,字);[YPred,分数] =预测(MDL,VEC);图副区(1,2,1)IDX = YPred ==“积极的”;WordCloud(单词(IDX),分数(IDX,1));标题(“预测的情绪积极”)子图(1,2,2)WordCloud(单词(〜idx),分数(〜idx,2));标题(“预测的负面情绪”)
要计算给定文本的情绪,请计算文本中每个单词的情绪分数,并计算均值的情感分数。
计算更新的平均景气指数。对于每一个文件,转换的话字矢量,预测在字矢量情绪分数,使用得分 - 后变换函数,然后计算平均情绪分数变换的得分。
为了i = 1:numel(文件)单词=字符串(文档(i));VEC = word2vec(EMB,字);[〜,得分] =预测(MDL,VEC);Sentimemer(i)=均值(分数(:,1));结尾
使用文本数据查看预测的情绪分数。大于0的分数对应于正情绪,小于0的分数对应于负面情绪,并且靠近0的刻度对应于中性言论。
表(sentimentScore”,的TextData)
ANS =50×2表Var1 textData __________ ___________________________________________________________________________________________________________________________ 1.8382 "Happy anniversary! ❤ Next stop: Paris! ✈ #vacation" 1.294 "Haha, BBQ on the beach, engage smug mode! ❤ #vacation" 1.0922 "getting ready for Saturday night #yum #weekend " 0.094709 "Say it with me - I NEED A #VACATION!!! ☹" 1.4073 " Chilling at home for the first time in ages…This is the life! #weekend" -0.8356 "My last #weekend before the exam ." -1.3556 "can’t believe my #vacation is over so unfair" 1.4312 "Can’t wait for tennis this #weekend " 3.0458 "I had so much fun! Best trip EVER! #vacation #weekend" -0.39243 "Hot weather and air con broke in car #sweaty #roadtrip #vacation" 0.8028 " Check the out-of-office crew, we are officially ON #VACATION!! " 0.38217 "Well that wasn’t how I expected this #weekend to go Total washout!! " 3.03 "So excited for my bestie to visit this #weekend! ❤ " 2.3849 "Who needs a #vacation when the weather is this good ☀ " -0.0006176 "I love meetings in summer that run into the weekend! Wait that was sarcasm. Bring on the aircon apocalypse! ☹ #weekend" 0.52992 "You know we all worked hard for this! We totes deserve this #vacation Ibiza ain’t gonna know what hit em " ⋮
此函数从情绪词典中读取正面和否定单词并返回一个表。该表包含变量单词
和标签
,在哪里标签
包含分类值积极的
和消极的
对应每个单词的情绪。
功能数据= Readlexicon.%读取正面单词fidPositive =的fopen(完整文件('意见 - 词汇 - 英语'那'积极的字.txt'));C = TextScan(FidPositive,'%s' 的那'CommentStyle'那';');单词呈现=字符串(c {1});%读否定词fidNegative =的fopen(完整文件('意见 - 词汇 - 英语'那'负字.txt'));c = textscan(fidnegative,'%s' 的那'CommentStyle'那';');wordsnegative = string(c {1});fclose.全部;%创建标记单词表单词= [字形; WordsNegative];标签=分类(NaN(Numel),1));标签(1:NUMER(字形))=“积极的”;标签(numel(wordsPositive)+1:结束)=“消极的”;数据=表(单词,标签,'variablenames',{'单词'那“标签”});结尾
功能preprocessText
执行以下步骤:
使用令牌化文本令人畏缩的鳕文
。
擦除使用标点符号侵蚀
。
使用拆下停止词(例如,“和”,“中”,和“该”)removeStopWords
。
转换为小写使用较低
。
功能文档= preprocessText(的TextData)%记号化的文字。文档= tokenizedDocument(的TextData);%擦除标点符号。文档= erasePunctuation(文件);%删除停止单词列表。文档= Removestopwords(文件);%转换为小写。文件=较低(文件);结尾
胡,明清和兵刘。“矿业和总结客户评论。”在知识发现和数据挖掘第十ACM SIGKDD国际会议论文集,第168-177。ACM,2004年。
Bagofwords.
|侵蚀
|fastTextWordEmbedding
|removeStopWords
|删除
|令人畏缩的鳕文
|Word2vec.
|WordCloud.