Google排序架构在换:两段合成一个模型

Google排序架构在换:两段合成一个模型
张文保 23 分钟阅读 4,889 阅读
本文目录
  1. 现在的排序是怎么分两段干的?
  2. 这两段的成本差在哪个量级上?
  3. 那篇论文到底证明了什么?
  4. 一个768维的向量,够给多少篇文档排序?
  5. 为什么标准训练方式教不会模型排序?
  6. SToICaL做了哪两件事?
  7. 第一件:在item层级按名次重新加权
  8. 第二件:在token层级沿前缀树做边际化
  9. 权重函数的形状,比有没有加权更要紧
  10. 四分之一的生成结果是无效编号,这个数字怎么来的?
  11. 第一名找得准,第二名就崩了?
  12. 购物搜索那组数据为什么反着走?
  13. 这篇论文的评估规模有多大?
  14. 如果真换了架构,SEO会变什么?
  15. 被优化的对象会从分数变成路径
  16. 文档编号这件事会变得重要
  17. 整片位置比单一位置更值得投入
  18. 能立刻做的事只有一件
  19. 别把论文当路线图
  20. 常见问题解答
  21. 这篇论文是说Google要换搜索排序架构了吗?
  22. 768维只够两千篇文档排序,是不是说现在的向量检索都不行?
  23. 那个27.66%的无效编号是什么意思?
  24. 为什么新方法会让第一名变差?
  25. 购物数据上R@1掉了25个点,这对电商SEO意味着什么?
  26. 现在该为这件事做什么优化?
  27. 权威参考资料

摘要:Google DeepMind那篇排序论文里有一条能算的结论:双编码器要对k篇文档做任意排序,向量维度至少得是ln(k!)除以2ln(k),按斯特林近似就是大约k的一半。也就是说一个768维的向量,理论上只够给不到两千篇文档排任意顺序。论文提出用一个自回归模型取代双编码器加交叉编码器的两段式架构,并给出配套的训练损失。实验里标准训练方式有27.66%的生成结果是无效文档编号,换了损失之后降到0。

搜索排序这件事,在工程上一直被拆成两步走。

第一步粗筛,从几十亿个网页里挑出几百个候选;第二步精排,把这几百个仔细比一遍定出顺序。这个分工存在了很多年,原因很实在:精排那套算法准,但贵到没法对全库跑;粗筛那套便宜,但排不准。

现在有人提议把这两步合成一步。

现在的排序是怎么分两段干的?

先把两段式架构说清楚,不然后面的改动没法理解。

第一段叫双编码器。它把查询词和文档分别转成向量,然后靠向量间的距离找相似的。这一层的实际表现站内量过,首页渲染完连正文都读不出来的站,132个里有28个,所以它的输入质量在很早的一步就被决定了。关键在于分别转——文档的向量可以提前算好存起来,查询来的时候只算一次查询向量,剩下的就是查库。所以它快,也便宜。

第二段叫交叉编码器。它把查询词和文档拼在一起送进模型,让模型同时看着两边算出一个相关度分数。因为要拼在一起算,每一对都得重新跑一次模型,所以它贵。但正因为查询和文档在计算过程中能互相影响,它判断得比双编码器准得多。

架构怎么算成本精度实际用在哪
双编码器查询与文档各自编码,比向量距离低,文档向量可预计算有限第一段粗筛,从全库选候选
交叉编码器查询与文档拼在一起,一对一算分高,无法预计算第二段精排,只处理候选集
自回归排序模型逐个token生成文档编号,用束搜索出序中等论文称严格强于双编码器论文提议用它一步到位替掉上面两段

这两段的成本差在哪个量级上?

双编码器便宜在一件事上:文档那一侧的向量可以离线算好存起来。查询来的时候只算一次查询向量,剩下的工作是在向量库里找近邻,跟库里有多少文档基本无关。

