基于机器学习的知道推荐—Enlister

标签: Uncategorized | 发表时间:2012-11-07 15:21 | 作者:flychen
出处:http://flychen.com

 

基于机器学习的知道推荐—Enlister

                                                                                                    — trisun

        Enlister—最大的中文问答网站“百度知道”的问题推荐系统名字。这个由几个百度一线工程师研发的系统,自2012年1月上线以来,承担着百度知道千万级登录用户的问题推荐计算。

问题的开始

         百度知道这样的问答社区型网站有个典型特点:有些用户在平台上提出问题,这些问题被另一些用户发现,其中有能力且有意愿的人回答了这几个问题。这几个问题及其解答在平台上沉淀下来,持续给后来有相关问题的搜索用户提供着解答,并激励着更多用户将自己的问题发布在平台上。

        像这样的系统就是一个自生态系统,有人生产,有人消费(如图1)。若其中一个环节出现问题,都会导致这个生态异常。在现在的百度知道上,每日有几十万的新问题正在提出,又有近百万左右的在涌现,而浏览这些知识的人每天有上亿。最可能出问题的地方在于,问题被提出以后,解答无法满足甚至鲜有人问津,这不利于解决提问者的疑惑和知识的沉淀。

图1

        面对这样问题,提升回答量是最直接的办法,回答量上升了,有价值的回答数量就会成比上涨。“回答”是一个高门槛的事,是contribute而非consume。排除这个问题,若用户本身在发现待回答问题上,还需要过高的付出(例如搜索、或按分类查找,如图2),那着实让大量有能力和意愿但不想花更多时间在查找问题上的人望而却步。而推荐,就是我们一把杀手锏。

 

图2

说到推荐

         有了推荐,就有了地基,如何设计楼宇有更多细节需要解决。做推荐需要密切结合产品,是恒古不变的真理。详细了解了知道的产品和目标后,我们提出了三个该系统核心:

1、              基于内容

        新问题一旦被提出,其解决就刻不容缓。高时效性要求了必须要以准确的内容分析为基础。

2、              CTR预估(Click Through Rate,点击率预估)

        为了提升回答量,我们可考虑提升点击量,在用户量和回答率不变的基础上,间接提升了回答量。另外,CTR预估是我们擅长的技术,是我们的一大优势。

3、              流式计算

        为了适应新问题实时推送,我们设计了以问题数据为主数据流的推荐系统,保证了新问题在分钟级时效性内推送给目标(如图3)。

 

图3

 

基于内容

         基于内容,意味我们需要用模型准确地描述“问题”和用户。考虑我们的推荐场景,一个新问题产生并被推荐给目标用户后,用户看到的是一个推荐列表与里面的问题标题(如图4)。此时,影响一个用户是否点击该问题的因素大致有:问题的具体内容、问题的分类及分类的回答活跃度、问题的地域性。其中,问题分类活跃度是一个实际观察得到的因素,某些分类,如情感,的回答活跃度会远远高于其他分类。而用户因素则有:用户内容偏好、回答时间、了解地域、最近行为偏向与最近推荐活跃度。其中,除了内容偏好与了解地域这类用户长期兴趣,一些短期偏好如时间、最近行为和最近对推荐的活跃度作为context信息也被考虑在内,以便提高推荐时机准确性。

 

图4

         根据以上因素,我们对问题进行了如下建模:获取问题标题、切词并从标题中抽取中心词,构建plsa主题模型,利用分类器获取问题分类(分类结构可见知道主页上“问题分类”)与该分类最近点击、回答量,问题推荐的时间与问题地理关键词。

         而用户的建模包括了:用户在知道的个人中心定制的关键词、问题分类,用户历史回答问题标题中挖掘的中心词分布与权重及这些中心词的plsa模型,用户最近回答问题的时间,最近回答的问题标题,以及用户最近对推荐问题的点击与回答量。

         利用以上的数据,我们基本对问题、用户有了准确的描述。不仅涵盖了用户关注的问题且能解答的兴趣方向,同时刻画了最近用户的回答兴趣偏向与推荐场景信息。

CTR 预估

         CTR预估自然就会使用到最大熵模型。该模型是经典的分类模型,在工业界有很多成功的使用案例,不仅可以进行线性计算以满足实时推荐需求,也不用考虑变量间独立性关系,可将所有的特征(包括context信息)构造成向量加入模型中。在我们的问题中,希望利用及其有限规模的设备来获得优质的推荐服务,自然就涉及到需要定期更新训练模型且样本数不能过大(训练本地化),特征维度不宜过高。因此,我们尽可能利用用户与问题模型构造组合的高级特征,以提高特征的覆盖度和泛化能力(如图5)。

 

