Twitter 情绪分析:尽管只对正面和负面类别进行了培训,但仍检测中性推文

数据挖掘 机器学习 nlp 情绪分析
2021-10-12 12:43:03

在机器学习方面,我是新手。我试图通过使用 python 的 scikit-learn 库分析不同的监督学习算法来获得经验。我正在使用包含 160 万条推文的 Sentiment140 数据集,使用这些算法进行情感分析。

我不知道这是否是一个愚蠢的问题,但我想知道当你只训练了两个类别(正面和负面)时,是否可以将其分为三个类别(正面、负面和中性)。Sentiment140训练集总共只包含两个类别(正面和负面),总共 160 万条推文,但他们的测试集包含三个类别(正面、负面和中性)的 500 条推文,所以它让我思考。

那么这可能吗?如果是,我如何继续识别中性推文?直观地说,我可以用来找到测试集中每个分类推文在每个类别上的条件概率(使用 predict_proba),并判断它是否是中性的,如果它对于正类和负类都低于某个阈值(比如小于 0.7) . 这是正确的方法吗?

3个回答

快速(但不是很令人满意)的答案是“它取决于”——具体而言,它取决于你对人类情感的基本概念模型是什么,以及它如何在口头/书面行为中表现出来

对于正价和负价,对中性的描述是什么?文件可以放在某种定量的尺度上,中性夹在正面和负面之间吗?这个立场至少有表达单价态的简单短语的语言支持(解决方案是{很好>>可接受>>可怕})。

正如@dmb 海报所建议的那样,如果这是您的概念模型,那么您可能会合理地争论 pos/neg 之间的中性下降,您所要做的就是确定最佳边界/截止因此,即使分类器没有针对中性案例进行培训,您也可以将中性分配给测试案例(尽管您确实需要某种方法来确定这些截止值)。

但是更复杂的情况呢?当你从短语单元级别移动到更大的句子和语篇级别单元时会发生什么?你如何评价“我爱苹果但恨香蕉”这句话?正负元素是否相互抵消以形成中性?当我们开始谈论真实的人类文本时,您可以很容易地看到这变得多么混乱。在我看来,我认为谈论文档级别的情感分数并没有什么特别的意义。相反,我相信人们表达的情感/情绪是针对单个对象“我讨厌香蕉”->讨厌(subj,obj),这些对象被组合成话语级别的结构。

所以,是的,我认为如果只使用 pos/neg 来训练,你可以合理地捍卫输出中性类别的使用......但是你需要证明你使用特定的截止值以及考虑如何处理更长的文档表达多种(冲突的)情绪。我首选的做法是让人们阅读推文并将推文标记为 pos、neg、neutral 和混合(然后确保编码器间的可靠性)来创建我的训练数据......让算法完成寻找截止点的艰苦工作价值观。

假设一个样本的结果是P(positive|sample)=0.15P(negative|sample)=.05,而不是仅仅采用较高的概率组,您可以设置一个最小阈值,比如 0.3。由于两者都低于此值,因此您将其归类为中性

这实际上取决于您使用的模型有多全面。在大多数情况下,情感分析模型非常简单,并且基于“词袋”。在这种情况下,训练集中的正面和负面样本基本上可以让您挖掘正面和负面的情绪负荷词。

现在想象你已经完美地完成了这项工作,但是你有一些既不包含正面也不包含负面词的文本。这个文本可以被认为是中立的。

另一种情况是文本包含相等数量的正面和负面单词。这可能意味着文本同时包含否定句和肯定句。或者文本中可能存在否定某些单词的情绪的否定。这个文本可以被认为是中立的吗?或许。但简单的“词袋”模型无法将这种情况与前一种情况区分开来。

这意味着只包含正面和负面的训练数据仍然可以识别“中性”文本。但是您需要仔细考虑您的用例可接受的中立标准,以及您将要使用的模型,以便获得您想要的确切行为。

有关此主题的更多信息,您可能需要查看我和几位同事撰写的有关创建训练和测试数据集的博客文章:https ://blog.griddynamics.com/creating-training-and-test-data-sets -and-preparing-the-data-for-twitter-stream-sentiment-analysis-of-social-movie-reviews