Airbnb深度学习搜索引擎实践-Embedding使用

real-time personalization using embeddings for search ranking at airbnb

内容简介

搜索排序和推荐系统在类似于网页搜索内容发布等场景都是比较重要的技术,但是很难有统一的技术能够适用于所有的场景。
在爱彼迎的场景中,需要同时满足商家和用户的偏好需求。而且在特定的时间,一个民宿只能接待一位客人。
文中使用embedding技术对list和用户进行建模,以便用在搜索和推荐中。这两个频道带来的转化占了99%以上。并且能做到实时的个性化。从离线和在线的ab test效果都验证比较好。

intoduction

随着数据的增长继续学习,在搜索和推荐中的个性化应用都比较成熟,有很多的发展。有些集中在engagement的优化,有些集中在购买的优化,有些则集中在双边的优化。例如像租房行业中的airbnb打车行业中的uber,都会涉及到供需双方的满足。
airbnb需要满足双边的供应和需求双方包括说客人的预计定酒店地点,日期以及说酒店的一些要求,比如容忍的客户数,是否有宠物,要把不匹配的酒店放在比较低的排序位置。
最后使用的方法是将问题建模成pairwise排的问题,并使用lambda rank方式实现。
在爱彼迎的场景中,一般用户有需求的时候都会在同session中搜索多次,所以我们可以个性化的向用户推荐同一session中用户可能喜欢的item,以及将排序比较高的推荐出来,但没有被点击的item作为负例。
方法:
在具体实现的时候,使用用户有过交互的item作为trigger,使用搜索session的数据训练word representation,并计算与trigger item的相似度,以便在搜索和推荐中作为排序similarity的度量。
兴趣建模方式

  1. 使用用户近期点击行为作为用户短期的兴趣偏好
  2. 使用用户预定的行为作为用户长期的偏好
  3. 因为用户预定的行为会比较稀疏,所以将用户映射到群体使用规则的方式
  4. User和item都映射到同样一个向量空间,以便计算其相似度

文章的贡献

  1. 实时个性化:传统的方法是离线计算好user 2 item或者说item 2 item的内容,之后在线去拉倒排,本文使用的方法是将用户即时的交互item embedding化,然后再去查相似的item。做到实时个性化
  2. 适应具有聚集性的数据的训练模式:在短租市场中,用户一般是在特定的时间,只针对特定的区域有需求,故在训练的时数据的负样本选择需要具有区域性聚集
  3. 将转化作为全局的内容
  4. 用户类别embedding:很多文章对每一个用户进行一个embedding,但是在短租市场,用户行为非常稀疏,故将用户的类别进行embedding
  5. 将用户拒绝作为负例

方法

文中将embedding分成两种,一种是用户实时短期item的embedding,另一种是user type和item的embedding,表征长期实时兴趣。

相当于优化每个session中每一个item对应的上下文的概率最大化。

此处的概率是用softmax来表示。
note:以上公式中,m为前后上下文的窗口长度,V为字典大小。使用以上方式,得到的li的representation,在session中越相似,则距离约近。
此处V表示id数量较大,所以使用随机负采样方式来降低数量提升计算的速度。
负采样
负采样的方法为,使用click和对应session中的上下文作为positive pairs(c,l),以及click和随机采样的上下文作为negative pairs(c,l)进行模型训练。以下为对应的优化目标,其中Dp为positive pairs集合,Dn为negative pairs集合。

将session分为两种

  1. 第1种是以完成订单预定的session, booked session
  2. 第2种是有点击,但没有预定的session,exploratory session
    为了让预定作为一个全局的上下文,在每一个booked session中的样本,都强制将预定的item作为结束的item。

对于exploratory session,则优化目标仍然为公式(3)
Adapting training for congregated search:
以上公式的random sampling会导致random sampling出来的负样本都是和本次搜索地域不一致的结果,最终导致模型学习出来的是区域之间的相关性,为了解决该问题,增加对同区域结果的sampling

上式中Dmn为在l的同区域中sampling出来的结果

冷启动

新加入的店面没有embedding,此时我们会用距离内的相似民宿的中心点来进行表示,比如说找到半径10英里内,相同price以及相同房型等其他属性相同的三个embedding,然后做一个平均,来表示新的民宿的embedding作为冷启动。用该方法能够覆盖98%的new item。

embedding效果的检验

使用围围度为32的embedding进行表征,发现地理位置的聚类关系的确编码进去了,同时房型价格的信息也编码进去了。

user-type & listing-type embeddings

目的是捕捉用户的长期兴趣。但是存在以下几方面的挑战:

  1. 数据较为稀疏。
  2. 很多预定的session长度为1,没法学习。一般出现5~10次才能学习出来。
  3. 用户预定的间隔很长,可能偏好已经改变了。

具体的实现方式为将用户按照meta信息进行聚类分为人群,将listing/item按照meta信息进行聚类,按照聚类后的群体构建预定session进行训练。相当于学习的对象由原来的list_id,变为list_type
用户的长期兴趣可能会改变,故在具体学习操作的时候,将user和listing映射到同一vector space中进行学习。

构造(u_type1,l_type1)的用户群体,listing群体的点击session,之后进行训练,即可将user和listing映射到相同vector space中

模型训练

以30分钟作为一个session进行模型训练
去除无效的点击,例如点击后在页面时间较短的点击
将session处理为同时包含booking&EXPLORATION的session形式

评估方式

给定用户最近的点击,以及待排序的candidate, 看最终被预定的item是否能够被排上来

线上使用的方式,为使用GBDT模型进行特征组合, 使用user, listing embedding构建各种特征进行模型训练

reference

原论文参见:

https://pan.baidu.com/s/1R8xeb0iRq089myl3oXJlZA 提取码:1j9n
更多内容参见: www.semocean.com
P.S. 急招推荐,搜索,语音算法人才,阿里P6~P8,欢迎推荐和自荐,简历请发至 haibo.lihaibo@alibaba-inc.com

亚马逊semantic product search

亚马逊semantic product search

网上一直有一种说法,就是在Google的工程师非常鄙视亚马逊的工程师,觉得他们技术不行,Google的技术比较牛叉,但是很多业务场景Google就是做不过亚马逊,最典型的就是云计算市场,Google的市场份额还不如阿里,更别说亚马逊的老本行电商。而亚马逊也一直奉行简单有效为客户服务的原则推进业务。 例如这篇论文中描述的亚马逊电商product search,技术比较简单,没有很高端复杂的模型,但大家在工业界的实践中是可以作为参考的,是一种简单有效的语义搜索方法。该论文发表于2019年KDD大会,下边的内容更多是一个论文的笔记,作为一个备忘,大家最好参考原论文一起阅读。

