摘要
- 挑战:scalability、sparsity和cold start。
- 方法:基于graph embedding,根据用户历史行为,构建item graph,学习item embedding。用item embedding计算商品相似度。使用side information解决sparsity和cold start的问题。
简介
- 两阶段: matching 和 ranking
- matching: 对每个商品产生一个候选集。
- 三个重要部分:构造item graph、用BGE、GES和EGES学习embedding、部署提出的方法(XTensorflow)
- ranking: 根据用户喜好,对候选集商品排序。
- matching: 对每个商品产生一个候选集。
框架
预备
- DeepWalk: 根据word2vec,在graph中随机移动,产生节点序列,再用skip-gram的方法学习embedding。
从用户行为构建item graph
基于会话的用户行为:只考虑在窗口(1小时)中的用户行为序列。
如果行为A和B是连续的,则存在A到B的边,权重为所有用户的出现次数除以总次数。
噪声:
- 点击小于一秒
- 垃圾用户:三个月购买超过1000件或点击超过3500.
- 卖家修改了商品信息的
基本Graph Embedding(BGE)
- 用DeepWalk在构建好的graph上学embedding。随机移动的转移概率和节点出边权重成比例。使用负采样的skip-gram方法。
使用Side Information的Graph Embedding(GES)
- 解决cold start问题。具有类似side information的商品的embedding应该相近。
- side information: 类别、店铺、价格等
- 产生同样维度d的1个商品embedding和n个side information的embedding,最后将这些embedding进行平均。
使用Side Information的增强Graph Embedding(EGES)
- GES中不同side information具有相同权重,不是很合理。
- 将每个embedding平均之前进行加权。权重为学习参数。需要加指数幂防止变成全0。
系统部署运作
- 在线子系统:淘宝个人化平台(TPP)、排名服务平台(RSP)
- 在线子系统工作流程
- 用户登录淘宝APP,TPP提取用户最新信息,从离线子系统查找商品的候选集,喂给RSP,RSP用DNN排序完把结果返回给TPP。
- 用户在淘宝的行为被收集、保存成日志数据供离线子系统使用。
- 离线子系统工作流程
- 根据用户行为构建item graph。实际中,选择最近三个月的日志。对数据进行清洗,产生基于会话的用户行为序列,构建item graph。
- 实际中,将图划分成若干子图,使用ODPS并行处理。使用基于迭代的分布式图框架产生随机移动序列,大约1500亿条。
- XFT使用了100个GPU。所有子系统的执行时间少于六小时。