Python中的TfidfVectorizer参数解析

时间:2022-08-27 23:17:27

vectorizer = CountVectorizer() #构建一个计算词频(TF)的玩意儿,当然这里面不足是可以做这些

transformer = TfidfTransformer() #构建一个计算TF-IDF的玩意儿

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

#vectorizer.fit_transform(corpus)将文本corpus输入,得到词频矩阵

#将这个矩阵作为输入,用transformer.fit_transform(词频矩阵)得到TF-IDF权重矩阵


TfidfTransformer + CountVectorizer  =  TfidfVectorizer


值得注意的是,CountVectorizer()和TfidfVectorizer()里面都有一个成员叫做vocabulary_(后面带一个下划线)

这个成员的意义是词典索引,对应的是TF-IDF权重矩阵的列,只不过一个是私有成员,一个是外部输入,原则上应该保持一致。


vectorizer = TfidfVectorizer(stop_words=stpwrdlst, sublinear_tf = True, max_df = 0.5)


关于参数:

stop_words:

    传入停用词,以后获得vocabulary_的时候,就会根据文本信息去掉停用词得到

vocabulary:

    词典索引

sublinear_tf:

    计算tf值采用亚线性策略。比如,我们以前计算tf是词频,现在会用1+log(分子/(1+分母))的方式解决,默认是开启的

norm:

    归一化,我们计算TF-IDF的时候,使用TF*IDF,TF可以是归一化的,也可以是没有归一化的,一般都是采用归一化的方法,默认开启

max_df:

    有些词,它们的文档频率太高了(一个词如果每篇文档都出现,那就没有必要用它来区分文本类别了),所以,我们可以设定一个阈值,比如float类型0.5(取值范围[0.0 , 1.0]),表示这个词如果在整个数据集中超过50%的文本都出现了,那么我们也把它列为临时停用词。当然你也可以设定为int型,例如max_df=10,表示这个词如果在整个数据集中超过10的文本都出现了,那么我们也把它列为临时停用词

min_df:

    与max_df相反,虽然文档频率越低,似乎越能区分文本,可是如果太低,例如10000篇文本中只有一篇文本出现过这个词,仅仅因为这一篇文本,就增加了词向量空间的维度,不太划算


当然,max_df和min_df在给定vocabulary参数时,就失效了