《深度学习推荐系统》——第四章3

4.6 局部敏感哈希——让 Embedding 插上翅膀的快速搜索⽅法

  Embedding 最重要的⽤法之⼀是作为推荐系统的召回层,解决相似物品的召回问题。推荐系统召回层的主要功能是快速地将待推荐物品的候选集从⼗万、百万量级的规模减⼩到⼏千甚⾄⼏百量级的规模避免将全部候选物品直接输⼈深度学习模型造成的计算资源浪费和预测延迟问题
  Embedding 技术凭借其能够综合多种信息和特征的能⼒相⽐传统的基于规则的召回⽅法更适于解决推荐系统的召回问题。在实际⼯程中,能否应⽤Embedding 的关键就在于能否使⽤ Embedding 技术“ 快速” 处理⼏⼗万甚⾄上百万候选集避免增⼤整个推荐系统的响应延迟

4.6.1“ 快速” Embedding 最近邻搜索

  传统的 Embedding 相似度的计算⽅法是 Embedding 向量间的内积运算,这就意味着为了筛选某个⽤户的候选物品,需要对候选集合中的所有物品进⾏遍历。在 k维的 Embedding 空间中,物品总数为n,那么遍历计算⽤户和物品向量相似度的时间复杂度是 O(kn)。在物品总数n 动辄达到⼏百万量级的推荐系统中,这样的时间复杂度是承受不了的,会导致线上模型服务过程的巨⼤延迟。
  换⼀个角度思考这个问题。由于⽤户和物品的 Embedding 同处于⼀个向量空间内,所以召回与⽤户向量最相似的物品 Embedding 向量的过程其实是⼀个在向量空间内搜索最近邻的过程。如果能够找到⾼维空间快速搜索最近邻点的⽅法,那么相似 Embedding 的快速搜索问题就迎刃⽽解了。
  通过建⽴ kd ( k-dimension )树索引结构进⾏最近邻搜索是常⽤的快速最近邻搜索⽅法,时间复杂度可以降低到 0(log2n)。⼀⽅⾯,kd 树的结构较复杂,⽽且在进⾏最近邻搜索时往往还要进⾏回溯,确保最近邻的结果,导致搜索过程较复杂;另⼀⽅⾯,O(log2n)的时间复杂度并不是完全理想的状态。那么,有没有时间复杂度更低,操作更简便的⽅法呢?下⾯就介绍在推荐系统⼯程实践上主流的快速 Embedding 向量最近邻搜索⽅法 局部敏感哈希( Locality SensitiveHashing, LSH )[12]。

4.6.2 局部敏感哈希的基本原理

  局部敏感哈希的基本思想是让相邻的点落⼈同⼀个 “ 桶” ,这样在进⾏最近邻搜索时,仅需要在⼀个桶内,或相邻的⼏个桶内的元素中进⾏搜索即可。如果保持每个桶中的元素个数在⼀个常数附近,就可以把最近邻搜索的时间复杂度降低到常数级别。那么,如何构建局部敏感哈希中的“ 桶” 呢?下⾯先以基于欧式距离的最近邻搜索为例,解释构建局部敏感哈希 “ 桶” 的过程。
  ⾸先要明确⼀个概念,如果将⾼维空间中的点向低维空间进⾏映射其欧式相对距离还能否保持?如图 4-15 所示,中间的彩⾊点处在⼆维空间中,当把⼆维空间中的点通过不同角度映射到 a、b 、c 三个⼀维空间时,可以看到原本相近的点,在⼀维空间中都保持着相近的距离;⽽原本远离的绿⾊点和红⾊点在⼀维空间 a 中处于相近的位置,却在空间 b中处于远离的位置,因此可以得出⼀个定性的结论:
在这里插入图片描述
  在欧式空间中,将⾼维空间的点映射到低维空间原本相近的点在低维空间中肯定依然相近,但原本远离的点则有⼀定概率变成相近的点。利⽤低维空间可以保留⾼维空间相近距离关系的性质,就可以构造局部敏感哈希 “ 桶”
