通常我們對於文本信息之間得相關性得計算都是采用向量的辦法,我在以前的PPT裡曾經提到過。然而對於文本信息更深層次的分析不能單純從字面上分析一篇文章的關鍵詞,更重要的是它隱含的擴展的意義。
傳統的關於計算文本相關度和【網頁和查詢的相關性】的計算都是采用匹配的方式進行的,然而這只能是基於字面意義上的統計計算。這裡介紹的做法是采用關鍵詞相關性擴展的做法從而得到更加精確的相關度計算。
例子:
文章 A: 談論的是大學教育,最高頻的關鍵詞是:學生[3],學習[2],大學[2]
文章 B: 談論的是普通教育,最高頻的關鍵詞是:教育[5],教師[1],進修[1]
[]裡是相對的權重,可以理解成 TF*IDF
根據傳統的相關性計算,我們會得到如下的結果:
1. 文章A 與 文章B 不相關
2. 查詢 學生,學習,大學只能返回文章A,不能返回文章B
3. 查詢 教育,教師,進修只能返回文章B,不能返回文章A
分析:
這個顯然是有一定的問題的,問題的出現在於我們通常將“字面”的意思做為分析的來源而且依靠和僅僅依靠這些“字面”的關鍵詞做為文章相關性和查詢相關性判斷的唯一要素。
如何避免?
我在以前的文章中提到過【關鍵詞相關度】的概念,舉例說明:
當出現:{學習}這個詞匯的時候,真實的表達的意義往往是這樣的:
{W1*學習,W2*教育,W3*教師,W4*大學。。。。。。}
其中W1,W2...是學習和相關詞匯的相關權重。
基於這樣一個矩陣,我們就能夠將一個詞擴展成為一組詞匯,因而也同時可以將文章所對應的向量擴展成一個更多詞匯的集合。
這裡的計算需要一個完整的相關度矩陣:M
M(i,j) = {關鍵詞i,j的相關度}
而兩篇文章的相關度的計算,也由簡單的
R= Sigma Vi*Vi
變為
R= Sigma Vi*M(i,j)*Vj
查詢關鍵詞和文章的相關度也由簡單的
R(i)=TF(i)*IDF(i)
變為
R(i)=Sigma TF(j)*IDF(j)*M(i,j)
下面碰到一個核心問題就是:關鍵詞之間的相關度如何計算?
例如:學校和學生的相關度是多少?
計算方法:
假設一個文章集合 {C},總文章數目為N,其中含有單詞A的文章總數為Na,含有單詞B的文章總數是Nb,含有{A+B}的文章總數是 Nab,那麼相關性這麼計算
CorrAB= Nab/(Na+Nb-Nab)-(Na*Nb)/(N*N)
本計算中可能會得到負相關,如果考慮到Na,Nb都是小量,可以忽略,那麼
CorrAB= Nab/(Na+Nb-Nab)
至此,要計算相關度之間的全部要素都獲得了。
思考,那麼到底 學校 和學生 之間的相關度是多少呢?
我們利用google來回答這個問題吧:
約有91,700,000項符合學校的查詢結果
約有88,200,000項符合學生的查詢結果
約有48,900,000項符合學生 學校的查詢結果
Corr{學校,學生}=48,900,000/(91,700,000+88,200,000-48,900,000)=0.37
這個原理我以前應用在了計算【網頁信噪比】上,和網頁信噪比一起成為衡量一個網頁的關鍵詞的核心算法。
這也就是為什麼6e的網頁信噪比能夠不依靠網頁上現有的關鍵詞而准確的判斷網頁的分類和相關度,是因為除了TF和IDF之外,我們能夠從已有的文本集合裡學到更多的“知識”。
那麼百度和google的相關度應該不難計算了:
利用 google計算得到:2,950,000/(61,800,000+6,370,000-2,950,000)=0.03
利用 baidu計算得到:2,760,000/(21,700,000+12,200,000-2,760,000)=0.08
看來基本上相關度小於10%。