基于字面匹配的缺点

  1. 第一上下位同意反义处理不好,例如语义的泛化(hypermyms),同义词(synonyms),反义词(antonyms)
  2. 第二形态学变换处理不好,比如说woman and women
  3. 第三拼写错误处理不好。

本文提出的语义方法解决问题的思路:

  1. 第一是loss function处理正负样本
  2. 第二是针对average pooling和ngram捕捉语法的pattern
  3. 第三是使用哈希处理字典中不存在的单词的问题OOV,应对0次学习问题
  4. 第四是进行了并行优化。

本文面临的场景是用户的行为数据量非常多,但是有噪音,同时用户在搜索的时候,是针对某一个比较窄的领域进行搜索,在这个过程当中还需要兼顾发现性。

模型

本文使用的模型的主要特点

  1. 第一是使用embedding方式将query,product映射到相同的空间
  2. 第二是生成embedding之后,使用average pooling的方式将embedding压缩到相同的维度。之所以能够用average pooling主要的考虑有两点(没有使用RNN的原因)
    第一是query和product都比较短,没有太强的持续依赖的关系
    第二是query一般都包含在product之中。同时因为quarry比较短,所以将query和product映射到同一空间中,无需额外参数

图:模型示意图

Loss function

使用pointwise 3阶段hingle loss作为lose function

相当于综合考虑了样本的三种情况:

  1. 第一正样本为用户购买的product
  2. 第二就是用户看到了(impressed),但是没有购买的结果
  3. 第3种是随机采样出来的结果作为副样本

相当于将label分成三种,三种有不同的域值,使用hingle loss方式进行建模

tokenization methods

本文使用不同维度的力度的embedding对query, product进行表达.主要分为以下几种:

  1. word unigram:基于单词的unigram
  2. word n-gram:用来捕捉PHRASE信息,以及对应的附属信息,例如用户如果买的是iPhone手机壳跟iPhone手机其实是不一样的,使用n-gram可以捕捉该类信息
  3. character trigram:用来捕捉拼写错误信息或者像size型号之类似的信息

同时文中使用harsh trick来解决embedding没有表达到生僻词的情况。
最后在应用的时候,作者将所有的tokens组成一个bag of tokens,之所以能够那么做而没有考虑持续的原因,是因为query和product的title一般都相对较短,用这样的方式其实也能表达序列的关系,而不用用到rnn这样的模型。实验证明不用rn效果的影响也不大。

note:对于OOV的部分(word, n-gram, char-trigram)则使用hash trick的方式进行处理,将query, product中相同的部分映射到相同的bin中(参见图5)
该方法的好处,一方面能够保证高频的元素都能够找到,另一方面,query和product中OOV的元素都能够映射到相同的部分。

data

使用11months的search logs作为训练数据, 使用1month作为evaluation。
文中使用用户数据来进行模型的训练使用和query和products的counts作为权重。
在构造样本的时候,一个query之下有6个impression的product和7个random的products和一个有购买的products。

实验指标

matching:抽取20k个query,看从100万的语料库里边能召回多少购买的products。
ranking:主要看NDCG,mrr。

Result

设置:文中固定dimension为256,batch size=8192,adam作为优化算法。。。
结论:

  1. L2比L1正则更好,原因可能是L2对于cosine计算相似度的情况下,对于outlier更加泛化
  2. 效果 3 part > 2 part loss
  3. average pooling效果优于gru/lstm,猜测可能是因为该场景中序列长度较短,RNN的效果没有发挥出来
  4. tokenization算法中,unigrams+bigrams+char trigrams算法效果最好; 增加OOV在保证参数不变的情况下效果更好

后续:借鉴意义

在后续推荐业务中存在的借鉴意义如下:
poi2poi embedding表示:计算可以使用该方法对搜索业务中 query-点击poi数据进行embedding,获取poi embedding,计算i2i
tag2tag embedding表示:将tag作为token,使用搜索数据进行训练,得到tag和poi在同一空间中的embedding表示
poi属性2poi的embedding表示

reference

原论文参见:
复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1VITC73pw9fURLJ-K_7Kb3g 提取码:4h43
更多内容参见: www.semocean.com
P.S. 急招推荐,搜索,语音算法人才,阿里P6~P8,欢迎推荐和自荐,简历请发至 haibo.lihaibo@alibaba-inc.com

 

增加User Memory Embedding的深度点击率预估模型

这次参加了KDD 2019的大规模稀疏特征模型workshop,其中有比较多的论文是关于如何改进推荐,变现场景CTR预估模型的效果提升的。感觉今年很多的论文改进方向都集中在了如何更好地引入用户历史行为特征及兴趣。 无论是引入RNN, transformer,或者其他的weighted pooling,都基本是是类似的思路。

以下就简单介绍下这次KDD收录的文章《Click-Through Rate Prediction with the User Memory Network》的思路,细节就不展开了,具体可以参见附件。

在按照CPC收费的广告业务中,Revenue=bid*ctr,故ctr预估的准确性一直是广告业务中的核心技术问题。现在深度学习已经成为ctr预估的标配,但传统DNN的深度ctr模型未考虑用户的点击历史行为,效果有待提升。而另一方面,RNN类的序列模型能够刻画用户的历史行为序列提升预估准确性,单RNN类的模型存在两个缺点:1是模型会比较复杂,2是数据的准备也会既复杂又冗余。

本文为了解决该问题,引入了用户唯独的like and dislike history的vector描述,两个vector作为用户feature和广告的其他feature进行concat作为input进行模型训练和预测。该方式既引入了用户的history信息,又避免了使用RNN类的模型带来的复杂性。需要注意的是,like/dislike的向量为user-wise的,故每个user都会有两个用来表示这两个历史信息的向量。

p.s. 其实这样的思路在很多场景中军可以使用,例如在地图领域,理论上引入了RNN的ETA效果也会更好, 因为用于表示道路的link客观上就是呈现出序列的特性,但ETA作为基础设施访问量非常大,实效性要求又会比较高,故线上几乎不可能使用RNN作为实现方案,所以可以使用固定长度的vector对序列的link进行表示,以便使用定长的向量,一定程度上就可以表示出序列的特性,相当于是序列信息的一种折中方案。

文中提到的CTR模型如下:

图:memory network for ctr prediction

该方法在传统的DNN基础上,在将特征进行embedding的时候,引入额外的两个用户级别用于表示like&dislike的vector作为history memory信息,一定程度上引入了历史序列信息。

References:

  1. Ouyang W, Zhang X, Ren S, et al. Click-Through Rate Prediction with the User Memory Network[J]. arXiv: Information Retrieval, 2019
  2. 论文下载:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1gFsuIIFzuKQROFLotfZldg 提取码:181v

 

 

ID+图像特征联合训练CTR模型

