我正在使用StanfordNLP (java pakage)进行 Twitter 情绪分析。我想从推文中提取关键词,将关键词分类为正面、负面或中性,并使用这些计数对推文的极性进行分类。
如何在 Java 中做到这一点?请分享几个例子。关键词提取最常用的算法是什么?
我正在使用StanfordNLP (java pakage)进行 Twitter 情绪分析。我想从推文中提取关键词,将关键词分类为正面、负面或中性,并使用这些计数对推文的极性进行分类。
如何在 Java 中做到这一点?请分享几个例子。关键词提取最常用的算法是什么?
OP 提出了两个不同的问题:(1)如何提取关键词和(2)如何为关键词分配情感类别(pos/neg/neu)。我将在这个答案中解决关键字识别部分,因为许多其他人已经讨论了如何进行情绪分析(例如,这篇文章)。
我建议的方法是 Mike Scott(WordSmith Tools 的作者)和 Chris Tribble(计算语言学家)提倡的关键关键字方法。正如这里所讨论的,基本方法是创建两个语料库,您的目标语料库由从您感兴趣的文本中采样的文本组成,以及一个参考语料库,它通常是一个更大的语料库(通常在内容上更通用) )。
该过程首先计算两个语料库的单词(或n-gram)频率。在此过程中,如果发现目标语料库中的单词频率与参考语料库相比在统计上是可能的(通过卡方检验和用户定义的 p 值计算),则将其视为关键字(Baker, 2004)。根据 Scott (2006) 的说法,该过程通常将三种类型的词识别为关键词:专有名词、表征文本“关于”的词以及作为风格或体裁指标的高频词。我在 2007 年的这篇文章中更详细地讨论了该方法,我使用该方法来提取学术话语的显着特征。
用一个具体的例子来说明,假设您有兴趣识别社交媒体(例如,twitter)中表达的目标品牌(例如,百事可乐)的关键主题。创建两个语料库:为您的目标语料库创建搜索“百事可乐”,并为参考语料库搜索软饮料的竞争对手品牌(“可乐”、“山露”、“胡椒博士”等)。当关键字过程终止时,您将留下所有将百事可乐与其他软饮料品牌区分开来的关键字/主题(作为奖励,您还将识别否定关键字......在目标语料库中统计上出现频率较低的词)。
正如您可能推测的那样,您获得的结果取决于参考语料库的构建方式。在我看来,这是一个特点——因为它为研究人员在假设检验和数据探索方面提供了更大的灵活性。
很抱歉,我不是 Java 用户,而且我从未使用过 StanfordNLP。
但我确实知道,有和没有决策树的基尼杂质标准已成功应用于文本分类。此外,这些工具能够让您轻松了解哪些特征(即您的案例中的单词)有助于做出决定。
我知道卷积神经网络非常适用于情绪分析,但你将很难理解网络的内部行为。
我知道这不是一个真正的答案,但我希望它可能会有所帮助:)
一个简单的解决方案是首先准备情感词典。这样的字典可以很容易地在网上找到,例如http://www.psychpage.com/learning/library/assess/feelings.html。
一个简单的工作流程如下:
虽然这种方法没有使用任何机器学习,但结果还是相当不错的。另一个好处是不需要准备标记的数据集。
当然,我们应该不断检查任何缺失的情感词汇。
检查缺失情绪的工作流程
如果我必须这样做,我会使用“词频逆文档频率”:https ://en.wikipedia.org/wiki/Tf%E2%80%93idf 。
顺便说一句:我不知道您对机器学习有多熟悉,但这可能是一个很好的工作流程。