【第六章:项目实战之推荐/广告系统】1.推荐系统基础与召回算法-(5)召回算法之i2i: word2vec、item2vec、swing算法原理精讲与实战

第六章:项目实战之推荐/广告系统

第一部分:推荐系统基础与召回算法

第五节:召回算法之i2i: word2vec、item2vec、swing算法原理精讲与实战


一、i2i 召回算法概述:从“相似物品”开始理解召回

在推荐系统的召回阶段,我们的目标是——快速、粗粒度地从海量候选库中召回用户可能感兴趣的一批物品
其中最经典的一类召回方式就是 i2i(item-to-item)召回

核心思想:如果用户对某个物品感兴趣,那么推荐与它“相似的物品”。

举例:
用户买了 iPhone 手机 → 推荐手机壳、耳机、手机贴膜、iPad
用户看了《三体》 → 推荐《流浪地球》《球状闪电》《星际穿越》

i2i 的关键问题就是——如何衡量“物品与物品的相似度”
本节我们将系统讲解召回中常见的 三类 i2i 相似度算法

类别算法适合场景优点
统计共现类Swing电商强行为序列数据稳定、解释性强
语义嵌入类Word2Vec / Item2Vec用户行为有序列特征的数据效果好,可扩展深度模型
协同类i2i CF(上一节讲过)基础召回场景简单直接

今天我们重点讲:Word2Vec / Item2Vec + Swing


二、Item2Vec / Word2Vec:把“物品当单词,把行为当句子”

核心思想

Word2Vec 原本用于 NLP,通过“上下文预测中心词”学习词向量。
在推荐系统中,我们将行为序列类比为“句子”:

NLP Word2Vec推荐系统 Item2Vec
句子用户行为序列
单词物品 item
词向量item embedding
共现上下文同一次 session 中 co-click/co-buy

示例:
用户行为序列(session):

[苹果手机, 手机壳, 充电线, 耳机]
[鼠标, 键盘, 显示器]

就变成了 Word2Vec 的训练输入,学到 embedding 后:

  • cos(苹果手机, 手机壳) → 高

  • cos(鼠标, 西瓜) → 低

Item2Vec 的数学本质:
最大化 物品在同一上下文出现的概率

实战代码(可直接跑)
from gensim.models import Word2Vec

# 用户行为序列
sessions = [
    ['iphone', 'case', 'charger', 'airpods'],
    ['mouse', 'keyboard', 'monitor'],
    ['iphone', 'airpods'],
]

# 训练Item2Vec模型
model = Word2Vec(sentences=sessions, vector_size=64, window=3, min_count=1, sg=1)

# 查询与 iphone 最相似的 item
model.wv.most_similar('iphone', topn=5)

输出示例:

[('airpods', 0.93), ('case', 0.89), ('charger', 0.85)]

优点:效果好,embedding可复用到粗排/精排
缺点:只适合序列数据


三、Swing 算法:适用于电商的强力 i2i 召回算法

Swing 是阿里沉淀出的经典 i2i 召回算法,本质属于基于物品共现 + 用户行为的加权相似度算法

核心思想

如果 两个物品被同一批用户共同消费,就可以认为它们相似;
但要加权处理频繁用户和噪声行为,避免常见物品权重异常放大。

Swing 的核心相似度计算公式:

Sim(i,j) = \sum_{u,v \in U} \frac{1}{|I(u) \cap I(v)| + \alpha}

解释:

符号含义
i, j两个物品
u, vuser pair
I(u)用户u消费过的物品集合
α平滑系数防止过拟合
实战代码(简化版)
from collections import defaultdict

user_items = {
    'u1': ['iphone', 'airpods'],
    'u2': ['iphone', 'case'],
    'u3': ['airpods', 'charger'],
}

swing = defaultdict(lambda: defaultdict(float))
alpha = 1.0

users = list(user_items.keys())
for i in range(len(users)):
    for j in range(i+1, len(users)):
        u, v = users[i], users[j]
        common_items = set(user_items[u]) & set(user_items[v])
        if common_items:
            for item_u in user_items[u]:
                for item_v in user_items[v]:
                    swing[item_u][item_v] += 1.0 / (len(common_items) + alpha)

优点:很适合电商/Feed 流真实业务
缺点:计算量大,需要 Spark/Flink


四、三种 i2i 的对比总结(面试与选型重点)

算法最适用场景优点缺点
Item2Vec有序点击/播放/浏览数据捕捉语义,相似度更准需要序列
Swing电商 co-buy/co-view对抗热门物品,效果稳定计算重
i2i CF任意行为日志简单高效容易受热门干扰

业务选型经验

  • 推荐 feed流 → Item2Vec

  • 电商场景 → Swing

  • 工业级多召回融合 → 三者一起 + 多路召回融合


五、本节小结

你应该已经掌握了:
i2i召回的意义与适用场景
Item2Vec/Word2Vec 的核心思想与实现
Swing算法公式、直觉与实战
三者如何在工业推荐系统中选型与融合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值