CTR预估一致都是广告系统,推荐系统中的核心组件,对于简单的应用场景,LR,或者GBDT等传统浅模型就已经能在有限的代价下很好地解决该问题。但对于一些影响面比较大的场景,例如BAT中核心推荐,变现场景中的CTR,每一个点的提升都非常重要,此时就需要使用技术手段对CTR预估模型进行极致优化。此时模型的选择,以及根据具体业务的模型设计创新就会比较关键。而另一条思路,则是引入多模态的特征。

LR,GBDT在极致优化的情况下可能就可以解决80%的问题;如果还需要提升,则是近年来比较流行的深度深度模型,例如Wide&Deep,DeepFM,各种FM思想的深度话;甚至还需要根据具体业务场景中提炼出来的业务特性对网络进行定制, 例如阿里妈妈设计的DIN对用户历史兴趣item的weighted pooling思想。

另外一条对效果进行提升的道路就是引入多模态的信息,结合传统的id特征对模型进行训练提升效果。e.g. 引入推荐item的图片信息

下面就简单介绍一下最近读的阿里妈妈关于如何使用用户历史兴趣item图片提升模型效果的文章《Image Matters: Visually modeling user behaviors using
Advanced Model Server》。该论文是阿里妈妈广告CTR预估团队的论文。核心思想,是使用能够代表用户行为的图像(例如用户点击,购买过的商品的图像)来学习用户的兴趣。
传统的使用ID特征更多是偏记忆性质的,就是用户有没有点过这个广告,是不是对该广告感兴趣,这样的方式有两个缺点:1是在预估的时候如果出现新的未见过的ID,则模型无法处理;2是如果数据不充分,则训练效果也不会好。所以文章假设能够使用能代表用户行为的图像,来表征用户的兴趣:将图像的高维特征抽取出来后,具有较好的泛化性。

具体的做法是使用pre-training的模型获取表征用户行为的image的低维度向量表示,文中使用VGG16 FC6输出的4096维度的vector表征图像,之后对这些vector进行aggregation。之后得到的image特征表示和id features进行concat后进行CTR模型训练。
论文的创新点如下:

  1. 使用Behavioral images的抽象特征对用户行为兴趣进行刻画,而传统的方式要么只用id feature, 就算用image feature,也仅仅用ad的feature
  2. 新的基于attention的aggregation方法,该处的pooling方法不是简单的sum或者max,而是基于query的attentive的aggregation,类似于DIN中的方法
  3. 新的训练框架

当然,该论文中使用的是类似于DIN中,使用了用户历史item序列的图片来泛化用户兴趣,使用的是一序列图的聚合,而非一张图所以感觉该算法还是太重了,一般的场景感觉有点杀鸡用牛刀。另外一种折中的方案是就使用一张图,就是待推荐商品的图作为特征引入模型进行联合训练,这样的方法在很多场景中也已经在使用并得到了较好的效果验证。

参考文献:

Zhou G, Song C, Zhu X, et al. Deep Interest Network for Click-Through Rate Prediction[J]. 2017.

Ge T , Zhao L , Zhou G , et al. Image Matters: Visually modeling user behaviors using Advanced Model Server[J]. 2017.

 

 

LBS猜你去哪儿功能实现

最近看了一篇比较有意思的文章,关于滴滴’猜你去哪儿’功能的算法实现,在这里记录下。

产品

图:滴滴’猜你去哪儿’产品形态

从产品的角度,滴滴’猜你去哪儿’是在用户打开滴滴,用户还未输入的情况下,猜测用户的想去的目的地(POI)并以TIPS的形式直接进行提示,该功能从产品上有两个好处:1是能够减少用户的输入,如果猜测准确,用户直接点击目的地POI即可;2是能够提升用户对滴滴的好感,提升用户体验和粘性,毕竟用户都是感性的,这样一个功能点如果足够准,就能让用户印象深刻

技术

首先分析下该产品的业务场景:用户打开滴滴,绝大部分情况下,都是心中已经有要去的地点了,技术需要做的只是将该POI猜对并提示出来。所以该场景所使用的技术,就和传统的视频,音乐,甚至电商推荐有很大区别:该过程不需要协同,而在乎准确,用户不会因为你打开滴滴的时候推荐的POI和他的兴趣比较相关就会去,在打开滴滴前,用户就已经做了决定。

换句话说,用户要去的地方是极度个性化的,几乎没有泛化,所以在技术上有以下两点设计:1,召回的目的地候选POI就是用户的常去地;2,去什么地方仅取决于用户及他所处的上下文,此处上下文包括位置,时间等。而所有的上下文中,从滴滴的论文中可以看到,最重要的就是3个因素:出发时间,出发地点,是否为工作日

图:最有效的场景上下文

算法

滴滴使用了一个比较简单的算法来解决该问题:针对每个用户的数据,对每一个去过的候选目的地,使用高斯分布来构建基于上下文的条件概率分布。之所以使用,之所以使用高斯分布,是从数据上来看,出发上下文和去的目的地之间,分布的确是一个钟形。

图:特定目的地出发时间分布

如上图,如仅考虑时间一个维度,用户出发去特定目的地的分布,符合高斯分布。

故使用的模型形式如下:

图:贝叶斯模型

其中 X为当前用户所处上下文, Y=yi表示目的地为yi。其模型形式为给定上下文后,计算用户去目的地yi的概率,转化为使用贝叶斯方式计算,此时只要计算用户去各个目的地的先验,以及用户去各目的地的上下文概率即可。

先验计算比较直接,直接统计用户去各目的地的频次即可。

图:特定目的地概率统计

P(X|Y=yi)则将其表示为高斯分布。简单出发,此处 X如果仅包涵时间维度的话,作如下表示:

图:建模为条件概率分布

高斯分布仅需要给出 u 和 variance即可。而两个值通过观测样本即可给出。但此处有个细节,就是时间是以24小时的周期函数,不能直接使用数值方式计算均值u,故文中提出了计算时间维度u的方法。

图:求解u

其思路比较直接,其中有两个关键点:1,时间以24小时作为周期,那么两个时间的差,不能大于12小时;2,u和所有时间点的差值的平方和最小,求解u即可。

图:求解u,时间距离定义

同理可求解variance。

以上方法仅使用了时间一个上下文,在实际中较为重要的上下文为时间,出发位置,是否工作日,以相似的方式,将模型构建为多维高斯分布并使用贝叶斯方式即可计算。

结果透出

使用以上方法,即可计算用户在特定场景上下文情况下去特定POI的概率。当用户使用滴滴时,只需要使用该用户当前的场景上下文,使用以上方法均计算一遍概率,再根据阈值挑出TOP N即可作为’猜你去哪儿’的结果

算法不足

该方法的优点是足够简单,结果容易解释。缺点也很明显,主要包含以下几点:

