機器學習:生動理解TF-IDF演算法

什麼是TF-IDF?

TF-IDF(term frequency–inverse document frequency)是一種用於信息檢索與數據挖掘的常用加權技術,常用於挖掘文章中的關鍵詞,而且演算法簡單高效,常被工業用於最開始的文本數據清洗。

TF-IDF有兩層意思,一層是"詞頻"(Term Frequency,縮寫為TF),另一層是"逆文檔頻率"(Inverse Document Frequency,縮寫為IDF)。

假設我們現在有一片長文叫做《量化系統架構設計》詞頻高在文章中往往是停用詞,「的」,「是」,「了」等,這些在文檔中最常見但對結果毫無幫助、需要過濾掉的詞,用TF可以統計到這些停用詞並把它們過濾。當高頻詞過濾後就只需考慮剩下的有實際意義的詞。

但這樣又會遇到了另一個問題,我們可能發現"量化"、"系統"、"架構"這三個詞的出現次數一樣多。這是不是意味著,作為關鍵詞,它們的重要性是一樣的?事實上系統應該在其他文章比較常見,所以在關鍵詞排序上,「量化」和「架構」應該排在「系統」前面,這個時候就需要IDF,IDF會給常見的詞較小的權重,它的大小與一個詞的常見程度成反比。

當有TF(詞頻)和IDF(逆文檔頻率)後,將這兩個詞相乘,就能得到一個詞的TF-IDF的值。某個詞在文章中的TF-IDF越大,那麼一般而言這個詞在這篇文章的重要性會越高,所以通過計算文章中各個詞的TF-IDF,由大到小排序,排在最前面的幾個詞,就是該文章的關鍵詞。

TF-IDF演算法步驟

第一步,計算詞頻:

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

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

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

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

第三步,計算TF-IDF:

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

優缺點

TF-IDF的優點是簡單快速,而且容易理解。缺點是有時候用詞頻來衡量文章中的一個詞的重要性不夠全面,有時候重要的詞出現的可能不夠多,而且這種計算無法體現位置信息,無法體現詞在上下文的重要性。如果要體現詞的上下文結構,那麼你可能需要使用word2vec演算法來支持。

示例代碼

推薦閱讀:

TAG:機器學習 | 深度學習DeepLearning | 自然語言處理 |