Quora 是如何使用机器学习的?

1900 查看

Quora 使用机器学习技术有段时间了。我们始终跟进最新的法,并对现有方法做出重大改进。很有必要提醒各位注意,所有这些改进都是首先在线下运用多种不同的离线测试法进行优化和测试,但最终都要通过在线 A/B 测试。

我将在本文说说 2015年 Quora 会用到的一些非常重要的机器学习应用与技术。

(伯乐在线注:本文作者 Xavier Amatriain 是 Quora 工程副总。)

排名

排名可以说是网上最重要的机器学习应用之一了。大大小小的公司都围绕着排名建立起业务模型,例如,查询字符串返回的结果。Quora 在不同的环境、为了不同的目的,使用了不同的排名算法。

一个有趣的例子就是答案排名。假设一个问题有好几个答案,我们感兴趣的是,如何对它们降序排列,使得“最佳”答案在最前,而最差答案在最后。(见如下屏幕截图)。

确定一个问题答案的正确排序涉及到多种特征。要确定顺序,首先我们要确定Quora如何定义“好答案”。要得出这个定义,有个好办法是研究一下《Quora认为什么样的答案是有用的》这篇帖子,里面会提到答案要“真实”、“可重用”、“给出解释”、“格式良好”等等标准。我们的机器学习算法实现了一种特殊的机器学习排名方法,使用了多种特征,试图将与上述抽象概念相关联的多个维度进行编码。例如,我们使用了描述写作质量信息的特征,也使用了描述该答案收到的互动情况的特征(如赞、踩以及展开数量)。我们还使用了与答案作者相关的特征,比如,他在问题领域的专业性。

在Quora, 还有很多其他的排名应用,有些甚至不为人察觉。例如,对于一个答案点赞的用户名也是排序后显示的,目的是要将我们认为对于该问题/答案最有见识的用户排在最前。同样,对于特定问题显示可能的回答者时,那些推荐的用户也是排过序的。

让我们来仔细看看机器学习排名算法的两个特例:搜索以及个性化排名。

搜索算法

对于Quora这样的应用,搜索算法可以被视为排名的另一个应用。实际上,搜索可以分解为两个步骤:文字匹配和排名。第一步,以某种方式返回与搜索框输入的查询字符串匹配的文档(问题)。然后,这些文档作为第二步的候选问题,进行排名,以使点击概率等方面得到优化。

第二步中很多的特征可以使用,它确实是另一个机器学习排名算法的例子。包括已在最初文字匹配阶段使用过的简单文字特征,以及其它与用户行为相关的特征,或是如流行度等对象属性。

个性化排名

在如上文描述的一些场景中,也许一个对所有用户的全局最优排名就够用了。换句话说,我们可以假定,对于给定问题,最“有帮助”答案的排序对于阅读答案的用户来说是独立的。然而,这一假设在很多重要场合并不成立。场合之一就是Quora Feed,从根本上说它是任意登入这一产品的用户都可见的主页。在这个主页上,我们试图为特定的用户在特定的时间挑选最“有趣”的故事,并进行排名(见下例)。这就是一个典型的机器学习个性化排名,与Netflix主页对电影和电视剧进行排名类似。

而Quora的用例比Netflix电影电视剧排名更具挑战性。事实上,我们的用例可以看作是Netflix、Facebook以及Google News优化个性化排名的结合体。一方面,我们要保证排名靠前的故事在主题上与用户相关。另一方面,Quora与用户之间也有明确的关系。你在“社交网络”上的行为也应当对排名有所影响。再次,Quora上的故事有时或许与正在进行的潮流事件相关联。及时性是另一个应当影响模型决策的因素,来决定一个故事的排名应当提升还是降低。

正因如此,Quora的个性化排名涉及到各种不同的特征。下面列出若干:

  • 问题/答案的质量
  • 用户感兴趣的主题
  • 该用户关注的其他用户
  • 热门事件

其实,请务必记住,在Quora我们不仅对如何吸引用户来阅读有趣的内容感兴趣,也对将问题提交给能写出有趣内容的用户感兴趣。因此,我们必须将涉及答案趣味性的特征以及针对问题的特征都纳入。为了得到这些特征,我们使用从用户、作者以及对象(如答案/问题)行为推导出的信息。这些行为都被考虑在内并累计在不同的时间窗口内,并提供给排名算法。实际上,可以得到很多不同的特征来加入我们的个性化推送模型,而且我们一直尝试加入更多的特征。

