线程推文有什么好的启发式方法?

时间:2010-08-24 00:11:36

标签: algorithm twitter heuristics email-threading

每个人都知道,如果您想要使用Jamie Zawinski's algorithm来发送电子邮件。但这是一个新世纪,而且还有一个世纪 新的消息服务。

发布线程状态更新的最佳算法是什么 推土机,?

我非常希望能够应对的事情:

  • 简单的部分:使用in_reply_to_status_idin_reply_to_user_idin_reply_to_screen_name。 (顺便提一下,找到这些值的适当文档 本身就很有用!这样的文件不是 显然与来自 here, 例如。)

  • 用于推断“回复”关系的良好启发式方法 提及具有@约定的用户但未提及的消息 明确地回复特定消息。这些 “提及”are provided in the "entities" element of statuses now 如果你要求。这些启发式方法可能会涉及到 帐户(a)两次状态更新之间的时间,(b)是否 两个用户之间有后续的回复等。 (包含旧式转发的回复 附加评论,mentioned by user85509 below 只是这种回复方式的一个例子。)

  • 两个以上用户之间的对话。

  • 使用给定算法的一组推文,或全部 Twitter上的推文。

......但也许你可以想到更多。

2 个答案:

答案 0 :(得分:6)

由于只有一个答案,并且赏金截止日期即将到来,我认为我应该添加一个基线答案,因此赏金不会自动授予答案,而答案不会超出问题的范围。< / p>

显而易见的第一步是获取原始推文并遵循所有in_reply_to_status_id链接来构建许多有向无环图。这些关系你几乎可以100%肯定。 (您应该通过不在原始集中的推文来关注链接,将其添加到您正在考虑的状态更新集中。)

除了这个简单的步骤,人们还必须处理“提及”。与电子邮件线程不同,没有什么可以像人们可以匹配的主题行那样有用 - 这不可避免地会非常容易出错。我将采用的方法是为状态ID之间的每个可能关系创建一个特征向量,该关系可能由该推文中的提及表示,然后训练分类器以猜测最佳选项,包括“无回复”选项。

要计算出“每个可能的关系”位,首先要考虑提及一个或多个其他用户并且不包含in_reply_to_status_id的每个状态更新。假设其中一条推文的例子是: 1

@a @b no it isn't lol  RT @c Yes, absolutely. /cc @stephenfry

...您要为此更新与每次更新之间的关系创建一个功能向量,其中包含@a@b@c和{{时间轴中的较早日期1}}用于上周(比如说)和一个在更新和特殊的“无回复”更新之间。然后你必须创建一个特征向量 - 你可以添加任何你想要的,但我至少建议添加:

  • 两次更新之间经过的时间 - 可能是回复更有可能是最近的更新。
  • 通过推文的方式在提及的单词方面的比例。例如如果这是第一个单词,这将是0的分数,这可能更有可能表明答复,而不是更新后期提及。
  • 上述用户的追随者数量 - 名人大概更有可能被垃圾邮件提及。
  • 更新之间最长公共子字符串的长度,可能表示直接引用。
  • 提及前面是“/ cc”或其他指示符,表明这不是直接回复该人?
  • 原始更新作者的@stephenfry比率。

这些中的越多越好,因为分类器只会使用那些最有用的分类器。我建议您尝试使用random forest分类器,该分类器可以在Weka中方便地实现。

下一个需要训练集。这可能很小 - 刚好足以获得识别对话正常运行的服务。对于这个基本服务,人们必须添加一个很好的界面来纠正不匹配或错误链接的更新,以便用户可以纠正它们。使用这些数据可以构建更大的训练集和更准确的分类器。

1 ...这可能是Twitter上话语水平的典型特征;)

答案 1 :(得分:0)

在Twitter上,人们经常在他们回复的信息前面写“RT”。