写点什么

2017 年,机器学习在 Quora 的五大应用场景

2017 年 5 月 31 日

2015 年,Quora 的工程主席 Xavier Amatriain 非常精彩地回答了 Quora 上的一个问题:“ Quora 在 2015 年将如何应用机器学习”。从那个时候开始,机器学习在 Quora 的应用得到了长足的发展。他们不仅更加深入地为已有的机器学习应用构建更大更好的模型,而且将机器学习技术应用到更多领域。而在今年,Quora 的工程经理 Nikhil Dandekar 在 Quora 上回答了类似的问题:“Quora 在 2017 年将如何应用机器学习”。以下译文翻译自 Nikhil 的回答内容,并已获得作者的授权,查看原文 “ How does Quora use machine learning in 2017 ”。

机器学习在 Quora 的五大应用场景

下面将介绍 Quora 平台各个部分的功能,以及我们是如何在每一个功能上应用机器学习的。

1. 查找信息

Quora 通过问答的形式实现知识的分享。分享从用户提出问题(或者叫“信息需求”)开始。在用户提问之后,我们的机器学习系统开始进行问题理解,例如,从问题中抽取信息,便于后续的处理。

我们十分关注内容的质量,不过好的内容是从好的问题开始的。我们的机器学习系统对问题进行质量分类,帮助我们识别出高质量和低质量的问题。除了问题的质量,我们还把问题分成不同的类型,这样我们在后续流程中就知道该如何处理这些问题。

最后,我们给每个问题打上主题标签,用于标记某个问题是属于哪个主题的。大多数主题建模系统会处理大量的文本和少量的主题,而我们需要处理简短的文本和超过百万的潜在主题,所以这个对于我们来说更加具有挑战性。

我们提取问题和上下文的特性,例如,问题的提问者、提问的地点,等等。

另外一种可以满足提问用户需求的方式是让他们搜索已有的问题,从而找到可以解答他们疑问的内容。我们有两个这样的系统,一个是提问框,一个是全文检索。前者在Quora 主页顶部提供了一个提问框,可以列出排名靠前的匹配问题;后者则提供了更加深入的内容匹配,可以通过点击提问框里的“搜索”按钮来查看匹配的内容。这两个系统使用了不同的排名算法,这些算法具有不同的搜索速度、匹配度以及搜索的深度和广度。

2. 为问题寻找答案

“问题理解”系统的产出成为下一步处理的重要输入:从专家那里获得答案。在这一步,我们仍然使用机器学习系统来帮我们解决问题。

Request Answers(之前叫 Ask To Answer)是 Quora 的一个产品特性,用户可以向其他人发送请求,请求他们来回答指定的问题。我们把这个特性归结为一个机器学习问题,我们的另一篇博文“ Ask To Answer as a Machine Learning Problem ”对这个问题进行了详细的描述。

除了 A2A,我们主要通过主页的问题种子(feed)来对未解答的问题和专家进行匹配。种子的问题排名对我们来说是一个非常重要的机器学习问题。我们要考虑问题本身的属性、用户的属性,以及其他一系列原始属性,并将它们作为排名模型的输入,为用户生成具有主题化、相关性和定制化的种子。下面的截图展示了几天前我的种子当中包含了哪些问题。

3. 阅读内容

从上图可以看到,种子里不仅包含了问题,还包含了答案。种子的答案排名是我们的另一个非常重要的机器学习问题。问题排名和答案排名使用的是相似的底层系统,不过因为要达成的目的不一样,所以在底层模型里使用的特征是不一样的。我们会向用户发送Email Digests,这也是另外一个机器学习的使用场景。以上这些排名问题都是通过高级的机器学习系统来解决的,这些系统通过多种模型和大量特征来完成最终的排名。

对于找到感兴趣问题的用户,我们要确保 Quora 能够为他们提供最佳的阅读体验。问题答案排名也是一个非常重要的机器学习问题,它可以确保与问题具有最高相关度的答案排在最前面。我们在“ A Machine Approach to Ranking Answers on Quora ”这篇文章里解释了答案排名的细节。我们还对评论进行排名,确保读者可以看到相关度最高的评论排在最前面。这些排名系统远远超出了普通的 upvote 和 downvote,它们通过相关的用户特征、内容质量、参与度等信息来完成最终的排名。

我们还希望用户在阅读完问题的答案之后,能够找到更多相关的内容。于是,找出相关问题就成为了机器学习要为我们提供的另一个特性。我们在问题页面上展示了相关的问题列表,方便用户浏览问题。相关主题(Related Topics)和趋势主题(Trending Topics)也可以帮助读者更好地浏览 Quora。我们还在主页上放置了一些板块,比如可关注的主题可关注的用户,它们也都是基于我们对用户的了解程度而定制的推荐系统。

以上的机器学习系统最为重要的元素就是个性化。个性化意味着产品和底层的系统需要与 Quora 的每一个用户相关。我们的用户理解组件是个性化系统的一个重要组件,我们抽取了用户的各种特征,比如他们喜欢和不喜欢的主题、他们在各个领域的专长,以及他们的社交网络属性。我们还有各种“用户实体”关系系统,比如用户与主题之间的关系用户和用户之间的关系,等等。这些个性化的信息不仅可以作为“阅读”应用的输入,还可以用于为问题寻找匹配的专家。

4. 保持高质量的内容

