基于Transformer架构的深度学习算法应用越来越广,特别是依托端到端的训练方法,由于优化了训练数据的生成方式,变的特别流行。以“基于Transformer的输入搜索文字,推荐电影”为例,我们将这个问题建模为一个文本到物品(Text-to-Item)的推荐任务。虽然原始Transformers是为序列到序列(Seq2Seq)任务(如机器翻译)设计的,但是其核心机制----自注意力和上下文建模能力----可以被灵活迁移到推荐系统中。下面具体展开其神经网络的训练。
一、任务定义
输入:用户输入的一段自然语言查询(如 “我想看一部浪漫又搞笑的爱情片”)
输出:推荐一个或多个电影(如《真爱至上》《初恋50次》)
本质:将文本语义与电影表征对齐,实现跨模态匹配(文本 ↔ 电影)
这属于 检索式推荐 或 语义搜索推荐,而非生成式推荐(不生成新电影,而是从候选库中选出最匹配的)。
二、模型架构设计(双塔 Transformer)
最常用且高效的方案是 双塔结构(Two-Tower Architecture):
[ 用户查询文本 ] → [ Text Encoder (Transformer) ] → 文本向量 q
[ 电影信息 ] → [ Item Encoder (Transformer/MLP) ] → 电影向量 v_i
1. 文本编码器(Text Tower)
使用预训练 Transformer 编码器(如 BERT、DistilBERT)或从头训练的小型 Transformer;
输入:用户查询(tokenized 后);
输出:取 [CLS] token 的表示,或对所有 token 做平均/最大池化,得到固定维度的语义向量 q ∈ ℝ^d。
2. 电影编码器(Item Tower)
电影信息可包括:
电影标题(title)
类型(genres)
演员/导演
剧情简介(plot synopsis)
平均评分等元数据
这些信息可拼接成一段文本(如 “Love Actually | Romance, Comedy | Starring Hugh Grant”),然后同样用 Transformer 编码,得到电影向量 v ∈ ℝ^d。
也可对结构化字段分别嵌入后拼接,再通过 MLP 编码(若无丰富文本)。
3. 相似度计算
使用 点积 或 余弦相似度 衡量匹配度:
score(q,vi)=q⊤vi
三、训练数据构建
推荐系统通常没有直接的“正确答案”,需构造 正负样本对。
正样本(Positive):
用户搜索了 query q,并点击/观看/高评分了电影 m+;
或:人工标注“query 与电影相关”。
负样本(Negative):
随机采样未交互的电影(in-batch negatives 或全局采样);
更高级方法:难负例挖掘(hard negative mining),如用户看了但不喜欢的电影。
示例数据对:
正例:("浪漫喜剧", 《真爱至上》)
负例:("浪漫喜剧", 《异形》)
四、训练目标:对比学习(Contrastive Learning)
目标是让 正样本对的相似度高,负样本对的相似度低。
常用损失函数:
1. InfoNCE Loss(Noise Contrastive Estimation)
对于一个 query q 和其正样本 v+,以及 N−1 个负样本 {vj−}:
L=−log∑k=1Nexp(q⊤vk/τ)exp(q⊤v+/τ)
τ 是温度系数(通常 0.05~0.1);
分母包含正样本 + 所有负样本;
在一个 batch 中,其他 query 对应的电影可作为负样本(in-batch negatives),高效利用数据。
2. Pairwise Ranking Loss(如 BPR)
L=−logσ(q⊤v+−q⊤v−)
五、训练流程(端到端)
准备数据:
收集用户搜索日志 + 电影交互行为(点击、播放、评分);
构造 (query, movie_id, label) 三元组。
文本预处理:
Tokenize 查询和电影文本(使用 BERT tokenizer 等);
截断/填充至固定长度。
模型前向传播:
文本塔:q = text_encoder(query_tokens)
电影塔:v = item_encoder(movie_tokens)
计算相似度矩阵(batch 内所有 query 与所有 movie 的点积)
计算损失:
应用 InfoNCE 或 BPR loss;
反向传播更新两个塔的参数。
优化技巧:
使用预训练语言模型(如 BERT)初始化文本塔,加速收敛;
冻结部分层(如仅微调最后几层);
负采样策略优化(如频率加权、难负例)。
六、推理阶段(部署)
训练完成后:
离线预计算所有电影的向量 vi,存入向量数据库(如 FAISS、Milvus);
在线服务:
用户输入 query;
实时编码为向量 q;
在向量库中做 近似最近邻搜索(ANN),返回 top-K 最相似电影。
优点:推理快,只需一次文本编码 + 向量检索。
七、实际案例参考
YouTube 的多模态推荐:结合视频标题、ASR 文本、用户查询;
Amazon 的商品搜索:用 BERT 双塔匹配 query 与商品描述;
Netflix 的语义搜索:支持“适合周末看的轻松电影”这类模糊查询。
总结:
| 组件 | 说明 |
|---|---|
| 输入 | 用户自然语言查询 |
| 输出 | 推荐电影(从候选库中检索) |
| 模型 | 双塔 Transformer(文本塔 + 电影塔) |
| 训练目标 | 最大化正样本相似度,最小化负样本相似度 |
| 损失函数 | InfoNCE / BPR |
关键技巧 预训练初始化、负采样、向量检索。这种架构不仅适用于电影推荐,还可扩展到商品、音乐、新闻等任何“文本→物品”的推荐场景。
2663

被折叠的 条评论
为什么被折叠?



