当前位置: 首页 > article >正文

慧眼识词:解析TF-IDF工作原理

算法工程师必知必会之:TF-IDF


搜索系列相关文章(置顶)

1.原始信息再加工:一文读懂倒排索引
2.慧眼识词:解析TF-IDF工作原理
3.超越TF-IDF:信息检索之BM25
4.深入浅出 Beam Search:自然语言处理中的高效搜索利器

一、背景介绍

TF-IDF的起源可以追溯到20世纪70年代,由信息检索领域的先驱Karen Spärck Jones提出。她意识到,为了提高信息检索系统的效率,必须找到一种方式来评估每个词汇对于特定文档的重要性。在此之前,简单的关键词匹配往往导致大量无关结果。为了解决这个问题,Jones引入了IDF(逆文档频率)的概念,这与传统的基于词频(TF)的权重计算相结合,形成了今天熟知的TF-IDF算法。随着时间的发展,TF-IDF逐渐成为搜索引擎优化、文本分类等任务中的关键技术之一。

二、技术核心

1. 定义

TF-IDF(Term Frequency-Inverse Document Frequency)是用来评估一个词在文档或语料库中的重要性的一种统计方法。它通过结合两个度量:词频(TF, Term Frequency)逆文档频率(IDF, Inverse Document Frequency) 来计算。
在这里插入图片描述

1.1 词频 (TF)

词频衡量的是某个词 t t t 在文档 d d d 中出现的频率。公式如下:

T F ( t , d ) = 词  t  在文档  d  中出现的次数 文档  d  的总词数 TF(t, d) = \frac{\text{词 } t \text{ 在文档 } d \text{ 中出现的次数}}{\text{文档 } d \text{ 的总词数}} TF(t,d)=文档 d 的总词数 t 在文档 d 中出现的次数

  • 解释:这个公式用来量化一个词在一个特定文档内的相对重要性。如果一个词频繁出现在某文档中,那么它的TF值就高;反之则低。但是,仅依靠TF并不能全面反映词语的重要性,因为一些常用词如“the”、“is”等虽然出现频率高,但对文档主题贡献不大。
1.2 逆文档频率 (IDF)

逆文档频率衡量的是一个词在整个文档集合中的普遍程度或稀有性。公式如下:

I D F ( t ) = log ⁡ ( 总文档数 + 1 包含词  t  的文档数 + 1 ) + 1 IDF(t) = \log\left(\frac{\text{总文档数} + 1}{\text{包含词 } t \text{ 的文档数} + 1}\right) + 1 IDF(t)=log(包含词 t 的文档数+1总文档数+1)+1

  • 解释
    • [逆]指的是对词频的倒数进行某种形式的转换,以反映一个词在整个文档集合中的普遍性或稀有性。
    • 分子部分的“总文档数+1”是为了避免当某个词从未出现在任何文档中时,导致分母为零的问题。
    • 分母部分的“包含词 t t t 的文档数+1”同样是为了防止除以零的情况,并且使得即使某个词只在一个文档中出现过,其IDF也不会变得无限大。
    • 使用对数函数是为了缩小范围,让IDF的变化更加平缓,减少极端值的影响,同时保持对稀有词的有效加权。
    • 加上的“+1”确保了即使一个词非常普遍,其IDF也不会变为0。
1.3 TF-IDF 组合公式

最终,TF-IDF 值是通过将上述两个分数相乘得到的:

T F − I D F ( t , d ) = T F ( t , d ) × I D F ( t ) TF-IDF(t, d) = TF(t, d) \times IDF(t) TFIDF(t,d)=TF(t,d)×IDF(t)

  • 解释
    • 这个公式综合考虑了一个词在特定文档内的频率以及它在整个文档集中的罕见程度。
    • 对于那些既在文档内频繁出现又在整个集合中较为少见的词,它们的TF-IDF值将会很高,表明这些词对于描述文档内容非常重要。
    • 相反,那些常见于所有文档中的词(例如停用词),由于它们的IDF值较低,因此即使它们的TF值较高,它们的TF-IDF值仍然会很低。

通过这种方式,TF-IDF 提供了一种有效的方法来量化词汇的重要性,特别是在处理大量文本数据时。这种方法不仅有助于信息检索系统更准确地找到相关文档,而且也在诸如文本分类、关键词提取等多个自然语言处理任务中发挥了重要作用。

