1. 程式人生 > >文字挖掘預處理之TF-IDF

文字挖掘預處理之TF-IDF

    在文字挖掘預處理之向量化與Hash Trick中我們講到在文字挖掘的預處理中,向量化之後一般都伴隨著TF-IDF的處理,那麼什麼是TF-IDF,為什麼一般我們要加這一步預處理呢?這裡就對TF-IDF的原理做一個總結。

1. 文字向量化特徵的不足

    在將文字分詞並向量化後,我們可以得到詞彙表中每個詞在各個文字中形成的詞向量,比如在文字挖掘預處理之向量化與Hash Trick這篇文章中,我們將下面4個短文字做了詞頻統計:

corpus=["I come to China to travel", 
    "This is a car polupar in China",          
    
"I love tea and Apple ", "The work is to write some papers in science"]

    不考慮停用詞,處理後得到的詞向量如下:

[[0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 1 0 0]
 [0 0 1 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 0]
 [1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0]
 [0 0 0 0 0 1 1 0 1 0 1 1 0 1 0 1 0 1 1]]

    如果我們直接將統計詞頻後的19維特徵做為文字分類的輸入,會發現有一些問題。比如第一個文字,我們發現"come","China"和“Travel”各出現1次,而“to“出現了兩次。似乎看起來這個文字與”to“這個特徵更關係緊密。但是實際上”to“是一個非常普遍的詞,幾乎所有的文字都會用到,因此雖然它的詞頻為2,但是重要性卻比詞頻為1的"China"和“Travel”要低的多。如果我們的向量化特徵僅僅用詞頻表示就無法反應這一點。因此我們需要進一步的預處理來反應文字的這個特徵,而這個預處理就是TF-IDF。

2. TF-IDF概述

    TF-IDF是Term Frequency -  Inverse Document Frequency的縮寫,即“詞頻-逆文字頻率”。它由兩部分組成,TF和IDF。

    前面的TF也就是我們前面說到的詞頻,我們之前做的向量化也就是做了文字中各個詞的出現頻率統計,並作為文字特徵,這個很好理解。關鍵是後面的這個IDF,即“逆文字頻率”如何理解。在上一節中,我們講到幾乎所有文字都會出現的"to"其詞頻雖然高,但是重要性卻應該比詞頻低的"China"和“Travel”要低。我們的IDF就是來幫助我們來反應這個詞的重要性的,進而修正僅僅用詞頻表示的詞特徵值。

    概括來講, IDF反應了一個詞在所有文字中出現的頻率,如果一個詞在很多的文字中出現,那麼它的IDF值應該低,比如上文中的“to”。而反過來如果一個詞在比較少的文字中出現,那麼它的IDF值應該高。比如一些專業的名詞如“Machine Learning”。這樣的詞IDF值應該高。一個極端的情況,如果一個詞在所有的文字中都出現,那麼它的IDF值應該為0。

    上面是從定性上說明的IDF的作用,那麼如何對一個詞的IDF進行定量分析呢?這裡直接給出一個詞$x$的IDF的基本公式如下:$$IDF(x) = log\frac{N}{N(x)}$$

    其中,$N$代表語料庫中文字的總數,而$N(x)$代表語料庫中包含詞$x$的文字總數。為什麼IDF的基本公式應該是是上面這樣的而不是像$N/N(x)$這樣的形式呢?這就涉及到資訊理論相關的一些知識了。感興趣的朋友建議閱讀吳軍博士的《數學之美》第11章。

    上面的IDF公式已經可以使用了,但是在一些特殊的情況會有一些小問題,比如某一個生僻詞在語料庫中沒有,這樣我們的分母為0, IDF沒有意義了。所以常用的IDF我們需要做一些平滑,使語料庫中沒有出現的詞也可以得到一個合適的IDF值。平滑的方法有很多種,最常見的IDF平滑後的公式之一為:$$IDF(x) = log\frac{N+1}{N(x)+1} + 1$$

    有了IDF的定義,我們就可以計算某一個詞的TF-IDF值了:$$TF-IDF(x) = TF(x) * IDF(x)$$

    其中$TF(x)$指詞$x$在當前文字中的詞頻。

3. 用scikit-learn進行TF-IDF預處理

    在scikit-learn中,有兩種方法進行TF-IDF的預處理。

    完整程式碼參見我的github:https://github.com/ljpzzz/machinelearning/blob/master/natural-language-processing/tf-idf.ipynb

    第一種方法是在用CountVectorizer類向量化之後再呼叫TfidfTransformer類進行預處理。第二種方法是直接用TfidfVectorizer完成向量化與TF-IDF預處理。

    首先我們來看第一種方法,CountVectorizer+TfidfTransformer的組合,程式碼如下:

