[英]TD/IDF in scikit-learn
關於如何使用TfidfTransformer( http://scikit-learn.org/stable/modules/feature_extraction.html )為語料庫的n-gram生成TF / IDF,是否有完整的Python 2.7示例? 環顧scikit學習頁面,它只有代碼片段(不完整的示例)。
問候,林
對於TF-IDF特征提取,scikit-learn具有2個類TfidfTransformer
和TfidfVectorizer
。 這兩個類實質上具有相同的目的,但應以不同的方式使用。 對於文本特征提取,scikit-learn具有Transformers和Vectorizers的概念。 矢量化程序直接處理原始文本以生成要素,而“變形器”處理現有要素並將其轉換為新要素。 因此,以此類推, TfidfTransformer
使用現有的Term-Frequency功能並將其轉換為TF-IDF功能,而TfidfVectorizer
將原始文本作為輸入並直接生成TF-IDF功能。 如果在構建功能部件時沒有現有的文檔術語矩陣,則應始終使用TfidfVectorizer
。 在黑匣子級別,您應該將TfidfVectorizer
視為CountVectorizer
再加上TfidfTransformer
。
現在Tfidfectorizer
的工作示例。 請注意,如果這個例子很清楚,那么您將毫無困難地理解為TfidfTransformer
給出的TfidfTransformer
。
現在考慮您的語料庫中有以下4個文檔:
text = [
'jack and jill went up the hill',
'to fetch a pail of water',
'jack fell down and broke his crown',
'and jill came tumbling after'
]
只要迭代字符串,就可以使用任何iterable
。 TfidfVectorizer
還支持從文件中讀取文本,他們在文檔中對此進行了詳細討論。 現在,在最簡單的情況下,我們可以初始化TfidfVectorizer
對象並將其訓練數據擬合到該對象。 這樣做如下:
tfidf = TfidfVectorizer()
train_features = tfidf.fit_transform(text)
train_features.shape
此代碼僅使Vectorizer fits
我們的輸入數據,並生成尺寸為4 x 20
的稀疏矩陣。 因此,它將給定文本中的每個文檔轉換為20
特征的向量,其中詞匯量為20
。
對於TfidfVectorizer
,當我們說fit the model
,意味着TfidfVectorizer
從語料庫中學習IDF權重。 “轉換數據”是指使用擬合的模型(學習IDF權重)將文檔轉換為TF-IDF向量。 該術語是整個scikit學習的標准。 在分類問題的情況下,它非常有用。 考慮是否要基於某些標記的訓練數據(使用TF-IDF向量作為特征)將文檔分類為肯定的還是否定的。 在這種情況下,您將使用訓練數據構建TF-IDF矢量化器,並且當您看到新的測試文檔時,只需使用已經安裝的 TfidfVectorizer
對其進行TfidfVectorizer
。
因此,如果我們有以下test_txt
:
test_text = [
'jack fetch water',
'jill fell down the hill'
]
我們可以通過簡單地構建測試功能
test_data = tfidf.transform(test_text)
這將再次為我們提供2 x 20
的稀疏矩陣。 在這種情況下使用的IDF權重是從訓練數據中學到的權重。
這就是簡單的TfidfVectorizer
工作方式。 您可以通過在構造函數中傳遞更多參數來使其更加復雜。 這些在Scikit-Learn文檔中有很好的記錄。 我經常使用的一些參數是:
ngram_range
這使我們可以使用n克令牌構建TF-IDF向量。 例如,如果我通過(1,2)
,則將同時生成unigram和bigrams。 stop_words
允許我們分別提供停用詞以在此過程中忽略。 過濾掉幾乎所有文檔中的“ the”,“ of”等單詞是一種常見的做法。 min_df
和max_df
這使我們能夠根據文檔頻率來動態過濾詞匯表。 例如,通過將max_df
為0.7
,我可以讓我的應用程序自動刪除特定於域的停用詞。 例如,在醫學期刊中, 疾病一詞可以被視為停用詞。 除此之外,您還可以參考我為項目編寫的示例代碼 。 盡管沒有很好的文檔說明,但是函數的命名非常好。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.