推荐系统task03-基于向量的召回

84 阅读6分钟

基础-离散特征处理

参考王树森

image.png

one-hot编码

image.png

Embeddng

image.png

image.png

矩阵补充

image.png

image.png

向量au和bi的内积是第u号用户对第i号物品兴趣的预估值 内积代表两个向量的相似程度

image.png

FM召回

在推荐系统中,召回阶段就像超市的 "预筛选区":从海量商品(比如千万级的视频、商品、新闻)中快速挑出几百个用户可能感兴趣的候选,再通过精排模型细致排序。 在比较用户与不同物品之间的匹配分时,只需要比较:(1)物品内部之间的特征交互得分;(2)用户和物品之间的特征交互得分。

二阶特征交叉的高效计算

image.png FM 的预测公式可以简化为:
得分 = 偏置 + 单个特征权重和 + 所有特征对的隐向量内积和

item2vec召回系列

word2vec原理

Word2vec(Mikolov et al. 2013)是一个用来学习dense word vector的算法:

  1. 我们使用大量的文本语料库
  2. 词汇表中的每个单词都由一个词向量dense word vector表示
  3. 遍历文本中的每个位置 t,都有一个中心词 c(center) 和上下文词 o(“outside”) ,如图1中的banking
  4. 在整个语料库上使用数学方法最大化单词o在单词c周围出现了这一事实,从而得到单词表中每一个单词的dense vector
  5. 不断调整词向量dense word vector以达到最好的效果

Word2vec包含两个模型,Skip-gram与CBOW

Skip-gram

核心逻辑:

1. 先理解问题背景:用 “中心词预测周围词”

Skip - gram 是 Word2Vec 里的一种词向量训练方法,核心逻辑是:用 “中心词” 去预测它周围(窗口内)的 “上下文词”  。比如句子 “problems turning into banking crises” ,当窗口大小是 2 时:

  • 选 “into” 当中心词,要预测周围的 “turning”“banking”(窗口内的上下文);
  • 选 “banking” 当中心词,要预测周围的 “turning”“into”“crises”(窗口内的上下文)。

2. 从概率到目标:“让预测更准” 的数学表达

我们希望模型学到的词向量,能让  “中心词 c 出现在语境里,它的上下文 o 也该出现” 这件事的概率尽可能大 。

(1)“所有情况都要满足”→ 连乘概率

如果把语料库所有位置的中心词 + 上下文都算上,整体概率就是 每个中心词 - 上下文对的概率相乘 。用公式表示(简化版):

image.png

(2)“滚动窗口遍历语料”→ 细化成时间步

实际训练时,语料是按顺序处理的(比如逐词滚动窗口),所以用 “时间步 t” 表示处理到第 t 个词,窗口内的上下文用 “j” 偏移量表示。公式细化为:

image.png

3. 优化技巧:把 “连乘” 转 “累加”(加 log)

直接连乘概率数值会非常小(很多小数相乘),计算容易出问题。于是用  “对数变换”  

image.png

  • 除以 T 是做 “平均损失” ,让训练更稳定;
  • 前面加负号,原来 “概率越大越好” ,现在变成 “损失越小越好” ,方便用梯度下降优化。

4. 总结:Skip - gram 的逻辑链

  1. 目标:让 “中心词预测上下文词” 的概率尽可能大 → 用连乘所有 (c, o) 对的概率表达。
  2. 优化:用 log 把连乘转累加,加负号转成损失函数 → 最小化损失,就能学到合理的词向量。
  3. 本质:通过 “中心词 - 上下文” 的共现关系,让语义相关的词,向量在空间里更接近(比如 “banking” 和 “crises” 常一起出现,它们的向量就会更相似 )。

CBOW模型

而CBOW为给定周围的词,预测中心词,即求P(c|o)

image.png

image.png

两者刚好相反

负采样 Negative Sampling

负采样的核心思路:“用少量负例替代全量词汇表”

负采样的逻辑是:不用算全量词汇表的 Softmax,而是随机选几个 “负例词”(和当前上下文无关的词),只和这些负例词对比,近似训练目标 。避免了在整个词汇表上的计算

item2vec召回

  • Item2Vec 的原理很简单,就是基于 Word2Vec 的 Skip-Gram 模型,并且还丢弃了时间、空间信息。

Word2Vec 是利用 单词在文本里的 “共现关系”  (比如 “banking” 和 “crises” 常一起出现,向量就接近 );
Item2Vec 则是利用 物品在用户行为里的 “共现关系”  (比如用户常一起购买 “篮球” 和 “运动袜”,它们的向量就接近 )。

和 Word2Vec 滑动窗口类似,给每个物品当 “中心物品”,窗口内的其他物品就是 “上下文物品”:

假设我们有用户的购买序列:

用户 A:篮球 → 运动袜 → 水杯
用户 B:篮球 → 运动鞋 → 运动背包

  • 以 “篮球” 为中心(窗口大小 2),它的上下文可能是 “运动袜”“运动鞋”(不同用户行为里的共现 );
  • 以 “运动袜” 为中心,上下文可能是 “篮球”“水杯” 。

Item2Vec 的应用场景

训出物品向量后,能做这些事:

  1. 物品相似推荐:找向量最接近的物品 → 比如用户买了 “篮球”,推荐 “运动袜”“运动鞋”(因为它们向量近 )。
  2. 用户偏好分析:把用户买过的物品向量平均,得到 “用户向量” → 向量相似的用户,偏好更接近(协同过滤的向量版 )。
  3. 跨场景迁移:如果物品有不同类型(比如电商里的 “商品”、内容平台的 “文章” ),只要有用户行为序列,都能训出向量,用于跨品类推荐。

YouTubeDNN模型

YouTubeDNN 本质是  “用户塔 + 物品塔” 的双塔结构 ,训练和预测逻辑清晰:

1. 左边:用户塔(User Tower)→ 把用户特征 “压缩” 成向量

输入用户的各种特征,比如:

  • 静态特征:年龄、性别、地域;

  • 行为特征:观看过的视频 ID、点赞 / 收藏记录、观看时长;

  • 实时特征:最近刚看的几个视频。

通过多层神经网络(DNN),把这些高维、异构的特征,“压缩” 成一个固定维度的 用户向量

2. 右边:物品塔(Item Tower)→ 把视频特征 “压缩” 成向量

输入视频的特征,比如:

  • 内容特征:标题、标签、分类(科技 / 美食等 );

  • 统计特征:播放量、点赞数、上传时间。

同样通过 DNN,“压缩” 成 视频向量

3. 匹配阶段:向量内积算相似度

训练时,让 “用户真正观看的视频” 的向量对,内积尽可能大;没观看的视频(负例 ),内积尽可能小。
预测时,用用户向量和所有视频向量算内积,取 TopN 作为推荐候选。