Embedding技术在推荐场景实践

1,563 阅读5分钟

前言

深度学习是当前热门课题,核心流程包含:数据表征、数据录入与建模、基于结果调优。“万丈高楼平地起”,如果数据根基不稳,那么很难达成理想结果。

本文从这个问题切入,和大家交流如何用Embedding表征对象,以及如何在业务落地。

万物皆可Embedding

Embedding简史

图源

Embedding最早由Hinton在1986年提出,直到2013年word2vec的推出,让一切皆可embedding,并迅速应用在特征表达,画像构建召回排序业务场景

在正式接触Embedding之前,我们先了解一下One-Hot编码表征对象方法:

浅粉红粉红猩红One-Hot编码
100浅粉红:[1,0,0]
010粉红:[0,1,0]
001猩红:[0,0,1]

One-Hot编码优点是简单实现,但是无法表达更多有意义的含义(比如范例中的色差)。每多一种色彩,那么维度就多一层,在成功表征对象的同时,引发了新的多维度问题(维度灾难)

如何解决上述问题呢?有请Embedding主角登场!

Embedding定义

Embedding 字面理解是“嵌入”,实质是一种映射,从语义空间到向量空间的映射,同时尽可能在向量空间保持原样本在语义空间的关系。

通俗理解:用特定的数字表达一个“对象”object,并且保留原样本的语义(比如色差、距离)

同样借助色彩表征例子来理解概念:

颜色RGB格式
浅粉红[255, 182, 193]
粉红[255, 192, 203]
猩红[220, 20, 60]

通过One-Hot和Embedding对比来加深理解:

图源

  • Embedding映射后的数据,相较于One-hot更加稠密
  • One-Hot每一个对象独立标识,那么存在维度灾难
  • One-Hot只能标识一个对象,但是无法像embedding赋予对象更多寓意表达(相似度、距离、色差等)

Embedding原理

文本:“Embedding技术对深度学习推荐系统的重要性”

目标:将里面的每一个分词,都可以用向量数字表达

模型:Embedding有两种建模方式CBOW(给定上下文,预测中心词)和Skip-gram(给定输入词,预测上下文),这里选择Skip-gram作介绍

主要分为三个步骤:

  1. 数据预处理,去掉“对”、“的”等无意义的语气助词
  2. 滑窗获取素材,滑窗定为3,那么每次将邻近3个词做为一组素材(eg:Embedding、技术、深度学习),同时将中心词(eg:技术)作为输入,另外词(Embedding、深度学习)作为输出,以此类推
  3. 数字向量表达对象,有了训练素材集合,再加上借助Item2Vec模型,就可以水到渠成得到每个词的向量化表达了

Embedding技术在业务实践

实践思路

我们将站台用户点击序列拼接得到长文本,输入到item2Vec建模,得到每个物件的Embedding向量值Post_Embedding向量表达。再将用户所看到Post_Embeddings值整合,就得到User_Embedding。

数据分析

基础信息比对:

深度信息比对:

结论:用户实际看物件与Embedding推荐集合,存在深度相关性,大概率会被用户点击!

业务场景

基于用户浏览行为,每天定时为用户推送 “喜好” 笋盘集

image.png 注:图源安居客(侵删),我司业务场景与其类似,仅供参考

实践步骤

1. 将站台所有用户的点击序列串连

用户id点击序列
A1,2,3,4
B2,3,6,7
C3,4,7,6

聚合点击序列得到click_order_str:1,2,3,4,2,3,6,7,3,4,7,6..

2. 点击序列集合导入到item2vec中

model = word2vec.fit(click_order_str)

3. 得到每个物件的embedding

4. 通过物件集求embedding之和,得到人的embedding

result = scores_table.select('userId','emb').rdd.map(lambda x: (x[0], x[1])) .reduceByKey(lambda a, b:[a[i] + b[i] for i in range(len(a))]).collect()

5. 以人的embedding为参数,得到相似度最高前N个物件

syms = model.findSynonyms(row[1], 150)

6. 对相似集业务过滤,推荐给对应用户

业务过滤包含不限于:用户已看、价差较大、物件质量较低等,在推送给用户前剔除

我另外整理了简版demo(包含代码和测试数据)便于大家学习

业务成效

在原有ALS基础上,我们融合了Embedding集合,最终物件点阅数显著提升 !

Embedding进阶

如果我们的业务实际素材不够丰富,或者期望更多的训练素材,大家可使用随机游走得到“模拟”训练集。

基于Graph-Embedding的随机游走:Deep Walk

图源

除了串联已有的点击序列,作为数据建模,还可以利用图结构,扩大我们的数据集,以得到更丰富的embedding向量表达。

我们将被点击到的已知物件ID取出,再结合用户点击序列顺序,进行如图b所示随机游走,得到图c更为丰富的点击序列。同样借助item2vec建模,得到数据集。

结论:用Deep Walk在租售场景应用,得到的结果不理想,体现在用户已看物件和推荐物件落差极大,因此不做更进一步探究!

总结

目前我们已经学习了ALS、Embeding两种推荐算法,并在业务落地应用,这些都是多路召回的不同策略。下一篇,我们会重点探讨精准排序的实现,让推荐场景从推送衍生到搜索排序,发挥更大业务价值!

资料参考

深度学习推荐系统实战 王 喆

推荐系统embedding技术实践总结 腾讯技术工程