前言
深度学习是当前热门课题,核心流程包含:数据表征、数据录入与建模、基于结果调优。“万丈高楼平地起”,如果数据根基不稳,那么很难达成理想结果。
本文从这个问题切入,和大家交流如何用Embedding表征对象,以及如何在业务落地。
万物皆可Embedding
Embedding简史
Embedding最早由Hinton在1986年提出,直到2013年word2vec的推出,让一切皆可embedding,并迅速应用在特征表达,画像构建召回排序业务场景
在正式接触Embedding之前,我们先了解一下One-Hot编码表征对象方法:
| 浅粉红 | 粉红 | 猩红 | One-Hot编码 |
|---|---|---|---|
| 1 | 0 | 0 | 浅粉红:[1,0,0] |
| 0 | 1 | 0 | 粉红:[0,1,0] |
| 0 | 0 | 1 | 猩红:[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作介绍
主要分为三个步骤:
- 数据预处理,去掉“对”、“的”等无意义的语气助词
- 滑窗获取素材,滑窗定为3,那么每次将邻近3个词做为一组素材(eg:Embedding、技术、深度学习),同时将中心词(eg:技术)作为输入,另外词(Embedding、深度学习)作为输出,以此类推
- 数字向量表达对象,有了训练素材集合,再加上借助Item2Vec模型,就可以水到渠成得到每个词的向量化表达了
Embedding技术在业务实践
实践思路
我们将站台用户点击序列拼接得到长文本,输入到item2Vec建模,得到每个物件的Embedding向量值Post_Embedding向量表达。再将用户所看到Post_Embeddings值整合,就得到User_Embedding。
数据分析
基础信息比对:
深度信息比对:
结论:用户实际看物件与Embedding推荐集合,存在深度相关性,大概率会被用户点击!
业务场景
基于用户浏览行为,每天定时为用户推送 “喜好” 笋盘集
注:图源安居客(侵删),我司业务场景与其类似,仅供参考
实践步骤
1. 将站台所有用户的点击序列串连
| 用户id | 点击序列 |
|---|---|
| A | 1,2,3,4 |
| B | 2,3,6,7 |
| C | 3,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技术实践总结 腾讯技术工程