from sklearn.feature_extraction.text import TfidfTransformer  
from sklearn.feature_extraction.text import CountVectorizer  

corpus=["I come to China to travel", 
    "This is a car polupar in China",          
    "I love tea and Apple ",   
    "The work is to write some papers in science"] 

vectorizer=CountVectorizer()

transformer = TfidfTransformer()
tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))  
print tfidf

    輸出的各個文字各個詞的TF-IDF值如下:

  (0, 4)	0.442462137895
  (0, 15)	0.697684463384
  (0, 3)	0.348842231692
  (0, 16)	0.442462137895
  (1, 3)	0.357455043342
  (1, 14)	0.453386397373
  (1, 6)	0.357455043342
  (1, 2)	0.453386397373
  (1, 9)	0.453386397373
  (1, 5)	0.357455043342
  (2, 7)	0.5
  (2, 12)	0.5
  (2, 0)	0.5
  (2, 1)	0.5
  (3, 15)	0.281131628441
  (3, 6)	0.281131628441
  (3, 5)	0.281131628441
  (3, 13)	0.356579823338
  (3, 17)	0.356579823338
  (3, 18)	0.356579823338
  (3, 11)	0.356579823338
  (3, 8)	0.356579823338
  (3, 10)	0.356579823338

    現在我們用TfidfVectorizer一步到位,程式碼如下:

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf2 = TfidfVectorizer()
re = tfidf2.fit_transform(corpus)
print re

    輸出的各個文字各個詞的TF-IDF值和第一種的輸出完全相同。大家可以自己去驗證一下。

    由於第二種方法比較的簡潔,因此在實際應用中推薦使用,一步到位完成向量化,TF-IDF與標準化。

4. TF-IDF小結

    TF-IDF是非常常用的文字挖掘預處理基本步驟,但是如果預處理中使用了Hash Trick,則一般就無法使用TF-IDF了,因為Hash Trick後我們已經無法得到雜湊後的各特徵的IDF的值。使用了IF-IDF並標準化以後,我們就可以使用各個文字的詞特徵向量作為文字的特徵,進行分類或者聚類分析。

    當然TF-IDF不光可以用於文字挖掘,在資訊檢索等很多領域都有使用。因此值得好好的理解這個方法的思想。

(歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]) 

相關推薦

文字挖掘處理TF-IDF

    在文字挖掘預處理之向量化與Hash Trick中我們講到在文字挖掘的預處理中,向量化之後一般都伴隨著TF-IDF的處理,那麼什麼是TF-IDF,為什麼一般我們要加這一步預處理呢?這裡就對TF-IDF的原理做一個總結。 1. 文字向量化特徵的不足     在將文字分詞並向量化後,我們可以得到詞彙表中每個

【python】 文字挖掘處理TF-IDF

轉自: 文字挖掘預處理之TF-IDF - 劉建平Pinard - 部落格園 https://www.cnblogs.com/pinard/p/6693230.html   在文字挖掘預處理之向量化與Hash Trick中我們講到在文字挖掘的預處理中,向量化之後一般都伴

文字挖掘處理向量化與Hash Trick

在文字挖掘的分詞原理中,我們講到了文字挖掘的預處理的關鍵一步:“分詞”,而在做了分詞後,如果我們是做文字分類聚類,則後面關鍵的特徵預處理步驟有向量化或向量化的特例Hash Trick,本文我們就對向量化和特例Hash Trick預處理方法做一個總結。 1. 詞袋模型

文字處理TF-IDF權重計算(一)

前言最近在看些自然語言處理的知識,這裡分享下語言處理的過程。一般而言,自然語言預處理包含分詞、去停用詞、權重計算等。0x01 nltk庫安裝這裡以nltk庫為例。nltk的全稱是natural language toolkit,是一套基於python的自然語言處理工具集。安裝

乾貨 | 自然語言處理(5)英文文字挖掘處理流程

前言原文連結:http://www.cnblogs.com/pinard/p/6756534.h

文字挖掘處理的流程總結(轉)

最近半年一直忙於專案,部落格也很少更新咯。有幾個專案做了不少JS相關的工作,基本都可以利用現成的開源方案,諸如angularJs、requireJs、bootstrap、knockoutJs、TypeScript、Jquery等等;之後也有專案是無UI的,純後端

自然語言處理TF-IDF演算法

假定現在有一篇長文《中國的蜜蜂養殖》,我們準備用計算機提取它的關鍵詞。 一個容易想到的思路,就是找到出現次數最多的詞。如果某個詞很重要,它應該在這篇文章中多次出現。於是,我們進行"詞頻"(Term Frequency,縮寫為TF)統計。 結果你肯定猜到了,出現次數最多的詞是----"的"、"是"、"在"--

