一尘不染

串连推文有什么好的启发式方法?

algorithm

谁都知道,如果您想发送电子邮件,则可以使用Jamie
Zawinski的算法
。但这是一个新世纪,并且有一个新的消息传递服务。

在Twitter上发布线程状态更新的最佳算法是什么?

我绝对希望它处理的事情:

  • 最简单的部分:使用in_reply_to_status_idin_reply_to_user_idin_reply_to_screen_name。(顺便说一下,例如,找到这些值的适当文档本身将是有用的!例如,此类文档显然未从此处链接到 。)

  • 良好的试探法,可从提及使用@约定的用户的消息中推断出“答复”关系,但未明确答复特定消息。 如果您需要,现在可以在状态的“实体”元素中提供这些“提及” 。这些试探法可能会考虑到(a)两个状态更新之间的时间间隔,(b)两个用户之间是否有后续答复,等等。(如由user85509提到的包含旧式转发和附加注释的回复)以下 只是这种回复方式的一个实例。)

  • 超过两个用户之间的对话。

  • 处理给该算法的一组推文,或Twitter上的所有推文。

…但是也许您可以想到更多。


阅读 271

收藏
2020-07-28

共1个答案

一尘不染

由于只有一个答案,赏金截止日期快到了,我想我应该添加一个基线答案,这样赏金不会自动授予不会超出问题实质的答案。

显而易见的第一步是采用原始的一组推文,并遵循所有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上的典型讨论水平;)

2020-07-28