在推荐系统中,双塔模型的训练数据通常由用户特征、正样本物品特征、负样本物品特征组成,并通过监督学习优化用户和物品的Embedding相似度。以下是一个具体的示例说明:
1. 训练数据的结构
每条训练样本通常包含以下三部分:
- 用户特征:描述用户的信息(如ID、历史行为、人口属性等)。
- 正样本物品特征:用户实际交互过的物品(如点击,加购,购买)。
- 负样本物品特征:用户未交互的物品(随机采样或难例挖掘)。
最终训练时,每条样本会以 (用户特征, 正样本物品特征, 负样本物品特征) 的形式输入模型。
2. 示例:电影推荐场景
假设我们有一个电影推荐系统,用户特征包括用户ID、年龄、性别、历史点击的电影ID序列;物品特征包括电影ID、类型、导演、演员、评分等。
示例数据表
| 用户特征 | 正样本物品特征 | 负样本物品特征 |
|---|---|---|
用户ID=123, 年龄=25, 性别=男, 历史点击=[电影A, 电影B] | 电影ID=电影X, 类型=动作, 导演=张艺谋, 演员=吴京, 评分=8.5 | 电影ID=电影Y, 类型=爱情, 导演=李安, 演员=周冬雨, 评分=7.2 |
用户ID=456, 年龄=35, 性别=女, 历史点击=[电影C, 电影D] | 电影ID=电影Z, 类型=科幻, 导演=诺兰, 演员=马修, 评分=9.0 | 电影ID=电影W, 类型=恐怖, 导演=温子仁, 演员=帕特里克, 评分=6.8 |
3. 数据预处理的关键步骤
(1)用户特征处理
- 用户ID:通过Embedding层转换为稠密向量。
- 历史行为序列:对点击的电影ID序列进行Embedding,然后通过Pooling(如平均池化)生成固定长度的向量。
- 年龄/性别:归一化或分桶后作为数值特征输入。
(2)物品特征处理
- 电影ID:通过Embedding层转换为稠密向量。
- 类型/导演/演员:多值类别特征(如电影类型是“动作,冒险”),使用Multi-hot编码或Embedding。
- 评分:归一化后作为数值特征。
(3)负样本生成
- 随机负采样:从未交互的电影中随机选择(如示例中的“爱情片”作为男性用户的负样本)。
- 难例挖掘:选择与用户历史行为相似但未点击的物品(需额外策略)。
4. 模型的输入输出示例
假设模型输入为结构化特征,输出为用户和物品的Embedding:
用户塔输入(示例用户123):
{
"user_id": 123, # Embedding输入
"age": 25, # 归一化为0.6(假设最大年龄40)
"gender": "男", # 编码为[1,0]
"history_clicks": [电影A, 电影B] # 序列Embedding平均池化
}
物品塔输入(正样本电影X):
{
"movie_id": 电影X, # Embedding输入
"genres": ["动作", "冒险"], # Multi-hot编码或Embedding
"director": "张艺谋", # Embedding输入
"rating": 8.5 # 归一化为0.85(假设满分10)
}
模型输出:
- 用户Embedding:
[0.3, -0.2, 0.5, ...](假设维度为64) - 物品Embedding:
[0.4, 0.1, -0.3, ...]
损失计算:
- 目标:最大化用户Embedding和正样本物品Embedding的点积,最小化与负样本的点积。
- 损失函数示例:二元交叉熵损失(正样本标签为1,负样本标签为0)。
5. 关键总结
- 训练数据本质:通过用户与物品的交互行为(正样本)和随机/难例负样本,学习用户和物品的匹配关系。
- 特征设计:用户侧关注行为序列和画像,物品侧关注内容和属性。
- 端到端训练:双塔模型是联合训练的,确保用户和物品的Embedding在同一空间对齐。
通过这种数据结构和训练方式,双塔模型可以高效捕捉用户与物品的潜在关联,为后续召回阶段提供高质量的候选集。