TF-IDF(term frequency–inverse document frequency)是一種用于信息檢索(information retrieval)與文本挖掘(text mining)的常用加權技術。比較容易理解的一個應用場景是當我們手頭有一些文章時,我們希望計算機能夠自動地進行關鍵詞提取。而TF-IDF就是可以幫我們完成這項任務的一種統計方法。它能夠用于評估一個詞語對于一個文集或一個語料庫中的其中一份文檔的重要程度。
在一份給定的文件里,詞頻 (term frequency, TF) 指的是某一個給定的詞語在該文件中出現的次數。這個數字通常會被歸一化(分子一般小于分母 區別于IDF),以防止它偏向長的文件。(同一個詞語在長文件里可能會比短文件有更高的詞頻,而不管該詞語重要與否。)
逆向文件頻率 (inverse document frequency, IDF) 是一個詞語普遍重要性的度量。某一特定詞語的IDF,可以由總文件數目除以包含該詞語之文件的數目,再將得到的商取對數得到。
某一特定文件內的高詞語頻率,以及該詞語在整個文件集合中的低文件頻率,可以產生出高權重的TF-IDF。因此,TF-IDF傾向于過濾掉常見的詞語,保留重要的詞語。
TFIDF的主要思想是:如果某個詞或短語在一篇文章中出現的頻率TF高,并且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。TFIDF實際上是:TF * IDF,TF詞頻(Term Frequency),IDF反文檔頻率(Inverse Document Frequency)。TF表示詞條在文檔d中出現的頻率(另一說:TF詞頻(Term Frequency)指的是某一個給定的詞語在該文件中出現的次數)。IDF的主要思想是:如果包含詞條t的文檔越少,也就是n越小,IDF越大,則說明詞條t具有很好的類別區分能力。如果某一類文檔C中包含詞條t的文檔數為m,而其它類包含t的文檔總數為k,顯然所有包含t的文檔數n=m+k,當m大的時候,n也大,按照IDF公式得到的IDF的值會小,就說明該詞條t類別區分能力不強。(另一說:IDF反文檔頻率(Inverse Document Frequency)是指果包含詞條的文檔越少,IDF越大,則說明詞條具有很好的類別區分能力。)但是實際上,如果一個詞條在一個類的文檔中頻繁出現,則說明該詞條能夠很好代表這個類的文本的特征,這樣的詞條應該給它們賦予較高的權重,并選來作為該類文本的特征詞以區別與其它類文檔。這就是IDF的不足之處.
為了演示在Python中實現TF-IDF的方法,一些基于自然語言處理的預處理過程也會在本文中出現。如果你對NLTK和Scikit-Learn兩個庫還很陌生可以參考如下文章:
Python編程使用NLTK進行自然語言處理詳解
Python自然語言處理之詞干,詞形與最大匹配算法代碼詳解
必要的預處理過程
首先,我們給出需要引用的各種包,以及用作處理對象的三段文本。
新聞熱點
疑難解答