交叉编码器贵也贵在一件事上:查询和文档必须拼在一起送进模型,所以每一对都得跑一次完整的前向计算。候选集是300篇,就是300次前向;要对全库跑,等于对每个查询把整个索引跑一遍。

这就是论文里那句代价高到不可承受的实际含义——不是慢一点,是差着量级。两段式架构存在的全部理由,就是用便宜的那个把候选集从几十亿压到几百,再让贵的那个只处理这几百个。

第三行那个自回归排序是这篇论文的主角,英文缩写ARR。它的思路很不一样:不给文档打分,而是让一个语言模型直接把文档编号一个token一个token地生成出来,生成的顺序就是排名顺序。

这个做法这几年已经有人在做,论文的贡献不在提出它,而在两件别的事:给它的表达能力做了一个形式化的证明,以及指出现在训练它的方式是错的。

那篇论文到底证明了什么?

这篇论文2026年1月9日提交,作者八人,来自Google DeepMind、马萨诸塞大学阿默斯特分校和德克萨斯大学奥斯汀分校。到2月11日已经改到第四版。

它的核心定理针对双编码器,结论是一个维度下限。

论文先定义了一个叫完全排序任务的东西。这个定义有两个条件:对每个查询,库里所有文档都算相关;并且对文档的任意一种排列顺序,都存在某个查询要求的就是这个顺序。

然后定理说:设文档总数是k,如果双编码器的向量维度n满足下面这个不等式,那么不存在任何一组参数能让它解出完全排序任务。

n < ln(k!) / (2 · ln k)

这个下限的量级,用斯特林近似展开之后大约是k的一半。也就是说,要保住对k篇文档做任意排序的能力,向量维度得随着文档数量线性长上去。

与之对照,论文证明自回归排序在无限容量假设下能做同一件事,而且隐藏维度是常数——只要词表嵌入矩阵满秩,它就能通过约束解码生成任意的概率分布,进而生成任意排列。

这就是那句“表达能力严格强于双编码器”的来源。它不是实验对比出来的强,是从维度需求上证出来的强。

一个768维的向量,够给多少篇文档排序?

把上面那个不等式拿来算几个数,感受一下量级。

文档数k维度下限(按公式算)说明
10约4十篇文档的任意排序,4维够
100约40百篇要40维
1000约429千篇要四百多维
10000约4458万篇就要四千多维
1000000约46万百万篇要四十多万维

反过来推更直观。常见的句向量维度是768,按这个公式倒算,768维大约只够对不到两千篇文档做任意排序。而一个中等规模的独立站,商品加文章就能超过这个数。

但这里必须把话说完整,不然就成了危言耸听。

定理管的是完全排序任务,那个定义要求“任意一种排列都得有某个查询对应”。真实检索完全不是这样:绝大多数查询只跟少数文档相关,也没人要求系统能输出所有可能的排列。所以这个下限是最坏情况的理论边界,不是工程系统的达标线

那它有什么用?它说明了双编码器的能力瓶颈在哪一头。向量检索之所以在小范围内表现很好、范围一大就需要精排来救,不是实现没做好,是维度这个参数从数学上就压着它。

这一层认知对做SEO的人有直接用处。站内之前拆过AI读取和引用网页的几个底层机制,其中向量那一环常被想象成一个无损的语义空间;而这条定理说的是,那个空间的容量有硬边界,而且边界跟你库里有多少东西直接相关。

为什么标准训练方式教不会模型排序?

论文的第二个论点比定理更有实用价值,因为它指出的是一个现在正在被广泛使用的错误做法。

让语言模型生成文档编号,训练时用的是标准的下一个token预测。这套损失函数做的事是:给定前面的token,让模型把概率压到正确的那个token上,其他全压成零。

论文对这种损失的评价只有一个词:与排名无关。

为什么无关?因为在排序任务里,每个查询对应的不是一个正确答案,而是一串有顺序的答案。第一名和第二名都是对的,只是第一名更对。而下一个token预测这套损失,一次只能给一个文档提供信号,也就是只教得了第一名。第二名往后的顺序,它没有表达的语法。