图5

         为了保持模型的新鲜性,我们自动更新模型周期为5天。在5天之内采样登录用户的几百万点击数据作为正样本。常规情况下,本可采用推荐列表中展示但未被点击的问题作为负样本,但预测结果并不令人满意,究其原因可能为:由于列表上问题方向由一定重复性,另外用户每天回答能力有上限,所以列表上其他问题可能由于用户未看到或已经不想再继续回答而未点击,不能代表其为真正的负样本。所以,负样本采用从与正样本时间一致的同一批问题里随机抽取。而正负样本比例则尝试了多种比例组合,最终1:1的比例在精确率(accuracy)上优于其他组合(如图6)。

 

图6

流式计算

         流式计算,是相对于离线批量计算和当用户访问时实时为其计算推荐而言的。当新问题产生时,我们需要及时为其发现目标用户,并为这批目标用户构建新的推荐列表,包含了巨大的计算量及存储量。如图7,当我们在question pre-process端接收到新问题时,立即对其进行秒级建模运算;而在user action pre-process端,我们利用分布式计算实现了用户模型小时级更新,保持用户模型的新鲜性。通过BMQ系统(Baidu Message Queue)将建好模的问题发送到几十台click predict运算模块中(每台包含不同的用户分片)。click predict内部也是多线程并行流水线处理,保持高并发性(如图8)。当click predict接收到一个问题,会先根据问题中心词拉取用户倒排,获取一个该问题关联用户的候选集(pre-process),淘汰部分不合格用户。在prediction阶段,对问题和关联到的全部用户(千量级)计算点击率,并淘汰低点击率。最后再re-rank阶段对用户原有列表插入该新问题。

 

图7

 

图8

 

列表构建

         在上一节最后提到了将一个新问题插入到原有用户列表中。若只简单考虑利用CTR值来进行排序,则使得整个列表看起来同质化比较严重:

1、  不少问题的标题很接近,在列表中排序也可能很邻近;

2、  用户可能包含几个兴趣点,但最终列表(特别头部)集中了大量问题只属于一个兴趣;

         实验表明,这些问题会严重影响用户体验,降低用户持续回答的欲望。我们则采用了一种多样化列表构建方法,以CTR为基本排序依据,但在列表头部尽可能的保证推荐的相关性。当一个新问题插入头部时,只要和周围标题不是非常接近都可插入,让用户能首先看到的列表前部看起来推荐很“准”;而在非头部区域,则加强对邻近问题相似过滤,让更多的兴趣点能得以展现,用户看起来觉得很“多样化”(如图9)。

 

图9

 

整体系统

         除了以上几点需要考虑之外,我们做一个线上的推荐系统还需要考虑如spam屏蔽、某些业务逻辑、用户反馈等问题。如图,在多样化列表构建时,加入业务逻辑模块,过滤spam问题,对一些高价值问题的展现进行优先或对用户点击删除或不太喜欢的关键词进行屏蔽、降权。图10中RP部分是推荐引擎,iknow部分是产品线。

 

图10

         图11是系统上线前与上线后(201201)回答量的一个对比。原有推荐系统基于中心词计算距离相似进行推荐,日均回答量不足8万。Enlister上线后回答量持续攀升,至6月份后稳定在19万左右。

 

图11

 

 

蔡晶/文

转载自 搜索研发部官方博客


您可能也喜欢:

Vim学习笔记

新闻热点话题自动推荐

多核学习在图像分类中的应用

PHP正则表达式的快速学习方法
来自无觅网络的相关文章:

国内外免费虚拟主机控制面板的选择和推荐 (@yxlgh)

浪漫情人节礼物推荐 (@yxlgh)

Taylor Swift新专辑推荐- Speak Now (@ycy8)

域名和虚拟主机推荐 (@yxlgh)
无觅

相关 [机器学习 知道 enlister] 推荐:

基于机器学习的知道推荐—Enlister

- - 搜索引擎技术博客
基于机器学习的知道推荐—Enlister.         Enlister—最大的中文问答网站“百度知道”的问题推荐系统名字. 这个由几个百度一线工程师研发的系统,自2012年1月上线以来,承担着百度知道千万级登录用户的问题推荐计算.          百度知道这样的问答社区型网站有个典型特点:有些用户在平台上提出问题,这些问题被另一些用户发现,其中有能力且有意愿的人回答了这几个问题.

