Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba

作者: jizhe Wang, Pipei Huang(黄丕培). (见 万物皆向量——双十一淘宝首页个性化推荐背后的秘密

大名鼎鼎的 EGES. 淘宝主要面临3个挑战: scalability, sparsity, cold-start. 这篇文章就要解决这3个问题。

文章亮点

  1. 介绍了一种 GE 方法,可以大规模应用,对 GE 以及推荐系统 中常见的 稀疏、冷启 问题都有一定解决

  2. 介绍了 Taobao 线上实际的部署方法,值得一看

1. 概述

GMV: Gross Merchandise Volume (总成交额)

Double-Eleven Day: 双11

Taobao:

是 C2C 平台;淘宝有 10 亿用户, 20 亿 items (commodities). 贡献阿里 75% 的流量;

最主要的问题,让用户快速找到需要的、感兴趣的商品! 推荐是其中的关键技术。 手机淘宝主页基于用户历史行为生成,占据推荐流量的40%; 推荐贡献了最要的营收(revenue)和流量。

Scalability: 在 10 亿用户 20 亿物品前,很多推荐方法不好使;

Sparsity: 用户只与部分 item 有行为。

Cold-Start: 每小时,有百万级别的新 item 被上传到系统;这些 item 没有用户行为;处理这些物料,或者将这些物料推荐给 用户,是一个困难的事情。

使用 matcing -> ranking 二阶段策略; matching 是给用户有行为的 item,生成1个相似 item 候选; ranking 基于用户的偏好,用 DNN 排序候选 commodities. 每阶段面对不同的问题,有不同的技术解决方式。

这篇文章主要关注 matching 阶段!

CF 的方法,主要考虑用户历史中,物品间的 co-occurence. 这里用 item 图上的 random-walk, 可以 items 间的高阶相似; 这被称为 BGE (Base Graph Embedding).

BGE 比 CF 强,但是依然解决不了只有很少行为甚至没有行为的 item;为了解决这个问题,因而提出了利用 side-information 提升 Emb 生成的方式,即 GES (Graph Embedding with Side information)。

又,淘宝的商品有很多种类型的 side information, 例如 类别、品牌、价格等; 经验性地,不同类型的 side information 对 commodities emb 贡献不同,因此有必要在 side information 上考虑加权; 这种模型被称为 EGES (Enhanced Graph Embedding with Side information)

总结,在 matching 阶段,有 3 个重点工作:

  1. 基于用户行为,构建 item graph

  2. 学习 item embedding (EGES, GES 优于 BGE)

  3. 部署 graph embedding system. (在自研的 Xensorflow 上)

2. 方法

2.1 构建 item graph

图是 加权有向 图;

  1. 将用户连续的行为,拆分为 session-based behaviour.

    将连续的用户行为,按 1 个小时为 window 拆分为多个 session.

    Why: a. 如果不拆分,序列太长,计算、存储开销大 b. 用户的兴趣随时间有漂移

    其实这里觉得细节还不是太清楚——

    拆分为多个 session,应该是每个 session 都会用吧?而不是只用最近1个小时的? - 如果是每个 session 都用,那这个相比用整个行为序列,也不能减少多少计算、存储开销? - 但只有那个最后1个 session,想想还是不太可能…… - 应该是用全不的 session; - 切分为 session,相比不切,按照后面的构建边的方式,其实就是少了跨 session 的边; 这种量,可能积累起来还是比较多的吧——毕竟会有很多个 1 个小时切分;

    拆分的起始时间是统一的,还是基于每个用户的行为序列的起始时间?或者是结束时间(当前时间倒推)? - 应该是基于每个行为序列的起始时间?相比倒推,这样能够保证每次计算都是一致的结果; - 其实时间统一,不太现实,也没必要?

  2. 基于 session-based behaviour, 在 图中连有向边。 如 序列是 A D B. 则连边 A -> D; D -> B;

  3. 计算每条边的权重: 就是这条边被连了多少次。

    这样,图上的每条边,其实是全部用户行为的表现。

需要过滤掉一些噪声数据:

  1. stay after click less than 1s

  2. spam user (3 个月内买 1,000 个 item,或者点了超过 3,500 的用户)

  3. item 的 id 没变,但是零售商把其内容大幅改变了

2.2 计算 emb

2.2.1 方法1: BGE

就是利用 DeepWalk 方式来构建 Emb;

具体地:

  1. 随机游走,得到 item 序列 数据集

    随机游走方式:论文里没有详细描述,只说了

    从1个节点到另一个节点的概率:

    \[ \begin{align}\begin{aligned}\begin{split}p(v_j | v_i)) = \begin{cases} \frac {M_{i, j}} {\sum_{j\in N_+{(v_i)}} M_{i,j}}, & v_j \in N_+(v_i) \\ 0, & e_{ij} \notin E \end{cases}\end{split}\\很简单,就是有边的就按归一化权重走;没边的不走;\end{aligned}\end{align} \]

    但是 1. 如何选起始节点 2. 路径长度 3. 总共生成多少个

    没有细说 => 在后面的实验中,有提到。

  2. 得到 item 的序列 数据集后,直接用 word2vec 的 Skip-Gram + negative-sampling (图里面画的是 smapled softmax, 可能差别没有那么大)模式训练即可。

