解析TF-IDF模型公式、应用、优缺点及实战

一、 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值