自然語言處理 - 如何通俗地理解TFIDF?
本博客屬個人學習筆記,如有疏漏,歡迎在評論留言指出~轉載請註明。
在自然語言處理中,TFIDF常常被人提及。很多材料都提及TFIDF中的“普遍重要性”,但很少有材料去簡單解釋其中的原理。TFIDF其實分為兩個部分:TF與IDF。
(1)詞頻 TF
TF即Term Frequency,中文也叫詞頻。這個相對容易理解。
假設這裏給出的文檔$d_1$是:
“我有一只超級超級可愛的貓”
那麽分詞後我們很可能會得到:
[‘我‘,‘有‘,‘一只‘,‘超級‘,‘超級‘,‘可愛‘,‘的‘,‘貓‘]
我們分別給這些詞標上序號與出現次數:
詞語 | 序號 | 出現次數 |
我 | $w_1$ | 1 |
有 | $w_2$ | 1 |
一只 | $w_3$ | 1 |
超級 | $w_4$ | 2 |
可愛 | $w_5$ | 1 |
的 | $w_6$ | 1 |
貓 | $w_7$ | 1 |
不難發現,這個文檔中有一共8個詞語。
對於‘我‘(即$w_1$)這個詞來說,它在這個文檔$d_1$中的詞頻TF為:$$tf(w_1,d_1) = \frac{1}{8}$$
而對於‘超級‘(即$w_4$)這個詞來說,它在這個文檔$d_1$中的詞頻TF則為:$$tf(w_4,d_1) = \frac{2}{8} = \frac{1}{4}$$
而對於‘貓‘(即$w_7$)這個詞來說,它在這個文檔$d_1$中的詞頻TF則為:$$tf(w_7,d_1) = \frac{1}{8} $$
小結:詞頻TF的計算公式為$$tf(詞語w_i,文檔d_j)=tf(w_i, d_j) = \frac{文檔d_j中詞語w_i出現的次數}{文檔d_j中的詞語總數}$$
(2) 逆向文檔頻率 IDF
IDF即Inver Document Frequency,中文也叫逆向文檔頻率。先不著急理解它的作用~我們先來看看它是怎麽算出來的。
假設我們的語料庫(這裏我們稱它為D)中有兩個文檔——
文檔1:“我有一只超級超級可愛的貓”
文檔2:“我有一只超級淘氣的狗”
如果我們忘記自己在做自然語言處理,改成用人腦思考這兩句話的差別,我們會發現真正有區別的無非是“可愛的貓”和“淘氣的狗”。
而“我”,“有”,“一只”,“超級”並沒有提供什麽關鍵信息,因此它們並不太重要。“貓”、“狗”、“淘氣”、“可愛”才是提供關鍵信息的詞語。
而IDF正是在為我們處理這個問題——
對於“我”這個詞而言,它分別在文檔1和文檔2裏各出現了一次——這說明雖然“我”是一個在語料庫中非常常見的詞,但是它並不對區別語義起到很大的作用,因此它的重要性可能並不是特別高。
對應的,“我”這個詞的idf是:$$idf(“我”,語料庫D) = log \frac{語料庫D中的文檔總數}{包含“我”的文檔個數} = log \frac{2}{2} = log(1) = 0$$
而對於“貓”這個詞而言,它只在文檔1中出現過一次。 這說明,它可能對區分文檔語義有著重要的作用,因此它的重要性比較大。
對應的,“貓”這個詞的idf是:$$idf(“貓”,語料庫D) = log\frac{語料庫D中的文檔總數}{語料庫中包含“貓”的文檔個數} = log\frac{2}{1} = log(2) $$
註意到,$$log(2) > 0$$可見IDF實際上是為我們篩選了對語義起到重要作用的詞語。
小結:逆向文檔頻率的計算公式為$$idf(詞語w,語料庫D) = idf(w,D) = \frac{語料庫D中的文檔總數}{語料庫D中包含該詞語w的文檔個數}$$
(3)TF-IDF
定義:對於語料庫D中,文檔d包含的一個詞w,有TF-IDF為$$tfidf(詞語w,文檔d,語料庫D) = tfidf(w,d,D) = tf(w,d) \dot idf(w,D)$$.
比如說在剛才的例子中,對於不是很重要的“我”:$$tfidf(“我”, d1, D) = tf(“我”,d_1 \dot idf(“我”,D) = \frac{1}{8} \dot 0 = 0$$
而對於比較重要的“貓”:$$tfidf(“貓”, d1, D) = tf(“貓”,d_1 \dot idf(“貓”,D) = \frac{1}{8} \dot log(2) = \frac{log(2)}{8}$$
註意到$\frac{log(2)}{8} > 0$.
假設我把第一個文檔$d_1$改為只有“貓”一個詞,那麽毋庸置疑,對文檔$d_1$來說最重要的就是“貓”了。在這個情況下,貓的詞頻就是1了——乘數的其中一個會變大。
$$tfidf(“貓”, d1, D) = tf(“貓”,d_1 \dot idf(“貓”,D) = 1 \dot log(2) = log(2)$$
註意到$log(2) > \frac{log(2)}{8}$.
這就是為什麽,TFIDF可以過濾掉過於常見的詞語,以此保證所提取出的詞語具有“普遍重要性”。
參考資料:
https://en.wikipedia.org/wiki/Tf%E2%80%93idf
自然語言處理 - 如何通俗地理解TFIDF?