2.2.2 方式2: GES

BGE 没法处理冷启动问题;需要考虑 side information.

编码也非常简单——每个 side-information 和 item id 一样的等同对待,one-hot => 映射为 d 维的向量 => avg pooling, 就得到了 item 的表示向量。

训练方式依然保持不变。

2.2.3 EGES

BGE 只是简单的把各个 side-information 平均起来,一个简单的优化就是加权求和。

权重怎么定义? 有如下候选可以考量:

  1. 是 1 个 side-information 定义1个固定权重? 这样显然表现能力有限

  2. 是每个物品的每个 side-information 都对应 1 个权重? 这样显然很稀疏

  3. 还是用 attention 思想,定义1个 weight 向量,通过与各个 side-information 向量交互得到权重?看起来不错。

然而,论文用的方法2…… 论文里说,申请了一个 A matrix, shape是 \(|V| \times (n +1)\), 其中 n 就是 side-information 个数,+ 1 是因为还有 item-id 的这个域;|V| 就是图里 vertex 个数,也就是 item 的个数了。

不用 attention 的方式来做,我觉得是不太好的…… 说白了,这里没有用矩阵分解(即 attention)来算权重, 而是独立的标量,对泛化可能会有很大的影响 —— 且不说过拟合,就是你后面对冷启动物品,怎么得到side-information的权重呢?

从后文来看,对冷启动物品,是直接取的 average, 不说简单粗暴,至少也是退化到 GES 了,与 EGES 框架就不搭了。

考虑到 2017 年, NLP 里的 attention 早就用烂了,这里没有任何说明,还是值得 argue 的。

\(rightarrow\) 事实上,在文章最后的 Future Work 里,利用 Attention 就是未来的工作……

加权求和,需要对权重先做归一化(和为1)。论文里权重归一化用的是 softmax \(e^{a_{v}^{j}}\) ; 论文里说这是为了保证每个 side-information 权重都大于0(的确!)

> 论文没有点明用的是 softmax 归一化, 但是从公式来看确实是。

3. 实验

用于验证效果的方法:

  1. link prediction task (offline Evaluation)

  2. online experimental result on Mobile Taobao App.

  3. some real-world cases

3.2 在线 A/BTest

方法

基于 Item 的 Embedding, 计算每个 item 的 相似item, 输入到排序模型,作为 Taobao Mobile 主页推荐的结果。

相似结果的好坏,直接影响到推荐结果!

没有说每个 item 要生成多少个相似 item,也没有说这套系统在实验过程中,Emb 是不是根据行为、新上传 item 实时更新的。 我觉得这两点应该挺重要的。

对比方法

Method

Remark

Base

Item-CF 的方法,考虑了物品的(在行为中的)共现,以及用户的voting weight. 这套方法在 GE 应用前在淘宝大规模应用,用了很多人工启发式的规则(主要用来计算 user voting weight?)。

BGE

GES

EGES

各个方法出来结果后,用的是一套 rank .

实验设置

使用 CTR 作为指标。

实验做了 7 天,做实验的时间是 2017 年 11 月。

效果

Base 好于 BGE; EGES > GES > Base;

3.3 Case Study

研究的是 EGES 的向量表现。

3.3.1 向量可视化

把鞋子的 Embedding,用 projector-tensorflow 来可视化(PCA 方式)。

可以看到,不同 category 的鞋子,分属于不同的聚类(说明 category 对应的向量,在加权后的整体向量里还是挺有影响力的);

进一步的,发现 badminton 和 table tennis 聚类很接近,与 football 较远。作者分析说,这表示中国人里, 喜欢 羽毛球 和 乒乓球 的人有较大的重叠;而喜欢足球的人,与喜欢羽毛球、乒乓球这些室内运动的人重叠很少。

> 挺有意思的!

3.3.2 冷启动物品效果

如果构建 冷启动物品 向量?

非常简单,把冷启动物品的各 side-information 对应的 emb, 平均一下,就是冷启动物品的向量表示了。

效果

论文里看了 2 个case的效果:分别选了属于衣服和毛巾的一个商品,查看 Top4 相似的商品。看起来效果还是很好的,如论文截图:

../_images/02_eges_figure_5_sim_items_for_cold_start.jpg

基于该图中找到的相似 item 与冷启动 item 具有的相似属性, shop 这个 SI 的影响比较大。论文说这是因为 item 的 SI 中,shop 的权重 比较高(下一节会分析),对 item 的最终表示影响较大,因而在 冷启动物品 找相似的过程中,shop 的影响也较大 (因为冷启物品的表示是各个 SI 的平均,而其他训练过的 item shop 的 SI 权重高,那自然在向量匹配时, shop 的影响就大了)。

3.3.3 EGES 中各 SI 权重

作者从 8 个 category 中各找了 1 种物品,可视化了 SI 的权重分布,如下图:

../_images/02_eges_figure_6_weight_vis.jpg