機器學習基礎——詳解自然語言處理tf-idf

本文始發於個人公眾號:TechFlow,原創不易,求個關注 今天的文章和大家聊聊文字分析當中的一個簡單但又大名鼎鼎的演算法——TF-idf。說起來這個演算法是自然語言處理領域的重要演算法,但是因為它太有名了,以至於雖然我不是從事NLP領域的,但在面試的時候仍然被問過好幾次,可見這個演算法的重要性。 好在演算

資料處理抽取文字資訊(2)

摘要:大資料技術與我們日常生活越來越緊密,要做大資料,首要解決資料問題。原始資料存在大量不完整、不一致、有異常的資料,嚴重影響到資料建模的執行效率,甚至可能導致模型結果的偏差,因此要資料預處。資料預處理主要是將原始資料經過文字抽取、資料清理、資料整合、資料處理、資料變換、資料降維等處理後,不

自然語言處理系列TF-IDF演算法

TF-IDF演算法 TF-IDF(詞頻-逆文件頻率)演算法是一種統計方法,用以評估一字詞對於一個檔案集或一個語料庫中的其中一份檔案的重要程度。字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。該演算法在資料探勘、文字

【機器學習】數據處理將類別數據轉換為數值

行數據 pri and slab form ces nbsp 遍歷 encode 在進行python數據分析的時候,首先要進行數據預處理。 有時候不得不處理一些非數值類別的數據,嗯, 今天要說的就是面對這些數據該如何處理。 目前了解到的大概有三種方法: 1,通過LabelE

數據處理離散化

存在 Go 行處理 variable RR OS 個數 連接 ssi 按照我們對於變量的分類:分為數值變量和分類變量,數值變量可以分為連續型和離散型,分類變量又有有序的和無序的。下面我將介紹一些對於這些變量進行離散化處理。 無序分類變量的離散化方法: 比如在泰坦尼克

數據處理標準化

select 有意 rand 附近 繼續 行數 sts 分享圖片 border 數據的標準化(Standardization)和歸一化(Normalization)有什麽區別? 關於數據的標準化和歸一化區別的說法有點亂。總的來說有這麽幾種分法 1:不做區分,都意味著標準化。

131.003 數據處理Dummy Variable & One-Hot Encoding

table pandas 文化 影響 部分 href reg int 兩個 @(131 - Machine Learning | 機器學習) Dummy Variable 虛擬變量的含義 虛擬變量又稱虛設變量、名義變量或啞變量,用以反映質的屬性的一個人工變量,是量化了的質變

圖像處理圖像翻轉、圖像色彩調整

tran 色相 target get pytho pan aip highlight clas 圖像翻轉 tf.image.flip_up_down:上下翻轉 tf.image.flip_left_right:左右翻轉 tf.image.transpose_image:對

記一次800多萬XML文字檔案處理經歷

一.背景 由於某些需求,現需對系統在最近幾個月生成的xml檔案進行預處理,提取<text>標籤內的資料進行分析。這些需要預處理的資料大概有280GB左右880多萬,存放在gysl目錄下,gysl的下一層按天命名,分為若干個目錄,接下來一層目錄下又有多個目錄,我們所需的xml目錄就在這一層。我們現

資料處理資料抽樣

資料抽樣 在資料建模階段,一般需要將樣本分為3部分:訓練集、驗證集、測試集。訓練集用來估計模型,驗證集用來確定網路結構或者控制模型複雜度的引數,測試集檢驗最終選擇模型的效能如何。一般劃分為70%、15%、15%。當資料量較小時,留少部分作為測試集,把其餘N個樣本採用K折交叉驗證法。即將樣

資料處理缺失值處理

資料預處理.1 缺失值處理 刪除法 刪除小部分樣本,在樣本量大時(刪除部分所佔比例小於5%時)可以使用 插補法 —均值插補:分為定距型(插入均值)和非定距型(眾數或者中值) —迴歸插補:線性和非線性迴歸 —極大似然估計M

關鍵詞提取/關鍵字提取TF-IDF演算法

TF-IDF(term frequency–inverse document frequency)是一種用於資訊檢索與資訊探勘的常用加權技術。TF的意思是詞頻(Term - frequency),  IDF的意思是逆向檔案頻率(inverse Document frequency)。TF-IDF是一

halcon影象處理影象增強

影象增強一般通過如下幾種方式: 1. 灰度值線性變換 scale_image: g’ := g * Mult + Add g為當前的灰度值,Mult 為所乘的係數,Add為加的偏移值,由公式可以看出用scale_image來處理影象是個線性變化,會讓黑的地方更