王鎮(zhèn)宇,鄭揚(yáng)飛
(華北計(jì)算技術(shù)研究所系統(tǒng)八部,北京 100083)
面對龐大的數(shù)據(jù)量和復(fù)雜的數(shù)據(jù)組織結(jié)構(gòu),傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在存儲(chǔ)和檢索數(shù)據(jù)方面的性能并不令人滿意。鑒于存儲(chǔ)和檢索數(shù)據(jù)的復(fù)雜性,對信息檢索功能提出了更高的要求。工業(yè)界常用方法是將數(shù)據(jù)遷移到集成了數(shù)據(jù)存儲(chǔ)和檢索功能的垂直分布的搜索引擎[1],例如Solr、Elasticsearch等。盡管垂直分布式搜索引擎[2]提供的域指定語言(Domain Specific Language, DSL)查詢可以滿足大多數(shù)復(fù)雜的檢查請求,但它要求工程師對檢索請求和文檔之間的相關(guān)性進(jìn)行詳細(xì)分析,并對垂直領(lǐng)域的數(shù)據(jù)有詳盡的了解,在此之上進(jìn)行信號(hào)的過濾、放大等建模。這對提高檢索模塊的可擴(kuò)展性和檢索性能等功能帶來了挑戰(zhàn)。本文基于Elasticsearch(ES)進(jìn)行文本的初步檢索和排序,使用機(jī)器學(xué)習(xí)排序算法(Learning to Rank, LTR)[3]建模對返回的結(jié)果進(jìn)行排序,以最大程度地檢查請求和結(jié)果之間的相關(guān)性[4],同時(shí)優(yōu)化相關(guān)性評(píng)分策略使評(píng)價(jià)標(biāo)準(zhǔn)考慮文本的詞頻及文本長度,設(shè)計(jì)并實(shí)現(xiàn)一套智能檢索系統(tǒng)。
典型的排序?qū)W習(xí)模型如圖1所示,訓(xùn)練集為向量化的檢索集,通過學(xué)習(xí)系統(tǒng)學(xué)習(xí)出的模型,對測試集中的檢索q進(jìn)行排序相似度預(yù)測打分。排序?qū)W習(xí)算法按照輸入輸出空間、損失函數(shù)等定義的不同,可以分為3類。
圖1 排序?qū)W習(xí)模型框架
1.1.1 Pointwise方法
輸入為單個(gè)文本的特征向量,輸出則包括了每一個(gè)文本的相關(guān)性評(píng)分,通過對相關(guān)性評(píng)分[5]的排序輸出排序?qū)W習(xí)的結(jié)果。常用的Pointwise方法有梯度提升樹(Gradient Boosting Decision Tree, GBDT)、支持向量機(jī)(Support Vector Machine, SVM)等。由于并未考慮文本之間的相互依賴,且在檢索評(píng)價(jià)標(biāo)準(zhǔn)中很多都是基于檢索語句級(jí)別和位置定位級(jí)別的,因此Pointwise方法的局限性很大。
1.1.2 Pairwise方法
Pairwise方法的輸入為特征向量化的文本對,輸出為文本選擇為{+1,-1},通過得分函數(shù)得出每對文本的相關(guān)性評(píng)分來進(jìn)行排序,當(dāng)每一對文本對都嚴(yán)格有序,則整個(gè)輸出空間的文本有序。常用的Pairwise方法有RankSVM、LambdaRank等。這種方法的局限性也很明顯,譬如一對相關(guān)度都很低的文本對,它們的相對順序沒有辦法反應(yīng)它們在最終檢索結(jié)果中的最終位置,因此傳遞的信息依賴于結(jié)果文本對的數(shù)量。
1.1.3 Listwise方法
相較于前2種方法,Listwise的輸入為特征向量化的文本集,輸出為一個(gè)有序結(jié)果表。Listwise的評(píng)分方法本質(zhì)上還是采用Pairwise的評(píng)分方法,但不同的是將文本對作為一個(gè)樣本,從而考慮整體排序來進(jìn)行文本打分,因此相較而言Listwise的性能是優(yōu)于前2種方法的。常用的有LambdaMART等。
本節(jié)介紹在給定測試集的情況下,常規(guī)的幾種對信息檢索結(jié)果度量的相關(guān)標(biāo)準(zhǔn)。主要分為:無序檢索結(jié)果集合的評(píng)價(jià),評(píng)價(jià)標(biāo)準(zhǔn)有正確率P、召回率R以及平衡F值[6];有序檢索結(jié)果的評(píng)價(jià)標(biāo)準(zhǔn)有平均準(zhǔn)確率均值(Mean Average Precision, MAP)和歸一化折損累計(jì)增益(Normalized Discounted Cumulative Gain, NDCG)。
1.2.1 無序檢索結(jié)果集合的評(píng)價(jià)
正確率(Precision, P)計(jì)算公式見式(1),表示返回的文本中相關(guān)性文本的比重。
(1)
召回率(Recall, R)計(jì)算公式見式(2),表示返回的文本占所有相關(guān)性文本的比重。
(2)
通過表1可以更直觀地理解P和R的概念,于是有P的計(jì)算公式(3)和R的計(jì)算公式(4)。
表1 正確率召回率相關(guān)概念
(3)
(4)
(5)
1.2.2 有序檢索結(jié)果的評(píng)價(jià)方法
MAP是一種常用的有序檢索結(jié)果的評(píng)價(jià)方法。假定信息需求qj∈Q,所有滿足條件的相關(guān)文本集合為d1,…dmj,Rjk是返回結(jié)果中滿足條件的文本集合,則有MAP的計(jì)算公式(6)。
(6)
NDCG是另一種在機(jī)器學(xué)習(xí)的排序方法中常常使用的評(píng)價(jià)指標(biāo)。NDCG@k表示基于前k個(gè)檢索結(jié)果進(jìn)行計(jì)算。計(jì)算某個(gè)查詢集合Q,假設(shè)R(j,d)是人工給出的文本d對查詢j的相關(guān)性評(píng)分,則有公式(7),其中Zj,k是歸一化因子。
(7)
ROC曲線及AUC。ROC稱為受試者工程特征曲線,基于False Positive畫出True Positive而得到的曲線,在此基礎(chǔ)之上,為了能夠量化使用ROC曲線進(jìn)行性能評(píng)估,定義AUC為ROC曲線下的面積。面積越大則表示模型性能越好。
搜索的本質(zhì)分為2個(gè)階段:token匹配和文本排名系統(tǒng)。提升檢索效率是一個(gè)相關(guān)性工程,問題的關(guān)鍵在如何提升用戶提出的檢索需求和返回文本的相關(guān)性。數(shù)據(jù)資產(chǎn)管理系統(tǒng)中的數(shù)據(jù)往往雜亂無章,且數(shù)據(jù)治理程度不高,但用戶進(jìn)行檢索時(shí)只會(huì)對幾個(gè)特定類別的數(shù)據(jù)進(jìn)行查詢。為了解決相關(guān)性反饋部分遇到的文本分類的困境,本文引入機(jī)器學(xué)習(xí)領(lǐng)域基于相關(guān)性預(yù)測搜索結(jié)果和查詢條件相關(guān)性的排序?qū)W習(xí)技術(shù)[7]。本節(jié)介紹基于Pointwise的RankSVM模型、梯度提升樹GBDT模型和基于Pairwise的LambdaRank模型在文本排序領(lǐng)域的相關(guān)改進(jìn)和優(yōu)化。
2.1.1 基于RankSVM構(gòu)建LTR模型
本節(jié)介紹使用改進(jìn)的排序支持向量機(jī)RankSVM構(gòu)建排序?qū)W習(xí)模型的過程。RankSVM是一種基于支持向量機(jī)SVM實(shí)現(xiàn)的排序算法。通常在使用SVM的過程中都會(huì)使用很多技巧來提升其性能。文本分類問題通常都是在高維空間進(jìn)行,這意味著數(shù)據(jù)是線性不可分的,SVM引入核函數(shù)來解決這個(gè)問題,解決思路類似于數(shù)據(jù)的降維過程,將數(shù)據(jù)映射到高維平面再進(jìn)行逐步的線性分類?;赗ankSVM構(gòu)建排序?qū)W習(xí)模型過程如下:
(8)
(9)
圖2 RankSVM使用的Hinge Loss函數(shù)
2.1.2 基于GBDT構(gòu)建LTR模型
本節(jié)介紹基于改進(jìn)的梯度提升樹[8]GBDT來構(gòu)建排序?qū)W習(xí)模型,此時(shí)排序問題被簡化為一個(gè)多分類問題。GBDT的主要思想是通過迭代來擬合多個(gè)決策樹的殘差,樹狀結(jié)構(gòu)很適合進(jìn)行決策分類問題,且和其它排序模型結(jié)合就可以進(jìn)行排序?qū)W習(xí)[9]。本文的基于GBDT構(gòu)建的排序?qū)W習(xí)模型過程如下:
(10)
(11)
接著定義得分函數(shù)f用來將分類結(jié)果轉(zhuǎn)化為排序得分,即將分類器的輸出轉(zhuǎn)化為概率。定義g(k)是相關(guān)性為k的一個(gè)單調(diào)遞增函數(shù),則一個(gè)文本的最終排序得分計(jì)算見公式(12)。
(12)
2.1.3 基于LambdaRank構(gòu)建LTR模型
RankNet[10]提出將錯(cuò)誤對最少作為優(yōu)化目標(biāo)的排序算法,但有時(shí)候僅以這種目標(biāo)來評(píng)價(jià)排序結(jié)果是不準(zhǔn)確的。例如使用NDCG@k指標(biāo)時(shí)并不會(huì)關(guān)注所有結(jié)果,只會(huì)取前k個(gè)結(jié)果進(jìn)行加權(quán)評(píng)估,從而會(huì)導(dǎo)致評(píng)價(jià)指標(biāo)不可導(dǎo),因此無法采用機(jī)器學(xué)習(xí)進(jìn)行迭代優(yōu)化參數(shù)。LambdaRank算法則另辟蹊徑,沒有進(jìn)行定義損失函數(shù)和計(jì)算梯度這2步操作,直接定義梯度來解決排序問題[11]。因此,LambdaRank的訓(xùn)練收斂速度更快且可以直接對問題求解。
本節(jié)介紹基于LambdaRank構(gòu)建排序?qū)W習(xí)模型的過程,采用將基于位置的權(quán)重引入Pairwise損失函數(shù)[12]的方法,這種評(píng)估方法直接用于定義訓(xùn)練過程中每個(gè)文本對的梯度,來使得對應(yīng)的損失函數(shù)可以和最終的排序結(jié)果更加一致。假設(shè)只有2個(gè)相關(guān)文本x1與x2,使用NDCG@1作為評(píng)價(jià)指標(biāo),它們的相關(guān)性如圖3所示。如果將x1或x2移動(dòng)到列表的頂端,則可以獲得最大的NDCG@1。
圖3 使用NDCG@1的文本相關(guān)性評(píng)價(jià)
從圖3中可以看出將x1向上移動(dòng)更加方便,因?yàn)楣ぷ髁繒?huì)比移動(dòng)x2小很多。因此可以定義x1排名得分的梯度要大于x2排名分?jǐn)?shù)的梯度,將移動(dòng)的工作量抽象為優(yōu)化過程中存在的一個(gè)隱式損失函數(shù)L,見公式(13)。
(13)
上面提到的梯度稱為Lambda函數(shù),定義r(·)為文本在上一輪訓(xùn)練中的排名位置,使用NDCG來優(yōu)化訓(xùn)練過程時(shí)有如下的Lambda函數(shù),見公式(14)。
(14)
對于每一對文本xu和xv,每一次優(yōu)化之后它們的得分分別提升了+λ和-λ。實(shí)驗(yàn)中采用公式(14)中推導(dǎo)的Lambda函數(shù),使得算法可以讓目標(biāo)函數(shù)達(dá)到局部最優(yōu)。
本節(jié)首先介紹實(shí)驗(yàn)中所使用的文本分類特征選擇方法,然后介紹在不同的排序?qū)W習(xí)模型下構(gòu)建特征集和參數(shù)選擇的相關(guān)信息。主要介紹對訓(xùn)練數(shù)據(jù)的特征工程、基于線性SVM的RankSVM模型的構(gòu)建、基于XGBoost構(gòu)建的梯度提升樹和LambdaRank模型的相關(guān)參數(shù)選擇、模型的訓(xùn)練過程以及驗(yàn)證,最后展示將機(jī)器學(xué)習(xí)模型以插件的形式作為ES打分功能的過程。
2.2.1 構(gòu)建評(píng)價(jià)表
首先使用數(shù)據(jù)資產(chǎn)[11-12]構(gòu)建評(píng)價(jià)表,生成評(píng)價(jià)表為csv文件格式,列分別為評(píng)分-分類-文本id,評(píng)分為分類算法給出的評(píng)分,標(biāo)準(zhǔn)化后落到區(qū)間[1,10]之內(nèi)。譬如,分類器給出評(píng)分為0.238,則落到區(qū)間內(nèi)為2.38,向下取整為2,分?jǐn)?shù)越高則表示分類器認(rèn)為該文本屬于當(dāng)前類的可能性更高。本文認(rèn)為分類器評(píng)分大于5的文本為與實(shí)際分類正相關(guān)的文本,采用過濾器來組合對應(yīng)符合查詢的文本id。
與傳統(tǒng)的機(jī)器學(xué)習(xí)算法的特征不同的是,為了能夠?qū)⒛P鸵圆寮男问角度隕S中,因無法使用特征數(shù)值化和正規(guī)化等處理[13],考慮到數(shù)據(jù)資產(chǎn)管理平臺(tái)上的數(shù)據(jù)大都是結(jié)構(gòu)化數(shù)據(jù),從每一行數(shù)據(jù)的角度來看,可以拆分成特征個(gè)的字典,因此本文將數(shù)據(jù)集處理成libSVM的矢量數(shù)據(jù)格式,其格式如下:
<類別><字段1>:<值1><字段2>:<值2>…<字段N>:<值N>
其中,類別為相關(guān)性,1為正相關(guān),0為負(fù)相關(guān),后續(xù)為字段名∶值對??紤]到數(shù)據(jù)資產(chǎn)檢索使用ES的場景,結(jié)合檢索模塊的設(shè)計(jì),本文在對模型訓(xùn)練時(shí)選取的特征都是文本類型。
2.2.2 構(gòu)建LTR query
接著需要構(gòu)造LTR query來提供使用排序?qū)W習(xí)模塊進(jìn)行打分的功能,這里需要注意使用filter模塊,從而不會(huì)讓LTR的再評(píng)分影響到搜索引擎本身的評(píng)分策略。LTR字段提供3個(gè)屬性:name表示使用的LTR模型;field表示查詢的字段;params表示查詢關(guān)鍵詞,可以是多個(gè)參數(shù)。
2.2.3 LTR模型嵌入
ES支持自定義式插件來提供額外的功能,用戶可以其支持的格式開發(fā)出滿足自己需求的應(yīng)用以插件的形式嵌入即可。有了上一節(jié)訓(xùn)練的排序?qū)W習(xí)模型參數(shù),可以通過POST給ES添加排序?qū)W習(xí)插件。如果想要更新或者刪除排序?qū)W習(xí)模型,可以通過DELETE指令來刪除已有的模型,可以看到ES本身是不會(huì)自己去對數(shù)據(jù)進(jìn)行處理并對模型進(jìn)行任何操作的,本質(zhì)上以插件的模式提供的是模型輸出的決策樹參數(shù)。這就讓ES通過LTR模塊進(jìn)行查詢的時(shí)候,利用排序?qū)W習(xí)的知識(shí)來對每一步的判斷作出選擇。也正因此,可以通過定制模型來讓ES返回相關(guān)度更高的檢索結(jié)果。
2.2.4 使用LTR搜索
使用LTR的檢索本質(zhì)上是對檢索結(jié)果的某個(gè)字段進(jìn)行再次打分,通過過濾的方法對結(jié)果進(jìn)行再次排序??紤]到實(shí)際使用場景,用戶使用LTR模塊進(jìn)行搜索的數(shù)據(jù)量可能會(huì)非常大。例如初次檢索滿足條件的文本數(shù)目為10萬條,則在給用戶返回?cái)?shù)據(jù)之前,需要通過LTR對每個(gè)文本的字段進(jìn)行再打分。這將消耗非常多的服務(wù)器資源,且耗時(shí)很長使得檢索體驗(yàn)變差。綜合考慮用戶對數(shù)據(jù)資產(chǎn)檢索的習(xí)慣,若前端展示設(shè)置為每頁展示10條結(jié)果,則一般情況下用戶不會(huì)翻到100頁去查看第1000條檢索結(jié)果,這也不符合正常查詢的習(xí)慣。因此,采用對topN的檢索結(jié)果進(jìn)行LTR再打分,N的默認(rèn)值為100。
在信息檢索的過程中信號(hào)建模和評(píng)價(jià)函數(shù)的設(shè)計(jì)相互影響[14-15],決定了檢索結(jié)果的質(zhì)量。在ES當(dāng)中每個(gè)字段都可以定義不同的相關(guān)性評(píng)分策略,這就可以讓人們根據(jù)字段數(shù)據(jù)類型的不同選擇對應(yīng)的評(píng)分策略,從而提高文本評(píng)分的準(zhǔn)確度。
BM25[16]是ES默認(rèn)的相關(guān)性評(píng)分策略,是一種基于詞項(xiàng)頻率、文本長度等要素來建立概率模型的方法:對于文本d,給文本中的每個(gè)查詢詞項(xiàng)賦權(quán)值,計(jì)算公式如式(15),其中,檢索狀態(tài)值RSV指最后用于排序的狀態(tài)值,dft是包含t的文本數(shù)目,N為文本總數(shù)。
(15)
本文通過引入詞項(xiàng)的頻率[17]和文本長度[18-19],對BM25的相關(guān)計(jì)算公式進(jìn)行調(diào)整后的公式見式(16)。其中,tftd定義為詞項(xiàng)t在文本d中的權(quán)重,Ld為文本d的長度,Lave是整個(gè)文本集中文本的平均長度。k1和b這2個(gè)參數(shù)用來對文本中的詞項(xiàng)頻率進(jìn)行縮放控制[20]。
(16)
本節(jié)主要對比排序?qū)W習(xí)模塊各算法在文本分類[21]和文本排序任務(wù)[22]上的表現(xiàn)。選取10類共25091條數(shù)據(jù),數(shù)據(jù)選取的類別及數(shù)目見表2。
表2 數(shù)據(jù)類別及數(shù)量
針對3種LTR模型進(jìn)行排序結(jié)果展示,評(píng)價(jià)標(biāo)準(zhǔn)為NDCG@100和AUC,結(jié)果見表3。
表3 排序?qū)W習(xí)模型性能
GBDT在排序?qū)嶒?yàn)中對不同類別的數(shù)據(jù)表現(xiàn)也會(huì)有很大的波動(dòng),而RankSVM和LambdaRank則表現(xiàn)較為穩(wěn)定。
表4展示了3種排序?qū)W習(xí)模型對不同文本類型的檢索效果,從R均值可以看出,默認(rèn)配置的ES對數(shù)據(jù)的檢索效率和GBDT相近,RankSVM和LambdaRank則在前兩者基礎(chǔ)上,大大提升對相關(guān)性文本的檢索效率。
表4 檢索結(jié)果前100準(zhǔn)確性對比
系統(tǒng)架構(gòu)如圖4所示,主要分為數(shù)據(jù)源、采集、索引、檢索和結(jié)果展示5個(gè)模塊。
圖4 系統(tǒng)架構(gòu)圖
從數(shù)據(jù)流的角度來看,系統(tǒng)對數(shù)據(jù)的處理有如下幾個(gè)過程:首先是確定待整合數(shù)據(jù)類型,然后按照數(shù)據(jù)源類型配置采集任務(wù),在ES中構(gòu)建或者更新索引導(dǎo)入數(shù)據(jù),接著對索引中數(shù)據(jù)進(jìn)行檢索,經(jīng)過信號(hào)放大及過濾、使用排序?qū)W習(xí)模型重新打分,最后返回結(jié)果給用戶。
本文針對工程項(xiàng)目中采用關(guān)系型數(shù)據(jù)庫進(jìn)行全文查詢效率低下的問題,研究并基于排序?qū)W習(xí)算法構(gòu)建了智能檢索系統(tǒng),有效地解決了多源數(shù)據(jù)導(dǎo)入步驟繁雜、檢索數(shù)據(jù)相關(guān)性低及全文檢索耗時(shí)長等問題。試驗(yàn)結(jié)果表明,使用排序?qū)W習(xí)模塊可以有效地提升返回文本的相關(guān)性評(píng)分,使得檢索準(zhǔn)確度得到提升。本文設(shè)計(jì)的智能檢索系統(tǒng)可以有效地解決全文檢索效率低下等常見的問題,但還有很多可以改進(jìn)的地方,譬如支持異構(gòu)數(shù)據(jù)的接入[21]、使用自然語言處理技術(shù)[22]來支持通用查詢等。