Airbnb个性化推荐

一、Aribnb个性化推荐

1、Real-time Personalization using Embeddings for Search Ranking at Airbnb

2、网址:https://www.kdd.org/kdd2018/accepted-papers/view/real-time-personalization-using-embeddings-for-search-ranking-at-airbnb

二、主要使用场景特征

特征:

1、大部分的用户很少会多次预定同一类型的房间

2、房间分时段的,只能在某段时间内被某一个用户预订

3、低频事件(对于大部分预定用户),同一个地方预订酒店更是低频

场景:

1、双边的房屋短租平台(顾客,房东)

2、顾客通过搜索或者系统推荐找到房源 => 贡献了Airbnb 99%的booking

3、一个顾客很少会预定同一个房源多次

4、一个房源在某时间段内只能被一个顾客租用

5、数据存在严重的稀疏性

6、针对搜索排序,相似房源推荐进行的实时个性化 基于业务需求,考虑搜索的目标

7、点击率(CTR),新闻的观看时长(YouTube),提高商品购买的转化率等等

8、与其他商品不同,不是用户想定就能定上房源

9、对于双边市场,需要同时为市场两端用户买家(guest)和卖家(host)提供服务

10、双边的推荐,既需要考虑用户预订,也需要考虑房东是否接受预订(Host Actions:Reject, Accept, No Response)

三、List Embedding (房源嵌入)

1、将每一个房源 嵌入到 新的向量空间,embedding

2、数据集描述:

a、数据集由 N 个用户的点击会话 (Session) 组成,其中每个会话定义为一个由用户点击的 M个房源 id 组成的的不间断序列

b、只要用户连续两次点击时间间隔超过30分钟,就认为是一个新的Session

c、目标是通过集合S,学习出每个房源listing的d维( 32 维)embedding表示,让相似listing在embedding空间中距离更近

d、借鉴了word2vec中的skip-gram算法

e、房源embedding,把每个用户连续点击过的房源Session看做一个句子,每个房源当做word,训练出房源的embedding

f、Skip-Gram:对于语料库中的句子,设置一个窗口在每一个句子上滑动,用窗口中央的word,去预测滑动窗口内其他的word,通过这种方式,训练出所有word的embedding

四、Word2Vec 算法

1、通过Embedding,把原先词所在空间映射到一个新的空间中去,使得语义上相似的单词在该空间内距离相近。

2、Word Embedding => 学习隐藏层的权重矩阵

3、输入层是one-hot编码,输出层是概率值

4、输入层和输出层大小与词库大小相等

5、隐藏层的神经元数量为hidden_size(Embedding Size)

6、对于输入层和隐藏层之间的权值矩阵W,大小为[vocab_size, hidden_size]

7、输出层为[vocab_size]大小的向量,每一个值代表着输出一个词的概率

比如:

1、假设有多个训练样本(juice,apple) (juice,pear) (juice,banana)

2、中心词是juice,规定窗口内有apple、pear、banana,共同的输入juice,对应不同word输出。用这些样本训练后,得到的概率结果,apple、pear、banana的概率值会比较高 => 它们在对应隐藏层中的参数是相似的

3、计算apple, pear, banana对应的隐藏层向量之间余弦相似度,会比较高

4、word2vec可以让单词之间具有相似性和类比关系

5、我们想要的结果并不是模型本身,而是隐藏层的参数,即让输入向量转换为新的embedding

对输入输入的one-hot编码处理:

1、在矩阵相乘的时候,选取出矩阵中的某一行,而这一行就是输入词语的word2vec表示

2、隐含层的节点个数 = 词向量的维数

3、隐层的输出是每个输入单词的Word Embedding

4、word2vec,实际上就是一个查找表

Word2Vec的两种模式:

 

1、Skip-Gram,跳字模型,给定input word预测上下文

2、CBOW,连续词袋模型,给定上下文,预测input word(与Skip-Gram相反)

 

原始Skip-Gram的目标函数:

1、因为每个词都决定了相邻词 ,基于极大似然,期望所有样本的条件概率之积最大,使用log probability

用softmax函数求解多分类问题,用      表示单词

2、对目标函数求最大化,可以让相似的词具有相似的向量值

List Embedding的目标函数构造:

1、使用skip-gram构造基础的目标函数

2、采用negative sampling构造采样之后的目标函数

表示位于当前作用center的这个listing的embedding向量

表示center后面的这个输入listing的embedding向量      

表示当前的输入向量                

表示当前的输入向量属于正样本                  

表示当前的输入向量属于负样本

3、正常的Skip-Gram,学习每个词的时候,根据设置的大小,只会选择每个词前后n个word作为正样本,所以随着窗口的滑动,窗口内的word是一直在变的

4、Airbnb把session中被预定的listing作为一个全局的上下文始终出现在每次的滑动窗口中,被预定的listing id一直存在session的滑动窗口内。

5、根据预定行为构造有导向于“booking”的目标函数

 

       表示booking listing的embedding向量

因为booking listing是正样本 =>目标函数中的指数是“负”

因为booking listing是作为上下文的全局参数(global),所以目标函数中没有使用条件求和∑,也就是在session里面,都要考虑到这个booking listing作为正例

6、适配聚集搜索,Adapting Training for Congregated Search

7、根据房源地区进一步优化得到最终的目标函数

8、用户旅行目的确定后,房源都应该是同一个区域的,传统的负采样会随机从全样本中随机抽取

9、Airbnb加入了另一组negative sample,就是在 central listing 同一区域的 listing 集合中进行随机抽样

第一行原始的Skip-gram的优化目标

第二行加入全局上下文和同区域内的采样

