推荐系统召回之item2vec召回

博客介绍了如何利用word2vec的skip-gram方法,特别是负采样的SGNS,来构建item2vec模型进行item-based协同过滤。通过对items的隐向量表示学习,计算item之间的相似度,以实现推荐系统的召回。文章讨论了子采样技术以平衡高频和低频item的影响,并对比了item2vec与传统SVD方法的相似度结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该召回手段,是基于google提出的word2vec方法,来计算不同items的隐向量,并通过计算不同items间的向量距离,来判断item-to-item间的相似度。
参考paper如下:
https://arxiv.org/vc/arxiv/papers/1603/1603.04259v2.pdf

综述

许多协作过滤(CF)算法是通过分析items间的关系来计算相似度的。最近,自然语言处理方面研究,建议使用神经嵌入算法去学习words的隐向量。众多研究之中,负采样的Skip-Gram算法,即word2vec,表现出了不错的效果。受此激发,作者提出了一种item-based协同过滤的方法,也就是item2vec。该方法计算了在隐向量空间中的items向量。即使当用户信息难以获取的时候,这种方法也能够用来推断出item-to-item间的关系。

word2vec是由神经概率语言模型延展而来,有CBOW(continuous Bag-Of-Words Model)和skip-gram(Continuous skip-gram Model)两种模型方法,对于两种模型,word2vec团队给出了两种框架实现,分别是Hierarchical softmax和Negative Sampling。而本文是基于Negative Sampling的Skip-Gram模型。
下面对这种模型做简单介绍。

基于负采样的skip-gram方法(SGNS)

SGNS是由Mikolov团队提出的一种神经语言嵌入方法。该方法目的在于找到词表示,来捕捉一个句子中的单词和上下文单词的关系。下面对SGNS方法做简短的介绍。
给定一个来自于词典 W = { w i } i = 1 W W = \{w_i\}_{i=1}^W W={ wi}i=1W的词序列 ( w i ) i = 1 K (w_i)_{i=1}^K (wi)i=1K,skip-gram目标在于最大化下面的公式:
1 K ∑ i = 1 K ∑ − c ≤ j ≤ c , i ≠ 0 log ⁡ p ( w j ∣ w i ) \frac 1 K \sum_{i=1}^K \sum_{-c\le j \le c, i \ne0}\log p(w_{j}|w_{i}) K1i=1Kcjc,i=0logp(wjwi)
其中,

### 使用 Word2vec 进行召回或实现推荐系统的教程 #### 1. 背景介绍 Word2vec 是一种用于生成词嵌入的技术,它通过捕捉词语间的共现关系来学习低维稠密向量表示。这些向量能够反映词语的语义相似性,在自然语言处理领域取得了显著成果[^1]。 在推荐系统中,可以借鉴 Word2vec 的思想,将用户的行为序列视为“句子”,其中的商品或项目被视为“单词”。通过对行为序列的学习,可以获得项目的嵌入向量(Embedding)。这种嵌入可用于衡量项目之间的相似度,从而支持基于内容的推荐或协同过滤中的候选集生成(即召回阶段)[^3]。 --- #### 2. 数据准备 为了使用 Word2vec 构建推荐系统,通常需要以下数据形式: - 用户的历史交互记录:例如用户的点击、购买、浏览等操作。 - 将每条历史记录转化为一条“句子”——由一系列项目 ID 组成的序列。 假设我们有如下用户行为日志: | User_ID | Behavior_Sequence | |---------|-------------------| | U1 | V1, V2, V3 | | U2 | V2, V4 | | U3 | V3, V5, V6 | 这里 `V` 表示视频 ID 或其他商品 ID。 --- #### 3. 训练过程 以下是具体训练流程: ##### (1)安装依赖库 ```bash pip install gensim numpy pandas ``` ##### (2)导入必要的模块并定义参数 ```python import pandas as pd from gensim.models import Word2Vec # 定义超参数 vector_size = 100 # 向量维度 window = 5 # 上下文窗口大小 min_count = 1 # 忽略频率低于此值的项 sg = 1 # 使用 skip-gram 模型 (而非 CBOW) workers = 4 # 并行线程数 epochs = 10 # 训练轮次 ``` ##### (3)加载数据并预处理 将用户行为转换为适合 Word2vec 输入的形式(列表的列表结构)。 ```python data = [ ['V1', 'V2', 'V3'], # 用户U1的行为序列 ['V2', 'V4'], # 用户U2的行为序列 ['V3', 'V5', 'V6'] # 用户U3的行为序列 ] # 如果是从文件读取,则可以用 Pandas 处理 df = pd.DataFrame({ 'User_ID': ['U1', 'U2', 'U3'], 'Behavior_Sequence': [['V1', 'V2', 'V3'], ['V2', 'V4'], ['V3', 'V5', 'V6']] }) sequences = df['Behavior_Sequence'].tolist() ``` ##### (4)训练 Word2Vec 模型 ```python model = Word2Vec( sentences=sequences, vector_size=vector_size, window=window, min_count=min_count, sg=sg, workers=workers, epochs=epochs ) # 保存模型以便后续使用 model.save('video_embedding.model') ``` ##### (5)获取项目嵌入 可以通过模型访问任意项目的嵌入向量。 ```python video_id = 'V1' if video_id in model.wv: embedding_vector = model.wv[video_id] print(f'Video {video_id} Embedding:', embedding_vector) else: print(f'{video_id} not found in vocabulary.') ``` --- #### 4. 召回策略 利用 Word2vec 学习得到的项目嵌入,可以设计多种召回机制: ##### (1)基于最近邻的方法 对于目标项目 \( T \),找到与其最接近的 K 个项目作为候选项。 ```python target_video = 'V1' similar_videos = model.wv.most_similar(target_video, topn=5) # 找到前5个最相似的视频 print(similar_videos) ``` ##### (2)基于用户兴趣扩展 如果已知某个用户观看过多个视频,可以根据其观看过的所有视频计算加权平均向量,并以此为基础寻找相似项目。 ```python def get_user_interest(user_history): user_embeddings = [model.wv[item] for item in user_history if item in model.wv] avg_embedding = sum(user_embeddings) / len(user_embeddings) if user_embeddings else None return avg_embedding user_history = ['V1', 'V2'] avg_embedding = get_user_interest(user_history) if avg_embedding is not None: similar_items = model.wv.similar_by_vector(avg_embedding, topn=5) print(similar_items) else: print("No valid history to compute interest.") ``` --- #### 5. 注意事项 尽管 Word2vec 方法直观有效,但在实际应用中有几点需要注意: - **孤岛效应**:当某些项目之间完全没有共同出现的机会时,它们可能被映射到完全不同的子空间中,导致无法合理比较相似性。 - **动态更新问题**:随着新项目的加入,原有的嵌入可能会失效,因此需定期重新训练模型。 - **冷启动问题**:未出现在训练集中或稀疏出现的新项目难以获得可靠的嵌入。 --- ### 总结 通过上述方法,可以成功地将 Word2vec 应用于推荐系统召回阶段。该方案的核心在于将用户行为序列类比为文本语料,并借助神经网络提取潜在特征。最终生成的项目嵌入不仅保留了原始数据的关系特性,还具备高效检索的能力。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值