在用户体验方面,Quora 的内容质量是一个非常关键的因素。我们要确保我们的问题、答案、主题和其他内容都是以高质量为起点,并且一直保持很高的质量。为了做到这一点,我们使用了一些机器学习系统来保证网站内容的质量。

  • 重复问题检测:我们检测具有相同目的的问题,并把它们合并成单个问题。我们已经就该问题展开过讨论,并发布了一个重复问题的数据集,我们还开展了 Kaggle 竞赛
  • 恶意内容检测: Quora 有一个口号——“ Be Nice, Be Respectful ”,不过对于一个网络社区来说,这是一个很大的挑战。我们同时使用机器学习和人工审查来识别具有侵犯性的内容,这样就可以保护我们的用户,确保他们拥有良好的体验。
  • 垃圾检测:对于大多数由用户生成内容的应用来说,垃圾检测是一个无法回避的问题,我们也不例外。我们有一些机器学习系统专门解决这个问题。

我们还有其他很多机器学习系统用于维持高质量的网站内容,不过这里不一一例举了。

5. 广告优化

我们在 2016 年启动了货币化(monetization)。我们在问题页面上展示与问题相关的广告。我们通过机器学习进行广告 CTR 预测,确保所展示的问题与用户具有最高的相关度,同时能够为广告投放者带来最高的收益。不过,我们在货币化方面才刚刚起步,在未来,我们会继续扩展机器学习在这方面的应用。

除了上述的五个应用场景,我们还使用了其他机器学习系统,不过就不在这里一一累述了。

模型和库

我们的团队使用了最好的模型和工具,同时也进行了标准化,并能够重用这些工具。以下列出了一些我们使用的模型(排名不分先后)。

  • Logistic Regression
  • Elastic Nets
  • Gradient Boosted Decision Trees
  • Random Forests
  • (深度) 神经网络
  • LambdaMART
  • 矩阵因子分解 (SVD、BPR、Weighted ALS,等)
  • 向量模型和其他 NLP 技术
  • k-means 及其他聚类技术
  • 其他

我们也支持很多开源和内部的库,比如 TensorFlow、sklearn、xgboost、RankLib、nltk、 QMF (Quora 自己的矩阵因子分解库)以及其他一些内部的库。

机器学习平台

自 2015 年以来,我们组建了自己的机器学习平台团队。组建该团队的目标是为了简化机器学习工程师的工作,包括离线的工作(训练模型)和在线的工作(提供服务)。在在线工作方面,平台团队为机器学习工程师们提供了可靠和高可用的构建和部署系统,工程师们在这个平台上可以构建和部署高性能、低成本的实时机器学习应用。在离线工作方面,机器学习工程师们可以基于这个平台构建数据管道,以可重用和标准化的方式快速地抽取特征和训练模型。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017 年 5 月 31 日 19:002202
用户头像

发布了 321 篇内容, 共 110.1 次阅读, 收获喜欢 109 次。

关注

评论

发布
暂无评论
发现更多内容

k8s极简史:K8s多集群技术发展的历史、现状与未来

华为云开发者社区

Kubernetes 容器 云原生 容器技术 华为云

Flask 的 url 处理器

Leetao

Python flask Web框架

LeetCode 144. Binary Tree Preorder Traversal

liu_liu

算法 LeetCode

性能测试

满山李子

极客大学架构师训练营

什么?还没有自己的域名?

北漂码农有话说

波士顿动力狗 SPOT 权威购买指北

早睡蟒

Python 人工智能 学习 波士顿动力 机械狗

ARTS 05 - 使用 Ecto.Migration 来做数据库迁移

jerry.mei

学习 算法 ARTS 打卡计划 函数式编程 Elixir

MinIO 简介和搭建一个对象存储服务

耳东

Minio store Object store

架构师都该懂的 CAP 定理

闻人

架构 分布式 架构师

第七周总结

Karl

使用HSDB 查看jvm内存

引花眠

来自前端童鞋对后端的吐槽@#$%^

Java小咖秀

程序员 程序员人生 程序人生 前端

凡架构必拆分,分则有度

菜根老谭

微服务 康威定律 架构思维 分治思维

tomcat 使用apr

zack

tomcat

week7 总结 性能测试

a晖

写一个 web 性能压测工具

WW

ARTS打卡 第8周

引花眠

ARTS 打卡计划

JVM系列之:详解java object对象在heap中的结构

程序那些事

Java JVM GC JOL

Newbe.Claptrap 框架入门,第二步 —— 简单业务,清空购物车

newbe36524

容器 微服务架构 Reactive .net core ASP.NET Core

MySQL库表设计小技巧

Simon

MySQL 数据库设计

Mybatis二级缓存,你确定要用么?

xcbeyond

mybatis 二级缓存 一级缓存

SpringBoot 使用 jasypt 对配置项进行加密

hungxy

Java springboot jasypt

架构师训练营——请简述 CAP 原理

WW

企业架构框架之DoDAF

Winfield

企业架构

MyBatis几种好用的写法

Bruce Duan

MyBatis标签

LeetCode 565. Array Nesting

liu_liu

算法 LeetCode

两个指针缩小范围算法,CQRS 命令查询职责分离模式 John 易筋 ARTS 打卡 Week 09

John(易筋)

ARTS 打卡计划

「架构师训练营」第 7周作业 - 性能测试

森林

有趣的“第二个系统”

架构精进之路

提升认知 研发体系

计算机网络基础(七)---网络层-ICMP协议

书旅

计算机网络 网络协议 网络层

技术革新产业变革新动能

CECBC区块链专委会

Hummer 轻量级跨端技术框架详解及实战

Hummer 轻量级跨端技术框架详解及实战

2017年,机器学习在Quora的五大应用场景-InfoQ