在Quora,我们已经使用机器学习方法一段时间了。我们不断提出新的方法,并对现有方法进行大的改进。 重要的是要注意,所有这些改进都是首先通过使用许多不同类型的离线指标进行离线优化和测试,并最终通过A / B在线测试的。在下面的段落中,我将介绍Quora在2015年ML的最重要的应用和技术。
Ranking
排名可以说是机器学习在网络上最重要的应用之一。 从非常大到非常小的公司都已经创建了围绕有排序查询结果能力的商业模型。在Quora,我们根据不同的上下文和不同的主题使用排名算法。一个有趣的例子是回答排名。 给出一个问题和这个问题的几个答案,我们会按兴趣降序排列,以保持“最好”的答案在顶部和最坏的则在底部(见下面的屏幕截图)
这儿有很多不同的特征,可以用于确定问题的答案的正确顺序。我们实际上首先需要确定在Quora中“好”的答案的定义。想出这个定义的一个好方法是看看Quora认为“有用的答案”。您将阅读有关“真实”,“可重用”,“提供解释”或“格式良好”的答案。我们的机器学习算法,可以实现了特定的learning-to-rank的方法,并且具有许多不同的特征,最终试图编码与所有这些抽象概念相关的许多维度。例如,我们具有编码关于写作质量的信息的特征,而且还使用通知关于答案所接收的交互类型(例如,upvotes,downvotes或expands)的特征。我们还具有与撰写答案的用户相关的特征,例如,用户在问题主题中的专业知识。
我们有许多其他的在Quora排名的程序,其中一些甚至可能被忽视。例如,显示为具有给定答案的名称也以我们在顶部呈现的方式排列,我们认为对于给定问题/答案是最有信息量的。对于在向特定问题呈现可能的回答者时建议的那些名称也是如此。
让我们仔细看看排名ML算法的两个特定实例:搜索和个性化排名。
Search algorithms
对于诸如Quora的应用中,搜索算法可以被看作是排名的另一个应用。事实上,搜索可以分解为两个不同的步骤:文本匹配+排名。 在第一步中,返回与以某种方式在搜索框中输入的查询匹配的文档(问题)。然后将那些文档视为第二步骤的候选,第二步排列这些结果以便优化诸如点击概率之类的内容。第二步骤确实是使用许多不同特征的learning-to-rank应用的另一例子。这些特征可以从在原始文本匹配步骤中已经使用的简单文本特征到与用户动作相关的其他特征,或对象属性(例如其流行度)。
Personalized Ranking
如上所述,在一些情况下,我们可能得到一个对于所有用户的全局最佳排名。换句话说,我们可以假设给定问题的大多数“有用”答案的顺序与阅读答案的用户无关。 然而,这种假设在许多重要情况下显然失败了。 一个这样非常重要的情况是Quora Feed。 Quora Feed基本上是任何登录用户在登录产品时将看到的主页。在该页面中,我们正在尝试为给定用户在给定时间选择和排名最有趣的故事(参见下面的示例)。 这是一个个性化learning-to-rank的典型例子,类似于Netflix主页与电影和电视节目。
Quorause-case虽然比Netflix的电影和电视剧排名更具挑战性。事实上,我们可以看看我们的use-case,作为Netflix,Facebook和Google新闻需要做的优化他们的个性化排名的组合。 一方面,我们希望确保排名较高的故事与用户具有相关性。另一方面,Quora在用户之间也有明确的连接。 您在“社交网络”上的操作也应影响排名。 最后,Quora的故事有时可能涉及正在进行的趋势事件。 及时性是另一个因素,应该影响模型的决定以促进或降级一个故事。正因为如此,在Quora创建这样的个性化排名有着许多不同的特征。 让我们列出一些:
事实上,重要的是要记住,在Quora,我们感兴趣的是吸引用户阅读有趣的内容和提出用户可以写出有趣的内容的问题。因此,我们必须包括既指出答案的趣味性又给出问题的特征。为了推导这些特征,我们使用从用户,作者和对象(即,回答/问题)完成的动作导出的信息。在不同的时间线考虑并聚合这些动作,并将其反馈到排序算法中。实际上有许多不同的派生特征进入我们的个性化Feed模型,并且我们在不断尝试添加更多的特征。
关于我们的Feed评级应用的另一个重要考虑是,我们需要能够对用户操作,展示次数,甚至趋势事件做出响应。我们有越来越多的收集的数百万的问题和答案,我们不能试图为每个用户进行实时排名。为了优化体验,我们实施了一个多阶段排名解决方案,其中在实际执行最终排名之前,选择不同的候选并进行排名。