【推荐算法】局部敏感哈希——让embedding插上翅膀的快速搜索方法

Embedding 最重要的用法之一是作为推荐系统的召回层,解决相似物品的召回问题。在实际工程中, 能否应用 Embedding 的关键就在于能否使用 Embedding 技术 “快速” 处理几十万甚至上百万候选集, 避免增大整个推荐系统的响应延迟。

传统的 Embedding 相似度的计算方法是 Embedding 向量间的内积运算,这就意味着为了筛选某个用户的候选物品,需要对候选集合中的所有物品进行遍历。在 k 维的 Embedding 空间中,物品总数为 n ,那么遍历计算用户和物品向量相似度的时间复杂度是 O(kn)。在物品总数 n动辄达到几百万量级的推荐系统中,这样的时间复杂度是承受不了的,会导致线上模型服务过程的巨大延迟。

换一个角度思考这个问题。由于用户和物品的 Embedding 同处于一个向量空间内,所以召回与用户向量最相似的物品 Embedding 向量的过程其实是一个在向量空间内搜索最近邻的过程。如果能够找到高维空间快速搜索最近邻点的方法,那么相似 Embedding 的快速搜索问题就迎刃而解了。

一、局部敏感哈希的基本原理

局部敏感哈希的基本思想是让相邻的点落入同一个 “桶”,这样在进行最近邻搜索时,仅需要在一个桶内,或相邻的几个桶内的元素中进行搜索即可。如果保持每个桶中的元素个数在一个常数附近,就可以把最近邻搜索的时间复杂度降低到常数级别。

在欧式空间中,将高维空间的点映射到低维空间,原本相近的点在低维空间中肯定依然相近,但原本远离的点则有一定概率变成相近的点:
请添加图片描述
请添加图片描述
映射操作损失了部分距离信息,如果仅采用一个哈希函数进行分桶,则必然存在相近点误判的情况。有效的解决方法是采用 m 个哈希函数同时进行分桶。同时掉进 m 个哈希函数的同一个桶的两点,是相似点的概率将大大增加。通过分桶找到相邻点的候选集合后,就可以在有限的候选集合中通过遍历找到目标点真正的 K 近邻。

参考资料

  1. 深度学习推荐系统 王喆编著 中国工信出版集团
  2. 推荐系统 (四): Embedding 技术在推荐系统中的应用
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值