一、 TF(Term Frequency)——词频
词频(Term Frequency,简称TF)是指某个词在文档中出现的次数。它衡量了一个词在某一篇文档中的重要性。TF的计算公式如下:
例如,假设文档
d
有100个词,其中词t
出现了5次,那么TF就是:
TF的直观意义:TF越高,说明该词在文档中出现的频率越高,可能是某一篇文档的一个重要关键词。
二、 IDF(Inverse Document Frequency)——逆文档频率
逆文档频率(IDF)是用来衡量某个词在所有文档中的普遍程度。常见的词(如“的”、“是”等)出现在大多数文档中,它们的IDF值会较低。IDF的计算公式如下:
其中:
N是文档的数量,就是有几篇文档。
DF(t) 是包含词
t
的文档数量(Document Frequency)。IDF的直观意义:对于词t来说,包含词
t
的文档数量越多,IDF越低,说明该词在大多数文档中都出现,因此它们对区分文档的能力较弱。反之,IDF越高的词在所有文档中出现频率低,说明它是具有区分度的关键词。
三、 TF- IDF 计算
碎碎念:如果一个词它在某篇文章中的词频很高(TF很高),它在别的文章又不怎么出现(IDF很高),这两个因素综合考虑的话,越能说明该词的区分度。
TF-IDF模型结合了TF和IDF两个因素,用来评估词语在文档中的重要性。它的计算公式是:
- TF-IDF的直观意义:
- 如果一个词在某篇文档中频繁出现(TF高),同时这个词在其他文档中出现较少(IDF高),那么这个词对该文档的意义较大,TF-IDF值也会较高。
- 如果一个词在文档中出现频繁,但在所有文档中也很常见(IDF低),则它的TF-IDF值较低。
四、TF-IDF的应用及其优缺点
TF-IDF在自然语言处理(NLP)和信息检索中有广泛应用,以下是几种常见的应用:
- 关键词提取:通过计算每个词的TF-IDF值,挑选出那些TF-IDF值高的词作为文档的关键词。
- 文本分类:使用TF-IDF作为文本的特征,结合机器学习算法(如SVM、Naive Bayes等)对文档进行分类。
- 信息检索:搜索引擎通过计算查询词和文档中词的TF-IDF值,返回与查询最相关的文档。
优缺点:
- 优点:
- 计算简单,易于实现。
- 可以有效地提取文本中的关键信息,避免了常见词的干扰。
- 可以处理大规模文本数据,且具有较好的效果。
- 缺点:
- 无法考虑词序和上下文信息,忽略了词与词之间的关系。
- 对于一些多义词或语境依赖较强的词,TF-IDF的效果较差。
- 假设词频和文档频率是完全独立的,可能不完全符合真实语境中的情况。
五、调包实战
from gensim.corpora import Dictionary
from gensim.models import TfidfModel# 1. 定义 text2Matrix 函数
def text2Matrix(wordList):# 创建词典dictionary = Dictionary(wordList)# 创建词袋表示:每篇文档为一个词频向量corpus = [dictionary.doc2bow(text) for text in wordList]# 使用词袋表示创建TF-IDF模型tfidf_model = TfidfModel(corpus)# 应用TF-IDF模型转换词袋表示为TF-IDF表示corpus_tfidf = tfidf_model[corpus]return dictionary, corpus, corpus_tfidf# 2. 测试数据:每篇文档是一个由词组成的列表
wordList = [['apple', 'banana', 'apple'],['banana', 'cherry', 'apple'],['apple', 'cherry', 'cherry', 'banana'],
]# 3. 调用 text2Matrix 函数
dictionary, corpus, corpus_tfidf = text2Matrix(wordList)# 4. 输出词典内容
print("词典内容:")
for word_id, word in dictionary.items():print(f"{word_id}: {word}")# 5. 输出词袋表示(原始词频表示)
print("\n词袋表示(Corpus):")
for doc in corpus:print(doc)# 6. 输出TF-IDF表示
print("\nTF-IDF表示(Corpus_tfidf):")
for doc in corpus_tfidf:print(doc)
词典内容:
这是一个包含所有文档中出现的独立词汇的集合,通常是去重后的所有词。
词袋模型忽略了词语在文档中的顺序,甚至忽略了语法,只关注以下两点:
- 文档中出现了哪些词。
- 每个词在文档中出现了多少次。
TF-IDF表示:
[ ]表示在第1篇文档中,所有的词汇的TF-IDF值都是零。
[(2, 1.0)] 表示在第2/3篇文档中,'cherry' 是一个重要的词,且其TF-IDF值为1.0。