训练情绪分类器
这个例子展示了如何为情绪分析训练分类器使用一个带注释的积极和消极情绪的单词列表和pretrained字嵌入。
pretrained字嵌入扮演几个角色在这个工作流。它将文字转换成数值向量和形式分类器的基础。然后您可以使用分类器预测句话说使用他们的情绪向量表示法,并使用这些分类计算一段文字的情绪。有四个步骤训练和使用情绪分类器:
加载一个pretrained字嵌入。
负载意见清单积极词汇和消极词汇。
训练情绪分类器使用这个词向量的积极和消极的话。
计算平均情绪得分词的一段文字。
负载Pretrained字嵌入
字嵌入的词在词汇映射到数值向量。这些嵌入可以捕获语义的细节词这样类似的词有相似的向量。他们还通过矢量运算模型之间的关系的话。例如,关系罗马和意大利是法国巴黎方程所描述的吗 。
加载一个pretrained字嵌入使用fastTextWordEmbedding
函数。这个函数需要文本分析工具箱™模型160亿年fastText英语嵌入标记词金宝app支持包。如果这种支持包没金宝app有安装,那么函数提供一个下载链接。
emb = fastTextWordEmbedding;
负载的意见词典
负载舆论的积极和消极词词典(有时也称为一个情绪词典)https://www.cs.uic.edu/ liub /的边后卫/ sentiment-analysis.html。[1]首先,提取的文件. rar
文件到一个文件夹命名opinion-lexicon-English
,然后导入文本。
使用函数加载数据readLexicon
年底上市这个例子。输出数据
变量是一个表吗词
包含单词,标签
包含一个直言情绪标签,积极的
或负
。
数据= readLexicon;
查看前几句标记为正。
idx =数据。标签= =“积极的”;头(数据(idx,:))
ans =8×2表标签_______ ________”+“积极“比比皆是”积极“丰富”积极“丰富”积极“丰富”积极“accessable”积极“访问”积极积极“喝彩”
第一个几句话贴上消极看法。
idx =数据。标签= =“负面”;头(数据(idx,:))
ans =8×2表词标签_________________ ________“两面派”-“2张脸”-“不正常”-“取消”-“令人憎恶的”-“可恶地”- -“令人憎恶的”-“痛恨”
准备培训资料
训练情绪分类器,把单词词使用pretrained字嵌入向量循证
。请先删除的话,不会出现在“嵌入”这个词循证
。
data.Word idx = ~ isVocabularyWord (emb);:数据(idx) = [];
留出10%的随机测试。
numWords =大小(数据,1);本量利= cvpartition (numWords,“坚持”,0.1);dataTrain =数据(训练(cvp):);人数(=数据(测试(cvp):);
训练数据中的词转换成词向量使用word2vec
。
wordsTrain = dataTrain.Word;wordsTrain XTrain = word2vec (emb);YTrain = dataTrain.Label;
情绪训练分类器
训练支持向量机(金宝appSVM)分类器将词向量分为积极的和消极的类别。
mdl = fitcsvm (XTrain YTrain);
测试分类器
测试数据中的词转换成词向量使用word2vec
。
wordsTest = dataTest.Word;wordsTest XTest = word2vec (emb);欧美= dataTest.Label;
预测情绪标签的测试词向量。
[YPred,分数]=预测(mdl XTest);
想象混淆矩阵的分类精度。
图confusionchart(欧美,YPred);
在字(词)云可视化分类。情节积极和消极情绪的词词云字大小相应的预测成绩。
图次要情节(1、2、1)idx = YPred = =“积极的”;wordcloud (wordsTest (idx),分数(idx 1));标题(“预测积极情绪”次要情节(1、2、2)wordcloud (wordsTest (~ idx),分数(~ idx, 2));标题(“预计负面情绪”)
计算文本集合的情绪
计算一段文字的情绪,例如一个更新在社会媒体,预测文本中的每个单词的情绪评分和花的意思是情绪得分。
文件名=“weekendUpdates.xlsx”;台= readtable(文件名,“TextType”,“字符串”);textData = tbl.TextData;textData (1:10)
ans =10×1的字符串数组“结婚周年快乐!❤下一站:巴黎!✈#假期”“哈哈,在沙滩上烧烤,让自以为是的模式!❤#假期”“准备周六晚上#百胜#周末”“跟我说,我需要一个假期! ! !☹”“令人心寒的国内第一次年龄…这就是生活!#周末”“我最后#周末考试前。”“不能相信我#假期结束了所以不公平”“不能等待网球这#周末”“我有那么多的乐趣!最好的旅行!#旅行#周末”、“天气炎热,空调坏了汽车#的# roadtrip #假期”
创建一个函数符和预处理文本数据,因此它可以用于分析。这个函数preprocessText
上市的例子,执行下面的步骤为:
在标记文本使用
tokenizedDocument
。删除标点符号使用
erasePunctuation
。删除停止词(如“和”,“的”,和“的”)
removeStopWords
。转换为小写的使用
较低的
。
使用预处理功能preprocessText
准备的文本数据。这一步可以花几分钟来运行。
文件= preprocessText (textData);
从文档中删除这个词没有出现在“嵌入”这个词循证
。
documents.Vocabulary idx = ~ isVocabularyWord (emb);= removeWords文档(文档、idx);
可视化的情绪分类器推广新的文本,分类上的情绪词在文本中出现的,而不是在训练数据和可视化词云。用云这个词来手动检查分类器按预期的行为。
话说= 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));标题(“预计负面情绪”)
计算给定文本的情绪,计算每个单词在文本的情感得分,计算平均情绪得分。
计算平均情绪得分的更新。对于每一个文档,把单词词向量,预测情绪得分向量,这个词使用score-to-posterior变换函数变换的分数,然后计算平均情绪得分。
为i = 1:元素个数(文档)话说=字符串(文档(i));vec = word2vec (emb,单词);[~,分数]=预测(mdl vec);sentimentScore (i) =意味着(分数(:1));结束
查看与文本数据预测情绪分值。得分大于0对应于积极情绪,分数小于0对应于负面情绪,成绩接近于0对应中性情绪。
表(sentimentScore’, textData)
ans =50×2表Var1 textData __________ ___________________________________________________________________________________________________________________________ 1.8382”结婚纪念日快乐!❤下一站:巴黎!✈#假期“1.294”哈哈,在沙滩上烧烤,让自以为是的模式!❤#“1.0922”假期准备周六晚上#百胜#周末“0.094709”跟我说,我需要一个假期! ! !在家☹“1.4073”的第一次年龄…这就是生活!#周末“-0.8356”我最后#周末考试前。“-1.3556”真不敢相信我#假期结束了所以不公平的“1.4312”不能等待网球这个#周末“3.0458”我有如此多的乐趣!最好的旅行!#旅行#周末“-0.39243”热的天气,空调坏了汽车#的# roadtrip # out - of - office船员假期“0.8028”检查,我们正式#假期! !“0.38217”那不是我预期这个#周末去冲刷! !“3.03”太激动了我bestie访问这个#周末! ❤ " 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 " ⋮
情绪词汇阅读功能
这个函数读取情绪的积极和消极词词典,并返回一个表。表包含变量词
和标签
,在那里标签
包含分类值积极的
和负
每个单词对应的情绪。
函数data = readLexicon%读积极的话fidPositive = fopen (fullfile (“opinion-lexicon-English”,“positive-words.txt”));C = textscan (fidPositive' % s ',“CommentStyle”,“;”);wordsPositive =字符串(C {1});%读消极词汇fidNegative = fopen (fullfile (“opinion-lexicon-English”,“negative-words.txt”));C = textscan (fidNegative' % s ',“CommentStyle”,“;”);wordsNegative =字符串(C {1});文件关闭所有;%创建标记词汇表话说= [wordsPositive; wordsNegative];标签=分类(nan(元素个数(单词),1));标签(1:元素个数(wordsPositive)) =“积极的”;标签(元素个数(wordsPositive) + 1:结束)=“负面”;data =表(话说,标签,“VariableNames”,{“词”,“标签”});结束
预处理功能
这个函数preprocessText
执行以下步骤:
在标记文本使用
tokenizedDocument
。删除标点符号使用
erasePunctuation
。删除停止词(如“和”,“的”,和“的”)
removeStopWords
。转换为小写的使用
较低的
。
函数文件= preprocessText (textData)%在标记文本。文件= tokenizedDocument (textData);%擦掉标点符号。= erasePunctuation文件(文档);%去除停止词的列表。= removeStopWords文件(文档);%转换为小写。文件=低(文件);结束
参考书目
胡、闽和必应。“挖掘和总结客户的评论。”我n第十届ACM SIGKDD学报》国际会议上知识发现和数据挖掘,168 - 177页。ACM, 2004年。
另请参阅
tokenizedDocument
|bagOfWords
|erasePunctuation
|removeWords
|removeStopWords
|wordcloud
|word2vec
|fastTextWordEmbedding