达观杯文本处理(二)----TF-IDF理论并实践

1. TF-IDF原理。

什么是TF-IDF:
TF-IDF(Term Frequency-Inverse DocumentFrequency, 词频-逆文件频率),一种用于资讯检索和资讯探勘的常用加权技术。

TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级。
相关原理:
词频TF(item frequency):某一给定词语在该文本中出现次数。该数字通常会被归一化(分子一般小于分母),以防止它偏向长的文件,因为不管该词语重要与否,它在长文件中出现的次数很可能比在段文件中出现的次数更大。

需要注意的是有一些通用词对文章主题没有太大作用,如“的”“是”等,而有一些频率出现少的词如一些专业词更能表现文章主题,所以为词语设置权重,权重的设计满足:一个词预测主题的能力越强,权重越大,反之,权重越小。也就是说,一些词只在很少几篇文章中出现,那么这样的词对文章主题的判断能力很大,这些词的权重应该设计的较大。IDF完成这样的工作。

逆向文件频率IDF(inverse document frequency):一个词语普遍重要性的度量。主要思想是:如果包含词条t的文档越少, IDF越大,则说明词条具有很好的类别区分能力。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到
在这里插入图片描述
此处分母+1是为了避免当所有文档都不包含该词时,分母为0的情况

计算TF-IDF:在这里插入图片描述

2. 文本矩阵化,使用词袋模型,以TF-IDF特征值为权重。(可以使用Python中TfidfTransformer库)

from sklearn.feature_extraction.text import CountVectorizer
vectorizer=CountVectorizer()
text=["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"]
# 文本的词频统计
print(vectorizer.fit_transform(text))
#
# # 各个特征代表的词
print(vectorizer.get_feature_names())
#
# # 每个文本的词向量特征
print(vectorizer.fit_transform(text).toarray())

在这里插入图片描述

3.将之前的数据进行tfidf

如何处理数据详情看我的前一篇文章。

from sklearn.feature_extraction.text import TfidfVectorizer
tt=x_train['word_seg']
vectorizer = TfidfVectorizer()
vectorizer.fit(tt)
xtrain=vectorizer.fit_transform(tt)
print(xtrain.shape)

在这里插入图片描述

# 保存
import pickle
data=(xtrain,y_train)
fp = open('data_w_tfidf.pkl', 'wb')
pickle.dump(data, fp)
fp.close()

在这里插入图片描述


参考
https://blog.csdn.net/weixin_41781408/article/details/88290150
https://blog.csdn.net/weixin_41781408/article/details/89046545

猜你喜欢

转载自blog.csdn.net/weixin_41781408/article/details/89061933