作者据此图给出了 3 点观察和分析:

  1. 各个物品的 SI 权重分布都是不同的,这印证了论文的假设: 不同物品的 SI 贡献不同。

  2. item-id 在各个物品中的权重都是最高的,这说明:item-id 对应的 item 本身才是用户行为的关键,而 SI 只是辅助。 —— 不过,离开了这个辅助,也就是 BGE, 效果就没有那么好了。

  3. 所有物品中, SI shop 是除 item-id 外权重最高的,这与用户的行为相一致: 用户倾向于买同店铺的东西,因为方便和便宜(满减优惠?)

    分析还是很好的。

4. 系统部署与操作

整体框图

../_images/02_eges_figure_8_system_overview.jpg
TPP

Taobao Personality Platform.

RSP

Ranking Service Platform.

XTF

基于Porsche blink的分布式Tensorflow训练及在线打分平台 (来自 一天造出10亿个淘宝首页,阿里工程师如何实现?)

从现在的视角来看,比较常规的图:分为 在线、离线 两个部分。在线部分处理实时请求,离线部分计算、更新向量。

在线部分

从用户进入 Taobao Mobile App 开始,TPP 拉取用户最新的信息(应该就是行为历史),从 offline-subsystem 中获取候选 items; 然后交给 RSP 排序(基于 DNN 的),最后返回给用户。

这里需要关注的点,就是拉取相似 item 的计算,从图中来看,应该就是读的缓存(例如 Redis)。 不确定实际中或者现在是否是实时计算的。

离线部分

这里就是体现 EGES 实际上线部署的工作了。

  1. 处理用户行为日志: 一般拉近 3 个月的,然后左 anti-spam 处理,剩余的大概有 600 billion 的 entries.

  2. 构建图和随机游走序列: 因为数据太多,因此实际中,不是放大 1 个图里, 而是利用 Open Data Processing Service (ODPS) 并行处理拆分后的子图。 子图大概 50 million 的 nodes. (即 5 千万的物品)。 每个子图上,基于 ODPS 的 iteration-based distributed graph framework 来生成随机游走序列。

    所有序列生成后,共有大约 150 billion 的序列。

  3. 训练 emb: 基于 XTF,用 100 块 GPU 训练。

整体上,共有 获取日志 \(\rightarrow\) anti-spam处理 \(\rightarrow\) item-graph构建 \(\rightarrow\) 随机游走-序列生成 \(\rightarrow\) 训练embedding \(\rightarrow\) item2item 相似计算 \(\rightarrow\) 生成 I2I map 这些步骤,作者说可以在少于 6 小时的时间内全部完成。

这大概就是算法和强大工程结合的魅力。 有一些小疑惑:

  1. 是否每隔一段时间(例如这里是 6 小时),就全量算一遍?

  2. 冷启 item 生成 emb ,是另一个独立的过程在做? 还是说只在全量更新里完成。

5. 相关工作

5.1 Graph-Embedding

GE 是一种通用的 网络表示(Network Representation) 的方法!

可以分为 3 类工作,

  1. 因子分解方法

    LINE 是其中的代表。

  2. 深度学习的方法

    Deep neural networks for learning graph representations, AAAI 2016

    Transnet: Translation-based network representation learning for social relation extraction. IJCAI 2017

    Structural deep network embedding. KDD 2016

  3. 随机游走的方法

    metapath2vec: Scalable representation learning for heterogeneous networks. KDD 2017

    Node2vec: Scalable feature learning for networks. KDD2016

    Deepwalk: Online learning of social representations. KDD 2014

5.2 Graph-Embedding with side-information

GE 只利用了图的拓扑结构信息,存在 稀疏、冷启动 问题。利用 side-information 是一种今年来尝试提升 GE 表示的方式。

主要的出发点是,如果一些节点有相同的 side-information, 那么他们应该在向量空间中相近。

一些工作:

  1. 多任务学习:联合 embedding 任务和分类任务

    Discriminative deep random walk for network classification. ACL 2016

    Max-margin deepwalk: Discriminative learning of network representation. IJCAI 2016

  2. 使用知识图谱、文本、图片信息

    Representation learning of knowledge graphs with hierarchical types. IJCAI 2016

    Cane: Context-aware network embedding for relation modeling. ACL 2017

    Text-enhanced representation learning for knowledge graph. IJCAI 2016

    Network representation learning with rich text information. IJCAI 2015

    Incorporating knowledge graph embeddings into topic modeling. AAAI 2017

    Heterogeneous network embedding via deep architectures. KDD 2015

5.3 Graph-Embedding for Recommendation System

推荐系统已经成为 GE 最流行的下游任务之一。

一些工作:

Personalized entity recommendation: A heterogeneous information network approach. WSDM 2014

Collaborative knowledge base embedding for recommender systems. KDD 2016

Meta-graph based recommendation fusion over heterogeneous information networks. KDD 2017

Scalable graph embedding for asymmetric proximity. AAAI 2017

6. Future Work

2 个方向:

  1. 利用 attention 机制,更好的加权不同的 SI

  2. 将 文本信息 加入到网络, 更好地利用大量用户的评论。