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

增加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.