作者:周天華、馬晉、劉杰
騰訊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 瀏覽器搜索應用部搜索排序中心,承接用戶天級幾億次搜索需求,負責搜索系統的排序優化工作,在千億索引的基礎之上,采用千億級參數大模型為基座,疊加預訓練,大數據挖掘,深度語義建模,智能摘要抽取,自動化熱點發現,超大規模并行計算等技術,實現極致的用戶需求滿足。