搜索引擎總是會把相關性高的內(nèi)容顯示在前面,相關性低的內(nèi)容顯示在后面。那么,搜索引擎是如何計算關鍵字和內(nèi)容的相關性呢?這里介紹2種重要的權重度量方法:TF-IDF和BM25。
TF-IDF
詞頻 TF(Term Frequency)
TF越大,相關性越高
TF Score = 某個詞在文檔中出現(xiàn)的次數(shù) / 文檔的長度
舉例:某文檔D,長度為200,其中“Lucene”出現(xiàn)了2次,“的”出現(xiàn)了20次,“原理”出現(xiàn)了3次,那么:
TF(Lucene|D) = 2/200 = 0.01
TF(的|D) = 20/200 = 0.1
TF(原理|D) = 3/200 = 0.015
“Lucene的原理”這個短語與文檔D的相關性就是三個詞的相關性之和。
- “的”詞為停詞,權重不考慮。
- “原理”是個很通用的詞,而“Lucene”是個專業(yè)詞。
- “Lucene”這個詞對我們的搜索比“原理”更重要。
抽象一下,可以理解為一個詞預測主題的能力越強,就越重要,權重也應該越大。反之,權重越小。
TF(Lucene的原理|D) = 0.01 + 0.015 = 0.025
逆文本頻率指數(shù) IDF(Inverse Dcument Frequency)
IDF = log(N/n)
N表示全部文檔數(shù)。假如世界上文檔總數(shù)位100億,"Lucene"在1萬個文檔中出現(xiàn)過,“原理”在2億個文檔中出現(xiàn)過,那么它們的IDF值分別為:
IDF(Lucene) = log(100億/1萬) = 19.93
IDF(原理) = log(100億/2億) = 5.64
“Lucene”重要性相當于“原理”的3.5倍。停用詞“的”在所有的文檔里出現(xiàn)過,它的IDF=log(1)=0。短語與文檔的最終相關性就是TF和IDF的加權求和:
simlarity = TF1*IDF1 + TF2*IDF2 + ... + TFn*IDFn
現(xiàn)在可以計算出上文中提到的“Lucene的原理”與文檔D的相關性:
simlarity(Lucence的原理|D) = 0.01*19.93 + 0 + 5.64*0.015 = 0.2839
其中,“Lucene”占了70%的權重,“原理”僅占30%的權重。
BM25
BM25是基于TF-IDF并做了改進的算法
源于概率相關模型,而非向量空間模型
搜索相關性評分
BM25中的TF
傳統(tǒng)的TF值理論上是可以無限大的。而BM25與之不同,它在TF計算方法中增加了一個常量k,用來限制TF值的增長極限。下面是兩者的公式:
傳統(tǒng) TF Score = sqrt(tf)
BM25的 TF Score = ((k + 1) * tf) / (k + tf)
下面是兩種計算方法中,詞頻對TF Score影響的走勢圖。從圖中可以看到,當tf增加時,TF Score跟著增加,但是BM25的TF Score會被限制在0~k+1之間。它可以無限逼近k+1,但永遠無法觸達它。這在業(yè)務上可以理解為某一個因素的影響強度不能是無限的,而是有個最大值,這也符合我們對文本相關性邏輯的理解。 在Lucence的默認設置里,k=1.2,使用者可以修改它。

BM25如何對待文檔長度
BM25還引入了平均文檔長度的概念,單個文檔長度對相關性的影響力與它和平均長度的比值有關系。BM25的TF公式里,除了k外,引入另外兩個參數(shù):L和b。L是文檔長度與平均長度的比值。如果文檔長度是平均長度的2倍,則L=2。b是一個常數(shù),它的作用是規(guī)定L對評分的影響有多大。加了L和b的公式變?yōu)椋?/p>
TF Score = ((k + 1) * tf) / (k * (1.0 - b + b * L) + tf)
下面是不同L的條件下,詞頻對TFScore影響的走勢圖:

- 從圖上可以看到,文檔越短,它逼近上限的速度越快,反之則越慢。這是可以理解的,對于只有幾個詞的內(nèi)容,比如文章“標題”,只需要匹配很少的幾個詞,就可以確定相關性。而對于大篇幅的內(nèi)容,比如一本書的內(nèi)容,需要匹配很多詞才能知道它的重點是講什么。
- 上文說到,參數(shù)b的作用是設定L對評分的影響有多大。如果把b設置為0,則L完全失去對評分的影響力。b的值越大,L對總評分的影響力越大。此時,相似度最終的完整公式為:
simlarity = IDF * ((k + 1) * tf) / (k * (1.0 - b + b * (|d|/avgDl)) + tf)
傳統(tǒng)TF-IDF vs. BM25
- 傳統(tǒng)的TF-IDF是自然語言搜索的一個基礎理論,它符合信息論中的熵的計算原理,雖然作者在剛提出它時并不知道與信息熵有什么關系,但你觀察IDF公式會發(fā)現(xiàn),它與熵的公式是類似的。實際上IDF就是一個特定條件下關鍵詞概率分布的交叉熵。
- BM25在傳統(tǒng)TF-IDF的基礎上增加了幾個可調(diào)節(jié)的參數(shù),使得它在應用上更佳靈活和強大,具有較高的實用性。