微信登录

自然语言处理 - TF-IDF - 衡量词项在文档中的关键程度

自然语言处理 - TF-IDF:简介与示例

什么是TF-IDF?

TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于衡量词项(Term)在文档中重要性的统计方法。它通过两个核心指标:

  1. 词频(Term Frequency, TF):衡量词在单个文档中出现的频率。
  2. 逆文档频率(Inverse Document Frequency, IDF):衡量词在整个文档集合(语料库)中的稀有程度

两者的乘积即为TF-IDF值,越高表示该词对当前文档越关键。


如何计算?

假设有一个包含3篇文档的语料库:

  1. 文档1:自然语言处理是人工智能的重要领域。
  2. 文档2:深度学习推动了自然语言处理的发展。
  3. 文档3:人工智能和深度学习都依赖大数据。
1. 计算词频(TF)

公式
[ TF(词, 文档) = \frac{\text{词在文档中的出现次数}}{\text{文档总词数}} ]

示例
对于文档1中的“自然语言处理”:

  • 总词数 = 10
  • “自然语言处理”出现1次
    [ TF_{\text{自然语言处理}} = \frac{1}{10} = 0.1 ]
2. 计算逆文档频率(IDF)

公式
[ IDF(词) = \log\left(\frac{\text{文档总数}}{\text{包含该词的文档数} + 1}\right) ]

示例
在整个语料库中:

  • 总文档数 = 3
  • “自然语言处理”出现在文档1和文档2,共2次
    [ IDF_{\text{自然语言处理}} = \log\left(\frac{3}{2 + 1}\right) = \log(1) = 0 ]
3. 计算TF-IDF值

[ TF\text{-}IDF = TF \times IDF ]
对于“自然语言处理”在文档1中的重要性:
[ TF\text{-}IDF_{\text{自然语言处理}} = 0.1 \times 0 = 0 ]


为什么用TF-IDF?

  • 强调独特关键词:像“自然语言处理”若仅在部分文档出现(IDF高),则重要性更高。
  • 过滤常见词:如“的”、“是”在所有文档高频出现,IDF趋近于0,会被自动忽略。

实际应用场景

  1. 搜索引擎排序:高TF-IDF词作为匹配文档的关键词。
  2. 文本分类:TF-IDF向量作为特征输入机器学习模型。
  3. 自动摘要:提取文档中TF-IDF值最高的词组成摘要。

代码示例(Python)

  1. from sklearn.feature_extraction.text import TfidfVectorizer
  2. # 语料库
  3. corpus = [
  4. "自然语言处理是人工智能的重要领域。",
  5. "深度学习推动了自然语言处理的发展。",
  6. "人工智能和深度学习都依赖大数据。"
  7. ]
  8. # 计算TF-IDF
  9. vectorizer = TfidfVectorizer()
  10. tfidf_matrix = vectorizer.fit_transform(corpus)
  11. # 输出结果
  12. print("词项列表:", vectorizer.get_feature_names_out())
  13. print("TF-IDF矩阵:\n", tfidf_matrix.toarray())

输出

  1. 词项列表: ['人工智能', '依赖', '发展', '大数据', '学习', '推动', '深度', '是', '领域', '自然语言处理']
  2. TF-IDF矩阵: [[0.39 0. 0. 0. 0. 0. 0. 0.47 0.47 0.47]
  3. [0. 0. 0.47 0. 0.47 0.47 0.47 0. 0. 0.47]
  4. [0. 0.47 0. 0.62 0.47 0. 0.47 0. 0. 0. ]]

总结

TF-IDF简单高效,适合快速提取关键信息,但无法处理词序和语义(需结合深度学习)。通过平衡词频与文档频率,它成为自然语言处理的基础工具之一。

自然语言处理 - TF-IDF - 衡量词项在文档中的关键程度 -书闪专业知识库