在 lucene排序算法之向量空間模型(一)中說明了採用餘弦距離而不是歐式距離來度量查詢向量與文檔向量類似度的緣由,本文主要推導lucene中文檔類似度公式:算法
一、令查詢向量,文檔向量;.net
二、,blog
三、因爲用戶在輸入查詢串時,通常不會輸入相同的查詢詞,所以簡單設置; 排序
;須要注意的是隻有當詞都存在於q和d中wn*Wn纔不爲0。文檔
四、查詢向量長度,可能你們會認爲因爲評分時須要比較的是查詢向量與文檔向量的類似度,查詢向量的長度對於全部文檔的類似度而言是相同的,所以實際中就能夠捨去,但實際並無捨去;get
五、對於文檔向量長度,lucene並無採用標準的公式即:|d|=開根號(W1*W1+...+Wn*Wn),而是設置成默認的開根號(詞的個數)lucene
六、文檔得分score=,實際上當|d|不是標準公式的時候,最終的得分也就不是兩個向量的餘弦了,所以該公式要換個角度去理解,score=,變成標準的單位查詢向量q和非標準的文檔向量d的乘積,也就是文檔向量d在單位查詢向量q的投影長度,這樣說明lucene實際上並無把餘弦距離看成類似度量,單位查詢向量實際上指明瞭查詢的方向,哪一個文檔向量在查詢向量上的投影長度越長說明就越類似。餘弦距離實際是兩個單位向量間的乘積,lucene的官方文檔中也說明了這一點,咱們也能夠當作是其中一個單位向量在另外一個單位向量上的投影長度,不知lucene官方是否這樣定義得分公式的,但我的認爲可以解釋得通。im
注意:這裏不是lucene的最終公式,由於尚未考慮各項自定義的權重問題,以及文檔向量|d|的實際取值問題,最終公式下一篇給出。d3