主要内容

训练情感分类器

这个例子展示了如何使用带注释的正面和负面情感词列表和预先训练的词嵌入来训练情感分析分类器。

预先训练的词嵌入在这个工作流中起着几个作用。它将单词转换成数字向量并形成分类器的基础。然后,您可以使用分类器来预测其他单词的情绪,使用它们的向量表示,并使用这些分类来计算一段文本的情绪。情感分类器的训练和使用有四个步骤:

  • 加载一个预先训练过的词嵌入。

  • 加载一个列出积极和消极词汇的意见词典。

  • 使用积极和消极词的词向量训练情感分类器。

  • 计算一篇文章中单词的平均情绪得分。

加载预先训练的词嵌入

单词嵌入将词汇表中的单词映射为数字向量。这些嵌入可以捕获单词的语义细节,这样相似的单词就有相似的向量。它们还通过向量运算建立单词之间的关系模型。例如,关系罗马之于巴黎,正如意大利之于法国用方程来描述 R o e - t 一个 l y + F r 一个 n c e P 一个 r 年代

加载一个预先训练的词嵌入使用fastTextWordEmbedding函数。此功能需要文本分析工具箱™模型用于快速文本英语160亿令牌词嵌入万博1manbetx支持包。如果没有安装此支万博1manbetx持包,则该函数将提供下载链接。

emb = fastTextWordEmbedding;

负载的意见词典

从“观点词典”(也称为“情感词典”)中载入积极和消极的词汇https://www.cs.uic.edu/~liub/FBS/sentiment-analysis.html.首先,从. rar将文件放入名为opinion-lexicon-English,然后导入文本。

使用函数加载数据readLexicon列在本例的最后。输出数据是一个带有变量的表吗包含了单词,和标签包含一个绝对的情感标签,积极的

数据= readLexicon;

把开头的几句话看作是肯定的。

idx =数据。标签= =“积极的”;头(数据(idx,:))
ans =8×2表单词标签____________ ________“a+”“Positive”比比皆是“Positive”“Positive”“abundant”“Positive”“abundant”“Positive”“abundant”“Positive”“accessible”“Positive”“accessible”“Positive

将前几个单词标记为否定的。

idx =数据。标签= =“负面”;头(数据(idx,:))
ans =8×2表单词标签_____________ ________ "双面的"否定的"双面的"否定的"异常的"否定的"废除的"否定的"可憎的"否定的"可憎的"否定的"厌恶的"否定的"否定的

准备培训数据

为了训练情感分类器,使用预先训练的词向量将词转换为词向量循证.首先删除没有出现在单词embedding中的单词循证

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;

情绪训练分类器

训练一个支持向量万博1manbetx机(SVM)分类器,将单词向量分为正负两类。

mdl = fitcsvm (XTrain YTrain);

测试分类器

将测试数据中的单词转换为单词向量使用word2vec

wordsTest = dataTest.Word;wordsTest XTest = word2vec (emb);欧美= dataTest.Label;

预测测试词向量的情感标签。

[YPred,分数]=预测(mdl XTest);

在混淆矩阵中可视化分类精度。

图confusionchart(欧美,YPred);

在词云中可视化分类。将具有积极情绪和消极情绪的单词绘制在词云中,词大小对应预测分数。

图subplot(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的字符串数组“结婚周年快乐!下一站:巴黎!✈#度假”“哈哈,在海滩上烧烤,加入自鸣得意的模式!和我一起说——我需要一个#假期!!“这么多年来第一次在家里冷静下来……这就是生活!”“周末”“我考试前的最后一个周末”“真不敢相信我的假期就这么结束了,太不公平了”“等不及这个周末打网球了”“我玩得很开心!”最好的旅行!“天气炎热,车里的空调坏了#大汗淋漓#公路旅行#度假”

创建一个函数,用于标记和预处理文本数据,以便用于分析。这个函数preprocessText,按顺序执行以下步骤:

  1. 使用标记文本tokenizedDocument

  2. 删除标点符号使用erasePunctuation

  3. 去掉“and”、“of”和“the”等停止词removeStopWords

  4. 转换为小写使用较低的

使用预处理功能preprocessText准备文本数据。这个步骤可能需要几分钟的时间来运行。

文件= preprocessText (textData);

从文档中删除不出现在单词嵌入中的单词循证

documents.Vocabulary idx = ~ isVocabularyWord (emb);= removeWords文档(文档、idx);

为了可视化情感分类器对新文本的推广效果,可以对文本中出现的但未出现在训练数据中的单词进行情感分类,并将其可视化为单词云。使用单词云来手动检查分类器是否按照预期的行为。

话说= documents.Vocabulary;单词(ismember(话说,wordsTrain)) = [];vec = word2vec (emb,单词);[YPred,分数]=预测(mdl vec);图subplot(1,2,1) idx = YPred ==“积极的”;wordcloud(单词(idx),分数(idx 1));标题(“预测积极情绪”)次要情节(1、2、2)wordcloud(单词(~ idx),分数(~ idx, 2));标题(“预计负面情绪”

为了计算给定文本的情感,计算文本中每个单词的情感得分,并计算平均情感得分。

计算更新的平均情绪得分。对于每个文档,将单词转换为单词向量,预测单词向量上的情感分数,使用后验积分变换函数对分数进行转换,然后计算平均情感分数。

I = 1:numel(documents) words = string(documents(I));vec = word2vec (emb,单词);[~,分数]=预测(mdl vec);sentimentScore (i) =意味着(分数(:1));结束

用文本数据查看预测的情绪得分。大于0分对应积极情绪,小于0分对应消极情绪,接近0分对应中性情绪。

表(sentimentScore’,textData)
ans =50×2表Var1 textData  __________ ___________________________________________________________________________________________________________________________ 1.8382”结婚纪念日快乐!下一站:巴黎!✈#vacation" 1.294 "哈哈,在海滩上烧烤,进入自鸣得意模式!和我一起说-我需要一个#假期!!这么多年来第一次在家里放松一下,这就是生活!#周末" -0.8356 "我考试前的最后一个周末" -1.3556 "真不敢相信我的假期结束了,太不公平了" 1.4312 "等不及这个周末打网球了" 3.0458 "我玩得很开心!最好的旅行!#假期#周末" -0.39243 "炎热的天气和空调在车里坏了#出汗#公路旅行#假期" 0.8028 "检查不在办公室的工作人员,我们正式在度假!!“我没想到这个周末会完全被淘汰!!”3.03“很高兴我的闺蜜这个周末来看我!”  ❤ " 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执行以下步骤:

  1. 使用标记文本tokenizedDocument

  2. 删除标点符号使用erasePunctuation

  3. 去掉“and”、“of”和“the”等停止词removeStopWords

  4. 转换为小写使用较低的

函数文件= preprocessText (textData)标记文本。文件= tokenizedDocument (textData);%擦掉标点符号。= erasePunctuation文件(文档);删除一个停止词列表。= removeStopWords文件(文档);%转换为小写。文件=低(文件);结束

参考书目

  1. 胡民清,刘冰。“挖掘并总结客户评论。”在第十届美国计算机学会SIGKDD知识发现和数据挖掘国际会议论文集, 168 - 177页。ACM, 2004年。

另请参阅

|||||||

相关的话题