TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于衡量词项(Term)在文档中重要性的统计方法。它通过两个核心指标:
两者的乘积即为TF-IDF值,越高表示该词对当前文档越关键。
假设有一个包含3篇文档的语料库:
文档1:自然语言处理是人工智能的重要领域。
文档2:深度学习推动了自然语言处理的发展。
文档3:人工智能和深度学习都依赖大数据。
公式:
[ TF(词, 文档) = \frac{\text{词在文档中的出现次数}}{\text{文档总词数}} ]
示例:
对于文档1中的“自然语言处理”:
公式:
[ IDF(词) = \log\left(\frac{\text{文档总数}}{\text{包含该词的文档数} + 1}\right) ]
示例:
在整个语料库中:
[ TF\text{-}IDF = TF \times IDF ]
对于“自然语言处理”在文档1中的重要性:
[ TF\text{-}IDF_{\text{自然语言处理}} = 0.1 \times 0 = 0 ]
from sklearn.feature_extraction.text import TfidfVectorizer
# 语料库
corpus = [
"自然语言处理是人工智能的重要领域。",
"深度学习推动了自然语言处理的发展。",
"人工智能和深度学习都依赖大数据。"
]
# 计算TF-IDF
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(corpus)
# 输出结果
print("词项列表:", vectorizer.get_feature_names_out())
print("TF-IDF矩阵:\n", tfidf_matrix.toarray())
输出:
词项列表: ['人工智能', '依赖', '发展', '大数据', '学习', '推动', '深度', '是', '领域', '自然语言处理']
TF-IDF矩阵: [[0.39 0. 0. 0. 0. 0. 0. 0.47 0.47 0.47]
[0. 0. 0.47 0. 0.47 0.47 0.47 0. 0. 0.47]
[0. 0.47 0. 0.62 0.47 0. 0.47 0. 0. 0. ]]
TF-IDF简单高效,适合快速提取关键信息,但无法处理词序和语义(需结合深度学习)。通过平衡词频与文档频率,它成为自然语言处理的基础工具之一。