IF-IDF是信息檢索(IR)中最常用的一種文本表示法。算法的思想也很簡單,就是統計每個詞出現的詞頻(TF),然後再爲其附上一個權值參數(IDF)。舉個例子:
現在假設我們要統計一篇文檔中的前10個關鍵詞,應該怎麼下手?首先想到的是統計一下文檔中每個詞出現的頻率(TF),詞頻越高,這個詞就越重要。但是統計完你可能會發現你得到的關鍵詞基本都是“的”、“是”、“爲”這樣沒有實際意義的詞(停用詞),這個問題怎麼解決呢?你可能會想到爲每個詞都加一個權重,像這種”停用詞“就加一個很小的權重(甚至是置爲0),這個權重就是IDF。下面再來看看公式:
IF應該很容易理解就是計算詞頻,IDF衡量詞的常見程度。爲了計算IDF我們需要事先準備一個語料庫用來模擬語言的使用環境,如果一個詞越是常見,那麼式子中分母就越大,逆文檔頻率就越小越接近於0。這裏的分母+1是爲了避免分母爲0的情況出現。TF-IDF的計算公式如下:
根據公式很容易看出,TF-IDF的值與該詞在文章中出現的頻率成正比,與該詞在整個語料庫中出現的頻率成反比,因此可以很好的實現提取文章中關鍵詞的目的。
優缺點分析
優點:簡單快速,結果比較符合實際
缺點:單純考慮詞頻,忽略了詞與詞的位置信息以及詞與詞之間的相互關係。
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
tag_list = ['青年 吃貨 唱歌',
'少年 遊戲 叛逆',
'少年 吃貨 足球']
vectorizer = CountVectorizer() #將文本中的詞語轉換爲詞頻矩陣
X = vectorizer.fit_transform(tag_list) #計算個詞語出現的次數
word_dict = vectorizer.vocabulary_
#word_dict
print(word_dict)
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(X) #將詞頻矩陣X統計成TF-IDF值
print(tfidf.toarray())