1,场景上下文使用较少,也不太方便引入更多上下文,例如天气等

2,用户行为使用较少,仅使用上下文信息进行单点预测,没有用到用户的行为轨迹信息

解决第一个问题的思路比较直接:更多的特征,描述能力更强的模型。

第二个问题会比较有挑战,受限于滴滴的产品使用场景,滴滴能拿到的数据仅为用户行前的位置信息,以及用户行中的轨迹订单信息,但对用户行前之前的数据一无所知,所以如果华为,或者小米这样从底层操作系统的角度就能够完整拿到用户轨迹的厂商,就能够使用用户长期行为模式,短期轨迹和即时上下文,更加精准地预估用户行为。当然这样也会面临着更大的用户隐私风险,毕竟用户的轨迹信息基本是用户最私密的数据了。

参考文献

Zhang L, Hu T, Min Y, et al. A Taxi Order Dispatch Model based On Combinatorial Optimization[C]// Acm Sigkdd International Conference on Knowledge Discovery & Data Mining. 2017.

推荐系统,变现系统CTR&CVR预估算法演进-模型

背景介绍

在推荐系统,或者移动广告变现业务中,抛开内容的生产,用户的增长等挑战后,从算法的角度存在以下几个比较有挑战的技术点:

  1. 冷启动问题(Cold Start):新的用户如何处理
  2. 新广告探索(Exploitation&Exploration):没有历史统计信息的item或者广告如何快速确定其效果,既不能再新Ads上浪费过多流量,也不能每次都采用贪心算法仅关注短期利益
  3. 转化延迟产生建模问题(Modelling Delay Feedback):从点击到最终效果的产生中间有较长时间的间隔,如何对该问题进行建模。具体问题描述和解决方案可参见《移动端转化延迟相关CPI转化率模型建模方法
  4. 点击率预估(CTR),包括单点的《推荐系统,变现系统CTR&CVR预估算法演进-模型》,以及《推荐系统,变现系统CTR&CVR预估算法演进-多任务算法》

这些问题解决的好坏都会严重影响系统的效果,而且每一个问题在工业界&学术界都有较多的研究。

下文主要对第4个问题:点击率预估近几年的发展进行简单总结,供大家参考。

广告和推荐算是比较经典老牌的大数据落地的业务场景,而其中的核心技术点CTR预估中使用的技术,也从最经典的LR,逐步发展到树模型,FM等,而近几年随着深度学习技术的发展成熟,现在CTR预估(包括转化率预估)也逐渐开始使用深度学习,并且在各大公司的业务场景中均已经得到较大程度的效果提升。下文就对近期出现的和深度学习相关的CTR预估模型进行总结。方便我个人review也供大家参考。

问题定义

可以简单定义CTR预估问题为预估P(C|X),其中:

  • C为是否点击
  • X为使用的特征,X在变现中会包含用户profile特征,用户行为特征,广告特征,场景上下文特征

当然,在更复杂的应用场景下,可能我们不仅需要预估CTR,同时还需要预估CVR(转化率),则此时的问题建模为:

ECPM=P(CLK|X) * P(Conversion|CLK,X) * CPA,此处主要讨论P(CLK|X).

LR

传统的方法主要是使用LR来进行CTR预估,该方法能够适用的主要原因是LR相对来说不仅比较简单,更偏记忆的模型,该模型会记忆高频出现的特征,相当于是对历史的exploitation。而且该模型容易进行并行化,线上处理也非常快,因为虽然训练的时候特征空间有数十亿维,但线上真实使用过程中,非0的特征一般也就就是个,所以处理性能较高。当然该模型缺点也比较明显,就是该模型更多是对历史的记忆,但需要很多人工特征组合,否则原特征的维度上可能不能很好地划分问题,同时人工特征组合也相当于增加了模型的个性化描述,效果会更好。

GBDT+LR

该方法是facebook发表的其广告系统中使用的CTR预估算法(参见《深度学习资料》),也算是业界比较经典的算法了。主要思路为:1,使用GBDT进行特征抽特征(进行自动特征组合);2,使用LR对GBDT抽取的特征(规则组合)进行权重学习。3,一般训练的方式为先将GBDT训练好,之后固定树模型并对叶子节点进行编码作为LR特征训练LR。该方式在业界有较为广泛的应用,例如滴滴路况预测中,能够提升有效准确率2%,而美团ETA应用中预估时间的MAE能够下降3.4%(与论文中3%的下降接近).;同时文中对影响CTR模型效果的几个因素进行了分析,得到以下几个结论:

  1. 模型的自动更新很重要:模型一周不更新,效果下降1%左右,考虑到性能,甚至可以gbdt模型更新频率相对低,lr更新相对快
  2. 对于gbdt+lr模型,historical特征较为重要(top 10特征均为historical特征),但contextal特征对cold start较为重要
  3. 参数更新的schedule方法中,per-coordination方式明显好于其他方式
  4. 在display ads中,训练时可以进行负采样,但后续线上使用的时候需将概率分布转换回原分布:q=1/(p+(1-p)/w),其中q为最终ctr值,p为采样后模型预估值,w为负采样比例

当然,如果只是预估排序而不是具体的CTR值,则可以不做步骤4。

该方式和单纯的LR相比,其实已经包含了自动特征抽取的思路,因为GBDT模型天然就是进行特征组合(抽取特征),之后再使用LR来学习这些组合特征的权重;而该方式的另外一个优点,就是能够很好地处理连续特征,如果单纯使用LR,我们还需要进行特征离散化,而GBDT天然就对连续特征进行处理。

图:GBDT+LR.使用GBDT进行特征自动组合,其实现在使用DNN的主要作用也可以认为是使用DNN自动抽取高维度特征

更进一步,在该算法的基础上逐渐出现了一系列变种,我们可以称为GBDT+LR Plus,其思路和GBDT+LR类似,只是受限于GBDT的结构,GBDT能够很自然地处理连续值特征,但对离散特征的处理不够好,反过来LR能够很好地处理连续值特征,所以后来衍生出来的模型结构, 一方面使用GBDT来提取特征后作为LR的输入,同时仍然保留离散特征作为LR的另一部分输入,这样LR模型就同时具有GBDT特征组合和离散特征。当然该处的LR可以换成FM,或者FFM等模型。具体的实例参见《深度学习资料》中关于CTR部分的Kaggle Criteo Ctr预估介绍:3 Idiots’s Approach for Display Ads Challenge. 为Kaggle上Critero ctr预估第一名使用的方法,主要的思路为:

  1. 使用GBDT对连续特征,以及出现频率极高的离散特征进行特征组合(类似于FB display ads ctr预估)
  2. 组合出来的特征,结合离散化后的连续值特征,原有离散特征(共3类特征)
  3. 使用FFM进行CTR预估,并在得到CTR值后对预估值进行Calibration(简单地加减一个固定值)

