1、TF-IDF解释
TF-IDF(Term frequency–inverse document frequency),中文翻译就是词频 - 逆文档频率,是一种用来计算关键词的传统方法。
TF(Term Frequency):TF 的意思就是词频,是指某个词(Term)在一篇新闻中出现的次数。
考虑一些非常常见的词,比如说 “你的”“我的”“今天” 这种词,可能在一篇新闻中会反复出现,但是这种词明显并不重要,于是有了 IDF。
IDF(Inverse Document Frequency):IDF 称为逆文档频率,这个词我们用公式来看一下可能更容易理解。
逆文档频率( I D F ) = l o g ( 新闻的总数量 包含某个词的新闻总量 + 1 ) 逆文档频率(IDF)=log(\frac {新闻的总数量}{包含某个词的新闻总量+1}) 逆文档频率(IDF)=log(包含某个词的新闻总量+1新闻的总数量)
如果一个词越普通,那它越可能出现在所有的新闻中,那么分母就越大,IDF 的值就越接近 0。单纯地使用 IDF 作为关键词也不靠谱,如果你自己随便造了一个没人听过的词加在新闻中,比如说 “趿拉”,那么上式的分母非常小,所得到的 IDF 值会非常大,但是这个词明显没有什么意义。
TF-IDF: TF×IDF 结果,TF-IDF 与一个词在新闻中出现的次数成正比,与该词在整个语料上出现的次数成反比。
2、算法实现
import gensim.downloader as api # 是 Gensim 库提供的一个模块,用于方便地下载和管理预训练的自然语言处理模型和数据集。
from gensim.corpora import Dictionary#gensim.corpora 模块是 Gensim 库中的一个子模块,用于处理文档集合的表示形式,通常被用于构建和管理文本语料库。这个模块提供了一些类和函数,用于将文档表示为词袋模型(Bag-of-Words)或其他类型的文档表示形式,以便进行主题建模、相似度计算等任务。
dataset = api.load("text8")#如遇下载时找不到information.json文件,可在论坛找到文件包含的内容,创建文件在对应目录下
dct = Dictionary(dataset)#创建一个字典
new_corpus = [dct.doc2bow(line) for line in dataset]#对应字符和其出现的频数
from gensim import models
#Gensim 是一个用于进行自然语言处理的 Python 库,它提供了各种功能,包括文本处理、主题建模、文本相似度计算和词向量表示等。它特别擅长处理大规模的文本数据,并提供了高效的算法和数据结构来支持这些任务。
tfidf = models.TfidfModel(new_corpus)
tfidf.save("tfidf.model")
tfidf = models.TfidfModel.load("tfidf.model")
tfidf_vec = []
for i in range(len(new_corpus)):
string_tfidf = tfidf[new_corpus[i]]
tfidf_vec.append(string_tfidf)
print(tfidf_vec[1])#左边是这个词的 ID,右边是这个词的 TF-IDF 值
3、算法优缺点
优点
1、算法简单,十分容易理解,而且运算速度非常快。
缺点
1、文本比较短的时候几乎无效,如果一篇内容中每个词都只出现了一次,那么用 TF-IDF 很难得到有效的关键词信息;
2、无法应对一词多义的情况,尤其是博大精深的汉语,对于词的顺序特征也没办法表达。