结果就是模型学会了一件事:把最相关的那个找出来。它没学会的是:剩下的怎么排。

这个问题的形状,做SEO的人应该觉得眼熟。目标函数只盯着一个指标,其他维度就没人管——站内写过埋了几十个事件却看不清生意好坏,先得把测量框架设计清楚,说的是同一类毛病:你量什么,系统就优化什么,没量的那部分自己烂掉。

SToICaL做了哪两件事?

论文提出的新损失叫SToICaL,全称是简单的token与item校准损失。它干的是两件事,分在两个层级上。

第一件:在item层级按名次重新加权

训练样本里每个文档都带一个真实名次。重加权做的就是按名次给权重:名次越靠前,这个样本在损失里的分量越重。

论文试了几种权重函数,其中一族是名次的负幂,也就是权重等于1除以名次的α次方。α越大,前排的权重压得越狠。

第二件:在token层级沿前缀树做边际化

这一件更巧。文档编号是被切成token的,不同文档的编号常常共享前缀。把所有合法编号按token排成一棵前缀树,那么树上的每个节点就对应一批还没被区分开的候选文档。

边际化的意思是:不再要求模型在某一步把概率全给一个token,而是按这个节点下面挂着的那些文档的真实相关度,把概率质量分配到各个分支上。相关度高的分支分得多,低的分得少,但都不是零。

这两件事合起来,模型在每一步都同时收到两种信号:这条路通向的文档有多重要,以及这一步该在几个分支之间怎么分配。

权重函数的形状,比有没有加权更要紧

论文在WordNet上把几种权重函数都试了一遍,这组对比是全文最实用的部分,因为它说明同样叫按名次加权,选错形状照样不work。

权重函数R@1R@2R@5nDCG
不加权(标准下一token预测)99.9662.4363.4294.89
名次的负一次方91.187.6893.9499.6
名次的负二次方97.7495.6996.5899.83
名次的负三次方99.2297.3595.5399.81
名次的负五次方99.697.1493.5299.67
线性递减权重51.6269.8893.3499.6

最后一行是这张表里最刺眼的数字。线性递减权重的意思是第一名权重最高、最后一名最低,中间等差递减,听起来完全合理。可它的R@1只有51.62——连一半的查询都没能把最相关那个放到第一位,比不加权的99.96差了48个点。

原因在于形状。线性递减把第一名和第二名的权重差拉得很小,模型分不清该优先谁;而负幂函数在前几名之间落差很陡,第一名的权重能是第二名的四倍甚至三十多倍,优先级就清楚了。

再顺着负幂那几行看,会发现指数是个需要调的旋钮,不是越大越好。指数从一涨到五,R@1从91.1单调爬到99.6;但R@5先涨后跌,在负二次方时达到最高的96.58,到负五次方就掉回93.52。指数越大越像只教第一名,也就越往标准训练那个毛病上退回去。

这件事对做SEO的人有一层可借用的判断:加权这个动作本身不说明什么,起作用的是权重之间的落差有多陡。同样的道理在排期与资源分配上也成立——把预算平均摊到二十个词上,和按预期收益做陡峭分配,产出完全不同。站内做过一次按投入产出给优化策略排序的热力图,那次的结论也是落差比覆盖更决定结果。

四分之一的生成结果是无效编号,这个数字怎么来的?

论文在两个数据集上做了实验,一个是WordNet的上位词任务,一个是ESCI的电商购物查询。先看WordNet那组,评估样本是5000个查询与目标的组合。

这里有个指标叫CVR,约束违反率,量的是模型生成出来的编号里有多少根本不是库里任何一个文档的编号。

训练方式CVR(越低越好)nDCGR@1R@2R@3R@5
标准下一token预测27.66%94.8999.9662.4355.363.42
按名次重加权(α=2)0.0%99.8397.7495.6995.4896.58
item与token两层组合(β=6)0.0%99.7797.6896.2995.6795.69