2. 举个🌰

为了更好地理解TF-IDF是如何工作的,通过一个具体的例子来展示其计算过程。假设有一个小型语料库,包含三篇文档,每篇文档讨论不同的主题。目标是计算每个词在各个文档中的TF-IDF值,并确定哪些词对于每篇文档最为重要。

给定文档集如下

  1. Doc1:机器学习是人工智能的一个分支。
  2. Doc2:深度学习是一种强大的机器学习方法。
  3. Doc3:人工智能正在改变我们的生活和工作方式。

第一步:预处理

首先,需要对文本进行预处理,包括分词、转换为小写、去除停用词(如“是”、“的”等)。为了简化,直接列出处理后的词汇:

  • Doc1: [机器, 学习, 人工, 智能, 分支]
  • Doc2: [深度, 学习, 强大, 方法, 机器, 学习]
  • Doc3: [人工, 智能, 改变, 生活, 工作, 方式]

第二步:计算词频 (TF)

接下来,计算每个词在单个文档中出现的频率(TF)。

  • Doc1:

    • 机器: 1 5 = 0.2 \frac{1}{5} = 0.2 51=0.2
    • 学习: 1 5 = 0.2 \frac{1}{5} = 0.2 51=0.2
    • 人工: 1 5 = 0.2 \frac{1}{5} = 0.2 51=0.2
    • 智能: 1 5 = 0.2 \frac{1}{5} = 0.2 51=0.2
    • 分支: 1 5 = 0.2 \frac{1}{5} = 0.2 51=0.2
  • Doc2:

    • 深度: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 学习: 2 6 ≈ 0.333 \frac{2}{6} \approx 0.333 620.333
    • 强大: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 方法: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 机器: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
  • Doc3:

    • 人工: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 智能: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 改变: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 生活: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 工作: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 方式: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167

第三步:计算逆文档频率 (IDF)

然后,计算每个词在整个文档集合中的逆文档频率(IDF)。假设总文档数 N = 3 N = 3 N=3

  • 机器: log ⁡ ( 3 + 1 2 + 1 ) + 1 ≈ 1.405 \log\left(\frac{3 + 1}{2 + 1}\right) + 1 \approx 1.405 log(2+13+1)+11.405
  • 学习: log ⁡ ( 3 + 1 2 + 1 ) + 1 ≈ 1.405 \log\left(\frac{3 + 1}{2 + 1}\right) + 1 \approx 1.405 log(2+13+1)+11.405
  • 人工: log ⁡ ( 3 + 1 2 + 1 ) + 1 ≈ 1.405 \log\left(\frac{3 + 1}{2 + 1}\right) + 1 \approx 1.405 log(2+13+1)+11.405
  • 智能: log ⁡ ( 3 + 1 2 + 1 ) + 1 ≈ 1.405 \log\left(\frac{3 + 1}{2 + 1}\right) + 1 \approx 1.405 log(2+13+1)+11.405
  • 分支: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 深度: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 强大: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 方法: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 改变: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 生活: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 工作: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 方式: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609

第四步:计算TF-IDF值

最后,将每个词的TF值与IDF值相乘,得到最终的TF-IDF值。

  • Doc1:

    • 机器: 0.2 × 1.405 ≈ 0.281 0.2 \times 1.405 \approx 0.281 0.2×1.4050.281
    • 学习: 0.2 × 1.405 ≈ 0.281 0.2 \times 1.405 \approx 0.281 0.2×1.4050.281
    • 人工: 0.2 × 1.405 ≈ 0.281 0.2 \times 1.405 \approx 0.281 0.2×1.4050.281
    • 智能: 0.2 × 1.405 ≈ 0.281 0.2 \times 1.405 \approx 0.281 0.2×1.4050.281
    • 分支: 0.2 × 1.609 ≈ 0.322 0.2 \times 1.609 \approx 0.322 0.2×1.6090.322
  • Doc2:

    • 深度: 0.167 × 1.609 ≈ 0.269 0.167 \times 1.609 \approx 0.269 0.167×1.6090.269
    • 学习: 0.333 × 1.405 ≈ 0.468 0.333 \times 1.405 \approx 0.468 0.333×1.4050.468
    • 强大: 0.167 × 1.609 ≈ 0.269 0.167 \times 1.609 \approx 0.269 0.167×1.6090.269
    • 方法: 0.167 × 1.609 ≈ 0.269 0.167 \times 1.609 \approx 0.269 0.167×1.6090.269
    • 机器: 0.167 × 1.405 ≈ 0.235 0.167 \times 1.405 \approx 0.235 0.167×1.4050.235
  • Doc3:

    • 人工: 0.167 × 1.405 ≈ 0.235 0.167 \times 1.405 \approx 0.235 0.167×1.4050.235
    • 智能: 0.167 × 1.405 ≈ 0.235 0.167 \times 1.405 \approx 0.235 0.167×1.4050.235
    • 改变: 0.167 × 1.609 ≈ 0.269 0.167 \times 1.609 \approx 0.269 0.167×1.6090.269
    • 生活: 0.167 × 1.609 ≈ 0.269 0.167 \times 1.609 \approx 0.269 0.167×1.6090.269
    • 工作: 0.167 × 1.609 ≈ 0.269 0.167 \times 1.609 \approx 0.269 0.167×1.6090.269
    • 方式: 0.167 × 1.609 ≈ 0.269 0.167 \times 1.609 \approx 0.269 0.167×1.6090.269

