目录
Seq2Slate:基于序列到序列模型的推荐重排技术详解
摘要
在推荐系统和信息检索领域,如何高效生成用户感兴趣的推荐列表(Slate)是核心挑战之一。传统排序模型难以捕捉商品间的高阶依赖关系,导致推荐列表的整体吸引力不足。本文介绍谷歌提出的Seq2Slate模型,通过序列到序列(Seq2Seq)架构与指针网络(Pointer Network)的结合,将重排问题转化为序列预测任务,动态优化推荐列表的顺序。
1. 引言:从“单个商品排序”到“列表整体优化”
在电商、视频推荐等场景中,用户面对的往往是一个推荐列表(Slate),而非单个商品。传统排序模型(如LambdaMART、RankNet)通过给每个商品独立打分并排序,忽略了商品间的依赖关系(例如相似商品的聚集效应、互补商品的顺序影响)。例如,用户可能对连续推荐多个相似视频产生疲劳,而合理的多样性排序能提升整体点击量。
Seq2Slate的核心创新在于:将推荐列表的生成视为序列预测问题,通过Encoder-Decoder架构动态选择每个位置的最优商品,直接建模商品间的高阶交互。这种方法无需预设商品间的依赖形式(如子模函数),而是通过数据驱动的方式学习复杂依赖,让推荐列表的整体吸引力最大化。
2. 核心原理:指针网络如何实现“候选集重排”
2.1 问题建模:排序即序列预测
给定候选商品集合 X = { x 1 , x 2 , … , x n } X = \{x_1, x_2, \dots, x_n\} X={ x1,x2,…,xn},Seq2Slate的目标是生成一个排列 π = ( π 1 , π 2 , … , π n ) \pi = (\pi_1, \pi_2, \dots, \pi_n) π=(π1,π2,…,πn),其中 π j \pi_j πj 表示第 j j j 个位置的商品索引。根据序列到序列模型的链式法则,生成排列的概率为:
p ( π ∣ X ) = ∏ j = 1 n p ( π j ∣ π 1 , … , π j − 1 , X ) p(\pi | X) = \prod_{j=1}^n p(\pi_j | \pi_1, \dots, \pi_{j-1}, X) p(π∣X)=j=1∏np(πj∣π1,…,πj−1,X)
每个位置的选择依赖于之前已选商品,从而捕捉商品间的顺序依赖(例如“用户点击某商品后,后续商品更可能与之相关”)。
2.2 指针网络:从输入候选集“直接选择”
传统Seq2Seq模型的输出词汇表固定(如机器翻译中的目标语言词汇),但推荐场景中候选集随查询动态变化,且输出必须来自输入候选集(不能生成新商品)。指针网络(Pointer Network)正是为解决此类问题设计,其核心思想是:通过注意力机制从输入序列中直接选择元素作为输出,而非从固定词汇表中预测。
指针网络中的“指针”是一种形象化的比喻,它表示模型从输入序列中“指向”并选择特定元素作为输出的过程。
传统模型(如带有注意力机制的seq2seq)输出时,像是在一个固定的“词汇表仓库”中挑选元素;而指针网络输出时,直接从输入序列里挑选,就像用一根“指针”去“指”输入里的某个元素,告诉模型“选这个”。例如,输入是 [“苹果”,“香蕉”,“橘子”],指针网络通过计算每个元素与当前需求的匹配分数,“指向”(选择)“香蕉”作为输出。
简单说,“指针”体现了模型直接从输入中选取元素的特性,就像现实中用手指指向并挑选东西一样,强调对输入序列元素的直接选择行为。
2.2.1 Encoder:压缩候选集特征
使用LSTM对输入候选集 X X X 进行编码,生成每个商品的隐状态 e i e_i ei:
e i = LSTM_Encoder ( x i ) e_i = \text{LSTM\_Encoder}(x_i) ei=LSTM_Encoder(xi)
这些隐状态 { e 1 , e 2 , … , e n } \{e_1, e_2, \dots, e_n\} { e1,e2,…,e<