第一行那个27.66%值得停一下。标准训练方式下,超过四分之一的生成结果指向了不存在的文档编号。模型认认真真生成了一串token,拼出来的东西在库里查不到。

换了损失之后这个数字变成0。不是降低,是归零。原因不难理解:沿前缀树做边际化时,概率质量只分配给树上真实存在的分支,无效路径从一开始就没有被分到概率。

这类“生成了一个看起来对但指不到东西的标识”的毛病,在别的地方也见过。站内实测过网页上的具名锚点,结论是三成多的页内锚点指不到目标,点下去地址栏变了页面不动。生成模型的无效编号和页面上的死锚点是同一个形状:指认这个动作成立,被指的东西不存在。

第一名找得准,第二名就崩了?

回到上面那张表的第一行,横着读一遍。

R@1是99.96,几乎满分。R@2掉到62.43,R@3只有55.3。

这条曲线把前面那个“损失函数与排名无关”的论点,变成了一个能看见的形状。标准训练把第一名教到了近乎完美,而第二名开始整条断了。中间掉了37个百分点,不是慢慢滑下去,是一步跌下去。

换成按名次重加权之后,R@1从99.96降到97.74,掉了2个多点;R@2从62.43升到95.69,涨了33个点。用第一名的两个点,换回了第二名之后的三十多个点

再看第三行那个组合损失:R@1保住97.68,R@2还涨到96.29,两头都拿住了。这说明item层和token层的信号不是互斥的,合起来用效果更好。

这个取舍模式在SEO这边有一个几乎一样的对应。只盯首位的优化和照顾整片位置的优化,从来不是同一件事——站内量过排名第一不等于被看见,得用像素而不是名次去丈量可见性,那次的发现是同一个第一名在不同结果页里露脸的面积能差好几倍。目标只写一个位置,损失的就是其余位置。

购物搜索那组数据为什么反着走?

ESCI是电商购物查询的数据集,论文在上面的结果和WordNet不太一样,而且这个不一样恰好最值得SEO从业者看。

训练方式nDCGR@1R@2R@5R@10R@50
标准下一token预测95.2395.1652.5827.6423.5162.99
沿前缀树边际化(β=2)97.2170.3258.0651.0748.0869.03

看R@1那一列:从95.16掉到70.32,整整掉了将近25个百分点。这是三张表里唯一一处第一名严重变差的地方。

再看后面几列:R@5从27.64升到51.07,R@10从23.51升到48.08,两个都接近翻倍。nDCG也从95.23升到97.21。

所以这组数据讲的是一个明确的取舍:把最相关那一个放对的能力下降了四分之一,换来的是前五名、前十名整片位置的召回接近翻倍。

为什么购物数据上这个取舍这么剧烈?论文没有给出解释,这是需要进一步研究的地方。但从任务性质上能看出一点端倪:购物查询下相关商品的数量比上位词任务大得多,一个查询能对上几十件商品,这时候“哪一件排第一”本身就没有唯一正确答案,而整片位置排得好不好才是用户能感知的东西。

这一点和电商搜索的实际体验是吻合的。买家很少只看第一个结果,他们在前一屏里横向比较。站内拆过集合页在AI购物时代为什么成了主战场,讲的就是这个:一整屏的商品组合比单个爆款的位置更决定成交。

如果Google真把这套架构用在商品搜索上,按这组数据推,变化的方向会是:第一名的位置变得不那么稳定,而进入前十的机会变多。这个推论只是从实验数据外推,不是任何官方说法。

这篇论文的评估规模有多大?

在往外推结论之前,得先看清这些数字是在多大的盘子上量出来的。

两个数据集本身要先认清。第一组来自WordNet词汇数据库,任务是判断词与词之间的上位关系,比如狗和哺乳动物;第二组来自ESCI购物查询数据集,内容是购物搜索词与商品标题的相关度标注。两者都不是网页。

