1.什么是embedding?
直观含义:
比如[0.3,0.5]2个元素,2维embedding,[0.2,0.3,0.4......,0.5,0.7] 1000个元素,1000维embedding
物理意义:
可解释的embedding 代表兴趣强度
用户embedding.[0.8,0.3] 这个人喜欢 0.8强度的喜剧,喜欢0.3强度的动作;
电影embedding.[0.4,0.6] 这个电影0.4强度是喜剧片,0.6的强度是动作片;
求余旋函数[0.8,0.3],[0.4,0.6] 就能算出这个人喜欢这个电影的程度;
机器学习得到用户/物品的embedding;100维的向量,这时候每个数值没法解释
这些兴趣向量 大量使用,叫做latent factor, 隐因子,隐含兴趣向量;
2.embedding怎么使用?
n个物品的100维embedding 向量
物品1 | [0.2,0.3,0.4,........,0.6,0.2] |
物品2 | [0.1,0.8,0.4,........,0.3,0.2] |
........ |
|
物品n | [0.5,0.6,0.4,........,0.2,0.1] |
n个用户的100维embedding 向量
用户1 | [0.1,0.3,0.4,........,0.1,0.2] |
用户2 | [0.1,0.2,0.4,........,0.5,0.2] |
........ |
|
用户n | [0.5,0.1,0.4,........,0.6,0.1] |
应用1:余选相似度计算物品的embedding的相似度取TOPN
物-物推荐,相关推荐,买了又买,看了又看
应用2: 使用物品的embedding+用户的embedding向量 利用余选相似度计算topN个物品
人-物推荐,猜你喜欢,猜你想看,猜你想买
应用3: 计算用户的embedding 向量的余选相似度,取近似的topN
人人-推荐,猜你认识,推荐好友
3.如何从数据中生成embedding?
3.1.基于内容的word2vec 的embedding;
word2vec 计算
item2vec 算法
3.2 协同过来矩阵分解方法
-
输入准备文件:用户iD, 物品id, 评分,时间;
-
读取到spark;
- 使用spark als 训练
- 得到内容的embedding向量
3.3 DNN深度学习方法
4.使用embedding有什么技术难题?
快速的近邻搜索
100w的电影embedding 搜出top10
几个方案:
1.离线暴力搜索
离线使用for循环挨个计算余选相似度,产品top10的电影(电影id,相似top10的电影列表)存入redis 供在线层使用
2.离线LSH降低准确度的相似度搜索
LSH:局部敏感哈希
原理:embedding分桶,在桶或者桶的附近搜索,极大加快搜索速度
3.在线搜索,满足50MS 以下百万、千万的近邻搜索
常用Facebook 开源的faiss 近邻搜索库,可以流式往里面添加embedding,然后ms级别搜索近邻使用的原理为 降维,聚类,索引树等方法