【KDD2018-Airbnb】Real-time Personalization using Embeddings for Search Ranking at Airbnb

摘要 & 导言

METHODOLOGY

Listing Embeddings(List指一个项目?还是列表?)

$$
\mathbf{L} = \sum_{s\in S}\sum_{l_i \in s} \sum_{-m \le j \le m, i \ne 0} P(l_{i+j} | l_i)
$$

利用负采样近似, 正例集合 $((l, c) \in D_p)$ l,c在同一个上下文; 负例集合 $( (l, c) \in D_n )$

$$
\arg\max_{\theta} \sum_{(l, c) \in D_p} \log \frac{1}{1 + e^{- v' _ c v_l}} + \sum_{(l, c) \in D_n} \log \frac{1}{1 + e^{v' _ c v_l}}
$$

$$
\arg\max_{\theta} \sum_{(l, c) \in D_p} \log \frac{1}{1 + e^{- v' _ c v_l}} + \sum_{(l, c) \in D_n} \log \frac{1}{1 + e^{v' _ c v_l}} + \sum_{l} \log \frac{1}{1 + e^{- v' _ b v_l}}
$$

$( v_b )$ 是订购的listing

相当于增加一些正例!

$$
\sum_{(l, m_n) \in D_{m_n}} \log \frac{1}{1 + e^{v' _ {m_n} v_l}}
$$

$( D_{ m_n })$ 是采样自l同一个市场中的负例对。

User-type & Listing-type Embeddings

用用户的订购的序列作为session, 来学习跨market的相似性。这种跨market的相似性可以用来解决用户来到一个新的market的时候给他推荐的问题。
但是这种方法由于数据稀疏会带来一下几个问题:

  1. 大多数人的历史下单次数很少,甚至只有1个,没法学
  2. listing的长尾特性,导致长尾的listing的向量学得不好
  3. 由于时间跨度长,原来假设的相邻两个listing是相似的假设并成立,因为用户的偏好、价格等因素以及发生了改变

用 User-type & Listing-type 而不是ID

上下文是 (User-type, Listing-type) 对, 购买的对是正例, 没有购买的对是负例, 被拒绝的对也是负例。

session是同一个用户的购买序列 user-type, listing-type 序列, s =(ut1, lt1, ..., utM, ltM)
这样可以复用 word2vec 代码, 并在同一个空间投影, 让向量距离具有可比性!

试验

离线评估结果图

embedding 特征
emb-click-sim

https://medium.com/airbnb-engineering/listing-embeddings-for-similar-listing-recommendations-and-real-time-personalization-in-search-601172f7603e

问题

  1. wor2vec 如何嵌入到MapReduce中?怎么实现?
  2. NDCU ?