📜  理解TF-IDF(词频-逆文档频率)(1)

📅  最后修改于: 2023-12-03 15:40:51.237000             🧑  作者: Mango

理解TF-IDF(词频-逆文档频率)

在自然语言处理中,TF-IDF(Term Frequency-Inverse Document Frequency,即词频-逆文档频率)是一种用于评估一篇文章中一个词语重要程度的方法。TF-IDF 的基本思想是:如果某个词语在一篇文章中出现的频率很高,但在整个文章库中出现的频率很低,那么该词语很可能具有很好的区分能力,可以用来识别该文章的主题。

TF(词频)

TF 表示某个词在一篇文章中出现的次数。例如,一篇文章里面有 100 个单词,其中 "apple" 出现了 3 次,那么 "apple" 在这篇文章中的词频就是 3/100,即 0.03。

IDF(逆文档频率)

IDF 表示某个词在整个文章库中出现的次数。如果一个词在许多文章中频繁出现,那么它就是一个常见词,我们可以忽略它。IDF 使用总文章数除以包含该词的文章数目的对数来计算。例如,在一个数据集中有 10,000 篇文章,其中 "apple" 出现在 100 篇文章中,那么 "apple" 的逆文档频率就是 log(10000/100),约等于 2。

TF-IDF

将 TF 和 IDF 相乘,就得到了 TF-IDF。一个词的 TF-IDF 值越大,表示该词在这篇文章中越重要,可以用来衡量该词与主题的相关性。

import math
from collections import Counter

def tf(word, document):
    return document.count(word) / len(document)

def idf(word, corpus):
    return math.log10(len(corpus) / sum(1 for document in corpus if word in document))

def tf_idf(word, document, corpus):
    return tf(word, document) * idf(word, corpus)

corpus = [
    "apple banana apple",   # 文档1
    "orange apple",         # 文档2
    "pear banana"           # 文档3
]

# 计算在文档1中的苹果的TF
print(tf("apple", corpus[0]))  # 输出 0.6666666666666666

# 计算在整个语料库中的苹果的IDF
print(idf("apple", corpus))    # 输出 0.17609125905568124

# 计算在文档1中的苹果的TF-IDF
print(tf_idf("apple", corpus[0], corpus)) # 输出 0.11739463601564116
应用场景

TF-IDF 可以用于文本分类、信息检索、文本聚类等一系列自然语言处理任务。它是一种简单而有效的方法,可以帮助我们发现文本中的关键信息。