airbnb 房源预定 embedding 论文学习

《Real-time Personalization using Embeddings for Search Ranking at Airbnb》
其核心在SKIP-GRAM上根据业务做了一个改善点为:当序列中存在下单动作的时候,认为序列中的任意一个商品都与该下单动作的商品应该存在必定的关系,因此在SKIP_GRAM算法中仅需要将在有下单序列中每个窗口中多加入一个商品即下单的商品即可。

1:基础符号解释说明

https://zhuanlan.zhihu.com/p/55259412
假定从airbnb  房源预定 embedding 论文学习 个用户获得了一个点击的session集合airbnb  房源预定 embedding 论文学习,其中每个session airbnb  房源预定 embedding 论文学习为用户点击的一个LIST,其中session的切割方式为:当以个点击时间距离下一个点击时间大于30分钟后,该session被切割。目标是对于每一个listing airbnb  房源预定 embedding 论文学习学习一个airbnb  房源预定 embedding 论文学习维的向量airbnb  房源预定 embedding 论文学习使得类似的listing在embedding空间中更接近。

2:模型设计

airbnb  房源预定 embedding 论文学习的正样本对为airbnb  房源预定 embedding 论文学习,记其集合为airbnb  房源预定 embedding 论文学习。即窗口为airbnb  房源预定 embedding 论文学习大小的,同一个用户点击序列中的上下文为其正样本对。随机选取airbnb  房源预定 embedding 论文学习个负样本对$$,记其集合为airbnb  房源预定 embedding 论文学习,则目标函数变为(实际上就是交叉熵损失函数,与SKIP-GRAM的损失函数一致):

airbnb  房源预定 embedding 论文学习

通过随机梯度下降进行求解。

3:切割SESSION的机制

将SESSION切分为两个部分
1)预定序列 booked session。即序列的终止动作为下单。此时优化目标要变为:

airbnb  房源预定 embedding 论文学习
可以这样理解最后加的一项,相当于,无论下单动作的商品在不在窗口内,都把它当做中心商品airbnb  房源预定 embedding 论文学习 的一个上下文。
2)探索序列 exploratory session 。即序列中切分为时间间隔大于30分钟了,被切割的SESSION中没有下单的动作,全是浏览点击的动作。
3)???不太理解这块的含义:

airbnb  房源预定 embedding 论文学习

通俗地理解是不是可以这样想,如果全局选取负样本,会导致同一个market 的房源的 embedding 接近,非同一 market 就会远,内部区分不是很明显,但是若负采样在 airbnb  房源预定 embedding 论文学习 的market 里进行选取的话,是否可以将内部房源区分得更开?此处相当于作者关于随机负采样根据业务需求做了一些优化。

4:冷启动的问题

提出了一种利用其它的已经存在的embedding 向量去表明未知的embedding 向量 。采取的策略是找10 miles为半径的范围内,与已知embedding 房源属性最近的3个房源,然后求平均得到未知EMBEDDING房源的办法。

5:uer_type 和 listing_type

假定我们给定了一个由airbnb  房源预定 embedding 论文学习 个用户预订的商品序列集合airbnb  房源预定 embedding 论文学习,其中每个预订的session 为 airbnb  房源预定 embedding 论文学习,通过预订商品序列生成embedding 向量存在如下的几个问题:
1)预订的商品序列会比点击序列的长度短许多
2)许多用户可能就预订一单,也就是序列的长度为1,无法学到
3)为了学到有意义的 emebdding 向量,一般要求商品出现的次数要大于5-10次,但是许多商品实际上出现的次数是少于5-10次的,列如那些比较少见的商品。
4)用户预订的两个商品若时间间隔过久,这两个时间段用户可能由于职业改变等导致价格偏好发生改变。
为了解决上述问题,作者提出了,我们倾向于学习 listing_type 而不是listing_id。具体是如何做呢?
第一给定listing_id必要的元数据信息,列如像JD商品id对应的属性三级品类、品牌等。文章给出的是位置、价格、大小、床的数量等。给出了一个映射规则,对应的论文的 table3 。文章中给了一个例子, 一个房间的信息为:

1)国家为US,对应第一行第一个,映射表中取值为US
2)Listing_type是Ent,对应第二行第一个,映射表中取值为lt1表明 list type缩写lt 且为第1列
3)每晚价格60.8$,对应第三行第3个在56-69区间内,映射表中取值为pn3,pn是per night 的缩写,3表明第3列
4)平均每个顾客29.3$,对应第四行第3个,映射表中取值为pg3,pg 表明per gust缩写,3表明第3列

依次查表,最终可以表明为listing_type = US_lt1_pn3_pд3_r3_5s4_c2_b1_bd2_bt2_nu3,显然这是一种多对一的映射关系。问题,映射关系很重大,实际上此处的映射关系已经决定了,哪些房源满足什么基础条件的时候,就必定类似,列如映射成同一个listing_type的lsiting_id 的emebdding 表明肯定是一致的。此处价格区间的划分等映射表的构建也是至关重大的。以同样的方式构建用户的映射关系,映射表见论文的table4。
目前的问题是如何让listing_type 和user_type 的emebdding 的向量是在一个向量空间中?
第一构造book session ,只不过和之前的相比,在 session 中不仅有商品还有用户 ,即 airbnb  房源预定 embedding 论文学习

6:在 word2vec的基础上修改源码,实现论文 ,初步构思方向

1)将原始sentence 后加上一个判断是否是下单的符号,列如-1表明该sentence 有booked 的商品,LOSS加上 含booked 一项。若尾部的ID不等于-1就表明该sentence 没有booked 的商品,在更新的过程LOOS沿用之前的。但是这样处理后,就会发现-1会被当做词在构建huffman树的时候当做词被构建进树中,且由于每个带booked的sentence中几乎都有-1,就会导致其词频很高,在构建树的过程中很大致率会离根节点很近,导致使用层次softmax的时候,几乎许多词的路径中都包含了该节点,显然是不合理的。
2)介于第一步引入赘余词后的不合理点,需要在统计词频和构建词典的过程中将这两个词filter掉。
3)基于论文的思想,当引入booked 的商品后,在更新每个中心词的输入向量的过程中,需要将booked 的商品也当做窗口词进行更新其参数向量。因此第一要判断尾部的商品ID是否等于-1,若是则sentence-1,不更新尾部的词。且每次更新的过程中先记录尾部词,在窗口词更新完后,将尾部词都更新一遍。有个问题(booked 的词是否要作为中心词更新一遍????此处个人理解是不需要更新)
基于上述分析,最终修改的代码见:https://github.com/Hongqiong12/Embedding/tree/main/aribnb
提议:
当sentence的长度为2的时候,尾部是下单词,不要在尾部加-1。尾部词也作为中心词进行训练。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
北街的熊的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容