主要内容

训练情感分类器

此示例显示如何使用带有的正面和负面情绪单词的注释列表和备用字嵌入的注释列表训练分类器进行情感分析。

倒置的单词嵌入在此工作流程中扮演多个角色。它将单词转换为数字向量,并形成分类器的基础。然后,您可以使用分类器来使用其向量表示来预测其他单词的情绪,并使用这些分类来计算一块文本的情绪。培训和使用情感分类器有四个步骤:

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

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

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

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

加载预先训练的词嵌入

Word Embeddings在词汇表中的映射单词到数字向量。这些嵌入物可以捕获单词的语义细节,以便类似的单词具有类似的向量。它们还通过矢量算法模拟了单词之间的关系。例如,关系罗马之于巴黎,正如意大利之于法国用方程来描述 R o e - t 一个 l y + F r 一个 n c e P 一个 r 年代

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

emb = fasttextwordembedding;

负载的意见词典

从意见lexicon(也称为情绪词典)加载正面和否定词https://www.cs.uic.edu/~liub/FBS/sentiment-analysis.html.首先,从.rar.文件到命名的文件夹中opinion-lexicon-English,然后导入文本。

使用该功能加载数据readLexicon在此示例结束时列出。输出数据是一个变量的表单词包含了单词,和标签包含分类情绪标签,积极的要么

数据= Readlexicon;

查看标有正面的前几个单词。

idx = data.label ==“积极的”;头(数据(idx,:))
ans =.8×2表字标签____________ ________“A +”积极“比比皆是”积极“盛产”积极的“丰”正面“丰富的”积极“accessable”正“接近”正面“喝彩”正

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

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

准备培训数据

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

idx =〜IsVocabularyword(emb,data.word);数据(IDX,:) = [];

随机留出10%的单词进行测试。

numwords =大小(数据,1);cvp = cvpartition(numwords,“坚持”,0.1);DataTrain =数据(培训(CVP),:);dataTest =数据(测试(CVP),:);

将训练数据中的单词转换为单词向量Word2vec.

wordsTrain = dataTrain.Word;wordsTrain XTrain = word2vec (emb);YTrain = dataTrain.Label;

火车情感分类器

列车支持向量机(万博1manbetxSVM)分类器将字向量分类为正和负类。

mdl = fitcsvm (XTrain YTrain);

测试分类器

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

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

预测测试字向量的情绪标签。

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

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

图confusionchart(欧美,YPred);

可视化Word云中的分类。用与预测分数对应的单词云中的云云中具有正面和负面情绪的单词。

图形子图(1,2,1)IDX = YPRED ==“积极的”;WordCloud(WordStest(IDX),分数(IDX,1));标题(“预测积极情绪”)子图(1,2,2)WordCloud(WordSt(〜IDX),分数(〜IDX,2));标题(“预测的负面情绪”

计算文本集合的情感

为了计算一块文本的情绪,例如社交媒体的更新,预测文本中每个单词的情绪得分,并采取均值的情感分数。

文件名=“weekendUpdates.xlsx”;tbl = readtable(文件名,“TextType”'细绳');textdata = tbl.textdata;TextData(1:10)
ans =.10×1的字符串数组“周年快乐!❤下一站:巴黎!✈#vacation”“哈哈,海滩上的烧烤,聘请自鸣得意模式!❤#vacation”“为星期六晚上准备好#yum #weekend”“和我说话 - 我需要一个#vacation !!!☹“在家中首次在家中冷却......这是生活!#weekend”“在考试前的最后#weekend。”"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.,按顺序执行以下步骤:

  1. 使用授权文本令人畏缩的鳕文

  2. 擦除使用标点符号侵蚀

  3. 使用拆下停止词(例如,“和”,“中”,和“该”)Removestopwords.

  4. 转换为小写使用降低

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

文件= preprocessText (textData);

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

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

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

单词= documents.vocabulary;单词(ISMember(单词,Wordstrain))= [];vec = word2vec(mem,单词);[ypred,scores] =预测(MDL,VEC);图形子图(1,2,1)IDX = YPRED ==“积极的”;wordcloud(单词(idx),分数(idx 1));标题(“预测积极情绪”)次要情节(1、2、2)wordcloud(单词(~ idx),分数(~ idx, 2));标题(“预测的负面情绪”

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

计算更新的平均情绪评分。对于每个文档,将单词转换为字向量,预测字向量上的情感分数,使用分数到后部变换功能来转换分数,然后计算平均情绪分数。

i = 1:numel(文件)单词=字符串(文档(i));vec = word2vec(mem,单词);[〜,得分] =预测(MDL,VEC);Sentimemer(i)=均值(分数(:,1));结束

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

表(SentmenceScore',TextData)
ans =.50×2表var1 textdata ________________________________________________________________________________________________________________________________________________________________________下一站!❤#vacation“1.294”哈哈,烧烤在海滩上,eng #vacation“1.0922”在星期六晚上准备#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(fullfile(“opinion-lexicon-English”“positive-words.txt”));C = TextScan(FidPositive,'%s''CommentStyle'';');wordsPositive =字符串(C {1});阅读消极词汇fidnegative = fopen(fulfile(“opinion-lexicon-English”'负字.txt'));C = textscan (fidNegative'%s''CommentStyle'';');wordsnegative = string(c {1});fclose.全部%创建标签单词表话说= [wordsPositive; wordsNegative];标签=分类(nan(元素个数(单词),1));标签(1:元素个数(wordsPositive)) =“积极的”;标签(NUMER(字形)+1:结束)=“消极的”;data =表(话说,标签,“VariableNames”,{'单词''标签'});结束

预处理功能

功能PreprocessText.执行以下步骤:

  1. 使用授权文本令人畏缩的鳕文

  2. 擦除使用标点符号侵蚀

  3. 使用拆下停止词(例如,“和”,“中”,和“该”)Removestopwords.

  4. 转换为小写使用降低

功能文档= preprocessText(TextData)%标记文本。文档= tokenizeddocument(textdata);%擦除标点符号。文件=侵蚀(文件);删除一个停止词列表。= removeStopWords文件(文档);%转换为小写。文件=较低(文件);结束

参考书目

  1. 胡,明清和兵刘。“矿业和总结客户评论。”在第十届ACM SIGKDD国际知识发现和数据挖掘会议,pp.168-177。ACM,2004年。

另请参阅

|||||||

相关话题