给大家出个脑筋急转弯:为啥 Airbnb objective 的正样本项前面是负号,原始的 word2vec objective 反而是负样本项前面是负号,是 Airbnb 搞错了吗?
在原始 word2vec embedding 的基础上,针对其业务特点,Airbnb 的工程师希望能够把 booking 的信息引入 embedding。这样直观上可以使 Airbnb 的搜索列表和 similar item 列表中更倾向于推荐之前 booking 成功 session 中的listing。
从这个 motivation 出发,Airbnb 把 click session 分成两类,最终产生 booking 行为的叫 booked session,没有的称做 exploratory session。
因为每个 booked session 只有最后一个 listing 是 booked listing,所以为了把这个 booking 行为引入 objective,不管这个 booked listing 在不在 word2vec 的滑动窗口中,我们都会假设这个 booked listing 与滑动窗口的中心 listing 相关,也就相当于引入了一个 global context 到 objective 中,因此,objective 变成了下面的样子:
其中最后一项的 lb 就是代表着 booked listing,因为 booking 是一个正样本行为,这一项前也是有负号的。
需要注意的是最后一项前是没有 sigma 符号的,前面的 sigma 符号是因为滑动窗口中的中心 listing 与所有滑动窗口中的其他 listing 都相关,最后一项没有 sigma 符号直观理解是因为 booked listing 只有一个,所以 central listing 只与这一个 listing 有关。
但这里 objective 的形式我仍然是有疑问的,因为这个 objective 写成这种形式应该仅代表了一个滑动窗口中的 objective,并不是整体求解的 objective。如果是整体的 objective,理应是下面的形式:
其中 Db 代表了所有 booked session 中所有滑动窗口中 central listing 和 booked listing 的 pair 集合。
不知道大家有没有疑问,我们可以在这块多进行讨论。
下面这一项就比较容易理解了,为了更好的发现同一市场(marketplace)内部 listing 的差异性,Airbnb 加入了另一组 negative sample,就是在 central listing 同一市场的 listing 集合中进行随机抽样,获得一组新的 negative samples。
同理,我们可以用跟之前 negative sample 同样的形式加入到 objective 中。
其中 Dmn 就是新的同一地区的 negative samples 的集合。
至此,lisitng embedding 的 objective 就定义完成了,embedding 的训练过程就是 word2vec negative sampling 模型的标准训练过程,这里不再详述。
除此之外,文章多介绍了一下 cold start 的问题。简言之,如果有 new listing 缺失 embedding vector,就找附近的 3 个同样类型、相似价格的 listing embedding 进行平均得到,不失为一个实用的工程经验。
为了对 embedding 的效果进行检验,Airbnb 还实现了一个 tool,我们简单贴一个相似 embedding listing 的结果。