本文作者 Nikhil Dandekar,Quora 机器学习团队负责人。
早在 2015 年,Quora 技术副总裁 Xavier Amatriain 就如何在 Quora 中使用机器学习写了一个很好介绍: How does Quora use machine learning in 2015? 感兴趣的读者可以参看链接 [1]。
到今天,Quora 在机器学习的使用已经得到广泛增长,不仅在构建更大更好的模型方面走得更深入,同时也扩大了机器学习使用的领域。本文将给大家介绍 Quora 在 2017 年机器学习规划的全景图。
机器学习用例
下面将通过 Quora 产品的不同部分,来介绍我们是如何应用机器学习算法。
1. 使用机器学习来发现信息
Quora 知识共享的主要方式是问答,这从用户想要了解的问题或是“信息需求”开始。用户在 Quora 上提出一个新问题后,我们有一套机器学习系统进行问题的理解分析,从提问中提取信息,从而进行后续流程。
什么是问题理解(question understanding)系统?
我们关心内容的质量,这一切都以从提问的质量开始。我们有一个 ML 系统来分析提问,并且进行问题质量分类(question quality classification),帮助区分高质量和低质量的提问。
除了提问质量,我们还需要确定问题类型(question type),这有助于问题的后续处理流程。
最后,我们也有问题主题标签(question-topic labeling),用于确定提问的主题。虽然业界大多数主题模型都是处理大文本和较小的主题本体,但我们面临的是小文本(一个简短的提问)和大主题(超过一百万个潜在主题来标记该提问),这使得它成为一个更具挑战性的问题。
在所有的问题理解模型中,我们使用从提问及其上下文导出特征,例如提问的用户,提问的地区等。
满足用户发现信息需求的另一种方法是让他们搜索现有的提问。我们有两个主要的搜索系统:
两种搜索使用不同的排序算法,这些算法在搜索速度,相关性以及返回结果的广度和深度方面各有不同。
2. 使用机器学习来获得回答
问题理解系统的输出,是问答系统下一个步骤——从专家那里获得回答的重要输入。在这方面,也有机器学习系统来帮助我们更好地解决这个问题。
请求回答(Request Answers),以前称为要求回答(Ask To Answer)是一个允许用户将问题发送给其他用户的功能,它要求被请求的领域专家为相关提问写一个回答。
请求回答也是一个有趣的机器学习问题,想更多了解其中的技术细节可以参阅我们相关的文章: Ask To Answer as a Machine Learning Problem (见链接 [2])。
在 A2A 之外,将未答复的提问与相关专家进行匹配的主要方式是通过 Quora 主页 Feed。在 feed 中,问答的排序是一个非常重要的问题,需要综合上述所说的提问属性、用户属性以及一整套其他原始和派生特征作为排序模型的输入,以生成个性化 Feed。下面是几天前本人 feed 页面的截图。
3. 利用机器学习来提升阅读体验
如上图所示,feed 不仅包含可以回答的提问,还包括值得阅读的回答。feed 的回答排序(answers ranking)是另一个对我们非常重要的机器学习问题。feed 中的提问和回答排序使用类似的底层系统,但目标非常不同,因此在其基础模型中使用了不同的特征集。
另一个使用机器学习来评估值得阅读的回答是我们向用户发送的“ 电子邮件摘要” 。所有这些问答的排序都由相当先进的 ML 系统提供支持,ML 系统使用多种模型和许多不同特征组合来达到最终排序。
如果用户发现感兴趣的问题,我们希望他在 Quora 上有一个好的阅读体验。回答的排序(Ranking answers for questions)是一个重要的机器学习应用,用来确保最相关的回答排在给定提问的顶部。我们在这篇文章详细介绍 ML 背后的回答排序:A Machine Learning Approach to Ranking Answers on Quora [3]
使用机器学习的方法来对问题的回答排序。我们也对回答的评论排序,以确保用户在顶部看到最相关的评论。
所有这些排名算法超出了简单的顶踩数排序,需要综合使用相关互动用户的用户特征,使用内容质量,参与活动等,以实现最终排序。
我们还想用户在阅读特定问题的回答后,有便捷的途径来获得相关内容并继续阅读体验。“相关问题”( related questions)就是由机器学习来支持解决这个需求的产品功能。
我们在提问页面上显示相关问题,帮助用户更轻松地导航 Quora 其他问题空间。在首页上,我们还会显示推荐关注的主题和用户,这两个都是基于我们对用户的了解而实现的个性化推荐系统。
上述机器学习系统中非常重要的一个元素是个性化。个性化让产品和底层系统与 Quora 每个用户相关。ML 系统个性化的一个重要组成部分是用户理解(user understanding)信号。作为用户理解的一部分,我们观察和导出用户的各种特征,如他们喜欢/不喜欢的主题,他们在不同领域的专业知识和他们的社交网络属性。
我们还有各种“用户—实体”亲密度系统,例如用户—主题的亲密度(user-topic affinity),用户—用户亲密度(user-user affinity)等。所有这些个性化信号都是重要的输入,不仅仅适用本节的“阅读体验”系统,而且也用在将提问与专家匹配等用例上。
4. 利用机器学习来提升内容质量
对 Quora 用户体验至关重要的事情之一就是内容质量。我们希望确保提问、回答、主题和其他内容从高质量开始,并在之后的生命周期同样保持高品质。为了做到这一点,我们有一套机器学习系统来保证内容质量。以下是其中的几个:
重复问题检测:这涉及检测具有相同意图的不同提问,并将其合并成一个规范提问。我们曾经详细介绍过重复提问的探索 [4],甚至发布了一个重复的提问数据集,并开始了一个 Kaggle 比赛 [5]。
滥用内容检测:在 Quora 有一项政策,“友好,尊重”,但在线社区维护总是具有挑战性。我们使用机器学习与人工审批相结合,来确定令人反感或有害的内容,以便更好地保护用户,确保他们拥有极佳的 Quora 体验。
垃圾内容检测:垃圾邮件检测是大多数 UGC 系统都需要面临的问题,我们也没有什么不同。我们有几个不同的 ML 系统,通过它们组合来处理垃圾内容。
同时,还有许多其他 ML 系统用于维持内容质量,这里就不展开了。
5. 利用机器学习来实现广告优化
2016年,我们也开始了商业化运作。目前,我们在问答页面上展示与提问意图相关的广告。通过机器学习算法来进行广告点击率预测(Ads CTR prediction),从而确保展示的广告与用户相关,并为广告客户带来高价值。我们的机器学习尝试在商业化方面还刚开始,在未来的几个月和几年中,将扩大对 ML 的使用。
除了上面列举,我们还有其他功能的机器学习系统,篇幅关系就不一一展开了。
使用的模型和库
我们希望团队使用最佳的模型和工具来完成这项工作,同时也希望这些工具能够标准化和重用。下面是一些我们使用的模型(排序不分先后):
逻辑回归
弹性网络
GBDT(梯度增强决策树)
随机森林
(深度)神经网络
LambdaMART
矩阵分解(SVD,BPR,加权 ALS 等)
矢量模型和其他 NLP 技术
k-means 和其他聚类方法
其他
我们还支持一整套开源和内部库,用于完成工作,如 Tensorflow, sklearn, xgboost, lightgbm, RankLib, nltk, QMF(Quora 自己的矩阵因式分解库) [6], 以及其他一些内部库。
机器学习团队
自 2015 年以来,对我们来说,另一个令人激动的发展就是组建了一个新的机器学习平台团队。ML 平台团队的目标是在离线(模型训练)和在线(模型服务)方面为公司其他部门的 ML 工程师提供更便捷的机器学习功能。
在线方面,ML 平台通过系统来帮助 ML 工程师构建和部署高性能、高性价比的实时机器学习系统。
在离线方面,ML 平台团队使 ML 工程师能够以快速,标准化和可重用的方式构建数据管道,特征生成和模型训练。
在 Quora 拥有专门的机器学习平台团队,帮助公司加快了 ML 开发速度,比以前快得多。同时也通过优化系统,每天可以处理更大更多的数据。我将在后续的文章中分享更多有关 ML 平台团队的细节及其路线图。
希望本文能给你一个很好关于 Quora 如何在 2017 年使用机器学习的全景图。如果上述任何一个方面让你激动,你应该知道我们正在招聘不同种类的机器学习岗位! 查看我们的招聘页面 [7] 了解更多。
相关链接:
https://www.quora.com/How-does-Quora-use-machine-learning-in-2015
https://engineering.quora.com/Ask-To-Answer-as-a-Machine-Learning-Problem
https://engineering.quora.com/A-Machine-Learning-Approach-to-Ranking-Answers-on-Quora
https://engineering.quora.com/Semantic-Question-Matching-with-Deep-Learning
https://www.kaggle.com/c/quora-question-pairs
https://github.com/quora/qmf
https://www.quora.com/careers
推荐阅读
本文作者 Nikhil Dandekar,由 Tim 翻译,转载请注明出处,技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。
高可用架构
改变互联网的构建方式
长按二维码 关注「高可用架构」公众号