推荐系统学习笔记(五)-----双塔模型

目录

双塔模型

训练

pointwise训练

pairwise训练

listwise训练


双塔模型

矩阵补充模型只用到了用户id和物品id,其余属性没有用上

 用户属性也可以这样处理

用户塔和物品塔各输出一个向量,两个向量的余弦相似度作为兴趣的预估值

训练

第一种:pointwise,独立看待每个正负样本,做二分类

第二种:pairwise,每次取一个正样本一个负样本

第三种:listwise,每次取一个正样本多个负样本,多分类

正负样本的选择:

正样本:用户点击

负样本:未被召回的,召回但是被粗排精排淘汰的,曝光但是未点击的(具体怎么选择后面会讲)

pointwise训练

把召回看作二元分类任务,鼓励正样本相似度接近1,负样本相似度接近-1

控制正负样本比例1:2,1:3(互联网大厂的经验之言)

pairwise训练

损失:鼓励cos(a,b+)大于cos(a,b-)

listwise训练

最小化交叉熵

错误设计:下面的模型不用于召回,前期融合(进入神经网络前就融合了),不是双塔模型,可以用作精排和粗排,计算量不会太大,召回只能用后期融合(神经网络之后)的模型

正负样本的选取

选对正负样本的效果要大于模型结构

正样本:曝光且点击的用户-物品二元祖

问题:二八法则,过多热门物品,热门更热

解决:对冷门做过采样,一个样本出现多次;对热门降采样,一定概率抛弃热门,概率与点击次数正相关

召回:从上亿笔记取回几千篇

粗排,精排:打分

重排:多样性采样,规则调整

负样本:

链路上每一步被淘汰的物品

简单负样本

未被召回的物品 约等于 全体物品,对全体物品随机抽样即可

如何抽样:

❌均匀:对冷门不公平,少部分占据大多点击,负样本大部分都是冷门

✔️随机非均匀:与热门程度正相关(点击次数),约热门越容易被当成负样本

 0.75是经验值

batch内负样本

问题:

物品出现在batch内出现的概率正比于它的热门程度,如果batch内负采样,正比于1次方,但本应该是0.75次方,热门成为负样本的概率过大,模型对它打压过大,需要修正偏差。

线上召回不用调整,依旧是余弦相似度

困难负样本

被粗排精排淘汰的样本,因为这些样本已经比较符合用户兴趣--容易分错

双塔--二元分类任务

常见的错误❌

曝光但未点击的作为负样本,效果会变差,排序可以用,召回不可以用

召回目的:快速找到可能感兴趣的物品

召回:区分不感兴趣和比较感兴趣,排序:区分比较感兴趣和非常感兴趣

总结:

线上召回和更新

训练好之后就可以部署了

离线计算物品特征向量b,用户向量a是线上计算的,作为query,检索,k近邻召回笔记

为什么事先存b,而线上计算a?

每次召回只用一次用户向量a,计算量不大,但是几亿个物品向量计算量太大,负担大。

离线计算a,不利于推荐效果,用户兴趣点会变化,但物品特征短期稳定,不变化 

模型更新

全量更新:每天凌晨用昨天的数据训练,在前一天的参数基础上训练

 增量更新:

online更新,用户兴趣随时会变化,产生新的兴趣点

问题:能不能只做增量不做全量?

全量效果更好

 

### 小红书推荐算法模型的实现与机制 小红书作为一款以社区分享为核心的产品,其推荐算法主要依赖于用户的行为数据以及内容标签体系来构建个性化推荐系统。以下是关于小红书推荐算法模型的核心实现及其工作机制: #### 一、推荐系统的整体架构 小红书的推荐系统通常分为多个阶段,包括召回、排序和重排三个核心部分[^1]。 - **召回阶段**:通过多种策略筛选出可能感兴趣的候选集。常见的召回方法包括基于协同过滤(ItemCF 和 UserCF)、矩阵分解、双塔模型等技术[^1]。 - **排序阶段**:利用机器学习模型对召回的结果进行打分排序,常用的方法包括广义线性模型(GLM)、GBDT+LR 或深度学习模型如 DNN、Wide&Deep 等[^1]。 - **重排阶段**:考虑多样性、新鲜度等因素调整最终展示顺序。 #### 二、具体算法和技术细节 ##### 1. 协同过滤 (Collaborative Filtering) - **ItemCF**:基于物品的协同过滤,计算不同笔记之间的相似度,并根据用户的点击历史推荐类似的笔记[^1]。 - **UserCF**:基于用户的协同过滤,找到兴趣相似的其他用户并推荐他们喜欢的内容[^1]。 ##### 2. 双塔模型 (Two-Tower Model) 双塔模型是一种高效的向量匹配方案,在小红书中被广泛应用于召回阶段。该模型分别对用户和物品建模,生成低维稠密表示(Embedding),并通过余弦相似度或其他距离函数衡量两者匹配程度。这种设计可以显著提升实时性和扩展能力。 ##### 3. 正负样本选择 为了训练高质量的排序模型,合理选取正负样例至关重要。小红书会综合考虑曝光未点击、滑过时间短等情况定义负样本;而对于正样本,则优先采用高互动率的数据。 ##### 4. 特征工程 离线特征处理涉及大量维度的信息提取,比如用户画像(年龄、性别、偏好领域)、上下文环境(设备型号、网络状态)以及内容属性(发布时间、主题分类)。这些特征经过清洗转换后输入到后续预测流程中。 #### 三、搜索流量优化 鉴于超过65%的小红书流量来自站内搜索请求,因此对于关键词解析、语义理解等方面投入较大精力开发相应模块[^2]。相比单纯依靠浏览记录做被动推送的方式,这种方式更能满足特定需求下的精准触达效果。 #### 四、动态更新机制 随着新内容不断涌现及老内容热度衰减变化规律,定期刷新索引库成为必要操作之一。此外还会依据AB测试反馈持续迭代改进现有框架性能表现。 ```python # 示例代码片段:简单的 ItemCF 计算过程模拟 import numpy as np def compute_similarity(item_matrix): """计算物品间的相似度""" item_count = len(item_matrix) similarity_matrix = np.zeros((item_count, item_count)) for i in range(item_count): for j in range(i + 1, item_count): sim = cosine_similarity(item_matrix[i], item_matrix[j]) similarity_matrix[i][j] = sim similarity_matrix[j][i] = sim return similarity_matrix def recommend_items(user_history, similarity_matrix, top_k=5): """基于用户历史推荐最相近的商品""" scores = {} for item_id in user_history: similar_items = sorted( enumerate(similarity_matrix[item_id]), key=lambda x: x[1], reverse=True)[1:] for idx, score in similar_items[:top_k]: if idx not in user_history and idx not in scores: scores[idx] = score recommended_list = [k for k, v in sorted(scores.items(), key=lambda kv: -kv[1])] return recommended_list[:top_k] # 假设有一个稀疏矩阵代表各个项目之间关系... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值