白話圖解 - 什麼是 TF-IDF
目錄
「圖書館裡,哪一本書跟『魔杖』最有關係?」
搜尋關鍵字詞時,TF-IDF 用統計來預測眾多文章中,哪一篇跟關鍵字最相關:
- TF: Term Frequency 詞頻
- IDF: Inverse Document Frequency 逆文件頻率
不要被嚇到,馬上用白話文解釋給你聽
Term Frequency #
搜尋『魔杖』,管理員應該給你哪本書?哈利波特還是金庸?
「當然是哈利波特,因為裡面出現了很多次『魔杖』」 – Term Frequency (TF) 就是數數關鍵字在某篇文章內出現了幾次
很長的文章,詞比較多,出現機會大,所以應該用「比例」也就是資訊的密度:長文才出現三次沒什麼了不起,短文就出現三次可能很相關
![Illustration of the statistics TF](./tf.webp)
一個很明顯但要注意的:給定關鍵字以後,每篇文章有自己的 TF
Inverse Document Frequency #
「圖書館裡,哪一本書跟『我』最有關係?」
這很難回答,因為『我』很常見:每本書都有『我』這個字!
Inverse Document Frequency (IDF) 表示一個詞的「罕見度」:在越多的文章出現,值越小 – 所以通常用比例的倒數
![Illustration of the statistics IDF](./idf.webp)
有幾件事要注意
- IDF 只跟字詞有關;沒有所謂「每篇文章的 IDF」(雖然常見與否的依據是統計全部的文章,所以會隨著 corpus 而變)
- IDF 通常不看在一篇文章內出現多少次;單純只看「出現在多少篇文章內」。所以只在一篇文章出現,但出現超多次的詞,仍然視為罕見詞,IDF 會很高
- 實務上 IDF 通常掛 log 對數計算(後面詳解)
TF-IDF #
如果 IDF 跟單獨一篇文章沒關係,那為什麼要計算?
「搜尋『我 的 魔杖』,哪本書最相關?」
按照常識,「我」「的」太常見了,所以在一本書出現幾次 (TF) 並不重要
反之,如果一個詞罕見,那他竟然出現在某本書,其頻率更應該被重視!
因此,通常會用 TF 乘 IDF 來代表這個詞在各篇文章的重要度;每篇文章有自己的 TF-IDF
![Illustration of the statistics TF-IDF](./tfidf.png)
因為上述理由,當關鍵字有很多詞的時候,一種方式是把關鍵字裡的每個詞,對於每篇文章都算出 TF-IDF,然後相加起來,表示這個關鍵字在每篇文章的相關度
IDF 為什麼用 log 對數 #
雖然 IDF 掛 log 可以用資訊理論解釋,不過更直覺的看法,是希望不要讓超罕見的詞「只出現在 2 篇文章」的詞跟「只出現在 4 篇文章」的,兩者 IDF 相差太多
![Curve of IDF when it's reciprocal](./idf-plot-1.png)
![Curve of IDF when it's log of reciprocal](./idf-plot-2.png)
TF-IDF 的限制 #
TF-IDF 是很單純的統計量,自然有不少問題
- Tokenization: 「魔杖」該不該算兩個字「魔」跟「杖」分開計算呢?怎麼知道「魔杖」是一個詞呢?
- Proximity: TF-IDF 數數的時候,不管位置順序,只管次數。搜尋「我 的 魔杖」,如果一篇文章是四字連起來『我的魔杖』,另一篇是『我小孩喜歡你的魔杖』,兩者的 TF-IDF 可能一樣,但你覺得是否前者比較有關聯呢?
- 語意: 文章『我的魔杖形狀的巧克力』,你覺得跟「我的魔杖」有關嗎?
所以 TF-IDF 只能做一個基本的參考
TF-IDF 的變種:BM25 #
TF 項跟 IDF 項其實都有不少變種公式,其中最有名的就是 Okapi BM25,在文本搜尋引擎像是 Elasticsearch 都可見到。想知道 BM25 怎麼運作嗎?請看 我下一篇文章)!