天天看點

TF-IDF與餘弦相似性的應用(一):自動提取關鍵詞

這個标題看上去好像很複雜,其實我要談的是一個很簡單的問題。

有一篇很長的文章,我要用計算機提取它的關鍵詞(automatic keyphrase extraction),完全不加以人工幹預,請問怎樣才能正确做到?

TF-IDF與餘弦相似性的應用(一):自動提取關鍵詞

讓我們從一個執行個體開始講起。假定現在有一篇長文《中國的蜜蜂養殖》,我們準備用計算機提取它的關鍵詞。

TF-IDF與餘弦相似性的應用(一):自動提取關鍵詞

一個容易想到的思路,就是找到出現次數最多的詞。如果某個詞很重要,它應該在這篇文章中多次出現。于是,我們進行”詞頻”(term frequency,縮寫為 tf)統計。

假設我們把它們都過濾掉了,隻考慮剩下的有實際意義的詞。這樣又會遇到了另一個問題,我們可能發現”中國”、”蜜蜂”、”養殖”這三個詞的出現次數一樣多。這是不是意味着,作為關鍵詞,它們的重要性是一樣的?

顯然不是這樣。因為”中國”是很常見的詞,相對而言,”蜜蜂”和”養殖”不那麼常見。如果這三個詞在一篇文章的出現次數一樣多,有理由認為,”蜜蜂”和”養殖”的重要程度要大于”中國”,也就是說,在關鍵詞排序上面,”蜜蜂”和”養殖”應該排在”中國”的前面。

是以,我們需要一個重要性調整系數,衡量一個詞是不是常見詞。如果某個詞比較少見,但是它在這篇文章中多次出現,那麼它很可能就反映了這篇文章的特性,正是我們所需要的關鍵詞。

用統計學語言表達,就是在詞頻的基礎上,要對每個詞配置設定一個”重要性”權重。最常見的詞(”的”、”是”、”在”)給予最小的權重,較常見的詞(”中國”)給予較小的權重,較少見的詞(”蜜蜂”、”養殖”)給予較大的權重。這個權重叫做”逆文檔頻率”(inverse document frequency,縮寫為 idf),它的大小與一個詞的常見程度成反比。

知道了”詞頻”(tf)和”逆文檔頻率”(idf)以後,将這兩個值相乘,就得到了一個詞的 tf-idf 值。某個詞對文章的重要性越高,它的 tf-idf 值就越大。是以,排在最前面的幾個詞,就是這篇文章的關鍵詞。

下面就是這個算法的細節。

第一步,計算詞頻。

TF-IDF與餘弦相似性的應用(一):自動提取關鍵詞

考慮到文章有長短之分,為了便于不同文章的比較,進行”詞頻”标準化。

TF-IDF與餘弦相似性的應用(一):自動提取關鍵詞

或者

TF-IDF與餘弦相似性的應用(一):自動提取關鍵詞

第二步,計算逆文檔頻率。

這時,需要一個語料庫(corpus),用來模拟語言的使用環境。

TF-IDF與餘弦相似性的應用(一):自動提取關鍵詞

如果一個詞越常見,那麼分母就越大,逆文檔頻率就越小越接近0。分母之是以要加1,是為了避免分母為0(即所有文檔都不包含該詞)。log 表示對得到的值取對數。

第三步,計算 tf-idf。

TF-IDF與餘弦相似性的應用(一):自動提取關鍵詞

可以看到,tf-idf 與一個詞在文檔中的出現次數成正比,與該詞在整個語言中的出現次數成反比。是以,自動提取關鍵詞的算法就很清楚了,就是計算出文檔的每個詞的 tf-idf 值,然後按降序排列,取排在最前面的幾個詞。

還是以《中國的蜜蜂養殖》為例,假定該文長度為 1000 個詞,”中國”、”蜜蜂”、”養殖”各出現 20 次,則這三個詞的”詞頻”(tf)都為 0.02。然後,搜尋 google 發現,包含”的”字的網頁共有 250 億張,假定這就是中文網頁總數。包含”中國”的網頁共有 62.3 億張,包含”蜜蜂”的網頁為 0.484 億張,包含”養殖”的網頁為 0.973 億張。則它們的逆文檔頻率(idf)和 tf-idf 如下:

TF-IDF與餘弦相似性的應用(一):自動提取關鍵詞

從上表可見,”蜜蜂”的 tf-idf 值最高,”養殖”其次,”中國”最低。(如果還計算”的”字的 tf-idf,那将是一個極其接近 0 的值。)是以,如果隻選擇一個詞,”蜜蜂”就是這篇文章的關鍵詞。

除了自動提取關鍵詞,tf-idf 算法還可以用于許多别的地方。比如,資訊檢索時,對于每個文檔,都可以分别計算一組搜尋詞(”中國”、”蜜蜂”、”養殖”)的 tf-idf,将它們相加,就可以得到整個文檔的 tf-idf。這個值最高的文檔就是與搜尋詞最相關的文檔。

tf-idf 算法的優點是簡單快速,結果比較符合實際情況。缺點是,單純以”詞頻”衡量一個詞的重要性,不夠全面,有時重要的詞可能出現次數并不多。而且,這種算法無法展現詞的位置資訊,出現位置靠前的詞與出現位置靠後的詞,都被視為重要性相同,這是不正确的。

下一次,我将用 tf-idf 結合餘弦相似性,衡量文檔之間的相似程度。

繼續閱讀