论文正文里的三张结果表标明了各自的评估规模:WordNet那组是5000个查询与目标的组合,ESCI那组是310个。

310个样本,对一个要用来推演Google商品搜索走向的结论来说,是相当小的盘子。前面那个“R@1掉25个百分点”,换算下来就是几十个查询上的差异。样本一小,单个异常查询对平均值的影响就大。判断一个波动是真变化还是噪声,本来就得先看盘子,站内写过排名天天上下跳到底是正常波动还是真掉了,判据是同一套。

这不是说结果不可信。论文的定位是方法论验证,证明新损失比标准损失好,5000和310都够用。但它不是一份市场影响评估,把它的数字当成“Google改架构之后排名会怎么变”的预测,就超出了它能承担的范围。

另外两个限制也值得记下。一是两个数据集都不是网页检索数据,WordNet是词典里的上位词关系,ESCI是商品标题;真实网页检索的文档长度、噪声水平、相关度分布都不一样。二是论文里的模型规模、训练配置与Google生产环境完全不是一回事。

这类“用小样本上的强结论去推大系统的行为”的风险,站内碰到过很多次。做AI可见度监测时量过2961次查询,结论是名次本身就带很大噪声,同一个问题连问几次结果都不同。样本量决定了一个结论能扛多重的推论,这件事在读任何论文时都一样。

如果真换了架构,SEO会变什么?

这一节是推演,不是预测,前提是这套架构真的被用在生产环境上——而这一点目前没有任何证据。

被优化的对象会从分数变成路径

两段式架构里,每篇文档有一个分数,排序是把分数排一遍。自回归排序里没有分数,只有一条生成路径:模型逐个token生成编号,走到哪篇文档就是它。

这个差别不是实现细节。分数是可加的、可分解的,你可以问“这一项信号贡献了多少分”;路径不是,你只能问“模型为什么走了这条分支”。信号与结果之间那条能算账的链条,会被折叠进模型内部

过去几年SEO能做逆向分析,很大程度上靠的是这条链条还看得见。站内整理过排名因素的分级清单,也拆过NavBoost那批泄漏文件里关于点击的说法——那些分析都建立在“排名是若干信号加权出来的”这个前提上。换成生成式排序,这个前提就不成立了。

文档编号这件事会变得重要

自回归排序靠生成文档编号工作,而编号是被切成token的,共享前缀的编号会挂在前缀树的同一个分支上。

这意味着编号的分配方式会影响排序行为:分在同一分支下的文档,在生成时是被一起考虑的。论文没有讨论编号该怎么设计,但从机制上看,这是一个新的变量。

Google内部本来就对页面做分层,站内拆过页面被丢进哪一层索引这件事。如果编号体系和分层体系挂钩,那么“你的页面被编在哪一支”就会成为一个真实存在但完全不可见的因素。

整片位置比单一位置更值得投入

这是三张实验表里最稳的一个信号:新损失普遍改善的是第二名之后的位置,代价常常是第一名。如果生产环境沿用这个取舍,那么把资源全压在抢第一上的做法回报会下降,而覆盖一整屏的做法回报会上升。

这个方向和AI搜索这两年的变化是同一个指向。查询会被拆成多个子问题分别检索,站内讲过查询扇出把一个问题拆成十几个的底层机制;两套AI搜索界面的差别也得先分清,站内讲过AI概览和AI模式到底不一样在哪。答案是按段落拼的,站内也量过段落级被引用的诊断方式。两件事加上这篇论文的取舍,指向的都是同一句话:可被选中的面积,比某一个名次更值钱。

能立刻做的事只有一件

别改什么。这篇论文没有给出任何可执行的优化项,任何声称“按ARR架构优化”的建议都是编的。

真要做点什么,就把自己的内容在“一个主题下能不能覆盖多个相邻问法”这件事上加强。这件事在现在的架构下已经有回报,站内做过数据研究,一个页面到底能排多少个关键词那篇的结论是覆盖面本来就被低估了。不管架构怎么换,这个方向都不会白做。