结果分析

从上述计算结果可以看出,“分支”、“深度”、“学习”等词在各自的文档中有较高的TF-IDF值,表明这些词对于描述相应文档的主题非常重要。例如,在Doc2中,“学习”的TF-IDF值最高,这反映了该文档特别关注于“学习”这个主题。

通过这个案例,可以看到TF-IDF如何帮助识别文档中最关键的词汇,从而辅助信息检索、文本分类和其他自然语言处理任务。

三、应用场景

1. 搜索引擎优化(SEO)

网站管理员可以通过提高页面上特定关键词的TF-IDF值来改善网站在搜索引擎结果页上的排名。这意味着不仅要增加目标关键词的出现频率,还要确保这些关键词在整体内容中具有独特性,以符合用户的查询意图。

2. 文本分类

在训练机器学习模型时,使用TF-IDF向量化文本数据可以帮助算法更好地理解和区分不同类别的文档。例如,在垃圾邮件过滤器中,某些词汇如“免费”、“赢取”等往往具有较高的TF-IDF值,因为它们通常只出现在垃圾邮件中,因此可以作为预测的重要特征。

3. 关键词提取

自动从新闻文章或其他长篇文章中抽取最重要的几个词,以便快速总结文章主旨。这种方法广泛应用于社交媒体监控、市场调研等领域,能够帮助企业及时捕捉公众舆论动向。

通过以上介绍,希望读者能够对TF-IDF这一经典算法有更深刻的理解,并能在实际工作中灵活运用。无论是在学术研究还是工业实践中,掌握TF-IDF都是处理文本数据不可或缺的一项技能。


http://www.kler.cn/a/460650.html

相关文章:

  • VMware去虚拟化
  • 【微软,模型规模】模型参数规模泄露:理解大型语言模型的参数量级
  • 机器学习经典算法——线性回归
  • DataV数据可视化
  • 使用 Actix-Web、SQLx 和 Redis 构建高性能 Rust Web 服务
  • 【Vim Masterclass 笔记01】Section 1:Course Overview + Section 2:Vim Quickstart
  • python爬虫--小白篇【selenium自动爬取文件】
  • 微信小程序自定义表格样式
  • 2024年度总结
  • 前端多个项目部署在同一个nginx下,前缀不同,配置编写方式
  • 红黑树的左旋右旋
  • MySQL 执行计划:优化查询性能
  • 家政预约小程序04活动管理表结构设计
  • Mac安装Jupyter和nbextensions报错问题
  • OpenStack系列第四篇:云平台基础功能与操作(Dashboard)
  • Spring 创建和管理 Bean 的原理,以及Spring 的单例模式是否线程安全?(有无状态Bean)
  • 电子电器架构 --- 智能座舱与AI结合
  • 数据仓库工具箱—读书笔记02(Kimball维度建模技术概述05、处理缓慢变化维度SCD属性)
  • 基于深度学习的医疗问诊助手
  • Postman[3] 创建Get和Post请求
  • Django中创建自增主键字段的几种方法
  • UEBA-对等组聚类
  • 数据结构与算法之动态规划: LeetCode 72. 编辑距离 (Ts版)
  • 198.213.337.打家劫舍
  • MySql find_in_set 函数
  • 数据仓库: 9- 数据仓库数据治理