这篇论文里主要介绍了两个应用于搜索里推荐和排名的任务的嵌入式表示学习算法:
首先定义集合 S S S为N个不同用户的浏览商品记录的集合,集合 S S S里每一个Session s = { l 1 , . . . . l M } s= \{l_{1}, ....l_{M}\} s={l1,....lM} 为来自用户的一次的连续浏览点击不同商品的历史记录的集合,其中 l i l_{i} li为单条产品的浏览记录。
注意这里,当同个用户两个连续的浏览记录的时间间隔超过半小时算成两个不同的浏览Session。
然后将这个集合S里的记录当做一个实体利用Word2Vec的skip-gram算法嵌入到向量空间里,学习得到每个历史记录list的向量表示,从而分析出这些浏览记录的关联和相似性。
模型的细节如图(1-1)所示:
)
和skip-gram算法原理一样我们需要优化损失函数:
L = ∑ s ∈ S ∑ l i ∈ s ( ∑ − m ≥ j ≤ m , i ≠ 0 l o g P ( l i + j ∣ l j ) ) L = \sum_{s\in S} \sum_{l_{i} \in s}(\sum_{-m \geq j \leq m,i \neq 0}logP(l_{i+j}|l_{j})) L=s∈S∑li∈s∑(−m≥j≤m,i̸=0∑logP(li+j∣lj))
参数m
是控制训练时滑动窗口的大小, P ( l i + j ∣ l j ) P(l_{i+j}|l_{j}) P(li+j∣lj)依旧采用softmax函数有:
P ( l i + j ∣ l j ) = e x p ( v l i T v l i + j ′ ) ∑ l = 1 ∣ υ ∣ e x p ( v l i T v l ′ ) P(l_{i+j}|l_{j}) = \frac{exp(v_{l_{i}}^{T}v_{l_{i+j}}^{'})}{\sum_{l=1}^{|\upsilon|}exp(v_{l_{i}}^{T}v_{l}^{'})} P(li+j∣lj)=∑l=1∣υ∣exp(vliTvl′)exp(vliTvli+j′)
∣ υ ∣ |\upsilon| ∣υ∣是list里不同的浏览商品记录的数量, v l i v_{l_{i}} vli是中心词向量,也被称为输入词向量(input vector), v l i + j ′ v_{l_{i+j}}^{'} vli+j′是上下文词向量,也被称为输出词向量(output vector)。 最后训练完得到的 v l i v_{l_{i}} vli和 v l i + j ′ v_{l_{i+j}}^{'} vli+j′两者就是我们要的词向量表示。
同时由于 listing 里浏览商品记录数量庞大,导致原始的skip-gram算法计算量太大。即不可能让中心词向量与所有上下文词汇都完成计算。所以论文参考Word2Vec优化的模型Negative Sampling ,在list里生成正集合$ D_{n} $(里面的元素对在一个 session 窗口mm内连续点击)和负集合 $D_{p} $(里面的元素为随机取的),则需要优化的损失函数变为:
a r g m a x θ ∑ ( l , c ) ϵ D p l o g 1 1 + e − v c v l + ∑ ( l , c ) ϵ D n l o g 1 1 + e v c v l argmax_{\theta}\sum_{(l,c)\epsilon D_{p}} log \frac{1}{1+e^{-v_{c}v_{l}}} + \sum_{(l,c)\epsilon D_{n}} log \frac{1}{1+e^{v_{c}v_{l}}} argmaxθ(l,c)ϵDp∑log1+e−vcvl1+(l,c)ϵDn∑log1+evcvl1
第一个出彩的地方。
作者结合了对Negative Sampling模型和实际业务理解,修改了这个损失函数,将浏览记录里的Booked List(预定的记录)作为一个global text 放在损失函数里。普通的word2vec在训练过程中,词的context是随着窗口滑动而变化,这个global context是不变的。如下面的公式:
a r g m a x θ ∑ ( l , c ) ϵ D p l o g 1 1 + e − v c v l + ∑ ( l , c ) ϵ D n l o g 1 1 + e v c v l + l o g 1 1 + e − v l b v l argmax_{\theta}\sum_{(l,c)\epsilon D_{p}} log \frac{1}{1+e^{-v_{c}v_{l}}} + \sum_{(l,c)\epsilon D_{n}} log \frac{1}{1+e^{v_{c}v_{l}}} + log \frac{1}{1+e^{-v_{l_{b}}v_{l}}} argmaxθ(l,c)ϵDp∑log1+e−vcvl1+(l,c)ϵDn∑log1+evcvl1+log1+e−vlbvl1
注意到公式的最后一项和前面两项的区别,在累加符号的下面,没有变D限制。所以最后一项里的 v l b v_{l_{b}} vlb即是booked list的向量表示,作为全局的上下文信息与中心词进行运算。
同时观察上图(1-1)所示的skip-gram改进的模型,商品浏览记录list里的商品的通过大小为2n+1的滑动窗口从第一个产品开始,每一轮学习过程里中心词(产品)向量 v l v_{l} vl 都被所选定的正集合$ D_{n} 里 的 里的 里的v_{c} 和 全 局 的 和全局的 和全局的-v_{l_{b}}$共同更新。
为什么要加入最终预定(Booked)的list作为global text呢?
我的理解是:word2vec的算法毕竟是非监督的,用户浏览的再多只能代表感兴趣却不能保证最后一定会booked,而Airbnb的业务最终是希望用户Booked,加入一个监督信息的约束,能够将学到的Embedding向量更好的和业务目标靠近。
第二个出彩的地方:
由于用户的在旅行时订购旅店通常在一个单一固定的市场或者地点里,即booking list里也通常都是一个地点或者市场里旅店。所以negative sampling模型里构建的 D p D_{p} Dp里的产品(旅店)很大概率都是了来自同一个市场。另一方面,由于反例 D n D_{n} Dn是随机生成,很大概率生成反例产品和目标产品来自不同的市场。
造成情况就是,在每一轮学习里,给定的中心产品l,具有正上下位关系产品来自同一个市场,而反上下位关系产品来自不同的市场。
作者发现,这种不平衡的正反用例规则会导致我们学到的向量表示会潜在的包含不同市场之间的相关性,而我们想得到的embeding是学习不同产品之间的相关性。为了消除影响,所以作者随机抽取同一市场的商品构建辅助负集合 D m D_{m} Dm。
优化的目标函数又新增了一项:
a r g m a x θ ∑ ( l , c ) ϵ D p l o g 1 1 + e − v c v l + ∑ ( l , c ) ϵ D n l o g 1 1 + e v c v l + l o g 1 1 + e − v l b v l + ∑ ( l , m n ) ϵ D m n l o g 1 1 + e v m n v l argmax_{\theta}\sum_{(l,c)\epsilon D_{p}} log \frac{1}{1+e^{-v_{c}v_{l}}} + \sum_{(l,c)\epsilon D_{n}} log \frac{1}{1+e^{v_{c}v_{l}}} + log \frac{1}{1+e^{-v_{l_{b}}v_{l}}} + \sum_{(l,m_{n})\epsilon D_{m_{n}}} log \frac{1}{1+e^{v_{m_{n}}v_{l}}} argmaxθ(l,c)ϵDp∑log1+e−vcvl1+(l,c)ϵDn∑log1+evcvl1+log1+e−vlbvl1+(l,mn)ϵDmn∑log1+evmnvl1
每一周都会有新的商品信息被住户创建放在Airbnb网站上,在商品刚创建的那一刻,由于还没有用户点击加入到clicked list里,所以还没有被训练成新的向量。论文处理方式是利用用户创建host提供的位置,价格,列表信息在10英里内找相似的三个房子(类型、价格范围)的embedding均值来表示。
在8亿的click sessions上训练32维embeddings,进行K-means聚类,可以发现位置相近的聚集在一起,可知我们最后学习到的向量里体现了地理位置的相似性。如下图所示:
同时,我们利用余弦相似度去计算来自Los Angeles的不同类型和不同价格的商品向量表示,得到如下的结果:
可以很明显看出,学习到的向量表示出了相同类型和价格的listing比不同的更具有相似性的特点。
当然商品价格相似性可以直接从host填写商品的信息直接获取,但是有很多更为抽象的属性无法直接从商品信息里直接获取,比如这里list里商品房屋的建筑风格,给人感觉等。
如下面图所示,我们最后学习得到的向量能够将与它风格最接近的几个房屋:
作者为了高效方便的研究从List学习到的向量表示的特点,内部开发了一个Similarity Exploration Tool,演示视频。
如下图:
(待补充)
知乎如何看待kdd 2018 best paper
Word2vec入门看这篇,非常直白浅显概括原理,没有推导过程
Cs224n第二周笔记里面有对自然语言处理理解和word2vec公式推导
Word2vec公式推导过程很清晰
Word2vec四种模型的详细介绍
论文实现部分笔记