别把论文当路线图

最后要把边界划清楚,因为这类新闻最容易被过度解读。

这篇论文是一篇方法论研究:它证明了一个维度下限,提出了一个训练损失,在两个公开数据集上验证了这个损失比标准损失好。它没有说Google要换架构,没有给时间表,也没有在网页检索数据上做过验证。

有一个时间上的细节值得注意:论文2026年1月9日就提交了,2月11日改到第四版,而它被当成新闻讨论是在9月。一篇一月的论文在九月被报道,中间那八个月里它已经改过三版。读这类消息时,先去看原文的提交日期与版本号,比看报道日期有用。算法这条线上的消息尤其要这样读,站内梳理过内容质量算法十四年是怎么一步步变的,真正落地的改动往往比论文晚很久。

论文与产品之间的距离,历来很远。站内解读过好几篇GEO方向的论文,比如AutoGEO那篇讲三大引擎偏好的,也拆过那篇用数据说明关键词堆砌与对抗攻击注定失败的。共同点是:论文能告诉你机制往哪个方向走,但不能告诉你下个月该改哪一行。

顺带说一句,这一周里另外两件事和这篇论文是同一个方向。一件是ChatGPT购物把取料口换成了商品feed,另一件是Google把全网搜索结果做成了只给合作方的接口。三件事放在一起看,指的是同一件事:决定你排不排得上的那套东西,正在从你能看见、能查、能自己算的地方,挪到一份你拿不到的接口、一份你没接的数据流、一个你看不见的模型里

常见问题解答

这篇论文是说Google要换搜索排序架构了吗?

不是。它是一篇方法论研究,证明了双编码器的一个维度下限,并提出一个新的训练损失。论文没有说Google要采用这套架构,没有给时间表,也没有在网页检索数据上验证过。作者中有Google DeepMind的人,但那不等于产品计划。

768维只够两千篇文档排序,是不是说现在的向量检索都不行?

不能这么推。那个下限管的是论文定义的完全排序任务,要求库里每篇文档对每个查询都相关、并且任意排列都得有查询对应。真实检索里绝大多数查询只跟少数文档相关,也没人要求系统输出所有可能的排列。这个数字说明的是理论边界在哪一头,不是工程系统的达标线。

那个27.66%的无效编号是什么意思?

模型逐个token生成文档编号,生成完拼出来的那串编号在库里查不到任何文档,这就算一次约束违反。标准训练方式下这个比例是27.66%,超过四分之一;换成沿前缀树做边际化的损失之后降到0,因为概率质量只分配给树上真实存在的分支。

为什么新方法会让第一名变差?

因为标准训练只教第一名。它把全部概率压到最相关那一个上,所以R@1能做到99.96,但第二名开始整条断掉,WordNet上R@2只有62.43。新损失把信号分给多个名次,第一名的分量被摊薄了,换来的是后面位置大幅改善。论文里的组合损失能两头都保住,WordNet上R@1是97.68、R@2是96.29。

购物数据上R@1掉了25个点,这对电商SEO意味着什么?

目前只能说这是实验数据里的取舍方向,不能当成排名预测。方向是:最相关那一个排第一的稳定性下降,而进入前五、前十的机会接近翻倍。要注意ESCI那组只有310个评估样本,盘子很小,不足以支撑对真实商品搜索的推断。

现在该为这件事做什么优化?

不需要做任何针对性优化,论文里也没有可执行的优化项。值得做的是一件不管架构怎么变都有回报的事:让一个页面在一个主题下覆盖更多相邻问法,把可被选中的面积做大,而不是把资源全压在抢单一位置上。

权威参考资料

分享到
标签
版权声明

本文标题:《Google排序架构在换:两段合成一个模型》

本文链接:https://zhangwenbao.com/google-deepmind-autoregressive-ranking-arr.html

版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0

继续阅读
发表评论
分享到微信 或在下方手动填写
支持 Ctrl + Enter 提交