基础-离散特征处理
参考王树森
one-hot编码
Embeddng
矩阵补充
向量au和bi的内积是第u号用户对第i号物品兴趣的预估值 内积代表两个向量的相似程度
FM召回
在推荐系统中,召回阶段就像超市的 "预筛选区":从海量商品(比如千万级的视频、商品、新闻)中快速挑出几百个用户可能感兴趣的候选,再通过精排模型细致排序。 在比较用户与不同物品之间的匹配分时,只需要比较:(1)物品内部之间的特征交互得分;(2)用户和物品之间的特征交互得分。
二阶特征交叉的高效计算
FM 的预测公式可以简化为:
得分 = 偏置 + 单个特征权重和 + 所有特征对的隐向量内积和
item2vec召回系列
word2vec原理
Word2vec(Mikolov et al. 2013)是一个用来学习dense word vector的算法:
- 我们使用大量的文本语料库
- 词汇表中的每个单词都由一个词向量dense word vector表示
- 遍历文本中的每个位置 t,都有一个中心词 c(center) 和上下文词 o(“outside”) ,如图1中的banking
- 在整个语料库上使用数学方法最大化单词o在单词c周围出现了这一事实,从而得到单词表中每一个单词的dense vector
- 不断调整词向量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)“所有情况都要满足”→ 连乘概率
如果把语料库所有位置的中心词 + 上下文都算上,整体概率就是 每个中心词 - 上下文对的概率相乘 。用公式表示(简化版):
(2)“滚动窗口遍历语料”→ 细化成时间步
实际训练时,语料是按顺序处理的(比如逐词滚动窗口),所以用 “时间步 t” 表示处理到第 t 个词,窗口内的上下文用 “j” 偏移量表示。公式细化为:
3. 优化技巧:把 “连乘” 转 “累加”(加 log)
直接连乘概率数值会非常小(很多小数相乘),计算容易出问题。于是用 “对数变换”
- 除以 T 是做 “平均损失” ,让训练更稳定;
- 前面加负号,原来 “概率越大越好” ,现在变成 “损失越小越好” ,方便用梯度下降优化。
4. 总结:Skip - gram 的逻辑链
- 目标:让 “中心词预测上下文词” 的概率尽可能大 → 用连乘所有 (c, o) 对的概率表达。
- 优化:用 log 把连乘转累加,加负号转成损失函数 → 最小化损失,就能学到合理的词向量。
- 本质:通过 “中心词 - 上下文” 的共现关系,让语义相关的词,向量在空间里更接近(比如 “banking” 和 “crises” 常一起出现,它们的向量就会更相似 )。
CBOW模型
而CBOW为给定周围的词,预测中心词,即求P(c|o)
两者刚好相反
负采样 Negative Sampling
负采样的核心思路:“用少量负例替代全量词汇表”
负采样的逻辑是:不用算全量词汇表的 Softmax,而是随机选几个 “负例词”(和当前上下文无关的词),只和这些负例词对比,近似训练目标 。避免了在整个词汇表上的计算
item2vec召回
- Item2Vec 的原理很简单,就是基于 Word2Vec 的 Skip-Gram 模型,并且还丢弃了时间、空间信息。
Word2Vec 是利用 单词在文本里的 “共现关系” (比如 “banking” 和 “crises” 常一起出现,向量就接近 );
Item2Vec 则是利用 物品在用户行为里的 “共现关系” (比如用户常一起购买 “篮球” 和 “运动袜”,它们的向量就接近 )。
和 Word2Vec 滑动窗口类似,给每个物品当 “中心物品”,窗口内的其他物品就是 “上下文物品”:
假设我们有用户的购买序列:
用户 A:篮球 → 运动袜 → 水杯
用户 B:篮球 → 运动鞋 → 运动背包
- 以 “篮球” 为中心(窗口大小 2),它的上下文可能是 “运动袜”“运动鞋”(不同用户行为里的共现 );
- 以 “运动袜” 为中心,上下文可能是 “篮球”“水杯” 。
Item2Vec 的应用场景
训出物品向量后,能做这些事:
- 物品相似推荐:找向量最接近的物品 → 比如用户买了 “篮球”,推荐 “运动袜”“运动鞋”(因为它们向量近 )。
- 用户偏好分析:把用户买过的物品向量平均,得到 “用户向量” → 向量相似的用户,偏好更接近(协同过滤的向量版 )。
- 跨场景迁移:如果物品有不同类型(比如电商里的 “商品”、内容平台的 “文章” ),只要有用户行为序列,都能训出向量,用于跨品类推荐。
YouTubeDNN模型
YouTubeDNN 本质是 “用户塔 + 物品塔” 的双塔结构 ,训练和预测逻辑清晰:
1. 左边:用户塔(User Tower)→ 把用户特征 “压缩” 成向量
输入用户的各种特征,比如:
-
静态特征:年龄、性别、地域;
-
行为特征:观看过的视频 ID、点赞 / 收藏记录、观看时长;
-
实时特征:最近刚看的几个视频。
通过多层神经网络(DNN),把这些高维、异构的特征,“压缩” 成一个固定维度的 用户向量
2. 右边:物品塔(Item Tower)→ 把视频特征 “压缩” 成向量
输入视频的特征,比如:
-
内容特征:标题、标签、分类(科技 / 美食等 );
-
统计特征:播放量、点赞数、上传时间。
同样通过 DNN,“压缩” 成 视频向量。
3. 匹配阶段:向量内积算相似度
训练时,让 “用户真正观看的视频” 的向量对,内积尽可能大;没观看的视频(负例 ),内积尽可能小。
预测时,用用户向量和所有视频向量算内积,取 TopN 作为推荐候选。