对于我们的 Feed 排名应用,另一个重要的考虑是我们需要能对用户的行为、观感,甚至是热门事件做出响应。我们数以百万的问题和答案还在不停增长,因此我们不能试图为每一个用户进行实时排名。为了优化体验,我们实现了一个多段式排名解决方案,其中提前就对候选者进行选择和排序,之后真正执行最终的排名。

推荐

上述的个性化排名已经是推荐的一种形式了。类似的方法用在不同的案例中。例如,广受欢迎的Quora 邮件精选包括了一系列为你挑选并推荐的故事。这是一个不同的机器学习排名模型,根据不同的目标函数进行优化。除了排名算法,我们在产品的各个不同部分有其它的个性化推荐算法。例如,在好几处地方,你都可以看到人物或主题的推荐(见下图)。

相关问题

另一个推荐的源由是为了给用户展示与当前问题有某种关系的其他问题。

相关问题由另一个机器学习模型来确定的,它考虑多种不同特征,例如,文字相似性、共享数据(co-visit data),或是如主题等相同的特征。与流行度、或是问题质量相关的特征也要考虑。有必要指出,一个好的“相似问题”推荐,不仅是一个条目与源问题有多相似,还包括目标问题的“趣味性”。实际上,对于任何一个“相关条目”机器学习模型,最麻烦的问题是在相似性和其它关联性因素间进行权衡。

相关问题这个模型对于吸引登出用户从外部搜索中访问问题页面特别有效。这也是为何至今这一推荐模型并未个性化的原因之一。

重复问题

重复问题是上述相关问题的极端情况。对于Quora而言,这是一个难题,因为我们要保证用户回答一个特定问题的精力会被分享,并且被集中到正确的地方。同样,有必要为想要在网站上提问的用户指出已有的答案。所以,我们花费了大量精力来检测重复问题,特别是在发起问题的阶段。

我们现有的解决方案是基于使用重复/非重复标签训练的二元分类器。我们使用多种信号量,包括从文本向量空间模型到基于使用量的特征。

用户可信度/专业性推断

在Quora这样的应用里,掌握用户的可信度是非常重要的事情。实际上,我们并不仅仅完全局限于回答问题本身,还对其与相关主题的关联性感兴趣。某一用户也许对于某些主题知识渊博,但对于其它领域就不一定了。Quora使用机器学习技术来推断用户的专业性。我们不仅了解用户对于给定主题写了什么答案,也知道这些答案得到了多少赞、多少踩,以及什么样的评论。我们还知道这个用户在这个领域得到了多少“推荐”。推荐(Endorsements)是从其他用户角度对于某人专业性非常明确的认可。

另外还有件要事要记住,可信度/专业性通过网络传播,这也需要被算法考虑。例如,如果一位机器学习专家对我在机器学习领域的回答给出一个赞,它的分量应该超过该领域非专家的随机用户给出的赞。这也同样适用于推荐以及其它用户间特征。

垃圾信息检测与节制(Moderation)

像Quora这样以保持内容高质量为傲的网站,必须对使用垃圾、恶意或非常低质量的内容愚弄系统的行为非常警惕。纯粹的人工审阅模式无法扩展。而问题的解决之道,正如你猜测的那样,是使用机器学习模型来检测这些问题。

Quora有好些个模型来检测内容质量相关的问题。这些分类器的输出大部分情况下不会直接用作决策,而是将这些问题/答案提供给节制队列,然后进行人工审阅。

内容创建的预测

对 Quora 来说,有一点非常重要,要记住:我们对系统很多部分进行优化,不只是为了吸引读者,也是为了产出最好的质量、最受欢迎的内容。因此,我们有一个机器学习模型来预测某一用户撰写某一问题答案的可能性。这使得我们的系统能用多种方式给予这些问题优先权。其中之一就是系统的自动 A2A(Ask to Answer),它将问题通过提示发送给潜在的回答者。上述其它的排名系统也使用这个模型来预测概率。

模型

Quora对于前文所述不同的案例尝试过很多不同的模型。有时,我们使用开源实现,但更多时候我们最后实现了更有效、更灵活的内部版本。我不会讨论模型的细节,但会列出我们系统使用的模型:

  • 逻辑回归
  • 弹性网络
  • 梯度增强决策树
  • 随机森林
  • 神经网络
  • LambdaMART
  • 矩阵分解
  • 向量模型以及其它自然语言处理技术

结语

综上所述,Quora运用机器学习的方式多种多样。我们使用这些机器学习方法已经取得了非常重大的收益,我们坚信未来还会有更多收益,并且我们对于新技术还会持续投入。另外,在不久的将来还有激动人心的机器学习新应用,我们已经有所思考了。这些新应用包括广告排名、机器翻译以及其它自然语言处理领域,这些都将直接成为我们计划马上添加的产品新特征。