天天看點

全文搜尋怎麼給查詢語句與文檔相關性打分

使用者輸入一個查詢query,query由若幹詞(term)組成,文檔也由若幹詞(term)組成。那麼怎麼評判查詢和文檔的相關性的高低。

很樸素簡單的想法就是文檔中包含的term與查詢query中包含的term,兩者越多相同的則說明越相關。比如query為”animal cat”,文檔一内容為”cat dog bird animal”,文檔二内容為”cat dog bird tiger”,則認為query與文檔二的相關性比文檔一的高。

現在缺少詞權重,比如一個文檔中cat出現次數為2,而dog次數為1,那麼cat的權重應該高一些。比如cat在10個文檔出現和在1個文檔出現也有不同的權重。

一般來說,可以由兩方面來影響某文檔某term的權重:

1. 該文檔詞頻(term frequency):該文檔出現該term的次數,tf越大說明越重要。

2. 文檔詞頻(document frequency):包含該term的文檔數,df越大說明越不重要,說明它更大衆。

于是某個term的權重可定為:

wt=tf∗log(totalDocdf)

向量空間模型(VSM)是一個計算倆文本相似性的經典算法。

将文檔和query中term的并集看成是n維空間,每個term是一維。

将文檔中term的權重看成一個n維向量,不存在的term看成權重為0。

同樣将query看成是n維空間,每個term是一維。

同樣将query的term的權重看成一個n維向量,不存在的term看成權重為0。

文檔權重向量和query權重向量之間的夾角越小則認為相關性越大。于是,

sim(q,d)=q⋅d∥q∥×∥d∥=∑ni=1wi,qwi,d∑ni=1w2i,q√∑ni=1w2i,d√

表單符号,一般标點符号沒有價值,去掉。

停詞,停詞沒有特别的意義,一般不能成為搜尋的關鍵詞,比如”the”,”that”,”this”等。

去掉這些幹擾項可以讓VSM降維,提升計算效率和準确度。

對于某些文檔可能相對重要點,有些文檔沒這麼重要,這時需要額外的權重來表示。于是相關性得分,

score(q,d)=∑ni=1wi,qwi,d∑ni=1w2i,q√∑ni=1w2i,d√×boost

比如文檔一的權重設為1.1,文檔二的權重設為1.0,則通過這個權重系數可以向整體分數表達出來。

前面計算詞權重時存在一個問題,文檔出現某term次數越多則說明它的權重越大,那麼是不是可以說一個包含了1000個term的文檔出現了2次cat,就比一個包含了10個term的文檔出現了1次cat權重大?于是需要引入标準化來解決這個問題,

wt=tf∗log(totalDocdf)∗1totalTerm√

通過标準化後減少了文檔長度的影響。

========廣告時間========

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/74080321">為什麼寫《Tomcat核心設計剖析》</a>

=========================

歡迎關注:

全文搜尋怎麼給查詢語句與文檔相關性打分