▲ Click Session的定义和条件
这么做的目的无可厚非,一是清洗噪声点和负反馈信号,二是避免非相关序列的产生。
有了由 clicked listings 组成的 sequence,就像我们在之前专栏文章中讲过的 item2vec 方法一样,我们可以把这个 sequence 当作一个“句子”样本,开始 embedding 的过程。
Airbnb不出意外地选择了 word2vec 的 skip-gram model 作为 embedding 方法的框架。通过修改 word2vec 的 objective 使其靠近 Airbnb 的业务目标。
▲ Airbnb的类word2vec embedding方法
我们在之前的专栏文章《万物皆embedding》[2] 中详细介绍了 word2vec 的方法,不清楚的同学还是强烈建议先去弄明白 word2vec 的基本原理,特别是 objective 的形式再继续下面的阅读。
我们假设大家已经具备了基本知识,这里直接列出 word2vec 的 skip-gram model 的 objective 如下:
在采用 negative sampling 的训练方式之后,objective 转换成了如下形式:
其中 σ 函数代表的就是我们经常见到的 sigmoid 函数,D 是正样本集合,D' 是负样本集合。我们再详细看一下上面 word2vec 这个 objective function,其中前面的部分是正样本的形式,后面的部分是负样本的形式(仅仅多了一个负号)。
为什么原始的 objective 可以转换成上面的形式,其实并不是显然的,感兴趣的同学可以参考这篇文章,Negative-Sampling Word-Embedding Method [3]。这里,我们就以 word2vec 的 objective function 为起点,开始下面的内容。
转移到 Airbnb 这个问题上,正样本很自然的取自 click session sliding window 里的两个 listing,负样本则是在确定 central listing 后随机从语料库(这里就是 listing 的集合)中选取一个 listing 作为负样本。
因此,Airbnb 初始的 objective function 几乎与 word2vec 的 objective 一模一样,形式如下: