全文檢索技術

  基于開源軟件Solr和Lucene構建高準確度和高度可配置的檢索解決方案。澤元軟件在Solr和Lucene的基礎上,開發高效率的專業分詞和新詞識別系統,將Lucene的相關度算法更換成了改進型BM25F,并引入了多種人工智能模型以改進查準率和查全率。

  檢索系統采用分布式架構,具有很好的擴展性、準確性和實時性,在同義詞擴展、高亮查詢結果、專業分詞、實時索引、高效壓縮、機器學習等方面,都有很強技術優勢。檢索系統能夠根據搜索引擎所涉及的領域不同,可以快速增加自定義詞典,能夠達到1秒分詞100萬漢字的性能要求。隨著數據量的不斷增加,分布式架構能夠很好的解決性能瓶頸,僅需簡單地配置新增節點,即可快速應對數據的爆發式增長。本方案使用實時索引和高效壓縮算法,不但降低了硬件資源的需求,同時提高了檢索的實時性。改進的支持多域相關度融合的BM25F算法、基于機器學習的點擊反饋模型、基于梯度下降的自動調參系統、Learning to Rank等先進算法模型保證了檢索排序高水平的查全率和查準率。新詞挖掘、自動可配的詞庫、高度可配的參數、自動調參等保證了系統高水平的用戶體驗具有很好的可持續性。

  基于梯度下降的自動調參

  我們采用基于梯度下降的自動調參方法實現對上百參數的自動調整,整個調參框架采用機器學習的方法,利用一定的標注數據和交叉驗證方法來選擇最優的參數。自動調參是一種監督的機器學習方法,其主要技術體現在利用近似偏導作為梯度搜索最優參數、交叉驗證等。

  自動調參的前提是需要先準備一批(較少量,千量級)標注的<query, doc, label>三元組,label表示人工標注的query與doc的相關度等級,一般分為五個等級,標注的標準及示例如下表所示:

相關性(y

說明

示例

4

完美匹配。只有該條結果能夠很好的匹配用戶的Query

Query:參考書 中國臨床腫瘤學進展2012

返回結果:該參考書的相關鏈接

3

非常有用。該結果對用戶非常有幫助,但是可能存在不少同樣非常有幫助的頁面。

比如用戶搜索某位作者

作者的每一部著作都可以認為是非常有用的結果,即相關性為3分

2

相關。該結果和用戶搜索的Query相關,但是只能提供部分信息。

Query:薄荷

返回結果:復方薄荷腦滴鼻液(Compound Menthol Nasal Drops)

1

不相關。和查詢的內容無關。

Query:甘草甜素

返回結果:復方薄荷腦滴鼻液(Compound Menthol Nasal Drops)

0

不知所云。不僅和查詢的內容無關,且內容比較雜亂、空頁面、死鏈、作弊頁面等。這種情況通用搜索引擎中比較多一些,本項目中應該比較少見。

比如返回了一個作弊頁面。

  調參的大體框架如下圖所示,參數調整器負責整體調度,即根據當前狀態判斷下次需要嘗試的參數組合。第一次時參數調整器將原始的人工調整的參數及查詢詞發送給排序模型,排序模型根據當前的參數計算相關性,然后對搜索結果排序并返回前N條結果。參數調整器記錄下當前排序結果的NDCG和ERR情況。然后發送一組新的參數組合給排序模型。迭代這個過程,不斷搜索新的參數組合。

J

  參數組合的調度有很多種方法,簡單的是Grid Search(網格搜索),比如給定一個變化的區間和跳步,然后一個一個搜索。例如,每個參數的變化區間為[-1, 1],跳步為0.1,共需要21次嘗試,即-1, -0.9, -0.8, &hellip;, 1。如果需要調整的參數為n個的話,需要搜索的次數為21n次。這種方法的好處是實現簡單,在變化區間內搜索比較完全,缺點是速度太慢,當n比較大的時候,這種方法行不通。

  第二種方法則是用貪婪的方法,先在當前點附近大步搜索,比如跳步為0.5,找到一個更優的點后開始在這個更優點附近進行稍小跳步的搜索,直到很難提升為止。例如,假設當前參數為3.0,根據經驗(此處依賴于訓練數據的多少以及該feature的稀疏程度)設定變化區間為[-1, 1],那么該方法將會首先以0.5為步長的跳步搜索2.5,3.5,2.0, 4.0。假設當搜索到3.5時發現NDCG和ERR都明顯好于現在的值3.0,則將參數當前值改為3.5,繼續在3.5附近以稍小的跳步繼續搜索,比如0.3,那么需要繼續嘗試3.2,3.8, 2.9這些點。4.1因為超出規定的變化區間,故不再嘗試。

  第二種方法也有很多可改進的地方,畢竟貪婪的搜索方法容易陷入局部最優。改進的方法一般采用梯度下降的思想,即通過偏導的方式找到一條最快的路徑搜索最優解。由于我們的損失函數并非連續函數,不能直接求偏導,因而采用近似的方法。實質是先看一圈,從一堆更好的點中找出一個最優的點后再更新參數的當前值,而不是貪婪法中的只要發現比現在優就會更新參數。、在上面的例子中,搜索到3.5是發現比3.0更優時,并不更新參數為3.5,而是繼續搜索2.0,4.0這些點,假設最終2.0這個是最優的,那么第一輪結束后參數不是更新為3.5,而是更新為2.0。

  我們的系統采用第三種梯度搜索參數的方法,保證更快更準地找到最優參數。

  Learning to Rank

  本項目中將采用目前業界最先進的Learning to Rank模型——LambdaMART,該模型是最近兩年世界排序競賽冠軍得主采用的模型,也是Bing、Yahoo等世界頂級搜索引擎采用的模型。

  LambdaMART以MART(多重加法回歸樹)為基本模型進行訓練,利用Listwise的損失函數的構造來訓練排序模型,優化過程中采用牛頓迭代法(Newton-Raphson)來確定每一個葉子節點的輸出值。

  我們從系統中提取出成百上千的Feature,包括:標題長度、TF、IDF、標題命中率、標題相關度、正文相關度、基礎相關度、各種加權等等。這些feature和查詢詞、文檔以及對應的標注分數組合在一起作為LambdaMART的訓練數據,LambdaMART訓練得到的模型可以直接用來作為排序模型。

  分詞算法

  我們的分詞算法采用具有良好的切分歧義處理能力和新詞識別能力的統計語言模型及詞典分詞算法,統計語言模型主要用于識別未登錄詞(下一小節新詞挖掘部分將詳細介紹)或者系統未配置的詞匯,普通分詞采用詞典分詞算法,即將輸入的字符串中首先識別和切分出帶有明顯特征的確定詞匯,以這些詞匯為間隔點,把原輸入字符串分割成較小的串再進行詞典分詞。為了減少單純的匹配錯誤,我們的分詞器采用最大匹配算法和最大切分(使每句中切出的詞數最多)相結合的方式來分詞。同時,分詞器支持不限制個數的自定義詞庫,純文本格式,一行一詞,使用后臺線程檢測詞庫的更新,自動編譯更新過的詞庫到二進制版本并加載。

  分詞器工作中詞典是相當重要的一個環節,其特征主要包括:

  1)多詞典支持,詞典功能分區。包括分詞主詞典(最后構建索引的索引項)、中文姓氏詞典(用于識別特殊詞)、停止單字詞典(該詞典中的字不用于構建索引項)、停止詞語詞典(該詞典中的詞不用于構建索引項)、計量單位詞典(該詞典中的詞主要是一些計量單位)。同時可以根據需求的不同,靈活的添加相關的專業詞典,以達到更好的分詞效果。分詞器可以將多個詞典進行組合來使用。

  2)詞典加載入內存使用,采用預加載和Lazy Mode模式。

  3)根據分詞模式,對詞典進行二次編譯;

  4)詞典變更偵測,即當詞典文件發生變化時,可以重新加載詞典。

  新詞挖掘

  本項目中將使用多元語言模型實現高準確率和高召回率的新詞挖掘。下面以一個簡單的例子進行說明。

  假設當前系統中“甘草”和“片”都是單獨的詞,但是“甘草片”不是一個詞語。為了證明“甘草片”是否真的是新詞,我們需要利用二元語言模型進行一些統計和概率計算。我們可以計算一下,如果“甘草”和“片”真的是各自獨立地在文本中隨機出現,它倆正好拼到一起的概率會有多小。在整個4800萬字的數據中,“甘草”一共出現了5648次,出現的概率約為0.000113?!捌弊謩t出現了9594次,出現的概率約為0.000197。如果兩者之間毫無關系,它們正好在一起的概率就應該是0.000113&times;0.000197,約為2.223乘以10的&ndash;8次方。但經過統計發現,“甘草片”在整個語料中一共出現了350次之多,出現概率約為7.183乘以10的&ndash;6次方,比原來的預測值高300多倍。根據這樣的計算結果,我們有理由懷疑“甘草片”是一個新詞。這里舉得是二元語言模型。多元語言模型則是看更多詞的組合,比如三元語言模型可能會發現“臨床”“醫學”“工程”組合在一起的“臨床醫學工程”是一個新詞。

  我們還會對新詞挖掘算法進行一定的自我訓練。事先去除庫中一部分已有詞匯作為訓練集,然后訓練新詞挖掘算法去準確地發現這些去除的“新詞”,反復迭代直到算法滿足需求時再真正進行新詞的挖掘,同時挖掘過程依然可以進行一定的干預和迭代,使得算法準確率越來越高。

  點擊模型

  我們通過提取上百的點擊反饋feature(log記錄系統對搜索結果和用戶行為有較為詳細的記錄)訓練一個更為精準的基于最大期望(Expectation-Maximization, EM)算法的點擊模型,該模型一旦訓練完成,即可直接在檢索排序中應用,可以顯著地提升排序質量。同時很多有用的點擊反饋信息也作為feature送給前面的Learning to Rank模型。

  我們的點擊模型考慮的Feature有:

  文檔總的展現次數

  文檔總的點擊次數

  文檔展現的平均位置

  文檔被點擊的平均位置

  文檔展現最多次數的所在位置

  文檔被點擊最多次數的所在位置

  文檔總的點擊次數

  文檔在所有查詢詞下的平均展現位置

  文檔被作為第一次點擊的次數

  文檔作為最后一次點擊的次數

  文檔被作為第二次點擊的次數

  文檔被作為其他點擊的總次數

  文檔被作為唯一被點文檔的次數

  第一次點擊的總次數

  第二次點擊的總次數

  其他點擊的總次數

  只發生唯一一次點擊的次數

  頁面相對停留時間

  文檔在第i個位置展現的次數

  文檔在第i個位置被點擊的次數

  此外我們還添加了該查詢詞下所有文檔對應的上述feature,以及整個系統中所有查詢詞對應的上述feature。最終點擊反饋的feature數量在100左右。利用這些feature和EM算法我們可以單獨訓練出一個高質量的點擊模型。

  我們點擊模型的出發點是用戶的點擊不僅依賴于文檔的相關度,而且依賴于文檔的位置:

  即用戶點擊的概率等于相關度 與位置偏向 的乘積,其中 , 通過EM算法不斷迭代求得。

  相關推薦算法

  我們的系統采用基于用戶的協同過濾模型和基于Item的協同過濾模型,使得推薦的結果能夠很好的迎合用戶的興趣。

  其中基于用戶的協同過濾模型的具體實現細節為:

  第一步我們根據歷史數據產生一個 m*n 的用戶-文檔(包括要推薦的書、視頻等)矩陣R,m是用戶數,n是文檔數,其中Rij表示第i個用戶對第j個項目的相關度(我們通過用戶的歷史搜索、瀏覽、點擊、購買等行為得到)。

  第二步我們設計算法尋找最近鄰居:在這一階段,主要是利用上面的用戶-文檔矩陣完成對目標用戶最近鄰居的查找。通過計算目標用戶與其他用戶之間的向量相似度,計算出與目標用戶最為相似的“最近鄰居”集合。實質是對目標用戶產生一個以相似度遞減排列的“鄰居”集合。該過程我們分兩步完成:首先采用修正的余弦相似性度量方法計算用戶之問的相似度,然后根據以下方法選擇我們需要的“最近鄰居”:選擇相似度最大的前 k個用戶。

  第三步是產生推薦項目:對“鄰居”們喜歡的文檔進行加權排序(以目標用戶與查找到的用戶的相似度的值作為權值),將得分最高的一些文檔作為推薦的候選集合。

  基于Item的協同過濾與此類似,但是考慮的是前面矩陣中的列向量,通過文檔之間的相似度來尋找當前目標用戶可能喜歡的文檔。

  最終,基于用戶的協同過濾模型和基于Item的協同過濾模型推薦出來的結果進行統一排序,然后選擇預測評分最高的TOP-N項推薦給目標用戶。

99精品视频|中文字幕亚洲综久久2021|熟妇人妻老色视频网站|免费高清无码黄色毛片