图:GBDT+LR Plus:GBDT后,离散特征仍然输入至线性模型,相当于线性模型的特征输入包含两部分:离散特征+GBDT组合特征

总体来说,这个时期大家的工作还都集中在如何使用浅模型让效果最优,例如很多公司在推荐系统中使用FM(例如头条的推荐系统),而类似于Kaggle这样的专门比赛的场景,则更倾向于ensemble的算法,例如《深度学习资料》介绍的Kaggle Avazu CTR预估:4 Idiots’s Approach for Display Advertising Click-through Rate Prediction. 另一个Kaggle上的display ads ctr prediction 比赛,冠军组使用的方法介绍中,有两个关键点:1,ensemble,目前已经成为competition的标配;2,feature engineering,文中使用了较多单独构造的feature,例如user /deviceid count,  hourly impression count; user installed app bagging,  user click action的编码等。最终获奖的模型为20个ffm的ensenbling

Wide&Deep

之后很长时间,工业界使用的方法都是类似于GBDT+LR,FM,FFM之类的浅模型;如果是比赛场景,则更多会在这些模型的基础上进行essemble。而对于深度学习,大家基本上都持观望态度,一方面是大家会有一个初步的判断,就是深度学习更多适用于信息完全且格式规范化的问题,例如图像(输入图像中包含所有信息,格式统一),而能不能应用在信息稀疏的场景有待验证;另一方面是深度学习对计算资源的要求比较高,一般没有GPU卡基本上不用去尝试,速度非常慢,而GPU卡的成本又非常高,所以很多公司并不会投入那么高的成本去尝试一个未知的东西,特别是创业型公司或者业务驱动的公司。直到2016年,随着GooglePlay app推荐场景,以及Youtube视频推荐场景下google在深度学习推荐上取得明显效果,且论文发布后,深度学习在这个领域的应用才得到更多的关注。

以GooglePlay app推荐为例,GooglePlay App推荐:《深度学习资料》:Cheng H T , Koc L , Harmsen J , et al. Wide & Deep Learning for Recommender Systems[J]. 2016.提出了Wide&Deep方法(同时可参见《lbs工业界eta应用及滴滴wdr技术》),主要思路是使用Wide线性部分作为Memorization,对历史信息进行exploit,而使用Deep部分,对特征进行自动的更高层次的组合与抽象(个人理解和NLP中的模式类似,Deep部分能够学习复杂计算,同时对特征进行组合并生成embedding)进行自动特征组合,并进行更高层次的泛化,相当于对训练数据中的信息进行explore。该方法同时解决了wide需要进行手动特征组合的缺点,以及Deep有可能过拟合的缺点;而训练的方式为进行Jointly training,其中wide部分使用ftrl训练,deep部分使用adagrid后adam进行训练...Note…P.S. 目前Wide&Deep已经作为一个标准Framework解决分类和回归问题,例如滴滴ETA模型,我们使用Wide&Deep&Recurrent的WDR方法进行ETA预估(可参见《lbs工业界eta应用及滴滴wdr技术》)

图:Wide&Deep:离散特征进行embedding之后和连续特征进行concat作为deep输入

W&D变种

Wide&Deep推出后,基本上就作为业界的一个baseline的算法框架使用,在这个过程中也会有比较多的网络改进。改进的思路也基本上是在弥补Wide&Deep的各种不足。而优化的方向,基本上就是两个:要么优化wide部分的能力,要么优化deep部分的能力和效果。

Deep Cross Network

例如:Wang R, Fu B, Fu G, et al. Deep & cross network for ad click predictions[C]//Proceedings of the ADKDD’17. ACM, 2017: 12. 提出的DCN,在DNN的基础上,增加使用cross network对特征进行交叉。文中cross network有两个特点:

  1. 能够限定特征交叉的阶数(bounded order),且可以认为cross network的depth数,就是特征交叉的阶数
  2. 每次进行特征交叉的时候,相当于同时在做和第一层输入的交叉,同时在学习上一层的残差。最后cross network再和dnn进行combination。和deepfm相比:相同点是网络结构比较类似。不同点在于cross network从理论上能够从cross network的网络层数控制feature intesection的阶数..Note..

图:DCN示意图:DNN的同时,增加cross network

具体推导公式为:

图:DCN网络交叉方式:每一层均和输入进行交叉学习残差。同时可以认为cross network的层数,就是特征交叉的阶数

DeepFM

另一种比较常见的模型结构是DeepFM. 2017 Huawei App Recommender Ctr Prediction:Guo H , Tang R , Ye Y , et al. DeepFM: A Factorization-Machine based Neural Network for CTR Prediction[J]. 2017.华为App应用市场发布的推荐方法,基于Wide&Deep,区别在于两点:

将Google的Wide部分的LR模型换为FM,用于学习特征二阶交叉

不同于其他Deep的模型,FM和Deep部分使用的特征的Embedding是相同的,相当于low &hight order feature intesection都会反映到Embedding中在Wide部分和Deep部分进行共享,且训练速度和FNN(FM与训练V作为Deep Model Embedding参数初始化),PNN(Embedding和First Hiden Layer之间进行一次inner production,效果不错但增加了全连接规模导致训练较慢)要好。PS.在滴滴ETA模型中,我们就借鉴了DeepFM思路,不过其中的Deep部分会比较复杂,同时在最终的融合部分,增加了初始Additive ETA Model…..Note。该方式与传统的Wide&Deep方式相比的优势是,对于Wide部分,模型不用再使用太多人工特征,可以认为FM能够很好地完成低阶(二阶)特征组合

图:DeepFM网络结构图:1,wide部分使用FM代替;2,embedding wide&deep共享

Deep Interest Network

Zhou G , Song C , Zhu X , et al. Deep Interest Network for Click-Through Rate Prediction[J]. 2017.目前deep learning在CTR&CVR预估上,使用较多的方法是Embedding&MLP的方式,思路是对原来稀spase features先进行embedding,之后进行feature group wise的pooling,例如sum或者average,之后得到定长的vector再输入MLP(MLP可以有很多变种,例如res-net思路)。该方式在淘宝上的缺点是:user的兴趣可能不止一个,例如年轻妈妈可能关注自己喜欢的时尚衣服,同时也在购买婴儿用品,故直接sum/average的user featrues pooling方式存在信息损失,既进行pooling后,在embedding空间中得到的向量可能和该用户的众多兴趣距离都较远。故Deep Interest Network将user behavioral embeddings与ads的embedding使用local network的方式进行学习,最大程度上根据用户historical 的behavioral feature体现与ads的相关性,从网络结构的角度,我们可以认为是每个ads去和最相近的user behavior embedding来进行权重分配,以便突出地体现和该广告相关的用户行为…Note..

