一. 参考链接
https://www.infoq.cn/article/vfelq1ob6tcwpuzycfz3
https://www.zhihu.com/question/302288216
https://zhuanlan.zhihu.com/p/49537461
https://zhuanlan.zhihu.com/p/56128664
https://www.zhihu.com/question/302288216/answer/532712103
二. 细节补充
1. 关于 list embedding
首先定义 session:用户的点击序列就是 session,两个点击间超过 30min 就是一个新的 session,或者预订了房间也算是结束了一个 session。根据此数据集去学习,使用 skip-gram model 最大化如下目标函数:
转换为 softmax 形式为:这里的 li 即可表示为多分类问题里的特征 x(对于 word2vec 特征即为上一个词语),li+j 表示正确的 label,vl′ 表示所有的 label
参考 softmax 的维基解释:样本向量 x 属于第 j 个分类的概率为
负采样后的损失函数表示为:其中 Dp 表示 positive 正样本,Dn 表示 negative 负样本(We generate a set Dp of positive pairs (l,c) of clicked listings l and their contexts c
),所以 vl 表示当前中心词, vc 表示上下文(pos)或随机负采样词语(neg)
2. 关于 User-type & Listing-type Embeddings
1. 首先关于为什么要这么做:
While some cross-market similarities are captured in listing embeddings trained using clicks, a more principal way of learning such cross-market similarities would be to learn from sessions constructed of listings that a particular user booked over time. Specifically, let us assume we are given a set Sb of booking sessions obtained from N users, where each booking session sb = (lb1, . . . ,lbM ) is defined as a sequence of listings booked by user j ordered in time.
解释一下就是:虽然一些跨市场(不同城市)的相似之处可以通过使用点击训练的清单嵌入来获取,但是学习这种跨市场相似之处的一个更主要的方法是从特定用户随时间预订的房间会话中学习。具体地说,我们假设给定从N个用户获得的预订会话的集合Sb,其中每个预订会话Sb = (lb1,…,lbM)定义为用户 j 所预订的房间按时间顺序排列的序列。
几个挑战是:
- 预定不是频繁事件,数据量少,
- 一个用户的预定 session 长度经常为 1,
- 用户的特征会不断变化;
因此作者选择使用 user_type 的维度去训练,而不是 user_id 的维度
2. 如何构造:
因为用户 user_type 作者使用了一些用户画像特征,以及预定相关特征去构造(比如Num Bookings、per Night等),因此在实际召回的时候:
- 选择用户上一次预定的最新特征去构造用户 user_type
- 冷启动问题:选择前 5 行特征构造,这里指的是 table 4 中的(market、language、device、profile、photo)也就是画像特征,其余特征置为 None,来作为 user_type,我的理解是,在训练的时候也会遇到,用户第一次预定时 user_type 的构造,也就是训练集中有(只有画像特征,没有预定特征的样本),也就是 (user_type = 前 5 行 + 全 None 这样的类型),训练集中存在,所以预测的时候就不会有问题了
3. session 构造:
Specifically, we form a set Sb consisting of Nb booking sessions from N users, where each session
sb = (utype1ltype1, . . . ,utypeM ltypeM ) ∈ Sb is defined as a sequence of booking events, i.e. (user_type, listin_type) tuples ordered in time. Note that each session consists of bookings by same
user_id, however for a single user_id their user_types can change over time, similarly to how listinд_types for the same listing can change over time as they receive more bookings
大 Sb 表示所有 session,小 sb 表示单个用户 session(每个用户的所有预定表示为一个 session,一个用户有且只有唯一一个 session)
utype(i) 表示 在 ltype(i) 时的用户 user_type,同理 utype,ltype 都是随时间动态变化的
需要优化的目标函数(与上文类似):对于 center 不同(user_type 或 list_type),优化的目标也不同,例子是优化 user_type,Dbook 表示正样本,就是真实预定的样本,Dneg 表示随机负采样,这里的 vut 或 vlt 表示的是当前的 center item,就是下图中的 uti,vc 就是表示上下文或负采样的词语(item),这里的 vc 既包含 Ut(i-1) 也包含 Lt(i-1),就是上一次(或下一次,上下文 window 窗口内的)预定的 user_type 或 list_type
这个表示 list_type 的目标函数
4. 作者的真实相似例子
5. 一些业务相关优化
- 对于 list embedding,在训练数据中对预定的会话进行了5倍的多采样
- 重训练:隔一天(一周)取 3 个月内的全量 session 重新训练,丢弃最早一天(一周)的数据,也就是滑动窗口的形式,虽然向量会变,但是 cos 相似度的内涵和范围是不变的
- dim = 32维,迭代 10 轮,窗口大小设置为 5