在这里插入图片描述
  映射操作损失了部分距离信息,如果仅采⽤⼀个哈希函数进⾏分桶,则必然存在相近点误判的情况。有效的解决⽅法是采⽤ m 个哈希函数同时进⾏分桶同时掉进 m 个哈希函数的同⼀个桶的两点,是相似点的概率将⼤⼤增加通过分桶找到相邻点的候选集合后,就可以在有限的候选集合中通过遍历找到⽬标点真正的K近邻

4.6.3 局部敏感哈希多桶策略

  采⽤多个哈希函数进⾏分桶,存在⼀个待解决的问题: 到底是通过“ 与”( And )操作还是“ 或”( Or )操作⽣成最终的候选集。如果通过“ 与” 操作(“ 点 A 和点B 在哈希函数 1 的同⼀桶中” 并且 “ 点 A 和点 B 在哈希函数 2的同⼀桶中” )⽣成候选集,那么候选集中近邻点的准确率将提⾼候选集的规模减⼩使需要遍历计算的量降低,减少了整体的计算开销,但有可能会漏掉⼀些近邻点( ⽐如分桶边界附近的点);如果通过 “ 或” 操作(“ 点 A 和点 B 在哈希函数 1 的同⼀桶中”或者 “ 点 A 和点 B 在哈希函数 2的同⼀桶中” )⽣成候选集,那么候选集中近邻点的召回率提⾼,但候选集的规模变⼤计算开销升⾼到底使⽤⼏个哈希函数,是⽤“ 与” 操作还是“ 或” 操作来⽣成近邻点的候选集,需要在准确率和召回率之间权衡,才能得出结论。
  以上是欧式空间中内积操作的局部敏感哈希使⽤⽅法,如果将余弦相似度作为距离标准,应该采⽤什么⽅式进⾏分桶呢?
  余弦相似度衡量的是两个向量间夹⻆的⼤⼩夹⻆⼩的向量即为 “ 近邻”,因此可以使⽤固定间隔的超平⾯将向量空间分割成不同哈希桶。同样,可以通过选择不同组的超平⾯提⾼局部敏感哈希⽅法的准确率或召回率。当然,距离的定义⽅法远不⽌ “ 欧⽒距离” 和 “ 余弦相似度” 两种,还包括 “ 曼哈顿距离” “ 切⽐雪夫距离” “ 汉明距离” 等,局部敏感哈希的⽅法也随距离定义的不同有所不同。但局部敏感哈希通过分桶⽅式保留部分距离信息,⼤规模降低近邻点候选集的本质思想是通⽤的

4.7 总结—深度学习推荐系统的核⼼操作

  本章介绍了深度学习的核⼼操作—Embedding技术。从最开始的 Word2vec,到应⽤于推荐系统的 Item2vec , 再到融合更多结构信息和补充信息的 Graph Embedding, Embedding 在推荐系统中的应⽤越来越深⼊,应⽤的⽅式也越来越多样化。在局部敏感哈希应⽤于相似 Embedding 搜索后Embedding 技术⽆论在理论⽅⾯,还是在⼯程实践⽅⾯都⽇趋成熟。表 4-1 总结了本章涉及的 Embedding⽅法和相关技术的基本原理与要点。
在这里插入图片描述
  从第 2章、第 3章介绍主流推荐模型的进化过程,到本章重点介绍深度学习推荐模型相关的 Embedding 技术,⾄此完成了本书对推荐模型部分相关知识的介绍
  推荐模型是驱动推荐系统达成推荐效果的引擎,也是所有推荐系统团队投⼈精⼒最多的部分。读者也⼀定能够在之前的学习中感受到推荐模型在学术界和业界的发展进化速度之快。我们要清楚的是,对于⼀个成熟的推荐系统,除了推荐模型,还要考虑召回策略、冷启动、探索与利⽤、模型评估、线上服务等诸多⽅⾯的问题
  在接下来的章节中,我们将从更多⻆度审视推荐系统,介绍推荐系统不同模块的前沿技术。它们与推荐模型相辅相成,共同构成深度学习推荐系统的主体框架,完成整个系统的推荐任务

参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值