前言

如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。


整体概述

在推荐系统中,往往有千百万量级的候选物品,对其进行一一排序是不现实的,因此通常的做法是「先筛选再排序」:

  • 筛选部分即召回层,其依据用户信息,从千百万量级的候选物品中筛选出几百个物品的同时,需要保证召回率;
  • 排序部分即排序层,即对筛选出的物品进行排序,该过程需保证准确率(即用户点击率)。

召回层通常有如下几类方法:

  1. 通过逻辑筛选 ,例如依据用户兴趣标签、注册信息筛选,以及筛选出最近流行、朋友喜欢,以及各类热门、冷门视频
  2. 协同过滤 + 快速近邻搜索算法
  3. Embedding + 快速近邻搜索算法

其中「协同过滤」即通过拥有共同爱好的用户,或者被同样用户喜欢的物品协同过滤出候选物品;「Embedding」即通过各种 Embedding 手段(例如 word2vec, graph embedding, bert…)得到的向量。另外,常见的「快速近邻搜索算法」有 KDTree, min-hash 以及 LSH。


Min-hash

LSH (Locality Sensitive Hashing) 即局部敏感哈希,利用 And then Or 操作使查准的概率增大,误判的概率降低。

Min-hash:属于 LSH 的一种,当两个向量能求 Jaccard 相似度时可用此方法。Jaccard 相似度 = 交集 / 并集。

求解步骤如下:

  • 每次置换即将矩阵按行随机打乱

原理:

  • 每次置换,每个用户得到的签名哈希值相同的概率是他们二者之间的 Jaccard 相似度,记为 深度学习中计算召回率代码 召回层算法_快速近邻搜索算法; [简单证明]
  • 经历 深度学习中计算召回率代码 召回层算法_深度学习中计算召回率代码_02 次置换,得到 深度学习中计算召回率代码 召回层算法_深度学习中计算召回率代码_03 矩阵(深度学习中计算召回率代码 召回层算法_召回层算法_04 为用户数量),将其平均分为 深度学习中计算召回率代码 召回层算法_推荐系统_05 个 band,每个 band 有 深度学习中计算召回率代码 召回层算法_推荐系统_06
  • 在一个 band 中,u1 和 u2 签名哈希值完全相同的概率为 深度学习中计算召回率代码 召回层算法_推荐系统_07,在同一个 band 中不相同的概率为 深度学习中计算召回率代码 召回层算法_推荐系统_08
  • 因此在所有 band 中均不相同的概率为 深度学习中计算召回率代码 召回层算法_深度学习中计算召回率代码_09 [判断为不相似],在所有 band 中至少有一个相同的概率为 深度学习中计算召回率代码 召回层算法_深度学习中计算召回率代码_10
  • 这种方法被称为 AND then OR,在 AND 部分,深度学习中计算召回率代码 召回层算法_推荐系统_06 越大,则两个用户签名哈希相同的概率则越小 [准确率越高];在 OR 部分,深度学习中计算召回率代码 召回层算法_推荐系统_05 越大,则两个用户至少有一个哈希相同的概率则会越大 [召回率越高];

置换一次,生成对应一行签名值的算法:

  • 相当于每次随机一个行号,将其置换到第一行,并赋值为 1 但未被赋值的位置

Locality Sensitive Hashing

wiki: In computer science, locality-sensitive hashing (LSH) is an algorithmic technique that hashes similar input items into the same “buckets” with high probability(The number of buckets are much smaller than the universe of possible input items.) Since similar items end up in the same buckets, this technique can be used for data clustering and nearest neighbor search. It differs from conventional hashing techniques in that hash collisions are maximized, not minimized. Alternatively, the technique can be seen as a way to reduce the dimensionality of high-dimensional data; high-dimensional input items can be reduced to low-dimensional versions while preserving relative distances between items.

整体直觉:

  • 在高维空间中原本距离相近的点投影到低维空间时,仍然会保持相近;(可用 or 手段放大概率,提升召回率)
  • 在高维空间中原本距离较远的点投影到低维空间时,大概率距离仍然会远,但有小概率距离会变近。(可用 and 手段减少误判概率,提升准确率)

深度学习中计算召回率代码 召回层算法_召回层算法_13

上述投影操作可用线性变换代替:

  • 假设被投影向量 深度学习中计算召回率代码 召回层算法_推荐系统_14,长度为 深度学习中计算召回率代码 召回层算法_推荐系统_15,则可计算 深度学习中计算召回率代码 召回层算法_推荐系统_14 与另一个随机生成的长度为 深度学习中计算召回率代码 召回层算法_推荐系统_15 的向量 深度学习中计算召回率代码 召回层算法_深度学习中计算召回率代码_18 的内积,该内积可被认为是 深度学习中计算召回率代码 召回层算法_推荐系统_14 在一维空间的投影,记做 深度学习中计算召回率代码 召回层算法_LSH_20
  • 深度学习中计算召回率代码 召回层算法_召回层算法_21 设为等分数量,通常还会生成一个在 深度学习中计算召回率代码 召回层算法_召回层算法_22深度学习中计算召回率代码 召回层算法_召回层算法_21 间的随机变量 深度学习中计算召回率代码 召回层算法_推荐系统_05,用来避免边界固化,即投影操作的公式为:
    深度学习中计算召回率代码 召回层算法_召回层算法_25

LSH 用途广泛 (Theory of LSH),对于下述五类距离均有相应变体:

  • 欧式距离
  • Jaccard 系数
  • 余弦相似度
  • 编辑距离
  • Hamming 距离

参考资料