图:DIN(Deep Intresting Network)

FM深度化

CTR预估模型的另外一个发展方向是在原来FM的基础上,引入深度学习的思想,将二者结合起来,者可以认为是FM的扩展或者能力的增强

例如Attention Factorization Machine

Xiao J, Ye H, He X, et al. Attentional factorization machines: Learning the weight of feature interactions via attention networks[J]. arXiv preprint arXiv:1708.04617, 2017.网络结构中的设计思想是认为FM中,每个特征对应的隐变量(embedding)在使用过程中的权重都相同(均为1)是不合理的。特征在进行交叉的时候,权重应该不一样。故在FM结构中增加attention network来学习特征embedding进行element-wise交叉时候的权重。该方法一方面能够提升效果,另一方面,也能够根据特征交叉过程中的权重,分析交叉特征的重要性:通过分析网络产生的attention score,能够观测到哪些特征的组合重要性更高(和未做attention的fm相比)。而文中通过先固定attention score训练fm embedding,之后再固定embedding训练attention权重的方式,也验证了在传统fm上增加attention network的确对最终的效果有正向作用..Note..

图:添加了Attention的FM,背后的intuition是fm进行二阶交叉时,特征的重要性是不一样的,通过Attention来捕捉该差异

又例如在Neural Factorization Machine中,He X, Chua T S. Neural factorization machines for sparse predictive analytics[C]//Proceedings of the 40th International ACM SIGIR conference on Research and Development in Information Retrieval. ACM, 2017: 355-364.在FM后增加了隐藏层,以便在原有FM线性二阶交叉的基础上增加非线性的更多特征交叉。这类方法我们都可以认为是在FM的基础上,使用DNN的思路,对FM进行能力的增强。

图:Neural Factorization Machine在FM进行二阶embedding交叉后,引入DNN进行更高阶交叉

Spatio&Temporal Net

指在NN的基础上,充分考虑推荐场景下Spatio&Temporal特征,此处空间时间维度的特征在不同场景下含义可以不一致,例如在论文《Deep Spatio-Temporal Neural Networks for Click-Through Rate Prediction》中,主要思想还是使用深度学习进行高维特征交叉。创新点在于该点击率模型同时考虑了空间关系和时间关系对点击率的影响。

该处的空间关系指即将展现的候选广告之前的作为上下文的广告,作为该ad的context,而该用户历史上点击过&未点击的ads则作为空间时序上用户的兴趣表达(该思想和DIN类似)

在具体实施时,文中使用了递进的三种模型:1,特征embedding后直接进行sum pooling;2,解决加入attention机制解决sum pooling带来的信息丢失问题;3,引入context和target的交叉解决context对多个广告不变的问题

总体文章的思路比较直接,最重要创新就是同时引入上下文和用户时间维度上的兴趣表达

总结

当前的CTR预估已经大规模使用深度学习,而且在工业界和学术界仍然在不断地有新的网络结构出现,所以不出意外这些新的网络结构的研究应该还能火两三年。但今年去加拿大参加NeuraIPS时发现一个趋势,就是很多研究人员,以及类似于Google这样的公司都在大力投入到AutoML中,也就是使用机器学习的方法,类似于搭积木似的去寻找最优化的网络结构(超参数)组合,所以会不会两三年后,网络结构的创新,会被AutoML所取代?这个不得而知

参考文献
  1. 深度学习资料
  2. lbs工业界eta应用及滴滴wdr技术
  3. Practical Lessons from Predicting Clicks on Ads at Facebook[J]. 2014:1-9..
  4. Mcmahan H B , Holt G , Sculley D , et al. Ad click prediction:a view from the trenches[C]// Acm Sigkdd International Conference on Knowledge Discovery & Data Mining. ACM, 2013
  5. Cheng H T , Koc L , Harmsen J , et al. Wide & Deep Learning for Recommender Systems[J]. 2016.
  6. 3 Idiots’s Approach for Display Ads Challenge.
  7. 4 Idiots’s Approach for Display Advertising Click-through Rate Prediction.
  8. Guo H , Tang R , Ye Y , et al. DeepFM: A Factorization-Machine based Neural Network for CTR Prediction[J]. 2017.
  9. Zhou G , Song C , Zhu X , et al. Deep Interest Network for Click-Through Rate Prediction[J]. 2017.
  10. Chapelle O. Modeling delayed feedback in display advertising[C]//Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2014: 1097-1105.
  11. Wang R, Fu B, Fu G, et al. Deep & cross network for ad click predictions[C]//Proceedings of the ADKDD’17. ACM, 2017: 12.
  12. Xiao J, Ye H, He X, et al. Attentional factorization machines: Learning the weight of feature interactions via attention networks[J]. arXiv preprint arXiv:1708.04617, 2017. He X, Chua T S. Neural factorization machines for sparse predictive analytics[C]//Proceedings of the 40th International ACM SIGIR conference on Research and Development in Information Retrieval. ACM, 2017: 355-364.

Mobvista 海外移动变现核心技术

之前受邀在QCON进行了名为海外移动变现核心技术的演讲。正好近期也在总结过去一段时间的工作,所以就直接在这儿总结了。

流量分类

Mobvista的移动变现业务,从流量侧来看,主要分三类流量:

  1. 外部Affliliates的流量,这个就是传统的买量,很多时候我们也不知道流量的来源,仅根据数据表现,以及运营人工经验评判流量渠道的好坏
  2. Mobvista的自有流量,其实也是和开发者谈下来的流量:和开发者签订协议,将Mobvista的SDK达到开发者的app中,之后出Mobvista的广告。一般内部我们就叫该系统为M系统
  3. 程序化买量:Mobvista建立DSP,从各大ADExchange买量

Affiliates买量过程人工运营成分比较多,而DSP可以是一个专门的TOPIC,所以此处就主要介绍Mobvista的自有流量业务的挑战,以及解决方案。

挑战

移动变现,特别是国际化移动变现过程中,面临的挑战非常多,以下是主要的挑战:1,广告样式多样化:banner,appwall, offerwall, native, interstitial, native video, rewarded video。 样式丰富,效果表现不一,导致要进行算法抽象,数据共享的时候存在较大挑战

2,转化路径较长:impression -> click -> install(安装激活) -> 应用内付费。。 甚至impression之前的展示广告是否返回成功,SDK加载是否成功等都是问题

3,流量参差不齐,不同国家间网络基础设施也有较大差异

4,移动广告的归因方式, 决定了产业中出现了较多的黑科技。这个之后值得用大篇幅进行介绍

以上这些问题,都是对算法的较大挑战,也早就叫较多算法优化点以及衍生的创收的黑科技。

技术应对方案