[译] 每个人都应该知道的十个机器学习常识

- - IT瘾-tuicool
当别人在高谈阔论机器学习时,你却插不上嘴,这是一种怎样的体验. 不懂机器学习没有关系,但你一定要知道下面的十个机器学习基本常识. 曾经在Endeca、谷歌和LinkedIn领导机器学习开发的Daniel Tunkelang为我们概括总结了这十个常识. 机器学习就是从数据中挖掘洞见,而人工智能是炒作.

关于机器学习,你应该知道的 3 个热门专业术语

- - IT瘾-dev
编者按:如果你是刚入门机器学习的AI探索者,你知道什么是胶囊网络吗. 为了帮大家节省查阅晦涩难懂的论文的时间,我们邀请微软亚洲研究院机器学习组实习生吴郦军、罗人千帮大家用最通俗的语言解释了这三个机器学习领域的热门词汇,赶紧收藏吧. 胶囊网络Capsule Networks 胶囊网络(Capsule Networks)是深度学习三巨头之一的Geoffrey Hinton提出的一种全新的神经网络.

机器学习五步走

- - 我爱机器学习
经常会有人问“我该如何在机器学习方面更进一步,我不知道我接下来要学什么了. 一般我都会给出继续钻研教科书的答案. 每当这时候我都会收到一种大惑不解的表情. 但是进步确实就是持续的练习,保持较强的求知欲,并尽你可能的完成具有挑战性的工作. 因为他是为数不多的几种可以让你真真让你获取坚实知识的媒介. 是的,你可以选择选一门课,注册MOOC,参加一些讨论班.

机器学习之路

- - 我爱机器学习
自从答应简二毛博士将自己的机器学习历程和心得分享给大家至今,转眼间半年已经过去了,感谢简博士分享和开源精神的鼓舞,这也正是本系列关于机器学习介绍博客的动力来源. 之前有些网友,师弟们问我,学习机器学习怎么入手,从看什么书开始. 如果你只愿意看一本书,那么推荐Bishop的PRML,全名Pattern Recognition and Machine Learning. 这本书是机器学习的圣经之作,尤其对于贝叶斯方法,介绍非常完善.

机器学习算法Boosting

- - 标点符
机器学习通常会被分为2大类:监督学习和非监督学习. 在监督学习中,训练数据由输入和期望的输出组成,然后对非训练数据进行预测输出,也就是找出输入x与输出y之间的函数关系F:y = F(x). 根据输出的精确特性又可以分为分类和回归. 分类和回归的区别在于输出变量的类型. 定量输出称为回归,或者说是连续变量预测.

Mahout实现的机器学习算法

- - ITeye博客
使用命令:mahout -h.   在Mahout实现的机器学习算法见下表:. EM聚类(期望最大化聚类). 并行FP Growth算法. 并行化了Watchmaker框架. 非Map-Reduce算法. 扩展了java的Collections类. Mahout最大的优点就是基于hadoop实现,把很多以前运行于单机上的算法,转化为了MapReduce模式,这样大大提升了算法可处理的数据量和处理性能.

国内的机器学习几个人

- - 丕子
转: http://blog.csdn.net/playoffs/article/details/7588597. 推荐几个机器学习和数据挖掘领域相关的中国大牛:. 李航:http://research.microsoft.com/en-us/people/hangli/,是MSRA Web Search and Mining Group高级研究员和主管,主要研究领域是信息检索,自然语言处理和统计学习.

Apache Mahout 0.8 发布,机器学习库

- - 开源中国社区最新新闻
Apache Mahout 0.8 发布了,Apache Mahout 是 Apache Software Foundation (ASF) 开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法,供开发人员在 Apache 在许可下免费使用. 该项目已经发展到了它的最二个年头,目前只有一个公共发行版.

Ruby的机器学习项目

- - 阳志平的网志-技术类
作者是辉瑞公司的小牛,可惜烂尾了. 我在改啊改啊,可惜现在是商业项目,暂时不能放出改掉的部分. 对了,顺便做个小广告,去年组织翻译的一本小书:社会网络分析:方法与实践. 已经上市了,感兴趣的可以翻翻:. 社会网络分析:探索关系背后的科学与技术. treat:自然语言处理. 类似于igraph,也是桥接处理nlp.