原理:
將每篇文章看成一袋子詞,並忽略每個詞出現的順序。即將整段文字以詞為單位切分開,然後每篇文章可以表示成乙個長向量,向量中的每一維代表乙個單詞,而該維對應的權重則反映了這個詞在原文章中的重要程度。權重與詞在文字**現的頻率有關,而其中不考慮詞與詞之間的上下文關係。
詞袋模型的三步驟:
分詞——統計修訂詞特徵值——標準化
公式為:tf-idf(t, d) = tf(t, d)*idf(t)
其中,tf(t, d) 表示單詞t在文件d**現的頻率,idf(t)表示逆文件頻率,用來衡量單詞t對表達語義所起的重要性,表示為:
idf(t) = log(文章總數 / (包含單詞t的文章總數 + 1))
直觀解釋是,如果乙個單詞在非常多的文章裡都出現,則可能是比較通用的詞彙,對於區分某篇文章特殊語義的貢獻比較小,因此對其權重做一定懲罰。
兩種方法:
1)使用countvectorizer類向量化之後,再呼叫tfidftransformer類進行預處理。
2)第二種方法是直接使用tfidfvectorizer直接完成向量化與預處理。
方法一實踐如下所示:
from sklearn.feature_extraction.text import tfidftransformer
from sklearn.feature_extraction.text import countvectorizer
import pandas as pd
my_data = pd.read_csv('../datasets/train_set.csv', nrows = 5000)
vectorizer = countvectorizer()
transformer = tfidftransformer()
tfidf = transformer.fit_transform(vectorizer.fit_transform(my_data['word_seg']))
方法二實踐如下所示:
from sklearn.feature_extraction.text import tfidfvectorizer
my_data = pd.read_csv('../datasets/train_set.csv', nrows = 5000)
tfidfvectorizer = tfidfvectorizer()
re = tfidfvectorizer.fit_transform(my_data['word_seg'])
參考: 達觀杯文字智慧型處理挑戰賽
筆者嘗試了一下達觀杯的比賽,如下圖所示 import pandas as pd import imp from sklearn.linear model import logisticregression from sklearn.feature extraction.text import cou...
達觀杯文字智慧型處理挑戰賽練習
比賽官方對資料的說明是資料報含兩個檔案 train set.csv和test set.csv 一.初識資料 train set.csv 此資料集用於訓練模型,每一行對應一篇文章。文章分別在 字 和 詞 的級別上做了脫敏處理。共有四列 第一列是文章的索引 id 第二列是文章正文在 字 級別上的表示,即...
達觀杯文字智慧型挑戰賽任務二(TF IDF)
簡介 tf idf term frequency inverse document frequency 是一種用於資訊檢索與資料探勘的常用加權技術。tf意思是詞頻 term frequency idf意思是逆文字頻率指數 inverse document frequency 原理 tfidf的主要思...