由于只有一个答案,而且赏金截止日期很快就要到了,我想我应该添加一个基线答案,这样赏金就不会自动授予一个不会增加太多超出问题内容的答案。
显而易见的第一步是获取您的原始推文集并按照所有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 上的典型话语水平;)