Rocchio算法


一、引子


查詢擴展(Query Expansion)是信息檢索領域的一個重要話題。

一方面。用戶本身可能會出錯,他會輸入一些錯別字,比方把“馮小剛”,錯寫成“馮曉剛”;或者某個復雜的專有名詞。用戶自己也不是非常清楚。比如圖靈當年研究的Entscheidungsproblem,由於這個詞非常生僻,你可能僅僅隱約記得 En...ch...dungsproblem。現代IR要求面對用戶的錯誤輸入或者不完整的輸入也能給出盡量相關的查詢結果,這就須要用到查詢擴展。還有一方面,自然語言本來就具有多意性,比如當你輸入java時,它可能指一種計算機語言,也可能是印尼的一座島,甚至是某個品種的咖啡豆。這些問題也要借助查詢擴展來加以應對。


你可能會想到使用通配符(wildcard)來協助查詢,這也的確能夠解決上述我們列舉的部分問題。事實上現代IR系統基本都有這方面的設計,但這還遠遠不夠。

為了應對語言本身的模糊性(ambiguity),我們還須要一些對query進行優化、提煉,從而使其更加明白。這方面的策略主要分成兩類,即全局性方法和局部性方法。

全局性方法主要借助同義詞詞典或者WordNet之類的工具。對原query進行補充推薦。主要策略包含:

  • 利用 terms 或 phrases 的共現性來向用戶建議更進一步的(或者有助於查詢更加明白的)補充terms。比如:[java] → ([java indonesia] | [java coffee] | [java programming])?
  • 向 query 中直接添加原terms的同義詞、反義詞、派生詞等,比如:[cat] → [cat feline jaguar animal puss . . . ]
  • 建立一個自己主動的同義詞詞典(automatic thesaurus),然后在collection中尋找有關的terms,從而向 query 中添加聯想詞,比如:[olympics] → [medal record rio champion torch . . . ]

局部性方法則基於最初查詢的結構來又一次制定query。這當中最重要的概念就是“relevance feedback”。


二、Relevance feedback


首先明白。如今我們要做的事情是改進優化我們的terms,事實上就是添加很多其它的輔助信息或限制條件。比如用戶輸入的查詢關鍵詞是java,我們對它進行改進追加一些信息,變成 java programming(如果我們有非常大把握猜測出用戶想查詢的是一門計算機語言)。

那這個被添加的信息programming,除了上面提供的那幾條策略之外,還有其它方法嗎?一個非常不錯的主意就是,從(比如輸入java后得到的)query 結果中找出一些信息來作為查詢擴展(這也就是局部性方法的基本策略)。


而這樣的局部方法的核心就是 relevance feedback。在一個“true relevance feedback”中,用戶能夠把檢索到的文檔標識成相關或者不相關。

相關的文檔將得到正值的權重,而不相關的文檔則得到負數的權重。可是如今更為popular的方法是“pseudo-­relevance feedback”,簡稱PRF。當然,僅僅有IR系統覺得相關的內容才會檢索出來,所以得到的結果都是相關的。但如今我們如果排名靠前的結果就是相關。反之靠后的就不相關。

這就是稱其為pseudo的原因。

並且這是我們興許算法賴以存在的一個非常重要的基本如果。


以下總結通過RF進行查詢擴展的基本步驟:




三、與Rocchio 算法


Rocchio算法 源自 1970年代 建立的SMART IR 系統。

它以在 IR 系統建立的 RF 方法為基礎,通過查詢的初始匹配文檔對原始查詢進行改動以優化查詢的方法。該算法如果大部分用戶都有一個大致的概念。以保證他們能夠判定哪些文檔是否與查詢主題相關。


Rocchio算法 提供了一種將相關反饋信息融到向量空間模型(VSM。Vector Space Model)的方法。假定我們要找一個最優查詢向量q ,它與相關文檔之間的類似度最大且同一時候又和不相關文檔之間的類似度最小。若Cr表示相關文檔集,Cnr表示不相關文檔集。那么我們希望找到的最優的 q 就是


當中。sim() 函數用於計算類似度。

採用余弦類似度計算時,能夠將相關文檔與不相關文檔區分開的最優查詢向量為:


這就是說。最優的查詢向量等於相關文檔的質心向量和不相關文檔的質心向量的差。下圖能夠幫助我們來理解這個公式。如果圖中紅色叉所表示不相關文檔,圓圈表示相關文檔(注意為了便於理解,我們這里討論歐幾里得距離,而非余弦距離)。你可能會覺得既然我們是想找出相關的文檔,並且相關文檔的質心是離全部相關文檔都近期的一個點,那這個點不就是最優查詢嗎?從下圖來看。顯然如果你選擇相關文檔的質心。那么不相關文檔離這個質心的距離與其它相關的點是相等的。所以事實上它也會被囊括進來。

注意前面我們也講過。在全部被檢索出來的文檔中,如果排名靠前的結果就是相關,反之靠后的就不相關。所以如果我們選擇一個離相關質心盡量接近同一時候又離不相關質心盡量偏離的點,可能會比相關文檔的質心向量更偏離各個相關文檔。但同一時候也會更加偏離不相關文檔,排序之后,相關文檔會更加靠前,而不相關文檔由於排序靠后也就變成不相關的了。



然而,這個發現並沒有什么意義,由於檢索本來的目的就是要找相關文檔。而全部的相關文檔集事先卻是未知的。可是我們能夠依據這個思路的啟發來進行變型改造,於是便得出了本文要討論的Rocchio 算法(一種用在IR系統中的相關反饋算法)。在一個真實的IR中,假定我們有一個用戶查詢,並知道部分相關文檔和不相關文檔的信息,則能夠通過例如以下公式得到改動后的查詢向量q:


當中。 q0 是原始的查詢向量,Dr 是已知的相關文檔集合(即 top results in PRF),Dnr 為不相關文檔集合。α、β 及γ 是上述三者的權重。這些權重能夠控制判定結果和原始查詢向量之間的平衡:如果存在大量已推斷的文檔,那么會給β 及γ 賦予較高的權重。這些權值能夠憑經驗或對文本數據的認識在賦值,也能夠通過實驗來調試賦值。

改動后的新query從q0 開始,向着相關文檔的質心向量靠近了一段距離。而同一時候又與不相關文檔的質心向量遠離了一段距離。

新查詢能夠採用常規的VSM進行檢索。通過減去不相關文檔的向量。我們非常easy保留向量空間的正值分量。在Rocchio 算法中。文檔向量中的權重分量如果為負值,那么該分量將會被忽略,換言之,此時會將該分量權重設為0。下圖給出了應用相關反饋技術的效果示意圖。

RF 能夠同一時候提高recall 和 precision。然而,實際表明該技術在一些recall比較重要的場景下對於提高recall非常有幫助。這當中的部分原因在於它對查詢進行了擴展,還有一個原因是應用的場景所帶來的結果:在期望高recall的情況下,能夠估計用戶可能會花很多其它時間來瀏覽結果並進行重復搜索。

正反饋往往比負反饋更有價值,因此在非常多IR系統中。會將參數設置成 γ < β。一個合理的取值是α = 1β = 0.75γ = 0.15

實際上,非常多系統,都僅僅同意進行正反饋,即相當於設置 γ = 0

還有一種做法是,僅僅取檢索系統返回結果中排名最高的標記為不相關的文檔進行負反饋,此時。公式中的|Dnr| = 1。


四、一個樣例




參考文獻:

Manning, Christopher D; Raghavan, Prabhakar; Schütze, Hinrich; Introduction to information retrieval, Cambridge University Press 2008.



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM