搜索結果排序是搜索引擎最核心的構成部分,很大程度上決定了搜索引擎的質量好壞。雖然搜索引擎在實際結果排序時考慮了上百個相關因子,但最重要的因素還是用戶查詢與網頁內容的相關性。(ps:百度最臭名朝著的“競價排名”策略,就是在搜索結果排序時,把廣告客戶給錢最多的排在前列,而不是從內容質量考慮,從而嚴重影響了用戶體驗)。這里要講的就是:給定用戶搜索詞,如何從內容相關性的角度對網頁進行排序。判斷網頁內容是否與用戶查詢相關,這依賴於搜索引擎所采用的檢索模型,常見的檢索模型有:布爾模型、向量空間模型、概率模型和機器學習排序算法等。在我的項目中,使用了向量空間模型(Vector Space Model,VSM),因此這篇文章主要總結一下向量空間模型相關的內容。
向量空間模型是一種文檔表示和相似性計算的工具,不僅在搜索領域,在自然語言處理、文本挖掘等領域也是普遍采用的工具。
1. 文檔表示
作為表示文檔的工具,向量空間模型把每個文檔看做是由 t 維特征組成的一個向量,特征的定義可以采取不同方式,最常見的是以單詞作為特征,就是從一篇文檔中抽取出 t 個關鍵詞,其中每個特征會根據某種算法計算其權重,這 t 維帶有權重的特征向量就用來表示這一篇文檔。
下圖展示了4個文檔在3維向量空間中如何表示,比如對於文檔2,它由3個帶有權重的特征組成{w21, w22, w23}。在實際應用中,維度通常是非常高的,達成千上萬維,這里只是為了簡化說明。用戶查詢也被看成是一個特殊的文檔,也將其轉換成 t 維的特征向量,之所以也將其轉化為一個 t 維向量,是為了計算文檔相似性,后面會說的。
下面是一個文檔表示的實例,對於文檔D4、D5及用戶查詢,通過提取關鍵詞進行特征轉換,可表示如下。
2. 特征向量和特征權重計算
對於初次接觸該問題的人,肯定會疑惑,對於一篇幾百字幾千字的文章,如何生成足以准確表示該文章的特征向量呢?就像論文一樣,摘要、關鍵詞毫無疑問就是全篇最核心的內容,因此,我們要設法提取一篇文檔的關鍵詞,並對每個關鍵詞計算其對應的特征權值,從而形成特征向量。這里涉及一個非常簡單但又相當強大的算法,即TF-IDF算法。
TF-IDF算法涉及兩個最重要的概念,即詞頻(Term Frequency,TF)和逆文檔頻率(Inversed Document Frequency,IDF)。
詞頻因子即一個單詞在一篇文檔中出現的次數,一般來說,在一篇文檔中反復出現的詞,往往能夠表示文檔的主題信息。
逆文檔頻率因子代表的是文檔集合范圍內的一種全局因子,給定一個文檔集合,那么每個單詞的IDF值就是唯一確定的,與具體的文檔無關。IDF考慮的不是文檔本身的特征,而是特征單詞在整個文檔集合范圍內的相對重要性。這與詞頻因子有很大的不用,TF只反映了某個單詞在具體某篇文檔中的重要性程度。
在計算得到TF和IDF值之后,就可以計算一個關鍵詞對應的權重了,即 weight = TF * IDF。
上面說的比較簡略,回看TF-IDF算法之關鍵詞提取 這篇文章。
3. 相似性計算
將文檔轉換為特征向量之后,就可以計算文檔之間或者查詢關鍵詞與文檔之間的相似性了。關於余弦相似性的計算方法和原理,在TF-IDF算法與余弦相似性這篇文章中已經詳細說明了,稍微有區別的是,在那篇文章中只是簡單的用詞頻向量進行相似性計算,而現在我們已經計算出了用於表示一篇文章的特征向量,就應該使用特征向量來計算不同文章之間的相關性。
總結:
向量空間模型的核心就是TF-IDF算法,這篇文章主要也只是對之前兩篇文章的回顧和匯總。
參考:
1. 《這就是搜索引擎》 張俊林著 (本文主要是該書的讀書筆記,算不上原創)
2. 阮一峰老師的博客