背景
在互聯(lián)網(wǎng)行業(yè)搜索無處不在,比如:在百度網(wǎng)站搜索技術(shù)文檔、在百度地圖搜索某地點位置、在美團(tuán)找外賣、在拼多多找商品等都離不開搜索。搜索不同于推薦,需要用戶輸入query,搜索引擎會返回與query相關(guān)性最高的幾組點(這里的點可以代表文檔、POI、美食、商品等用戶要搜的事物),這里稱為精確找點,也就是說用戶在使用搜索前,已經(jīng)有明確的查找目標(biāo),而搜索縮短了用戶與點之間的距離,其重要性不言而喻。本文重點介紹互聯(lián)網(wǎng)行業(yè)搜索的流程、發(fā)展和現(xiàn)狀,希望對從事和將要從事搜索行業(yè)的人員帶來一些啟發(fā)。
搜索流程
搜索系統(tǒng)一般可以抽象為以下幾個維度:離線數(shù)據(jù)建設(shè)、Query理解、召回、排序和展示,在企業(yè)中往往也是按照這幾個維度劃分團(tuán)隊對應(yīng)開發(fā)維護(hù),其中每個維度都可以單獨寫一篇文檔詳細(xì)介紹,這里我們暫且介紹整個搜索流程。

數(shù)據(jù)層:搜索的本質(zhì)是query與數(shù)據(jù)的匹配,數(shù)據(jù)的質(zhì)量直接決定搜索的質(zhì)量,所以數(shù)據(jù)是搜索的根本。數(shù)據(jù)團(tuán)隊負(fù)責(zé)接入多方數(shù)據(jù),最后把非結(jié)構(gòu)化的數(shù)據(jù)處理成易理解的結(jié)構(gòu)化數(shù)據(jù)存儲(比較復(fù)雜繁瑣,比如結(jié)構(gòu)化為標(biāo)題、內(nèi)容、類型等字段),方便其他團(tuán)隊使用。
Query理解:當(dāng)用戶輸入 query時,首先query理解模塊對query進(jìn)行分析與解析,比如輸入query [清華大學(xué)在哪里],query 理解模塊會對該query進(jìn)行分詞(清華|大學(xué)|在哪里)、term 重要性標(biāo)注(清華[2]|大學(xué)[3]|在哪里[1])、口語化解析(清華大學(xué)[normal]|在哪里[oral])等,并將這些信息傳給召回和排序?qū)印?
召回:召回的定位是粗篩,粗略的篩選出與query匹配的候選集(量級一般為幾千到幾萬),緩解rank的壓力。召回層拿到query理解的信息之后,會根據(jù)term重要性等信息構(gòu)建多路召回服務(wù),在企業(yè)比較常見的兩種召回服務(wù)為倒排索引召回和語義召回。倒排索引是對每個詞構(gòu)建 kv 形式的數(shù)據(jù)結(jié)構(gòu);而語義召回是根據(jù)用戶輸入的query 與 doc 構(gòu)建雙塔深度語義模型(常見的模型為 DSSM 等),對 query 和 doc 分別產(chǎn)生語義向量,利用向量進(jìn)行相似度匹配召回。
Rank:當(dāng)召回篩選出候選集后,會流轉(zhuǎn)到排序?qū)优判颍判蛞话惴譃榇峙拧⒕拧⒅嘏拧?
粗排,是對召回的數(shù)據(jù)進(jìn)行粗略排序,主要作用是快速挑選出符合要求的候選集,量級一般為幾百,特點是要求速度快,所以這里常用的模型是樹模型。
精排,是對粗排的數(shù)據(jù)進(jìn)一步的排序,如精排名字所述,特點是需求精確的排序,往往在特征層面上會更加豐富,模型也會更加復(fù)雜(如 dfm、dcn、mmoe 等),量級一般為幾十,在排序上也最為重要,直接影響用戶體驗。
重排,定位是針對不同的業(yè)務(wù)需求進(jìn)行規(guī)則調(diào)序,比如優(yōu)先展示某某品牌產(chǎn)品。
展示,是直接呈現(xiàn)給用戶的,包含數(shù)據(jù)和樣式,比如對某些字體飄藍(lán)、展示由策略生產(chǎn)的推薦理由、展示商品的價格等,更多的由前端同學(xué)開發(fā)維護(hù)。

搜索技術(shù)應(yīng)用
在了解搜索的流程之后,本部分聊一下搜索引擎的技術(shù)應(yīng)用,主要是【召回】和【排序】兩部分介紹,這兩部分也是搜索引擎的核心。
召回
最常見的召回方式是倒排索引,所謂倒排索引是離線對數(shù)據(jù)進(jìn)行切詞,然后按照詞粒度構(gòu)建 kv 格式進(jìn)行存儲,比如有三個短文本:北京郵電大學(xué)、清華大學(xué)、北京大學(xué),先用分詞工具對三個文本進(jìn)行切詞,結(jié)果為:北京|郵電|大學(xué)、清華|大學(xué)、北京|大學(xué),每個詞分別作為 key,包含這個key的文本作為 value,這里最終 kv 格式為:北京(key) -> [北京郵電大學(xué)、北京大學(xué)](value),郵電(key) -> [北京郵電大學(xué)](value),大學(xué)(key) -> [北京郵電大學(xué)、北京大學(xué)、北京大學(xué)](value),清華(key) -> [清華大學(xué)](value),共4組數(shù)據(jù)。當(dāng)用戶輸入[大學(xué)]的時候,找到對應(yīng)的key也就是大學(xué),拉取對應(yīng)的文本,這里是[北京郵電大學(xué)、清華大學(xué)、北京大學(xué)]三組數(shù)據(jù),達(dá)到了召回的目的。

構(gòu)建倒排索引示意圖
然而,僅僅依靠倒排索引召回會存在召回能力不足的問題,用戶輸入往往存在多樣化的情況,對于同義、錯誤輸入、簡稱輸入等倒排索引召回?zé)o法命中其中的key,也就影響召回效果。近年來,隨著深度學(xué)習(xí)的興起,越來越多的深度學(xué)習(xí)技術(shù)在工業(yè)界落地,大大提升了用戶體驗。其中,以 DSSM (Deep Structured Semantic Models)為代表的深度語義模型為為計算語義相似度提供了一種思路,該架構(gòu)為雙塔結(jié)構(gòu), query 和 doc各輸入到雙塔模型產(chǎn)生對應(yīng)向量,并對doc向量構(gòu)建離線緩存;當(dāng)用戶輸入query,在線產(chǎn)生query向量,用近鄰算法(常見fassi、hnsw等)從向量庫中檢索相似度最高的topN作為語義召回候選集,如下圖所示。


當(dāng)然在召回方式上,還有其他的補(bǔ)充召回,比如個性化召回、統(tǒng)計共現(xiàn)召回,這里不一一詳細(xì)介紹。
Rank
從規(guī)則排序到線性回歸演進(jìn)
在機(jī)器學(xué)習(xí)不火的時候,最開始甚至使用人工規(guī)則,每個特征以人工經(jīng)驗給與一定的權(quán)重,優(yōu)點是模型可控、也具有可解釋性,缺點也很明顯這樣的“人工模型”可泛化能力、自動化能力很差,需要人工根據(jù)badcase去調(diào)整。后來出現(xiàn)線性回歸,能夠根據(jù)數(shù)據(jù)自動學(xué)習(xí)排序的內(nèi)部規(guī)律,優(yōu)點是解決了人工調(diào)整權(quán)重的問題,同時也具備強(qiáng)的可解釋性,但因為是線性模型,表達(dá)和泛化能力、以及缺失數(shù)據(jù)的處理仍然不足。
從線性回歸到樹模型的演進(jìn)
隨著 GBDT、XGB等樹模型的發(fā)展,越來越多的排序算法應(yīng)用樹模型(至今很多企業(yè)仍然使用樹模型),主要得益于樹模型能夠表達(dá)非線性空間,泛化能力好,可解釋性強(qiáng),收斂速度快,使其能夠在企業(yè)中對策略快速迭代,甚至在很多場景要優(yōu)化NN模型(樹模型有很多優(yōu)點,后續(xù)可以展開講)。

從樹模型到NN模型演進(jìn)
當(dāng)一個服務(wù)流量起來之后,積累的海量數(shù)據(jù)就會有用武之地,而樹模型的容量比較小,當(dāng)數(shù)據(jù)達(dá)到一定的閾值之后,再增加數(shù)據(jù)就無法提高相應(yīng)指標(biāo),而DNN因為海量參數(shù)具有更大的模型容量,為樹模型升級到NN模型提供了可能。
另一個應(yīng)用DNN模型的邏輯是,樹模型往往對連續(xù)的數(shù)值型輸入處理比較好(得益于樹模型對特征的排序和信息的分裂),而對本身沒有數(shù)值大小關(guān)系的離散變量表現(xiàn)往往較差,這時NN模型的對離散變量的embedding化往往會起到比較的效果,例如dfm、dcn的embedding交叉,后續(xù)可以對排序展開講講。

總結(jié)與展望
本文介紹了搜索的發(fā)展歷程以及搜索的整個流程,搜索流程共分為5個維度,每個維度都可以單獨開展一篇甚至幾篇進(jìn)行詳細(xì)介紹。雖然搜索系統(tǒng)整個架構(gòu)在行業(yè)中比較穩(wěn)定,但近期有一些觀點對整個行業(yè)帶來一些啟發(fā),比如利用海量數(shù)據(jù)對大模型(常見的Bert、Ernie等)進(jìn)行預(yù)訓(xùn)練,分別應(yīng)用兩個大模型對召回和排序進(jìn)行端到端的應(yīng)用。總之,隨著新技術(shù)和新想法的不斷涌現(xiàn),搜索引擎還有很多可以完善的地方,需要你我共同建設(shè)。
(部分內(nèi)容來源網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系刪除)