快轉到主要內容

白話圖解 - 什麼是 TF-IDF

「圖書館裡,哪一本書跟『魔杖』最有關係?」

搜尋關鍵字詞時,TF-IDF 用統計來預測眾多文章中,哪一篇跟關鍵字最相關:

  • TF: Term Frequency 詞頻
  • IDF: Inverse Document Frequency 逆文件頻率

不要被嚇到,馬上用白話文解釋給你聽

Term Frequency #

搜尋『魔杖』,管理員應該給你哪本書?哈利波特還是金庸?

「當然是哈利波特,因為裡面出現了很多次『魔杖』」 – Term Frequency (TF) 就是數數關鍵字在某篇文章內出現了幾次

很長的文章,詞比較多,出現機會大,所以應該用「比例」也就是資訊的密度:長文才出現三次沒什麼了不起,短文就出現三次可能很相關

Illustration of the statistics TF
Term Frequency 詞頻

一個很明顯但要注意的:給定關鍵字以後,每篇文章有自己的 TF

Inverse Document Frequency #

「圖書館裡,哪一本書跟『我』最有關係?」

這很難回答,因為『我』很常見:每本書都有『我』這個字!

Inverse Document Frequency (IDF) 表示一個詞的「罕見度」:在越多的文章出現,值越小 – 所以通常用比例的倒數

Illustration of the statistics IDF
Inverse Document Frequency 逆文件頻率

有幾件事要注意

  • IDF 只跟字詞有關;沒有所謂「每篇文章的 IDF」(雖然常見與否的依據是統計全部的文章,所以會隨著 corpus 而變)
  • IDF 通常不看在一篇文章內出現多少次;單純只看「出現在多少篇文章內」。所以只在一篇文章出現,但出現超多次的詞,仍然視為罕見詞,IDF 會很高
  • 實務上 IDF 通常掛 log 對數計算(後面詳解)

TF-IDF #

如果 IDF 跟單獨一篇文章沒關係,那為什麼要計算?

「搜尋『我 的 魔杖』,哪本書最相關?」

按照常識,「我」「的」太常見了,所以在一本書出現幾次 (TF) 並不重要

反之,如果一個詞罕見,那他竟然出現在某本書,其頻率更應該被重視!

因此,通常會用 TF 乘 IDF 來代表這個詞在各篇文章的重要度;每篇文章有自己的 TF-IDF

Illustration of the statistics TF-IDF
TF-IDF 為每個 token 的 TF 跟 IDF 的乘積,再相加起來

因為上述理由,當關鍵字有很多詞的時候,一種方式是把關鍵字裡的每個詞,對於每篇文章都算出 TF-IDF,然後相加起來,表示這個關鍵字在每篇文章的相關度

IDF 為什麼用 log 對數 #

雖然 IDF 掛 log 可以用資訊理論解釋,不過更直覺的看法,是希望不要讓超罕見的詞「只出現在 2 篇文章」的詞跟「只出現在 4 篇文章」的,兩者 IDF 相差太多

Curve of IDF when it's reciprocal Curve of IDF when it's log of reciprocal
IDF 用 log 對數讓差異不那麼劇烈

TF-IDF 的限制 #

TF-IDF 是很單純的統計量,自然有不少問題

  • Tokenization: 「魔杖」該不該算兩個字「魔」跟「杖」分開計算呢?怎麼知道「魔杖」是一個詞呢?
  • Proximity: TF-IDF 數數的時候,不管位置順序,只管次數。搜尋「我 的 魔杖」,如果一篇文章是四字連起來『我的魔杖』,另一篇是『我小孩喜歡你的魔杖』,兩者的 TF-IDF 可能一樣,但你覺得是否前者比較有關聯呢?
  • 語意: 文章『我的魔杖形狀的巧克力』,你覺得跟「我的魔杖」有關嗎?

所以 TF-IDF 只能做一個基本的參考

TF-IDF 的變種:BM25 #

TF 項跟 IDF 項其實都有不少變種公式,其中最有名的就是 Okapi BM25,在文本搜尋引擎像是 Elasticsearch 都可見到。想知道 BM25 怎麼運作嗎?請看 我下一篇文章)!


若您覺得有趣, 請 追蹤我的Facebook 或  Linkedin, 讓你獲得更多資訊!