为了应对上述挑战, 我们必须有较为完善的架构, 算法解决这些挑战。 以下为Mobvista变下架构, 主要包含如下及部分,从左至右分别为流量侧到广告主侧

1.SDK:我们会开发SDK对开发者变现流量进行托管, SDK不仅支持IOS系统, 也支持ANDROID系统, 同时支持多种广告形式, 包括native, appwall和video等广告样式, 从功能上SDK主要负责广告分发, 展现控制, 缓存机制及消费空。 其中自创的缓存机制配合算法, 不仅能大幅减少广告请求交互, 提升广告加载, 展现速度,同时还能保证开发这的ECPM

2.Mobvista会对对外的API进行封装, 所以提供直接的OPEN API供开发者调用。 当然, 一般需要配合SDK的控制机制, 才能达到较高的受益

3.Mobvista同时提供完善的广告设置管理portal对广告素材,预算, 展现机制等进行管理控制,方便对广告的金细化运营

4.同时系统中还有完善的实验机制及样式模板管理, 方便整个系统对效果的优化

5.画红线的部分主要包括我们使用大数据平台对ECPM的模型训练及预估机制

对于模型相关的组件, 在省略了工程细节后, 主要是以下算法策略在系统中的重要组件。

与传统变现系统的较大差别, 在于我们为了处理长转化路径问题,对模型进行了拆分, 拆分为CTR预估模型及CVR模型;

同时为了解决多样性问题, 我们设计了定制的优质campaign探索机制, 及Mobvista的Exploration&Exploitation机制;

同时我们使用模型assabling的方法, 对LR, GBDT, FM等模型进行组合,提升预估精度

Ecpm就是我们预估的目标, 以下是我们对ecpm的拆解方法: 其中 ctr及cvr是未知量, 需要模型进行预估。

预估的方法比较直接: 我们寻找优质高效特征对样本进行描述, 同时使用点击和安装作为labels, 之后训练模型对ctr, cvr进行预估, 最后 使用 ecpm = 1000 * ctr * cvr * price 的方式计算ecpm, 并按照计算ecpm进行广告排序推荐

每次模型升级后会使用a/b test机制进行效果测试, 选出效果最好的模型

下图为我们的模型算法框架图。

为了适应我们全球化的变现业务需求, 我们的大数据机器学习平台是给予亚马逊aws云计算搭建的。

平台分为在线预估部分和离线部分,离线部分又分为日志处理及模型训练与配置模块

我们的日志具有较强的多样性及复杂性, 主要体现在两方面:

1.Mobvsita流量覆盖230+个国家, 故我们再多国及地区均有服务器, 数据需要从多地多服务器进行快速收集汇总

2.Mobvista有多条产品线, 不同产品线为适应业需求特性, 会使用不同存储系统对数据进行存储, 故须要从不同系统中对数据进行收集汇总, 包括DynamoDB, MongoDB, 以及内部的多种API接口

数据均使用AWS EMR分布式系统进行汇总, 计算机清洗。 我们会使用azkaban任务调度系统周期性定时启动生成EMR平台, 对数据进行处理, 处理后的日志按照访问实时性要求高低分别存放在 AWS redshift和S3上。 同时我们会根据数据量大小及计算任务复杂度动态调整EMR集群资源, 在保证计算任务实时性要求的同时, 减少计算资源浪费。 并在AWS上搭建机器学习平台进行模型训练。

更多内容可以参见PPT:

更多内容可直接访问: semocean.com

 

 

如何使用机器学习解决实际问题-以关键词相关性模型为例

本文以百度关键词搜索推荐工具字面相关性模型为基础,介绍一个机器学习任务的具体设计实现。包括目标的设定,训练数据准备,特征选择及筛选, 以及模型的训练及优化。该模型可扩展到语意相关性模型,搜索引擎相关性及LTR学习任务的设计实现。该模型的设计调研实现,也可以很容易移植解决其他包括语义相关性的问题

目标设定:提升关键词搜索相关性

作为一个搜索+推荐产品,百度关键词搜索推荐系统的产品形态是向凤巢用户推荐适合他业务的关键词。例如一个卖鲜花的广告主,他想在百度上做关键词搜索推广时,需要提交和他业务相关的关键词,而且提交的关键词需要业务相关,例如他需要提交和卖鲜花业务相关的关键词。例如鲜花快递,鲜花速递等。此时他可以在百度关键词搜索推荐系统中进行搜索查询,选择适合他的关键词。

百度关键词搜索推荐系统query搜索

这是一个典型的搜索问题,具体的从输入query,到触发,到排序等会涉及到很多因素,例如如何查倒排,如果处理地域因素等;要提升搜索的质量,我们首先需要保证输入的query和推荐出来的推荐词的相关性,此处我们要解决的主要问题, 就是如何快速,准确地判断两个关键词(输入query和推荐词)的相关性,需要特别注明的是,我们主要的目标是让用户觉得该产品结果很靠谱, 所以该处我们仅考虑字面相关性,更多的语意扩展该模型并未考虑。

注:该模型的调研实验实现方式, 可以很容易平移到语义相关性。例如加入更多语意特征,例如plsa的bm25特征和word2vec的相似度特征(或者和扩展的相关性校验,例如将待推荐词扩展为baidu搜索结果的摘要扩展)提高语义特征的贡献。

相关性也是所有搜索问题的基石,只不过在不同的系统中使用方式不一样, 在一般的搜索中,相关性占有较大权重, 排序基本就以相关性为依据; 在商业系统中,相关性则经常作为搜索展现的门槛用于控制商业推广结果的质量(如果仅考虑CTR, 用户搜索鲜花快递时,给用户展现艳照门的结果,CTR会更高,但相关性较差)。  当然,判断相关性我们可以简单使用某一种方法进行直接判定,例如直接进行两个关键词的TF-IDF计算,或是进行两个关键词的BM25。但这样的方式效果都不太理想,想要达到更好的效果,就需要使用更多特征,而更多特征很自然地,需要使用模型组合这些特征,达到最终的预期效果。

图:相关性在关键词系统中的位置

此处将会使用机器学习的方法解决该问题。本文以下内容会从数据准备, 特征选择, 模型选择, 模

型调优等步骤介绍百度关键词搜索推荐系统如何解决该问题

数据,特征,模型

说到使用机器学习解决问题,我们经常提到的优化思路就是3方面的优化: 数据,特征,模型。首先找到充足的,准确的label数据(该出仅考虑有监督学习任务,例如相关性,或是LTR),之后提取贡献较大的特征作为input space,以label作为output /ground true label,之后优化模型(Hypothesis) )。下面会分别从这3方面对整个优化过程进行阐述

准备训练数据

