TFIDF原理及实践
一、词袋模型
原理:
将每篇文章看成一袋子词,并忽略每个词出现的顺序。即将整段文本以词为单位切分开,然后每篇文章可以表示成一个长向量,向量中的每一维代表一个单词,而该维对应的权重则反映了这个词在原文章中的重要程度。权重与词在文本中出现的频率有关,而其中不考虑词与词之间的上下文关系。
词袋模型的三步骤:
分词——统计修订词特征值——标准化
二、TF-IDF概述
公式为:TF-IDF(t, d) = TF(t, d)*IDF(t)
其中,TF(t, d) 表示单词t在文档d中出现的频率,IDF(t)表示逆文档频率,用来衡量单词t对表达语义所起的重要性,表示为:
IDF(t) = log(文章总数 / (包含单词t的文章总数 + 1))
直观解释是,如果一个单词在非常多的文章里都出现,则可能是比较通用的词汇,对于区分某篇文章特殊语义的贡献比较小,因此对其权重做一定惩罚。
三、通过sk-learn进行tf-idf预处理
两种方法:
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'])