傻大方


首页 > 会·生活 > >

文本情感分析技术(文本情感分析算法)


什么是情绪分析?
情绪分析的存在是为了了解人们对这个话题的看法——是好还是坏?随着互联网在我们日常生活中的使用日益增多 , 每天每秒都会发布大量非结构化文本 , 例如博客文章 , 论坛 , 社交媒体和评论网站等等 。情绪分析系统可以将这些非结构化数据自动添加到其中 , 获取公众对产品、服务、品牌、政治等的意见 。这些数据在营销分析 , 公关 , 产品评论 , 网络推广评分 , 产品反馈和客户服务等领域具有巨大的价值 。
我可以用哈利波特的文本来做这些NLP任务 。书中有丰富的情感体验 , 读者可以从内心感受到 。电脑可以捕捉那种感觉吗?
VADER
我使用CJ Hutto的VADER包来提取每本书的情绪 。VADER是一个专门针对社交媒体的词汇和基于规则的工具 , VADER 代表Valence , Aware , Dictionary , sEntiment  , Reasoning 。给定一串文本 , 它为文本的每个消极性 , 积极性和中性输出0到1之间的小数 , 以及从-1到1的复合分数 , 这是一个聚合度量 。
关于VADER包的开发 , 验证和评估的完整描述可以在本文中阅读 , 但要点是包的作者首先构建了与情绪相关的词汇特征列表 , 然后将列表与描述的一些规则组合在一起 。一个短语的语法结构将如何加剧或减弱情绪 。在针对人类评估者进行测试时 , VADER的准确度得分高达84%至96% 。
VADER在短文本(几句话)上效果最好 , 并且立即将它应用于整个章节会导致毫无价值的分数 。相反 , 我单独圈出每个句子 , 得到VADER分数 , 然后在文本中平均分开所有句子 。

文本情感分析技术(文本情感分析算法)

文章插图
火焰杯 , 第16章:哈利发现了传教士的立场
通过绘制每本书每章的VADER复合分数 , 我们可以清楚地标记书中的事件 。上图中三个最大的峰值是围绕该系列第70章的“火焰杯”选择哈利 , 塞德里克·迪戈里在第88章的死亡 , 以及邓布利多在第160章的死亡 。
这是生成该图表的代码 。数据存在于字典中 , 每本书的标题都是一个键; 每本书的价值是另一本字典 , 每个章节编号都作为一个关键字 。每章的值是由章节标题和章节文本组成的元组 。我定义了一个函数来计算数据的移动平均值 , 它基本上平滑了曲线 , 使得在整个故事中更容易看到长的多章节弧 。为了将每本书绘制成不同的颜色 , 我创建了一个名为的字典book_indices每本书的标题为字典的键 , 值为本书的起始章节编号和章节编号的2-element tuple 。然后 , 我根据章节编号将故事情节划分为段 。
import matplotlib.pyplot as plt
文本情感分析技术(文本情感分析算法)

文章插图
# Use FiveThirtyEight style themeplt.style.use('fivethirtyeight')
文本情感分析技术(文本情感分析算法)

文章插图
# Moving Average function used for the dotted linedef movingaverage(interval, window_size): window = np.ones(int(window_size))/float(window_size) return np.convolve(interval, window, 'same')
文本情感分析技术(文本情感分析算法)

文章插图
length = sum([len(hp[book]) for book in hp])x = np.linspace(0, length - 1, num=length)y = [hp[book][chapter][2]['compound'] for book in hp for chapter in hp[book]]
文本情感分析技术(文本情感分析算法)

文章插图
【文本情感分析技术(文本情感分析算法)】plt.figure(figsize=(15, 10))for book in book_indices: plt.plot(x[book_indices[book][0]: book_indices[book][1]], y[book_indices[book][0]: book_indices[book][1]], label=book)plt.plot(movingaverage(y, 10), color='k', linewidth=3, linestyle=':', label = 'Moving Average')plt.axhline(y=0, xmin=0, xmax=length, alpha=.25, color='r', linestyle='--', linewidth=3)plt.legend(loc='best', fontsize=15)plt.title('Emotional Sentiment of the Harry Potter series', fontsize=20)plt.xlabel('Chapter', fontsize=15)plt.ylabel('Average Sentiment', fontsize=15)plt.show()
文本情感分析技术(文本情感分析算法)

文章插图
我还使用TextBlob朴素贝叶斯和模式分析器制作了相同的图表 , 效果更差(请参阅我的Github上的Jupyter笔记本这些图表) 。朴素贝叶斯模型接受了电影评论的训练 , 这些评论不能很好地转化为《哈利·波特》的世界 。The Pattern analyzer工作得更好(几乎与VADER一样); 它基于Pattern库 , 这是一个非常类似于VADER的基于规则的模型 。
情感词典
我还通过使用由加拿大国家研究委员会(National Research Council of Canada)编制的一个词汇表 , 创建的超过1.4万个单词的词汇来观察情绪 , 每个词都与两种情绪(消极 , 积极)或八种情绪中的任何一种相关或不相关(愤怒 , 期待 , 厌恶 , 恐惧 , 快乐 , 悲伤 , 惊讶 , 信任) 。然后我编写了一个Python脚本 , 它循环遍历章节中的每个单词 , 在词典中查找 , 并输出与单词相关联的任何情感 。然后为每个章节分配对应于每个情绪的分数 , 该分数对应于与章节中包含的该情绪相关联的多少单词与该章节中的总单词计数相比的比率(这基本上使分数标准化) 。
以下是“愤怒”和“悲伤”情绪的情节 。我觉得有趣的是 , 愤怒总是伴随着悲伤而存在 , 但悲伤有时会在没有愤怒的情况下存在:

文本情感分析技术(文本情感分析算法)

文章插图
文本情感分析技术(文本情感分析算法)

文章插图
这些书似乎从上一个故事的一些末尾情绪开始 , 但在中间章节中很快平静下来 , 最后才重新回到原点 。
当然 , 与任何积极情绪相关的词语也会与“积极”情绪联系在一起 , 同样也与“消极”情绪联系在一起 , 所以这两种情绪带来的大部分情感质量不应该让人感到意外 。


    猜你喜欢

  • 口述情感故事(出轨)
  • 对爱情感叹的句子(关于对爱情的感悟文章)
  • 如何维系婚姻(婚姻的概念)
  • 迟早都要面对的事情(面对情感怎么才能放下)
  • 挽回情感(一种情感爱情_2)
  • 充满情感的歌声(歌声充满我的心)
  • 六上道德与法治情景分析题(你与他谈感情他与你谈逻辑)
  • 双向情感障碍是什么病(双向情感障碍属于精神病吗)
  • 有双相情感障碍患者治好的吗(双相情感障碍患者可以离婚吗)
  • 落鸿表达的情感(雪落在什么上像什么)

  • 上一篇:单身久了就不想谈恋爱了(为什么大学生单身)

    下一篇:陈情令杨夏(陈情令有第二部吗)