作者:周天华、马晋、刘杰
腾讯QQ浏览器搜索应用部
1:引言
自从搜索引擎问世以来,信息检索算法历经多次技术更迭,其演进的历程可大致归纳为四个技术代际:1.0 文本索引 ->2.0 超链分析 ->3.0 机器学习 ->4.0 深度学习。
2022 年底,ChatGPT 成为全球技术焦点,其具备的多轮对话、推理和对长文本的理解能力,解决了以往搜索引擎所无法有效解决的难题。
然而,由于 GPT 目前还面临着许多挑战,例如大模型幻觉问题、高额的千次搜索成本、变现模式的颠覆以及法律的强监管等问题,各搜索引擎暂时都没有实现用 GPT 替换现有引擎。即使是 NewBing 也只是将传统的搜索引擎结果作为 ChatGPT 的输入来增强效果。因此,搜索引擎是否会进入 5.0 GPT 技术代际,仍在探索中。
腾讯 QQ 浏览器作为一款国民级智能工具,用户通过搜索进行信息查询是其中一个重要的使用场景。本文主要探讨 QQ 浏览器・搜索在 4.0 时代 - 即深度学习模型方面的各种实践,以及在 5.0 时代 - 即生成式超大模型方向的尝试。
在这两个技术代际过程中,预训练语言模型是核心技术基座,模型性能的好坏通常由模型结构、样本数据、输入表示信息、模型规模和算力等因素共同决定,如图 1 所示。
图 1
2:搜索匹配四大难题
语义匹配、内容命中、需求切换、多需求 PK
搜索引擎是一种智能化的信息检索工具,能够从互联网上的海量信息中为用户提供精准的搜索结果。在实际应用中,搜索引擎需要解决的关键问题是如何让用户快速、准确地找到所需内容。虽然通过字面匹配可以获得最相关的文档,但在大多数情况下,这种匹配方式会面临多种挑战,例如:
Query 和 Doc 非直接命中,而是语义满足的,需要通过语义建模才能挖掘出最匹配的 Doc,如图 2。
Query 和 Doc 的标题命中不好,但是和 Doc 的内容文本命中较好,需要对 Doc 的内容域进行建模,如图 3。
对于相同的搜索请求,用户会随着时间的变化产生不同的结果页需求,需要对需求切换进行建模,如图 4。
同一个搜索 Query 下,相同匹配的结果在满足用户需求上存在差异,需要对多需求 PK 进行建模,如图 5
图2(左)和图3(右)
图 4(左)和图5(右)
3:技术框架
如图 6 所示,QQ 浏览器整个搜索系统采用分层治理,返回结果条数呈现金字塔型,自下而上分别是:
数据层:主要是抓取存储解析各种数据内容。
召回层:从千亿级 Doc 中召回和 Query 相关的百万级目标,然后通过粗排模型进行进一步筛选获取十万级。
精排层:在粗排召回的基础上引入更多的精细特征,引入更复杂的模型计算获得和 Query 最相关的百级 Doc,大量的深度语义模型都分布在这一层。
混排层:主要是用于普通结果和卡片类结果进行插入混排。
为了解决搜索引擎面临的诸多挑战,在整个系统的多个模块中引入了深度语义匹配模型,典型的有:
精排层相关性模型,除去传统的字面匹配特征之外,重要特征是深度语义匹配。
精排层时效性模型,除去时间因子,爆发系数特征之外,重要的特征是深度语义。
深度点击模型,除了有点率,点击率,跳过率,时长之外,重要的特征也是深度语义。
TOPK 模型,除相关性,时效性,质量,热度特征之外,也有内容深度语义匹配特征。
图 6
4:训练 pipeline
如图 7 所示,QQ 浏览器・搜索构建了从预训练 ->post 预训练 -> 第一轮 f.NETune-> 第二轮 finetune 的 pipeline。
图 7
A:预训练
采用百科,新闻,H5 等 1000 亿级别数据进行无监督预训练。预训练任务采用 Mask LM,将字级别 mask 升级为 Phrase + 词级别和实体级别 mask,同时以一定概率替换为同义或者近义词,增大模型区分的难度。Nsp 任务的前后句正负样本通常都来自于同一篇主题,进一步增大模型区分的难度。在位置编码中将绝对位置编码换成相对位置编码,让每个 term 更关注自身附近 term 的 attention。两阶段式训练任务,第一阶段以 max_seq_len=128 配置,第二阶段以一阶段产出模型热启动,之后以 max_seq_len=512 的配置完成第二阶段的预训练,达到训练加速。
B:post 预训练
采用搜索 100 亿级别的点展数据再做一次 post 预训练,让模型的效果更适应搜索场景。
C:第一轮 fine-tuning
同样还是采用 100 亿级别的点展数据,将 Q - 有点和 Q - 无点构造成 pAIrwise 对输入训练模型,采用有监督的方式对模型进行微调训练。由于搜索获取点展数据的成本相对较低,因此可以获得大量级的样本对模型进行 fine-tune 训练。
D:第二轮 fine-tuning
在人工标注的精标样本下,加上 meta-search 样本进行第二轮有监督微调,进一步提升模型精度。
同时为了让模型能同时学习好语义,文本匹配的能力,在第二轮 fine-tuning 过程中,同时加入了相关性匹配,词权分档进行多任务学习,如图 8 所示。训练的 loss 为相关性的 HingeLoss + 词权 Cross-Entropy Loss,其中 HingeLoss = max (0,-[y_i-y_j] + margin),Cross = -(ylog (p) + (1-y) log (1-p)),通过 2 个任务进行协同训练,防止模型过度偏向语义匹配而丢失文本匹配的能力。
图 8
5:模型结构
BERT 模型采用全连接层,由于每层都涉及到全交互,因此效果较好。然而,在实际应用中,搜索引擎对在线应用有严格的响应时间要求,通常都在几十毫秒级别。QQ 浏览器・搜索采用 12 层在线推理模型,全交互结构无法满足响应时间要求,因此对该模型进行了升级,采用了如图 9 所示的模型结构。
输入层:输入信息的来源,包括 Query、Title、Content(图文核心句,视频为 ASR+OCR)、ClickQuery、Anchor、Meta、标签域等。
表示层:各个 filed 通过共享参数的方式学习各自的语义信息,模型结构深度 L=7,宽度 H=768,头数 = 12。
匹配层:采用 SE-GATING 注意力机制动态分配 Doc 的各个域的匹配权重(可理解为 Attention 机制,是通过 SE-NET 网络实现),模型结构为全连接,深度 L=2。
交互层:在考虑性能的前提下,进行更深层次的交互学习,模型结构深度 L=3,宽度 H=768,头数 = 12。
图 9
6:多域动态匹配
搜索召回的 Doclists 中,有的 title 命中较好,有的 cont 命中较好,也有一些需要 title+cont 共同命中才能得到较好的结果。为了召回相关性较好的 Doc,通常需要叠加不同的匹配域,但不同的域在不同匹配时权重不同。当召回的 Doclists 中存在 title、cont、anchor、click 等不同域的命中时,如何分配各域之间的动态权重是搜索模型需要解决的一个典型难题。
如图 10 所示,标准的 transformer 将 query、title、cont 等域拼接后输入模型,然后整体进行全域交互计算,但不同的 Query 和 Doc 在命中域的权重分配不是固定不变的,而是一个动态分配的过程。
QQ 浏览器・搜索采用了如图 11 所示的结构,采用多塔交互,将 query 分别与 title、cont、anchor 等各自进行交互,而 title 和 cont 之间不进行 attention。这种结构借鉴了 CV 中的 SE-NET 注意力机制,在经过这个操作后得到每个域的 Channel,然后再进行 Query 和域的注意力计算,这样模型可以获得一个更宏大的视野,比如整个域不相关时,那这个域就直接不起作用,起到门控的功能,对比直接将 Doc 中不同域的 Term 全部输入模型的方式,虽然 Transformer 能够学习到 Term 间的注意力,但是不相关的 Field 中的 Term 还是或多或少影响得分,通过这个结构过滤不相关域的噪音,从而能够将不同匹配程度的域计算不同的权重。与标准结构相比,多域动态权重结构能带来相关性正逆序率 8% 的提升。
图 10
图 11
7:模型簇 & 自训练
在预训练 -》finetune-》蒸馏范式下,teacher 模型的效果决定了蒸馏后的 student 模型的天花板。得益于 teacher 模型在海量参数下强大的语义捕捉能力,特别是对于长尾语义匹配的解决效果非常好,因此在检索匹配方向对于 teacher 模型的效果提升是首要的工作。
但是,随着多轮迭代之后单个 teacher 效果达到瓶颈,基于 transformer 结构,若想继续提升效果,需要扩大模型层数或者标注大量样本。然而,当 teacher 达到 48 层之后继续扩层会带来成本指数级增加,同时人工标注大量样本同样也意味着成本的大幅度增加。
为解决扩层带来的成本问题,QQ 浏览器・搜索采用模型簇的方式提升模型效果,如图 12 所示。采用不同的样本数据(如点展数据、人工标注数据、metasearch 数据),并采用不同的模型结构(如标准 BERT、QQ 浏览器・搜索预训练大模型、深度点击模型等)训练多个 48 层模型。
然后,将这些模型作为离线 XGB 模型的重要特征,在人工标注的百万级相关性样本下融合其他人工匹配等特征训练决策树模型。由于此模型引入了大量的效果较好的大模型做特征,因此对 Query-DOC 的相关性匹配打分效果较好,并且由于是离线部署因此没有响应速度的制约。
通过 XGB 模型对未标注的亿级 Query-DOC 进行打分预测,和人工标注样本相比,这种标签数据精度略低,但也能接近人工标注精度的 90+%。这种标签我们称之为伪标签,虽然伪标签的样本精度无法和人工标注相比,但是由于成本非常低,可以轻易获得亿级量级,通过量变产生质变带来搜索效果提升。
图 12
在获得亿级伪标签样本之后,基于预训练模型,进一步 finetune 出一个 48 层的大模型作为 teacher,从而解决了标注样本成本高的难题。然后,在百万级的人工标注样本上蒸馏得到一个效果较好的 student。通过模型簇和伪标签样本进行自训练,未增加成本的情况下,最终实现了大幅度提升 teacher 和 student 模型的效果。
8:助教网络
在教授和本科生之间添加一位博士
搜索排序模型面临的挑战是模型效果和响应速度以及部署成本之间的矛盾。模型参数越大,效果越好,但响应时间会增加,同时成本会指数级增加。
为了满足亿级用户的海量搜索请求,工业界搜索引擎往往采用蒸馏技术来减小模型参数,并最大限度保留效果。
为了进一步提升蒸馏的 student 模型效果,最直接的手段是提升 teacher 模型的效果。但是,teacher 模型层数增加带来效果提升的同时,不代表 student 模型也会同步提升。大量的实验发现,teacher 模型参数扩大之后,在特定的任务下效果提升。然而,由于 student 和 teacher 两者之间的模型参数差异过大,学习能力相差过大,导致 student 并没有学会 teacher 新学习到的能力。因此,如何减少 student 和 teacher 之间的蒸馏损失,也是近年来工业界一直在研究的重要方向。
QQ 浏览器・搜索通过引入助教网络来解决这个问题。助教网络由多个模型组成,它们之间的关系如图 13 所示。具体而言,使用 48 层模型先蒸馏 24 层中间层模型,然后再用 24 层中间模型蒸馏 12 层 student 模型。这个 24 层模型就是助教网络。
这个过程类似于教授直接教本科生的情况,由于两者的知识储备差距较大,导致学生往往很难完全吸收教授想要传授的知识。而通过在中间增加博士节点,让教授先教会博士,再由博士去教学本科生,由于博士在知识接收能力上强于本科生,因此能较好的学会教授已经掌握的知识。同时,博士和本科生在学习能力上相差相对较小,能较好地将知识进行传递。
为进一步提升效果,助教模型往往不止一个,比如 48 层 teacher-> 助教 1-> 助教 2->……->student,通过多步蒸馏的方式,避免由于 teacher 和 student 模型在参数,layer 上的差异过大导致的蒸馏损失。
在搜索模型中,通过引入单个助教模型和传统的蒸馏相比,student 效果相对提升 5%。
图 13
9:MatchMatrix 矩阵
自从 BERT 发布以来,搜索引擎的演进范式已经从重点关注人工特征转向了预训练 ->finetune->distillation 模式。随着深度语义特征在最终模型中的权重越来越大,这种大力出奇迹的方法在带来效果提升的同时,也会削弱字面匹配特征的作用。这导致了一些 CASE(语义飘移)的出现如图 14 所示,相关的结果排序较低,这些本应该可以通过原始字面匹配解决的 CASE 却出现了逆序的情况。
为了解决这个问题,行业采用了两种建模方法:
Semantic matching:建立单词、短语和句子之间的相似关系,例如 “出租车” 与 “的士”,着重解决句子级别的语义匹配。
Relevance matching:建立精确匹配关系,例如关键词命中、大片段命中以及紧密片断是否被拆散命中,着重解决 phrase 级别的精确匹配。
这种分类建模需要进行大量的人工匹配特征设计,并需要进行大量的人工调参,以及对两类特征的 balance 进行验证,这个过程的成本相对较高。
图 14(左)和图 15(右)
QQ 浏览器・搜索系统采用了对深度语义模型进行升级改造的方法,如图 16 所示。
其中 BERT 模型的 CLS 向量用于捕捉更高级别的信息,如句子级相似度等。在输出 CLS 向量的基础上,构造 match matrix 矩阵,该矩阵通过将 Query 输出的 token 向量和 Doc 输出的 token 向量组合而成。
该矩阵利用了多层显式匹配,并使用了 CNN 和 Pooling 层来提取 match matrix 矩阵,提取 Q 中每个 TERM 在 Doc 中的命中信息。在构建匹配矩阵的过程中,充分利用不同 term 在 Q 中的词权重,以便为每个 term 构建独特的匹配权重。最后将匹配矩阵和 BERT 输出的 CLS 向量通过 Aggregator 进行合并,以获得深度语义模型隐式匹配打分和显式匹配特征的融合结果。通过将字面匹配特征显式地传递给深度语义模型,可以有效地纠正语义飘移。
图 16
如图 15,17 所示,通过构造多层匹配矩阵,采用卷积核进行信息抽取,并采用最大池化将 QxTxK 转换为 QxK,然后再应用 term weighted 将多种匹配信息融合成向量。这种方法能够自动识别许多文本匹配的特征,例如连续命中、Bigram 逆序、散乱命中等如图 18 所示,不再需要大量的人工规则去设计这些特征。
图 17(左)和图 18(右)
10:生成式大模型应用
ChatGPT 发布之后,各大互联网公司纷纷开始布局生成式大模型,作为其最匹配的应用场景之一,搜索引擎也受到了广泛关注,各大引擎都在积极尝试如何将自研的生成式大模型应用到搜索引擎系统之中。
样本生成
如图 19 所示,搜索的匹配模型采用的是 BERT 模型下典型的预训练 ->post 预训练 -> 蒸馏的范式,而在蒸馏的过程中,往往需要人工标注千万级样本,成本高且耗时长。
而通过生成式模型可以快速的标注大量的自动化样本。标注的方法分为判别式,既输入 QT 问生成式模型结论,如 “都安气车到班领气车” 和 “都安汽车到班领汽车” 哪个是正确写法;也有通过生成式大模型生成样本如 “query = 北京” 可以扩充哪些需求词。通过生成式大模型低成本快速获得亿级别样本,大幅度提升了蒸馏模型的效果。
图 19
离线生成式应用
生成式大模型拥有强大的语言理解能力,如何将这种能力转化为搜索排序模型的效果是非常重要的研究。
如图 20 所示,在现有的匹配模型输入域上,通过生成式大模型进行域提取升级如 Doc 的核心句提取,以及对缺失后验数据的 Doc 补充 Click-Query,同时也通过使用生成式大模型对原始标题进行标准化改写的方式扩充新的标题域,多种方式对输入信息域优化,提升输入域的质量进而提升模型效果。
图 20
涌现能力蒸馏
生成式大模型在参数量和样本量扩大之后,涌现了一些惊人的模型能力。如何将这种大模型的能力迁移到现有的搜索排序模型中?
搜索采用集成蒸馏的思想如图 21 所示,根据不同的数据集,不同的模型 BASE 训练多个 teacher,然后通过将多个 teacher 共同蒸馏 student 的方式,提升 student 模型的效果。由于生成式大模型和原有的 teacher 在参数量级和输入文本长度上都获得了一个极大的提高,因此能够带来蒸馏的 student 效果大幅度提升。
图 21
端到端生成
生成式大模型拥有巨大的参数量级进而导致较慢的推理速度,而搜索引擎往往需要在毫秒级时间内向用户返回搜索结果,因此如何将生成式大模型引入搜索引擎的在线检索系统是个难题,但是由于生成式大模型有惊人的效果,因此端到端的模型替换原有的系统将是一个趋势。
如图 22 所示,在纠错端到端方向,通过在生成式大模型 BASE 模型之上,通过人工标注数据做为样本集,采用 SFT 对模型进行微调产出微调之后的生成式大模型。然而此时的模型往往还有效果不佳,幻觉等方面的问题,因此通过挂载搜索结果,知识图谱库等方式对模型进行搜索增强,产出搜索增强之后的生成式大模型。
图 22
11:评估效果
在搜索系统中,评估模型效果好坏的一个重要指标是 Query-Doc 的相关性正逆序比。计算方法是根据排出的结果进行从前到后两两组对,如果排在前面的结果比排在后面的结果更相关则是一个正序对,反之则为逆序对。正序对 / 逆序对为正逆序比,值越大越好。如图 23 所示,在 TOP350 条结果采样正逆序比从基线 2.5 优化提升到 4.0。
图 23
当前,搜索系统正处于 4.0 深度学习阶段向 5.0 生成式大模型阶段的过渡,整个系统将在生成式模式下进行重塑,随着模型的参数越来大,未来的搜索效果将能获得进一步的大幅度提升,最终将会让智能化搜索成为可能。
作者团队介绍:QQ 浏览器搜索应用部搜索排序中心,承接用户天级几亿次搜索需求,负责搜索系统的排序优化工作,在千亿索引的基础之上,采用千亿级参数大模型为基座,叠加预训练,大数据挖掘,深度语义建模,智能摘要抽取,自动化热点发现,超大规模并行计算等技术,实现极致的用户需求满足。