训练数据的获取一般有几种方式:

  1. 人工标注: 优点是质量较高,噪音较少;缺点是标注结果和标注者本身的认识相关,例如在搜索引擎中,判定苹果和手机的相关性,对于年轻人,一般都认为相关;但对于比较多的老人,可能认为不相关;另外一个缺点就是人工获取标注的成本较高
  2. 从日志中进行挖掘:优点是数据量相对更大,获取成本较低(编写几个hadoop脚本对日志进行统计);缺点是噪音较多,例如搜索引擎中的恶意抓取访问导致的噪音数据

在相关性模型中,一开始我们使用百度关键词搜索推荐系统的人工反馈数据作为label对模型进行训练,分别提取1.5W query-推荐词pair作为正负例进行特征提取,模型训练。

 

如图所示,在交互上,当用户喜欢该关键词时,就会点击‘大拇指’表示该结果符合用户需求(正反馈,该query-推荐词 pair可作为正例);如用户认为该关键词不符合需求,就会点击‘垃圾桶’,将该关键词扔入回收站(负反馈,该query-推荐词 pair 可作为负例)

在实验中,我们发现正例没有问题, 不过负例中会存在较多这样的情形: query-推荐词是相关的, 但该用户不做该业务,所以被定义为负例,所以负例个性化较强。所以后来我们让产品经理同学又对负例子进行筛选,重新标注1.5W负例,进行后续特征提取, 模型训练。

之后我们将正负例打散后(直接使用python random.shuffle)分成10份,进行cross-validation

模型训练前,先定标准和样本

注: 训练样本的挑选完全决定了我们的问题目标,所以在一开始就需要准确选择,如果可能,所有的case都最好人工来搞,或者至少需要人工review。 确定没有问题后,再开展后续工作。特别是相关性类似的问题,比较主观,例如PM和RD在该问题的判断上就可能存在一定差异。

确定完训练样本, 评估标准,之后再小布快跑, 优化模型。

特征提取

一般特征的选择及处理会极大地影响学习任务的效果,而进行特征选择的时候,一般是先增加特征,并实验效果。 对于相关性模型, 我们可以先将传统的信息检索的特征加上,这些特征一般分为以下几类:

  1. query/候选词的一般结构特征: 例如query/候选词长度,term数等
  2. query-候选词的相关性度量:例如TF-IDF, bm25, LMIR及多重变种, plsa相似度度量,word2vec语意向量相似度等; 很多时候,关键词自身信息较少,还可以使用关键词在搜索引擎上的摘要扩展进行相似度度量
  3. 关键词自身在信息检索维度的重要性度量,例如关键词idf, 从语言模型方面的重要度等

在一开始的时候,我们可以先将能够想到,构造出来的特征均加入特征向量进行实验,而且每加一类特征,都可以看下该类特征对整体目标的提升程度。以便对该特征的贡献度有一个直观的感受。

以下数据可以简单看出随着特征的增加,效果的提升,其中的特征仅加不减(模型使用random forest   进行二分类):

等到特征加得差不多,模型准确性已经提升不多的时候, 可以考虑砍特征,有一种比较简单粗暴有效的砍特征的方法,就是使用树模型,就是直接砍掉特征贡献程度及特征重要性较低的特征,例如直砍掉特征贡献度为0的特征,对相关性模型的准确性几乎没有影响

特征贡献度

当增加特征已经很难提升效果, 考虑到为了防止过拟合,同时考虑到模型online预测,需要对特征进行挑选。在使用树模型时,可以直接使用数节点特征贡献度和节点使用次数,判断是否需要去除该特征,以下为使用树模型进行选择特征的例子:

对于特征贡献度和分裂特征使用次数为0的特征,在调研时,直接去除对模型效果几乎没有影响,而且能提升预测的效率。

在选择特征的时候, 有一些经验值得分享:

  1. bm25特征及term weight特征对分类任务有极大贡献
  2. 一些单独的比值类特征并没有太大贡献,例如query,推荐词共同term与query term数,推荐词term数的比值,这些特征并没有太大贡献,但是这些特征与query,推荐词的term数结合到一起,贡献就非常多;所以有些特征需要联合在一起,才有较大作用。
  3. 特征选择需要和目标一致:例如word2vec是非常高大上,且非常靠谱的技术,但用在字面相关性,对目标并没有太大贡献(如果目标是语意相关,那么类似于PLSA,word2vec将会有很大贡献)
  4. 有些特征就就是用来解决特殊case的,虽然贡献不大,但需要保留(当然也可以直接设置为强规则与模型配合),例如query与推荐词拼音一致

模型选择

经典模型

最开始我们尝试了最大熵,SVM和adaboost模型, 考虑到online使用的效率,最终我们选择了adaboost模型作为线上使用的模型,虽然效果不是最好的,但使用简单的weak learner构建的模型的确比较快(参见博文:《adaboost》),并且使用adaboost进行上线并取得较好效果:上线后不仅召回增加,准确性上90%的case相关性高于等于原有结果(采用非模型的版本)

评估结果分布图(2到-2分别代表扩召回结果相关性高于、略高于、等于、略低于、低于线上策略)

集成树模型

现在特别喜欢使用树模型,因为使用的时候,连特征归一化都省了: 如果使用SVM类似的模型,还需要对特征进行归一化等处理, 但使用树模型,直接将特征向量及label扔给模型, 模型自己会根据信息增益,或是基尼系数等标准选择最合适的拆分点进行树节点的拆分(具体的拆分标准可参见博文:《使用impurity选择树模型拆分节点》),开源的树模型,例如大名鼎鼎的Quinlan的C4.5或是C5.0都在调研时都可以拿来试试作为特征选择的依据。

特别是集成树模型的出现,更是极大地提升了树模型效果。所以现在的项目中,我比较喜欢在增加特征的时候就使用集成树模型进行效果实验。 具体树模型使用参见《集成树类模型及其在搜索推荐系统中的应用

集成树模型配置选择

此处的配置选择和传统的模型参数稍有区别,该出的树模型配置主要指集成树模型中树的数量,每棵树的特征选择因子和样本使用因子等。在项目中,考虑到准确率和速度,最终确定的参数是树的数量是20, 特征选择因子和样本选择因子均为0.65(每棵树随机选择0.65的样本和特征进行训练)

具体产品效果可参见www2.baidu.com中百度关键词搜索推荐系统的排序结果:

如何个性化

首要需要考虑的是我们的数据样本,是否本身就是包含个性化的case(此处的答案是否定的); 假设我们的标注case是个性化的,也就是case中本身就包含了个性化结果时,在模型训练流程上其实并没有太大区别, 主要的区别就在于我们选取哪些能够区分这些个性化的特征, 例如百度凤巢中账户(单元)的plsa模型产出的pzd向量与query的相似度等

登录www2.baidu.com->关键词工具->搜索query->查看结果 即可。

更多内容也可参见: http://semocean.com