是正在更新的中心房源的向量v(l) 是一对正对(l,c),

表示(中心房源,相关房源)tuple,向量在优化中会被相互推近 是一对负对(l,c),

表示(中心房源,随机房源)tuple,向量在优化中会被相互推远 是一对目的地的负样本(l,mn),

表示(中央房源,来自同一目的地的随机房源)tuple,向量在优化中会被相互推远

五、List Embedding的离线评估:

(搜索中的房源根据embedding的相似性进行了重新排序,并且最终被预订房源的排序是按照每次预定前的点击的平均值来计算,追溯到预定前的 17 次点击)

1、在使用基于embedding的推荐系统进行线上搜索测试之前,需要进行多次离线测试。目的是比较不同参数训练出来的embedding,决定embedding维度,算法思路等。

2、评估标准,测试用户最近的点击推荐的房源,有多大可能最终会产生预订

步骤:

step1 获取用户最近点击的房源,以及需要排序的房源候选列表,用户最终预订的房源

step2 计算点击房源和候选房源在embedding空间的余弦相似度

step3 对候选房源按照相似度进行排序,观察最终预订的房源在排序中的位置

search ranking,原有的排序模型:

1、re-ranking,在search ranking上进行re-ranking(使用不同目标函数)

2、d32 regular,采用负采样进行训练得到的embedding结果

3、d32 booking global:在d32的基础上增加booked listing作为全局上下文

4、d32 booking global + market negative:在上一个模型的基础上又加入了房源的地区来作为负抽样

5、re-ranking之后,booking listing的位置都往前提了,证明Ranking结果更好

6、d32 booking global + market negative构造的目标函数方法最好

六、List Embedding的冷启动

1、每天Airbnb都有新的房源产生,冷启动在所难免

2、房主上传新房源时需要上传3个特征,位置,价格,房源类型(包括整个房源,独立房间,合住房间3个类别)

3、在和新上传房源具有相同类型和相同价格区间的房源中,找到3个地理位置最接近的房源,用这3个房源的embedding求平均作为新房源的embedding

4、能覆盖到98%的新Listing

七、List Embedding的评估方法

1、K-means 聚类,将embdding进行聚类,然后可以发现其在地理位置上的区分度

2、embeddng之间的余弦相似度

3、不同类型的listing之间的余弦相似度

4、不同价格范围的listing之间的余弦相似度

5、除了基础属性(价格,地理位置)很明显的能直接获取,还有隐属性可以通过embedding来发现,比如房屋的文理

6、计算了每个listing embedding的k近邻,并对比这个listing和k近邻 => Embedding Evaluation Tool

八、Listing Embedding不能够解决的问题

1、需要基于当前的点击来计算

2、只提取了用户的short-term兴趣

3、只能用于“相似房源”场景中

4、只针对同地区下的用户兴趣房源的挖掘

5、Listing embedding 能很好的表达同一市场下Listing之间的相似性 => 适合做short-term的个性化,用于比较session内的实时推荐(相似房源推荐)

User Type Embedding 和Listing Type Embedding:

1、一些长期的行为,比如一个人在很久之前在另外一个城市预定过房间,那么在当前城市很有可能还是会喜欢预定同类型的房源

2、进一步从预定的Listing中来捕获这些信息

3、构造数据集:由前面的点击序列变成预定序列,数据集为N个用户预定的Listing 组成的session集合,每个sesison可以表示为

存在问题:

1、训练数据集会很小,因为相比点击,预定的数据小一个数量级。

2、很多用户在过去只预定过一次,这些数据是没法用来训练模型

3、需要进一步去掉那些在平台上总共就被预定的次数很少的Listing(比如少于5-10次的Listing)

4、时间跨度太长,可能用户的喜欢偏好已经发生变化

为了处理存在的问题,提出了学习type级别的embedding,而不是学习id级别的embedding

1、对于原始的Listing数据,比如位置,价格,类型,床位数等,基于一些硬性的规则生成每个Listing的类别

2、目的是将原本稀疏的数据(基于id),变得稠密(基于类型)很多session出现了共现

3、将User Type Embedding方式也采样相同的方法,即拥有一些相同的基础属性和相同行为的用户进行分桶

4、可以理解为,分别对用户和房源做了聚类,按聚类后的数据进行学习embedding,在更高一个维度(粗粒度)上获取长期兴趣

用type来表示原有的user和listing,可以解决:

1、实时个性化的体现,即使对于同一个listing或user,对应的type也可以发生变化(比如用户行为发生变化)

2、冷启动问题,用户层面上的前五个特征是通用的画像特征,对于新用户可以直接通过这五个特征完成映射

九、Type Embedding的目标函数

1、使用negative sampling构造基础的目标函数

User Type Embedding

Listing Type Embedding

十、实时个性推荐

基于Embedding的实时个性化搜索:

用户预定的房间偏好:房间大,便宜,好评

1、计算用户的user type embedding与候选listing的listing type embedding之间的余弦相似度

2、推荐给用户相似度高的listing

基于Embedding的搜索排序:

原有的排序模型:

1、算法:GBDT模型(支持lambda rank)解决pairwise问题

2、特征:listing features、user features、query features和cross features

现有排序模型:

1、算法:GBDT模型(支持lambda rank)解决pairwise问题

2、特征:listing features、user features、query features和cross features,和embedding features

step1 准备3种embedding值,Listing Embedding,User Type Embedding和Listing Type Embedding

step2 获取基础指标H∗

step3 提取地区embedding

step4 计算Embedding Features

step5 在原有的Ranking Model中加入embedding features进行计算

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值