菜单导航

如何用深度学习模型,解决情感分析难题?

作者: 情感读本 发布时间: 2019年11月12日 14:09:38

如何用深度学习模型,解决情感分析难题?

Meltwater通过机器学习提供情感分析已超过10年。第一批模型于2009年部署了英语和德语版本。今天,Meltwater in-house支持16种语言的模型。本博客文章讨论了如何使用深度学习和反馈循环向全球3万多个客户大规模提供情感分析。

什么是情感分析?

情感分析是自然语言处理(NLP)中的一个领域,涉及从文本中识别和分类主观意见[1]。情感分析的范围从检测情感(例如愤怒,幸福,恐惧)到讽刺和意图(例如投诉,反馈,意见)。情感分析以其最简单的形式为一段文本分配属性(例如,正面,负面,中立)。

让我们看几个例子:

Acme 到目前为止,是我遇到过的最糟糕的公司。

这句话显然表达了负面意见。情感由“最糟糕的公司”(情感短语 the sentiment phrase)承载,并指向“ Acme”(情感目标 the sentiment target)。

明天,Acme和NewCo将发布其最新收入数据

在这种情况下,我们只有关于“ Acme”和“ NewCo”的事实陈述。语句是中性的。

NewCo 在过去一年的创纪录销售数字和股市飙升的支持下,它成为第一个在其平台上积累1万亿美元资产的养老金计划。

这次,我们在积极的语义环境中使用了诸如“支持”,“创纪录销售”之类的短语,指的是“ NewCo” 。

Meltwater通过机器学习提供情感分析已超过10年。第一批模型于2009年部署了英语和德语版本。Meltwater现在拥有16种语言的in-house模型:阿拉伯语,中文,丹麦语,荷兰语,芬兰语,法语,印地语,意大利语,日语,韩语,挪威语,葡萄牙语,西班牙语和瑞典语。

我们的大多数客户都通过媒体监控仪表板(图1)或报告来分析情感趋势。较大的客户可以通过Fairhair.ai数据平台以丰富文档的形式访问我们的数据。

如何用深度学习模型,解决情感分析难题?

图1:Meltwater Media Intelligence媒体监测仪表板。

该产品的一个重要特征是,用户能够覆写(override)算法分配的情感值。覆写的情感属性被索引为Meltwater的Elasticsearch集群中同一文档的不同“版本”,在构建仪表盘和报告时,为客户提供了他们的情感的个性化视图(图2)。

如何用深度学习模型,解决情感分析难题?

图2:Meltwater的媒体情报内容流中的“情感属性”覆写下拉列表。

每个月,我们的客户都会覆写大约200,000个文档中的情感值。每天有6,500个文档!那么,为什么情感很难如此正确呢?

情感属性分析的挑战

人类语言的某些细微差别是挑战性的来源之一。举一些例子:

处理否定语义:

贵公司情况如何?还不错!我对最新的财务状况并不非常满意 ……

我们在这里有三个句子,第一个是中性的,第二个是肯定的,但包含“错”,通常在否定的上下文中使用,第三个是否定的,但包含“非常满意”。

讽刺语义:用这样的句子

今天又下雨了…… fun times!

尽管表达了“fun times”,但该文本可能是讽刺的,并表达了负面情感。

比较性语义:

我喜欢新的Acme手机,它们比NewCo的手机好得多。

这里的“爱”和“好得多”等表达带有积极的情感,但是,对于“ NewCo”来说,评价却是负面的。

取决于读者角度的语境:

阿克梅警察局今天逮捕了8名涉嫌袭击和抢劫的人员。该团伙几个月来一直在恐吓社区。

除单词的含义外,以上所有内容都需要理解上下文。

一个必须解决的实际问题是精度和速度之间的权衡。Meltwater每天对大约4.5亿个文档进行情感分析,范围从推文(平均长度约30个字符)到新闻和博客帖子(长度可达到600-700,000个字符)。每个文档必须在20毫秒内处理。必须保证速度!

传统的机器学习方法(如朴素贝叶斯(naïve Bayes),逻辑回归和支持向量机(SVM))因具有良好的可扩展性而被广泛用于大规模的情感分析。现已证明深度学习 (DL)方法在各种NLP任务(包括情感分析)上都可以实现更高的准确性,但是,它们通常较慢,并且训练和操作成本更高[2]。

“旧”方法:贝叶斯情感

到目前为止,Meltwater一直在使用多元朴素贝叶斯(naïve Bayes)情感分类器。分类器需要一段文本并将其转换为一个拥有特征值的矢量 (f1, f2,…, fn)。

然后,分类器计算最可能的情感正负属性S j,即正,负或中性,前提是我们观察到文本中的某些特征值。这通常写为条件概率语句:

p(Sj | f1, f2,…, fn)

通过找到最大化下面的公式的S j,从而获得概率最大的情感正负属性。

log(p(Sj)+log(p(fi | Sj))