串连推文有什么好的启发式方法?
问题内容:
谁都知道,如果您想发送电子邮件,则可以使用Jamie
Zawinski的算法
。但这是一个新世纪,并且有一个新的消息传递服务。
在Twitter上发布线程状态更新的最佳算法是什么?
我绝对希望它处理的事情:
-
最简单的部分:使用
in_reply_to_status_id
,in_reply_to_user_id
和in_reply_to_screen_name
。(顺便说一下,例如,找到这些值的适当文档本身将是有用的!例如,此类文档显然未从此处链接到 。) -
良好的试探法,可从提及使用
@
约定的用户的消息中推断出“答复”关系,但未明确答复特定消息。 如果您需要,现在可以在状态的“实体”元素中提供这些“提及” 。这些试探法可能会考虑到(a)两个状态更新之间的时间间隔,(b)两个用户之间是否有后续答复,等等。(如由user85509提到的包含旧式转发和附加注释的回复)以下 只是这种回复方式的一个实例。) -
超过两个用户之间的对话。
-
处理给该算法的一组推文,或Twitter上的所有推文。
…但是也许您可以想到更多。
问题答案:
由于只有一个答案,赏金截止日期快到了,我想我应该添加一个基线答案,这样赏金不会自动授予不会超出问题实质的答案。
显而易见的第一步是采用原始的一组推文,并遵循所有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
,和@stephenfry
在上周(说),并且更新和特殊之间的一个“未回复”更新。然后,您必须创建一个特征向量-
您可以根据需要添加此向量,但是我至少建议添加:
- 两次更新之间经过的时间-大概是最近的更新。
- 通过提及的方式在推文中提及的比例。例如,如果这是第一个单词,则该分数将为0,并且比更新中稍后提及的可能性更大,它表示回复。
- 提到的用户的追随者数量-名人大概被垃圾邮件提及。
- 更新之间最长的公共子字符串的长度,这可能表示直接引用。
- 在提及之前是否加上“ / cc”或其他指示符,以表明这不是直接回复该人?
following / followed
原始更新作者的比例。- 等等
- 等等
由于分类器将仅使用那些被证明有用的分类器,因此可以提供更好的分类器。我建议尝试使用随机森林分类器,该分类器在Weka中方便地实现。
下一个需要训练集。刚开始时,它可能很小—刚好足以获得识别正在运行的对话的服务。对于此基本服务,必须添加一个不错的界面来更正不匹配或错误链接的更新,以便用户可以对其进行更正。使用这些数据可以建立更大的训练集和更准确的分类器。
1 …这可能是Twitter上的典型讨论水平;)