论文阅读:Airbnb-Real-time Personalization using Embeddings for Search Real-time Personalization

提纲

  1. 解决的问题
  2. 方法
  3. 实验
  4. 疑问与启发

1.解决的问题

本文要解决两个问题:

  • 针对短租市场,大部分的用户很少会多次预定同一类型的房间;房间分时段的,只能在某段时间内被某一个用户预订;大部分用户预订酒店是低频事件,更不用说是在同一个地方预订酒店。
  • 实时个性化

2.方法

作者考虑到用户在预订酒店之前有大量的搜索、点击、联系商家等行为,可以利用这些信息来构建用户预订的房间与候选商品之间的相似关系;还可以根据这些信息捕捉用户的兴趣。本文中,作者对商品做了两个层面的embedding:一是每个商品;二是商品类型以及用户类型。

本文提出的方法基于skip-gram的word2vec,原理并不复杂。下面将详细介绍作者的改进之处。

首先对下面可能会出现的变量做一下说明:v_lv'_l表示商品l的输入输出向量;m表示上下文窗口大小,c表示上下文;V是所有商品的字典;D_p表示正样本集合,D_n表示负样本集合。

2.1 listing embedding

作者主要改进的地方在于数据集的处理上,有两点global text 和negative samples:

global text
skip-gram model for listing embeddings

如上图所示,作者根据用户在30s内点击商品的序列当做一个句子,但是相对原模型,作者做了一点改动:如果在这个点击序列中包含用户最后预订的商品,那么这个商品的向量会当做global context。其实就是,在每次窗口滑动的时候,l_b都会被当做上下文中之一;在我看来这里有点像doc2vec中doc向量的作用。具体可见公式:

{\arg\max}_{\theta}\sum_{(l,c) \in D_p} {log \frac{1}{1+e^{-v'_cv_l}}} + \sum_{(l,c) \in D_n}{log \frac{1}{1+e^{v'_cv_l}}} + log\frac{1}{1+e^{-v'_{l_b}v_l}}
当然,如果序列中没有预订的商品,那上式中没有最后一项。

negative samples

在原word2vec模型中,负样本通过对采样得到的;但是在租房平台中,这样很可能负样本集合都是与预订商品处于不同的地区,这样会导致在同一地区中商品的相似性会有偏差。

We found that this imbalance leads
to learning sub-optimal within-market similarities.

因此,作者额外从同一地区的商品中采样一些负样本,因此上式变为:
{\arg\max}_{\theta}\sum_{(l,c) \in D_p} {log \frac{1}{1+e^{-v'_cv_l}}} + \sum_{(l,c) \in D_n}{log \frac{1}{1+e^{v'_cv_l}}} + log\frac{1}{1+e^{-v'_{l_b}v_l}} + \sum_{(l,m_n) \in D_{m_n}}{log \frac{1}{1+e^{v'_{m_n}v_l}}}

冷启动

新商品的初始化用同一地区,同一价格区间中3个商品的平均向量。

2.2 user_type & listing_type embeddings

2.1部分用点击行为代表短期兴趣,更侧重于同一地区商品之间的相似关系。但是不同地区之间也能反映用户的一些喜。比如,用户A在深圳和上海预订过酒店,现在需要在北京预订酒店(假设用户没在北京预订过),但是在深圳和上海预订过的酒店也可以反映用户的某些偏好了。因此论文中通过用户的booking行为代表长期兴趣,构建Embedding向量。但是booking序列单个用户的行为比较稀疏,无法直接训练,一般会先对用户做聚类再训练。因此,作者通过对商品类别和用户类别embedding,希望能描述跨区域的相似关系。

在该部分,作者只用了用户预订的序列,根据时间顺序把用户预订过的所有商品当做一个序列。既然对商品和用户的类别进行embedding,那么首先需要标记类别。作者根据商品的属性以不同的值或者范围来划分多个类别,具体可见论文的Table 3和Table 4;可以看到user_type其实也是基于商品属性划分的。

个人的一点想法:
这里分类别其实可以看作是一种聚类或者分桶,因为booking的用户数据太少,因此需要先聚类然后再embedding。其实论文的Table 3和Table 4就是Airbnb根据他们的业务场景设计的一种分桶方式。这种方式对房源embedding来说也值得借鉴。

另外,为了让商品类别和用户类别在同一个空间维度,作者放在同一个训练集中一起训练。如下图(暂时可忽略rejection,booking)

listing type abd yser type skip-gram model

然后公式变成:

当central item为用户时,
{\arg\max}_{\theta}\sum_{(u_t,c) \in D_{book}} {log \frac{1}{1+e^{-v'_cv_{u_t}}}} + \sum_{(u_t,c) \in D_neg}{log \frac{1}{1+e^{v'_cv_{u_t}}}}

当central item为商品时,
{\arg\max}_{\theta}\sum_{(l_t,c) \in D_{book}} {log \frac{1}{1+e^{-v'_cv_{l_t}}}} + \sum_{(l_t,c) \in D_neg}{log \frac{1}{1+e^{v'_cv_{l_t}}}}

这里有点不理解,我本来觉得将listing_type和user_type放在一起,那么应该是混着使用,相互作为对方的上下文,但是看目标函数不是这样的。如果按目标函数,listing_type和user_type还能训练成同一个空间吗?

3.实验

3.1 数据集

训练listing embedding的数据集
  • 大小为80亿的点击序列,来自于所有登录用户几个月的日志
  • 去掉了用户停留时间小于30s的点击以及长度小于2的点击序列
  • 在训练集中将booked sessions上采样5倍
  • d=32, m=5, iter=10
3.2 离线评估
地理信息

通过对房屋向量进行聚类,确认来自同一地区的房源被聚在同一个簇中。

listing_type和房价范围

相同类型的listing以及相同房价范围的listing的cosine相似度更高

房屋风格和建筑

越相似的listing有着更相似的房屋或者建筑风格

rank position of booked listing

通过计算clicked listing和candidate listings之间的cosine相似度对candidate listings进行排序,然后看booked listing的位置。booked listing的位置越往前,说明效果越好。

这里有点不明白,candidate listings包含用户最终预订的listing, 原文中"the most recent clicked listing"指的是最近的那一个listing吗?这个有时间范围吗?比如在预订前几天的点击列表?

4.疑问与启发

4.1 疑问

  1. 不同地区可能某些属性的范围不同,比如价格,因此感觉文中用硬区间来表示不同的类别有些不合理。
  2. 如果wide&deep之类的模型也能学习房源向量,那用word2vec模型的好处是什么呢?只是因为可以提前算出向量吗?
  3. listing_type和user_type训练时,是分别用不同的计算方式,但loss值一起计算吗?

4.2 启发

其实在此之前我也想过用word2vec来生成房源向量,但是没有想过global text,以及listing_type embedding。

另外,相比Airbnb的短租市场,贝壳找房的场景不同之处有:

  • 购房周期比预定房间周期要长
  • 在短时间内,房源不会被出售多次
  • 用户几乎没有booked session,不过或许可能用其他代替,比如带看、联系经纪人等行为。

一点点题外话:感觉word2vec真的很好用,之前用word2vec根据用户的点击网页序列做过网页的相似度,效果也很不错。而且,在graph方面,也有node2vec、link2vec,这些都是应用word2vec模型。

相关资料

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

2.不一样的论文解读

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容