
蚂蚁集团的工程师们大概是最先发现这件怪事的人。
他们手里握着的是支付宝上数以十亿计用户的行为数据,理论上讲,这应该是训练用户表征模型最好的养料。多喂数据、多堆参数、拉长观察窗口,这套"大力出奇迹"的打法在推荐系统领域已经验证过太多次了。可当他们真把用户数量从3千万堆到1亿,把模型从0.2B参数扩到0.4B时,怪事发生了:训练损失照样在稳步下降,可下游任务的准确率几乎纹丝不动。
**这就好比一个学生天天刷题刷到深夜,笔记本记得越来越厚,可考试分数就是卡在那里不动。**
问题出在哪?这篇来自蚂蚁集团DeepFind团队和浙江大学的论文,用了整整一篇论文的篇幅去回答这个问题,并且给出了一套可以量化、可以复用的解决方案。
核心问题:数据在"注水"
先说清楚这篇论文研究的对象是什么。
用户表征学习*:把一个用户在平台上的所有行为(支付记录、页面浏览、小程序使用等)压缩成一个向量,这个向量之后可以拿去做广告投放、风控识别、精准营销等各种下游任务,属于"一次训练、多处复用"的基础设施型技术。
研究团队做了一个系统性的扫描实验,沿着三个常见的扩展维度分别测试:用户数量、行为时间跨度、模型参数量。结果发现,这三条路都撞上了同一堵墙。
用户数量方面,当用户量从0.01B(1千万)涨到0.03B(3千万)时,AUC等三项指标都明显上升,说明新用户确实带来了新的行为模式。可一旦过了0.03B这个坎,再往1亿用户堆,指标几乎不再往上走了。
时间跨度方面同样如此。观察窗口从30天拉到60天,效果提升很明显,用户的消费画像变得更完整。但从60天拉到120天,付出双倍的数据量,换来的提升却少得可怜。原因也不难猜:支付宝的账单数据里充满了重复的日常消费,今天买咖啡、明天买咖啡,这种"复读机式"的记录堆得再多,也不会告诉模型任何新信息。
模型参数方面的现象最让人意外,也最值得深挖。研究者固定住数据规模(0.1B用户、180天),把Transformer编码器从0.05B逐步扩到0.4B。训练损失确实是随着参数量增长稳步下降的,说明大模型确实更擅长拟合训练目标。可下游分类、检索任务的准确率在0.2B之后就基本停滞了,扩到0.4B几乎是白扩。
论文把这种现象称为**损失和质量的脱钩**。
训练损失在评估模型有没有学到东西这件事上,突然变得不可靠了。多出来的参数并没有去学习更本质、更通用的用户特征,而是把精力花在拟合那些重复出现的、无关紧要的行为细节上。这就像一个记忆力超强的学生,把每一次刷题时纸上的墨水污渍都背下来了,却依然抓不住题目背后的解题思路。
论文给这堵墙起了个名字,叫作**原始行为扩展墙**(raw behavioral scaling wall),意思是无论你往哪个方向使劲,只要用户历史里充斥着重复、可预测的日常routine,简单地堆数据和堆参数就注定收益递减。
这个诊断结论其实有点反直觉。行业里长期的默契是,数据规模和模型规模是最靠谱的两个杠杆,Scaling Law的故事在语言模型上讲得太顺了,以至于大家默认这套逻辑可以无缝迁移到用户行为建模上。但支付宝这种日常消费数据的特性,和维基百科文本、代码库这类语料完全不同:语言里的新句子往往携带新信息,而用户的第100次买咖啡记录,跟第99次几乎没有任何区别。
密度,而不是体积
既然堵墙的根源是"信息密度太低",那么突破口自然就落在如何提高信息密度上。
研究团队提出的解法叫**行为致密化**(behavioral densing),核心思路是把冗长的原始行为历史,压缩成保留关键区分度、去掉重复信息的紧凑表示,让每一个输入单元都承载更多下游有用的信号。
具体的技术工具是**残差量化**(residual quantization),实现方式叫RQ-VAE。
RQ-VAE*:一种把连续向量转成离散编码的技术。它先用一层码本(一组预先学好的"标准向量")去逼近原始向量,记录下最接近的那个标准向量的编号,再计算残差(没被逼近到的那部分误差),用下一层码本继续逼近这个残差,如此反复多层,最终把一个连续向量变成一串离散的编号序列。
打个比方,如果你要向朋友描述一张人脸,你不会把每个像素点的颜色都念一遍,你会说"鹅蛋脸、单眼皮、高鼻梁",这就是粗粒度的编码。如果朋友还想要更精细的信息,你再补充"左边嘴角有颗痣",这是对残差的进一步细化。RQ-VAE干的就是这件事:第一层码本捕捉用户最主要的消费习惯(比如"稳定的餐饮支出、常坐地铁"),后面几层码本再去精修那些更细微的差异(比如具体去哪家商户、消费金额的微小波动)。
**如果不用这种多层残差的结构,而是用单一码本硬编码,会发生什么?**
答案是编码要么粗糙到丢失关键区分信息,要么码本规模爆炸式增长到无法承受。VQ-VAE用的就是单层码本方案,论文后面的实验数据显示,它的表示空间冗余度明显更高,因为很多相似的用户行为不得不各自占用一个完整的编码,没法像RQ-VAE那样共享"大类别相同、细节微调"的结构。
工程实现上,研究团队还做了三处针对性改造。原始RQ-VAE是给图像用的,这里改成处理多源账单行为嵌入;输出的token长度被解耦成一个固定值,不再随原始历史长度线性增长;训练完的量化器被冻结,用户编码器只在离散token序列上重新训练,这样能确保后续观察到的效果提升,是货真价实来自"密度提升",而不是编码器架构顺便变强了。
把这套方案跑起来之后,结果确实印证了假设。当观察窗口在64天以内,原始序列建模和token化建模表现相近,因为这时候冗余还没那么严重。可一旦窗口拉长到64天以上,token化的优势就开始拉开,而且越拉越大。用户规模维度上也是类似的交叉现象,大约在1200万用户这个节点,token化开始持续反超原始方法。
这个交叉点本身很说明问题:**致密化不是任何时候都管用的万能药,它只在原始数据进入"冗余主导"阶段之后才会显现出明确优势。**
密度定律:给"该配多大容量"算一笔账
光知道"压缩有用"还不够,工程团队真正头疼的是另一个问题:给定一批用户数据,到底该配多大的码本、多少层残差、多长的token序列,才算刚刚好?
这个问题过去基本靠拍脑袋。太小的容量会漏掉信息,太大的容量除了浪费存储和计算,还可能带来过拟合。论文的核心贡献,就是把这个"拍脑袋"的过程变成了一条可以计算的公式,取名叫**行为致密化定律**(Behavioral Densing Law)。
定律的推导起点是**帕累托最优**的视角。
帕累托最优*:在多个目标之间寻找一种平衡状态,使得在不牺牲某个目标的前提下,无法再让另一个目标变得更好。这里指的是在"表征效果好不好"和"编码容量大不大"这两个目标之间找一个最合算的点。
研究团队定义了一个效用-容量的权衡函数,容量记作C,下游任务效果记作U,两者之间存在类似边际递减的关系:容量越大效果越好,但增长速度越来越慢。通过对这个函数做最优化求解,论文推出了一个漂亮的对数线性关系:
最小充分容量的对数,等于一个常数项,加上若干个尺度维度(比如用户量N、时间跨度D)各自对数的加权和。
写成大白话就是,容量该配多大,跟数据规模之间存在幂律关系,在对数坐标下画出来就是一条直线。
这个理论推导听起来抽象,但研究团队真刀真枪地在支付宝三种不同数据源(账单Bill、埋点SPM、小程序Miniprogram)、三种不同量化方法(RQ-VAE、VQ-VAE、还有一种叫SARQ的改进方法)上都验证了这条线的存在,而且三个下游任务(分类、零样本用户定向、少样本用户定向)拟合出来的斜率几乎完全一致。
这里有几个细节值得单独拎出来说。
第一,**不同量化方法的斜率明显不同**,VQ-VAE的斜率最陡,RQ-VAE次之,SARQ最平缓。论文把这个现象归因于每种方法在"表示空间冗余度"上的差异:VQ-VAE因为编码不能复用组合结构,冗余度最高,所以数据规模一涨,需要配的容量涨得特别快;RQ-VAE允许多层编码组合复用,冗余度更低,斜率更平缓。
**这就像存储信息用整存整取还是拆开存。**
如果每次要表达一个新概念都得造一个全新的词,词典会膨胀得飞快;如果可以用"前缀+后缀"的组合方式造新词,词典增长速度会慢很多。VQ-VAE属于前者,RQ-VAE属于后者。
第二,**斜率还和数据源本身的"内在多样性"挂钩**。研究团队用一个叫Mean k-NN余弦距离的指标去衡量某个数据源内部的行为丰富程度,发现三个数据源(账单、SPM、小程序)之间斜率的比例大约是1:1.15:0.92,而多样性指标的比例大约是1:1.07:0.96,两者呈现出近似平方关系。也就是说,一个数据源内部行为越五花八门,需要配的编码容量增长得越猛,而且这种增长不是线性的,是平方级别的。
这条定律最实用的地方在于,它把过去需要反复试错、跑无数组实验才能摸清楚的"最优配置"问题,变成了一个可以用少量统计量直接算出来的公式。工程师不用再对着一堆超参数瞎猜,只要测出数据源的多样性指标,套进公式,就能预估出该配多大的码本规模。
从"一刀切"到"看菜下饭":ALGN登场
密度定律解决的是"整体上该配多大容量",但论文没有止步于此,它接着往下问了一个更细的问题:**同一批用户数据里,是不是所有用户、所有时间段都该分配一样长的编码?**
答案显然是否定的。有些用户的某段行为历史丰富多变,今天点外卖明天打车后天买保险,信息量很大;另一些用户的某段历史几乎是复制粘贴,天天同一时间买同一杯咖啡。用固定长度的编码去套所有人,本质上是在用平均分配掩盖个体差异。
**这就好比给所有学生发一样厚度的笔记本。**
内容丰富的课程需要写满整本,内容简单的课程翻两页就写完了,但学校统一发同样厚度的本子,结果要么是有人的本子不够用要写不下,要么是有人的本子大半是空白纯属浪费。
针对这个问题,论文提出了一个新方法,叫**自适应长度门控网络**(Adaptive Length Gated Network,简称ALGN)。
ALGN的核心逻辑是边际效用判断:每往残差量化的下一层继续编码之前,先掂量一下,这一层带来的信息增益,是不是还值得多花一份存储成本。如果不值得,就提前停止,不再往下编码。
具体怎么判断"值不值得"?论文设计了两个信号。
第一个信号是**残差范数**(residual norm),衡量的是当前几层编码之后,还剩多少没能被还原出来的信息量。残差越大,说明现有的编码还不够精细,继续往下编大概率有用;残差已经很小了,说明主要信息已经抓住了,再往下编大概率是在浪费空间编码噪声。
第二个信号是**编码不确定性**(code uncertainty),衡量的是当前这一步选择编码的"把握有多大"。如果模型对选哪个码本条目非常犹豫(概率分布很分散),往往意味着这段行为本身就比较复杂、暧昧,值得多花几层编码去精细刻画;反过来如果模型选得很确定,说明这段行为模式很清晰,没必要继续深挖。
这两个信号被送进一个带学习参数的门控函数,同时还要减去继续编码的边际成本,算出一个继续概率。一旦这个概率低于设定的阈值,编码就在这一层停下,后面的层直接跳过,不再消耗容量。
**如果只按照一个固定的先验长度分布来砍长度,而不管每个样本具体的信息含量,会怎样?**
论文专门做了这个对照实验,叫"启发式变长基线",只用一个统计规律去预设长度,结果容量确实降了一点(降到86.91%),但下游AUC反而比固定长度的RQ-VAE还低了一点点(74.43% vs 74.56%)。这说明单纯靠"先验统计"去砍长度是不够的,必须结合每个样本自身的残差和不确定性这两个动态信号,才能砍得又准又狠。
实验结果摆在这里说话最有力。跟当前最强的基线SARQ相比,ALGN把容量占用从76.24%进一步压到63.47%,同时AUC还提升了1.07个百分点,KS指标提升了2.03个百分点,准确率提升了0.36个百分点。这是那种少见的"又快又好"的双赢结果,通常压缩率和效果之间是要做取舍的,而ALGN在这里几乎实现了同时优化。
论文还专门做了消融实验,去掉不确定性信号,容量占用回升到77.83%,效果也跟着掉;去掉残差信号,效果类似下滑。这两个信号都不是可有可无的装饰,它们各自捕捉的是不同侧面的信息含量。
更有意思的是正则化项的设计。论文没有直接惩罚每个样本的编码长度,而是用一个几何分布先验去约束整体的长度分布,理由是用户行为天然存在长尾特性,大部分行为是routine,少部分行为信息量爆炸。这种"分布式约束"比"逐样本硬性惩罚"更灵活,实验数据也证实了这一点,用分布正则化的版本比用随机分布正则化的版本,容量还能再省6.68%,效果也更好。
最后论文还检验了ALGN对密度定律本身的影响,发现用了ALGN之后,容量随数据规模增长的斜率从大约0.77(RQ-VAE)进一步压到了0.59,意味着数据规模越往上涨,ALGN相对固定长度方法节省下来的容量优势会越来越明显。
三个下游考场:分类、文本检索、用户对用户检索
这套方法说得再漂亮,也得经得起实际业务场景的检验。论文设计了三类下游评测任务,覆盖了工业界用户表征最常见的应用形态。
第一类是**分类任务**,用的是线性探测协议,冻结住训练好的用户编码器,只在它输出的向量上面加一个轻量级线性分类器,去拟合广告、风控、营销这类场景里的标签数据。这类任务考验的是表征本身携带的判别信息够不够干净。
第二类是**基于文本的检索**,模拟的是零样本用户定向场景,比如运营人员输入一句"请选出潜在的3C产品购买者",系统需要计算这句话的文本嵌入和每个用户嵌入之间的余弦相似度,把相似度超过阈值的用户挑出来。这个场景考验的是用户表征能不能和自然语言语义对齐。
第三类是**用户对用户检索**(U2U retrieval),模拟的是给定少量种子用户,找出跟这些种子用户相似的其他用户,这是推荐系统里"相似人群扩展"的核心步骤。这里用的是prompt-tuning的思路,通过少量种子用户学习一组可训练的提示词,再用这组提示词去检索候选池。
三类任务背后其实对应着支付宝这类超级App最核心的三种商业化诉求:精准分层、语义化人群圈选、相似人群拓展。论文的严谨之处在于,它没有只挑一个任务证明方法有效,而是三个任务一起测,而且每类任务背后都有几十个不同业务场景的数据集撑腰(分类任务50个数据集,两类检索任务各22个数据集),确保结论不是在某个特定场景里凑巧成立的。
写在后面
读完这篇论文,我最先联想到的不是推荐系统,而是大语言模型圈子里那场关于"数据质量vs数据数量"的争论。
过去两年,越来越多的证据显示,用精心筛选、去重的小数据集训练出来的语言模型,效果可能反超用海量原始爬虫数据训练的大模型。这篇论文相当于把这套逻辑,第一次系统性地、用真实亿级用户数据验证到了用户表征学习这个此前很少有人认真做过密度分析的领域。
有个细节我反复琢磨了很久:论文里那张"损失下降但准确率不涨"的图,其实揭示了一个更普遍的陷阱。我们太习惯用训练损失作为模型好坏的代理指标了,因为它容易算、容易画曲线、容易在会议PPT上展示"稳步下降"的漂亮曲线。可这篇论文用实打实的数据证明,损失曲线在数据本身冗余度很高的时候,会变成一个彻头彻尾的假象。这提醒我,任何依赖代理指标做决策的系统,都得时不时停下来问一句:我优化的这个指标,真的对应着我关心的那个目标吗?
另一个让我觉得有意思的地方是密度定律里那个"平方关系"。斜率跟数据多样性大致呈平方比例,这个发现目前论文里只是观察性的经验规律,还没有给出严格的理论解释。**这留了一个挺诱人的问题:为什么是平方,而不是线性、也不是其他次方?**
这背后会不会藏着某种关于"信息表示效率"更普适的规律,值得后续研究者继续深挖。
论文最后也坦诚承认了局限性,目前所有实验都集中在支付宝的账单类文本数据上,视频消费这类完全不同模态的行为数据,密度定律是否依然成立,还没有答案。这个坦诚挺难得的,也留下了一个明确的、值得追问的方向。
Q&A
Q1:什么是行为致密化定律?
A:行为致密化定律是论文提出的一条量化关系,描述了用户数据规模和最小充分编码容量之间的幂律关系,在对数坐标下呈线性,可以帮助工程师根据数据规模直接估算该配置多大的分词器容量,不用再靠反复试错拍脑袋决定。
Q2:ALGN和普通的RQ-VAE分词方法有什么区别?
A:普通RQ-VAE给所有用户行为分配同样长度的编码,而ALGN会根据每段行为的残差信息量和编码不确定性动态判断是否需要继续编码,信息丰富的部分编得更深,routine行为提前停止,实验显示容量能省13%以上同时效果还更好。
Q3:为什么用户数据越多,模型效果反而不涨了?
A:论文发现支付宝用户行为存在大量重复的日常routine,比如天天买咖啡这类记录,数据量涨得很快但真正对下游任务有用的信息涨得很慢,导致用户数超过0.03亿、时间窗口超过60天、模型参数超过0.2B后,效果提升就基本停滞了。







