在 Twitter 上预测未来推文的情绪

Posted

技术标签:

【中文标题】在 Twitter 上预测未来推文的情绪【英文标题】:Predicting sentiment of future tweet on twitter 【发布时间】:2013-04-28 07:04:56 【问题描述】:

我正在尝试预测 Twitter 用户发布的下一条推文的情绪。现在我有以下步骤(第1步和第2步已经在python中实现了):

    了解如何将推文分类为正面 (1)、中性 (0) 或负面 (-1)。我为此使用了一个朴素的贝叶斯分类器,效果很好。

    对来自用户的现有推文进行分类。这会产生一系列这样的数字:[0, 1, -1, -1, -1, 0, 1, 1, ..] 还有关于发布时间的信息。

是否可以预测下一条推文的情绪(1、0 或 -1)?

我可以为此使用什么算法?

我还不知道这个是如何工作的,但是隐藏马尔可夫模型是合适的还是某种回归?

【问题讨论】:

一个想法:简单地创建另一个分类器,它的特征是k-1 类标签(上一条推文是什么类)、k-2 类标签、...,看看是否这些数据足以做出有效的预测。 (我个人的猜测是这还不够,但除非你尝试,否则我们不知道。)基本上你在做的是time series analysis。 您可以尝试这样做,但人类通常并不那么容易预测。下一条推文的情绪可能很大程度上取决于之前的推文,而是更多地取决于您在 Twitter 中没有观察到的外部因素。评估时,请注意不要在您的数据中包含机器人。 【参考方案1】:

我认为考虑这一点的一种有吸引力的方式是先验和情绪的可能性。朴素贝叶斯是一个可能性模型(考虑到它是积极的,我有多大可能看到这条确切的推文?)。鉴于到目前为止您已经观察到一定的情绪序列,您正在询问下一条推文为正面的先验概率。有几种方法可以做到这一点:

最幼稚的方法是用户发出的正面推文的比例是下一条推文为正面的概率 但是,这会忽略新近度。您可以提出一个基于转换的模型:从每个可能的先前状态,下一条推文都有可能是正面的、负面的或中性的。因此,您有一个 3x3 的转换矩阵,并且在最后一条推文为正的情况下,下一条推文为正的条件概率是转换概率 pos->pos。这可以通过计数来估计,并且是一个马尔可夫过程(基本上,之前的状态很重要)。 您可以使用这些转换模型变得越来越复杂,例如,当前的“状态”可能是最后两条推文的情绪,或者实际上是最后 n 条推文,这意味着您可以获得更具体的预测,但代价是更多以及模型中的更多参数。您可以通过平滑方案、参数绑定等来克服这个问题。

最后一点,我认为@Anony-Mousse 关于先验证据不足的观点是正确的:真的,无论你的先验告诉你什么,我认为这将被似然函数支配(实际上是在有问题的推文中)。如果你也能看到这条推文,可以考虑 @Neil McGuigan 建议的 CRF。

【讨论】:

【参考方案2】:

在机器学习方面,您可以考虑顺序关联:

http://web.mit.edu/rudin/www/RudinEtAlCOLT11.pdf

这个网站有一些java库:

http://www.philippe-fournier-viger.com/spmf/

隐马尔可夫模型也应该有效。 HMM 是条件随机场的一种特殊情况,它可以让您查看其他因素,例如天气或新闻事件。

我想知道一个人的下一条推文是否也会受到 a) 所有人 b) 或他们关注的当前推文的影响

【讨论】:

HMM 是不合适的,因为“状态”(情绪)没有隐藏,至少就问题大纲而言。我们实际上可以观察情绪的顺序。同样,只有在我们看到有问题的推文时,CRF 才会真正有用,但我相信 OP 想要情绪的先验概率分布(没有看到有问题的推文)。

以上是关于在 Twitter 上预测未来推文的情绪的主要内容,如果未能解决你的问题,请参考以下文章

Twitter 流式处理脚本在推文的位置字段上抛出一个 keyerror

如何获取 Twitter 上发布的签到推文的地理位置和地点 ID

特定推文的 Twitter 链接的 URL

使用twitteR推文的地理位置似乎不准确

尝试通过 Twitter 预测用户个性时,文本分类的准确性低

特定推文的Twitter链接的URL