1. 从“物品”到“样本”:推荐系统建模范式的演进
最近在翻看推荐系统顶会的论文,发现一个挺有意思的趋势:大家不再满足于把用户和物品当成两个独立的“点”来建模了。传统的协同过滤,或者基于ID的深度模型,本质上还是在处理“用户ID”和“物品ID”这两个级别的实体。但现实世界里的用户行为,远比一个简单的“点击”或“购买”动作要复杂得多。同一个用户,在不同时间、不同上下文(比如早上通勤和晚上睡前)点开同一个商品,背后的意图可能天差地别。如果我们把这些千差万别的交互行为,都压缩成“用户A-物品B”这样一个单一的、扁平的信号,无疑会丢失大量宝贵的信息。
这就引出了今天想聊的这篇论文《Sample Is Feature: Beyond Item-Level, Toward Sample-Level Tokens for Unified Large Recommender Models》的核心思想。它提出了一个大胆的视角:将每一次具体的用户-物品交互样本(Sample),直接作为模型的基本建模单元(Token)。换句话说,模型输入的不再是孤立的用户ID和物品ID,而是由一个个具体的交互样本(例如,用户U在时间T、上下文C下对物品I的点击行为)构成的序列。这个思路,乍一听有点反直觉——样本数量爆炸式增长,模型怎么处理?但仔细想想,这恰恰是朝着更精细、更个性化推荐迈出的关键一步。它试图将推荐问题,从一个静态的“匹配”问题,转变为一个动态的“序列理解与生成”问题。
这篇笔记,我就结合自己的理解,拆解一下这个“样本即特征”(Sample Is Feature, SIF)的范式到底在说什么,它背后的动机是什么,技术上是如何实现的,以及它可能给推荐系统带来的深远影响。对于正在构建或优化大规模推荐系统的同学来说,理解这个方向,或许能帮你打开新的思路。
2. SIF核心思想:为何要将“样本”提升为“Token”?
要理解SIF,我们得先看看现有主流范式的局限性。目前,工业界的大规模推荐模型,无论是双塔、YouTube DNN,还是更复杂的序列模型如GRU4Rec、SASRec,其基本输入单元大多是“物品ID”(Item ID)。用户侧则可能用用户ID、画像特征、历史行为序列(物品ID序列)来表示。这种范式有几个根深蒂固的问题:
2.1 信息损失与表征瓶颈
当我们用一个固定的Embedding向量来表示一个物品时,无论这个物品被谁、在什么场景下消费,它的向量表示都是一样的。这显然不合理。一部电影《星际穿越》,被一个科幻迷在周末晚上观看,和被一位父亲带着孩子在工作日观看,其“意义”和对用户偏好的表征作用完全不同。现有的物品级Tokenization(将物品ID转化为向量)过程,丢失了这些丰富的上下文信息。模型只能从海量的用户-物品交互数据中,艰难地学习一个“平均意义上”的物品表征,这形成了一个表征能力的瓶颈。
2.2 动态性与上下文感知的缺失
用户的兴趣是动态演化的,物品的“热度”或“含义”也会随时间、流行趋势而变化。一个静态的物品ID Embedding很难捕捉这种动态性。虽然我们可以引入时间戳、场景特征作为额外的输入特征,但这些特征通常是与用户/物品特征拼接(Concatenate)或交叉(Cross)在一起,模型需要自己去学习它们与核心ID特征的复杂交互关系,学习效率不高,且容易受到噪声干扰。
2.3 多任务与统一建模的障碍
现代推荐系统往往需要同时优化多个目标:点击率(CTR)、转化率(CVR)、观看时长、点赞、评论等。不同的任务对同一个交互样本的关注点不同。例如,CTR任务更关注用户是否被吸引,而CVR任务更关注用户的深层购买意图。使用物品级Token,模型需要在同一个物品表征上“附着”多种不同的语义,这增加了模型的学习难度,也使得构建一个统一的、能处理多任务的“大推荐模型”变得复杂。
SIF范式正是针对这些问题提出的。它的核心论点可以概括为:一次完整的用户-物品交互(即一个样本),本身就是一个携带了丰富语义信息的最小不可分割单元,理应作为模型的一等公民(First-class Citizen)来对待。将一个样本直接Token化,意味着这个Token的向量表示,天然地融合了用户、物品、时间、上下文等多方面的信息。模型直接在这些“富信息”Token组成的序列上进行操作,其起点就比从“贫信息”的ID Token开始要高。
注意:这里的“样本”指的是经过预处理后的一个数据实例,通常包含用户ID、物品ID、以及一系列上下文特征(时间、地点、设备、网络环境等)和反馈信号(点击、购买等)。SIF主张将这个完整的数据实例,通过一个编码器(Tokenizer),映射为一个稠密的向量,即Sample-Level Token。
3. 实现路径:如何构建Sample-Level Tokenizer?
提出思想是一回事,工程落地是另一回事。将海量的原始交互样本转化为可被Transformer等序列模型高效处理的Token,是SIF范式的技术核心。论文中提出或暗示了几种可能的实现路径,结合我自己的经验,可以归纳为以下三类:
3.1 基于编码器的Tokenization
这是最直接的方法。我们可以设计一个轻量级的编码网络(例如一个多层感知机MLP或一个小型Transformer),其输入是样本的所有原始特征(用户ID、物品ID的Embedding,以及连续/离散上下文特征的编码),输出是一个固定维度的向量,这就是该样本的Token。
样本原始特征 -> 特征编码层 -> 融合网络(MLP/Transformer) -> 样本Token向量这种方法的优点是灵活,可以任意设计编码网络的结构来捕捉特征间的复杂交互。缺点是引入了额外的模型参数和计算开销,并且这个编码器本身也需要训练。
3.2 基于哈希或量化的Tokenization
为了追求极致的效率,可以考虑使用局部敏感哈希(LSH)或向量量化(VQ)等技术。基本思路是:先有一个预定义或学习得到的“样本语义码本”(Codebook),里面包含K个原型向量(Prototype Vector)。对于一个新的样本,我们用一种快速的方法(如计算与码本向量的相似度)将其映射到最接近的那个原型向量,或者用原型向量的组合来表示。这个原型向量的索引或组合权重,就可以视为一个“离散化”的样本Token。
这种方法的好处是Token空间是离散且有限的(K个),便于建立高效的检索和索引机制,推理速度可能更快。但缺点是可能会引入量化误差,损失一些细微的语义信息。
3.3 混合式Tokenization:ID为锚点,上下文为修饰
这是一种折中且可能更实用的方案。我们仍然保留物品ID作为核心锚点(Anchor),但不再是简单的ID Embedding,而是将物品ID与本次交互的上下文特征进行深度融合,生成一个“情境化”的物品表征(Contextualized Item Representation)。
情境化物品Token = f(物品ID Embedding, 时间特征, 场景特征, 用户短期上下文...)这里的融合函数f可以是一个简单的拼接后过MLP,也可以是一个注意力机制(例如,让上下文特征去调制/调制物品ID的Embedding)。这样,同一个物品在不同的样本中会产生不同的Token,但这些Token又共享同一个物品ID的语义基础,便于模型捕捉共性和差异。
在实际系统设计中,选择哪种路径需要权衡效果、效率和工程复杂度。对于超大规模系统,混合式Tokenization可能是一个不错的起点,因为它与现有基于物品ID的架构兼容性更好,可以平滑演进。
4. 模型架构革新:Transformer如何消化Sample-Level序列?
一旦我们将训练数据转化为Sample-Level Tokens的序列,接下来的问题就是:用什么模型来建模这些序列?论文的标题提到了“Unified Large Recommender Models”,显然,Transformer架构是当前的首选,因为它在大规模序列建模上的能力已被充分证明。但直接将NLP领域的Transformer搬过来用,会遇到几个特有的挑战:
4.1 序列的构建与排序
在NLP中,词的顺序是天然存在的。在推荐中,样本序列的顺序需要精心定义。最自然的是按时间排序,形成用户的行为时序序列。但仅此还不够,我们可能还需要考虑:
- 会话(Session)划分:用户行为通常呈会话状分布。是构建跨越多个会话的长序列,还是以会话为单位构建短序列?
- 样本类型混合:序列中可能包含点击、购买、点赞等多种类型的样本。它们的Token是否应该在同一空间?还是为不同类型设立不同的Token子空间?
- 负样本插入:在训练时,如何将未观察到的负样本(曝光未点击)作为Token插入序列?这是一个非常关键的问题,因为推荐本质上是学习用户对正负样本的偏好差异。
论文中提到“Unified”,暗示模型需要有能力处理这种异质性的、混合了正负反馈的样本序列。一种可能的做法是为所有样本类型学习一个统一的Tokenizer,但在Token中保留一个“反馈类型”的标志位,让模型在注意力机制中去区分。
4.2 超长序列与计算效率
用户的行为序列可能非常长(尤其是活跃用户)。Transformer的自注意力机制计算复杂度是序列长度的平方(O(n²)),直接处理万级甚至十万级长度的序列是不现实的。因此,必须引入高效的注意力变体,例如:
- 局部窗口注意力:只让每个Token关注其前后一定窗口内的Token,适用于序列具有强局部相关性的场景(如会话内行为)。
- 稀疏注意力/线性注意力:如Longformer、Linformer等,通过设计特定的注意力模式或低秩近似,将复杂度降低到线性或亚线性。
- 层次化建模:先在小片段(如会话内)进行细粒度建模,再对片段的摘要进行长程建模。
4.3 训练目标与任务适配
有了样本序列,训练目标也需要重新思考。传统的基于物品ID的模型,常用的是下一项预测(Next Item Prediction)。在SIF范式下,我们可以有更丰富的目标:
- 下一样本预测:预测下一个出现的样本Token(包含物品和上下文)。这要求模型能同时预测“用户接下来会对什么物品感兴趣”以及“在何种情境下”。
- 样本填充(Masked Sample Modeling):类似BERT的掩码语言模型,随机掩码序列中的一些样本Token,让模型根据上下文将其还原。这能迫使模型深入理解样本间的语义关联。
- 多任务学习:在同一个序列上,同时预测多个目标,如CTR、CVR、停留时长等。由于每个样本Token本身就包含了丰富的上下文,模型可以更容易地为不同任务学习到差异化的表征。
模型架构的设计必须与训练目标紧密耦合。一个统一的、基于Transformer的大推荐模型,其输入是Sample-Level Token序列,通过多层Transformer块进行编码,最终输出可以用于各种下游预测任务。这很像NLP中的预训练-微调范式,只不过我们“预训练”的是对用户行为模式的理解。
5. 系统工程挑战:从理论到实践的鸿沟
读论文时觉得思路清晰,但一旦想到要在一个日活数亿、每秒处理数十万请求的在线推荐系统中落地SIF,头皮就开始发麻。以下几个工程挑战是绕不开的:
5.1 样本Token的实时生成与存储
在线服务时,对于每一个新的用户请求,我们需要实时地为其历史行为序列中的每一个样本生成Token。如果Tokenization过程涉及复杂的神经网络计算(如3.1所述),这将带来巨大的计算延迟和资源消耗。可能的解决方案包括:
- 离线预计算与缓存:对于历史行为,可以提前批量生成Token并存入高速缓存(如Redis)。但用户最新的少数行为仍需实时计算。
- 极度轻量化的Tokenizer:设计计算量极小的编码网络,甚至使用查找表(如果采用量化方法)。
- 异步更新:采用“近实时”的方式更新用户序列的Token表示,允许短暂的延迟。
5.2 动态序列的维护与更新
用户的序列是不断增长的。在线服务中,我们需要维护一个动态的、长度可能受限的用户最新样本Token序列。这涉及到:
- 序列截断策略:是保留最近的N个样本,还是通过某种重要性采样保留最重要的N个?如何定义“重要性”?
- Token的“老化”问题:很久以前的样本Token,其表征是否还有效?是否需要引入类似RNN中“遗忘门”的机制,或者定期对旧Token进行“刷新”?
- 并发与一致性:在高并发场景下,如何保证用户序列的原子性更新?
5.3 索引与检索的变革
现有的推荐系统,召回阶段严重依赖基于物品ID的倒排索引(i2i, u2i)。当基本单元变成样本Token后,传统的索引方式可能不再适用。我们需要建立基于样本Token相似度的检索系统。
- 向量检索(Vector Search)的引入:这几乎是必然的。我们需要像Milvus、Faiss这样的向量数据库,来支持“给定当前上下文,从海量样本库中检索出最相关的历史样本或候选样本”。
- 混合检索系统:在初期,可能仍需保留基于物品ID的召回通道作为保底,与基于样本Token的向量召回并行,再通过排序层融合。
- 索引的更新频率:样本Token的语义可能会随着模型更新而漂移,对应的向量索引也需要定期重建,这带来了额外的运维成本。
5.4 冷启动与数据稀疏性
SIF范式严重依赖丰富的交互样本来学习有意义的Token表示。对于一个新用户或新物品,其对应的样本数量极少,Token的质量会很低(冷启动问题)。如何缓解?
- 利用元信息(Meta-Information):对于新物品,可以将其类别、标题、图片等原始特征作为生成初始样本Token的强信号。
- 分层或混合表示:对于低频样本,可以回退到物品级或类别级的表示;对于高频样本,则使用精细的样本级表示。
- 数据增强:利用相似用户或物品的样本来进行数据增强,生成伪样本用于训练。
这些工程挑战每一个都足以写一篇长文。SIF范式要想成功,必须在模型效果和系统可行性之间找到一个精妙的平衡点。
6. 潜在影响与未来展望:推荐系统的“GPT时刻”?
尽管面临诸多挑战,但SIF范式所指向的未来图景非常诱人。它可能从以下几个层面深刻改变推荐系统:
6.1 走向真正的“统一大模型”
目前的推荐系统,召回、粗排、精排、重排等模块往往是割裂的,各有各的模型和特征工程。SIF范式为构建一个“端到端”的统一大模型提供了可能性。我们可以设想一个巨型的Transformer模型,它以用户的所有历史样本Token序列为输入,直接输出对海量候选样本的偏好分数,或者生成下一个最可能的样本。这类似于NLP领域的GPT系列模型,实现了从“流水线”到“单一模型”的范式转换。这样的模型理论上拥有更强的泛化能力和信息利用效率。
6.2 上下文感知能力的质变
由于样本Token内在地包含了上下文信息,模型对场景的感知将从“特征拼接后的后处理”变为“建模的基本前提”。模型能更自然地回答:“为什么用户在这个时间点想要这个?”、“如果换一个场景,用户的偏好会如何变化?”这类问题。这对于信息流、短视频、本地生活等强上下文依赖的场景价值巨大。
6.3 可解释性的新途径
传统的基于ID的模型,其可解释性往往停留在“因为用户买了A,所以推荐相似的B”这种物品协同层面。在SIF范式下,我们可以分析注意力权重,来理解模型是如何综合多个历史样本(每个样本都有具体上下文)来做出当前推荐的。例如,模型可能显示出:“本次推荐主要参考了用户上周末晚上在家的几次浏览(样本Token 1, 3, 5),而忽略了工作日的点击(样本Token 2, 4)”。这种基于具体行为实例的解释,对产品和运营同学来说可能更直观、更有 actionable 的 insights。
6.4 与生成式推荐的结合
当前火热的生成式AI(AIGC)也在渗透推荐领域。SIF范式下的样本Token序列,可以视为对用户偏好的一种“行为语言”描述。未来,我们或许可以训练一个推荐领域的“行为GPT”,它不仅能预测下一个样本,还能根据用户指令(“帮我找个适合周末家庭聚会的餐厅”)或对话历史,生成符合要求的样本序列(即推荐列表),实现更自然、更交互式的推荐体验。
当然,这条路还很长。SIF范式目前更多是一个学术上的前瞻性思想,在工业界的大规模落地还需要在算法创新、系统工程和算力成本上取得突破。但它的提出,清晰地指出了当前推荐系统建模的一个根本性局限,并为我们突破“物品中心”的思维定式,迈向更精细、更动态、更统一的“样本中心”建模,提供了一个强有力的理论框架和极具启发性的技术方向。对于一线从业者而言,即使暂时无法全盘照搬,其思想精髓——更加珍视每一次交互背后的完整上下文信息——也值得我们在设计特征、构建模型时反复思考和借鉴。毕竟,推荐系统的终极目标,是理解用户那一刻的“情境”与“意图”,而不仅仅是他过去喜欢过哪些“物品”。