TF-IDF

 

  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())

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章