什么是TF-IDF
TF-IDF(term frequency-inverse document frequency)詞頻-逆向文件頻率。在處理文本時,如何將文字轉化為模型可以處理的向量呢?TF-IDF就是這個問題的解決方案之一。字詞的重要性與其在文本中出現的頻率成正比(TF),與其在語料庫中出現的頻率成反比(IDF)。
TF
TF:詞頻。TF(w)=(詞w在文檔中出現的次數)/(文檔的總詞數)
IDF
IDF:逆向文件頻率。有些詞可能在文本中頻繁出現,但並不重要,也即信息量小,如is,of,that這些單詞,這些單詞在語料庫中出現的頻率也非常大,我們就可以利用這點,降低其權重。IDF(w)=log_e(語料庫的總文檔數)/(語料庫中詞w出現的文檔數)
TF-IDF
將上面的TF-IDF相乘就得到了綜合參數:TF-IDF=TF*IDF
如何使用?
在文本處理中,我們經常遇到將一段話變成向量,以組成矩陣來輸入到模型中處理。我們這時就可以用到TF-IDF來做。但是我們需要自己找語料庫訓練TF-IDF嗎?看看sklearn.feature_extraction.text.TfidfVectorizer吧~~~
示例:
from sklearn.feature_extraction.text import TfidfVectorizer
cv=TfidfVectorizer(binary=False,decode_error='ignore',stop_words='english')
vec=cv.fit_transform(['hello world','this is a panda.'])#傳入句子組成的list
arr=vec.toarray()
arr是一個2*3的矩陣,如下:
array([[ 0.70710678, 0. , 0.70710678],
[ 0. , 1. , 0. ]])
一行代表一個句子樣本,這樣的矩陣就可以放入模型中訓練了。與TfidfVectorizer類似的還有CountVectorizer。與此相關的概念還有詞袋,詞集