关键词提取技术:TF-IDF 详解

news2024/11/28 22:52:35

1. 什么是TF-IDF?

        TF-IDF(Term Frequency-Inverse Document Frequency) 是一种统计方法,用于评估单词在文档集或语料库中的重要性。它是自然语言处理和信息检索中的核心技术之一。

TF-IDF主要基于以下两个概念:

  • TF(Term Frequency, 词频):衡量某个词语在文档中的出现频率。
  • IDF(Inverse Document Frequency, 逆文档频率):衡量词语在整个语料库中的普遍性。

TF-IDF = TF × IDF

2. TF-IDF 的底层原理

2.1 词频 (TF) 的定义

词频是指某个词在文档中出现的次数。常用的公式是:

TF(t,d)=f(t,d)∑t′∈df(t′,d)TF(t,d)=∑t′∈d​f(t′,d)f(t,d)​

其中:

  • f(t,d) 表示词 t 在文档 d 中出现的次数。
  • ∑t′∈df(t′,d) 表示文档 d 中所有词的出现次数总和。

解释:TF 的目的是衡量某个词在文档中出现的频率,但由于文档长度不同,直接使用词频会造成偏差,因此通常将词频归一化,防止词频受到文档长度影响。

2.2 逆文档频率 (IDF) 的定义

        逆文档频率用于衡量某个词在整个文档集中有多普遍。若某个词在很多文档中都出现,则其IDF较低,反之,若某个词只在少数文档中出现,则其IDF较高。

IDF 的公式为:

IDF(t,D)=log\frac{|D|}{|d\in D : t\in d|}

其中:

  • ∣D∣  表示文档集中的文档总数。
  • ∣d∈D:t∈d∣ 表示包含词  t 的文档数。

解释:IDF 减少那些普遍出现在很多文档中的常见词的重要性(例如“的”、“是”等),强调那些具有区分度的词。

2.3 TF-IDF 的计算

TF-IDF 是将 TF 和 IDF 相乘得到的:

TF-IDF(t,d,D)=TF(t,d)*IDF(t,D)

它的作用是衡量词 t  在文档 d  中的相对重要性,同时考虑到该词在整个语料库中的普遍性。

3. 代码实现(Python)

我们可以通过 Python 从底层原理来实现 TF-IDF。假设我们有如下文本:

import math
from collections import Counter

# 假设的文档集
documents = [
    "the cat is on the table",
    "the dog is in the house",
    "there is a cat and a dog",
]

# 1. 计算 TF
def compute_tf(doc):
    tf_dict = {}
    bow = doc.split()
    word_count = len(bow)
    word_freq = Counter(bow)
    
    for word, count in word_freq.items():
        tf_dict[word] = count / float(word_count)
    
    return tf_dict

# 2. 计算 IDF
def compute_idf(docs):
    idf_dict = {}
    total_docs = len(docs)
    all_words = set([word for doc in docs for word in doc.split()])
    
    for word in all_words:
        containing_docs = sum([1 for doc in docs if word in doc.split()])
        idf_dict[word] = math.log(total_docs / float(containing_docs))
    
    return idf_dict

# 3. 计算 TF-IDF
def compute_tfidf(docs):
    tfidf_list = []
    idf_dict = compute_idf(docs)
    
    for doc in docs:
        tf_dict = compute_tf(doc)
        tfidf_dict = {}
        
        for word, tf_value in tf_dict.items():
            tfidf_dict[word] = tf_value * idf_dict[word]
        
        tfidf_list.append(tfidf_dict)
    
    return tfidf_list

# 运行结果
tfidf_values = compute_tfidf(documents)
for idx, doc_tfidf in enumerate(tfidf_values):
    print(f"Document {idx+1}: {doc_tfidf}")

代码解释:
  1. compute_tf(doc)

    • 输入:一个文档(字符串)。
    • 输出:一个字典,键是词语,值是词频。
    • 它通过分割字符串来获取每个词的出现次数,并将其归一化,得到 TF 值。
  2. compute_idf(docs)

    • 输入:文档集。
    • 输出:一个字典,键是词语,值是该词的 IDF。
    • 通过统计每个词语出现在多少文档中,然后根据公式计算 IDF。
  3. compute_tfidf(docs)

    • 输入:文档集。
    • 输出:每个文档的 TF-IDF 值。
    • 计算每个词在文档中的 TF 和在整个文档集中的 IDF,将两者相乘得到 TF-IDF。
输出结果示例:
Document 1: {'the': 0.0, 'cat': 0.13515503603605478, 'is': 0.0, 'on': 0.3662040962227032, 'table': 0.3662040962227032}
Document 2: {'the': 0.0, 'dog': 0.13515503603605478, 'is': 0.0, 'in': 0.3662040962227032, 'house': 0.3662040962227032}
Document 3: {'there': 0.3662040962227032, 'is': 0.0, 'a': 0.3662040962227032, 'cat': 0.13515503603605478, 'and': 0.3662040962227032, 'dog': 0.13515503603605478}

代码关键点:
  1. 词频(TF) 通过每个词在文档中的出现次数除以文档总词数来得到。
  2. 逆文档频率(IDF) 通过文档集中的文档总数除以包含该词的文档数,然后取对数。
  3. TF-IDF 通过词频和逆文档频率的乘积来评估某个词在当前文档中的重要性。

4. TF-IDF的意义与应用

4.1 意义

        TF-IDF 的目的在于找到那些在某一文档中频繁出现但在其他文档中较少出现的词,这些词通常能够很好地表示该文档的主题。例如,常用词“的”、“是”等对区分文档没有太大作用,但专有名词或主题词则能够起到显著区分作用。

4.2 应用场景
  1. 信息检索:在搜索引擎中,TF-IDF 用来衡量查询词和文档的相关性,从而排序最相关的文档。
  2. 关键词提取:在文本分类或情感分析任务中,可以使用 TF-IDF 提取文档中的关键词。
  3. 推荐系统:可以通过 TF-IDF 分析用户的兴趣偏好,推荐与用户感兴趣文档相似的内容。

5. 总结

        TF-IDF 是基于两个基本的统计概念:词频(TF)和逆文档频率(IDF)。它通过平衡词在单个文档中出现的频率和在整个语料库中出现的普遍性来衡量词的重要性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java毕业设计 基于SSM jsp餐厅卫生安全系统

Java毕业设计 基于SSM jsp餐厅卫生安全系统 这篇博文将介绍一个基于SSM框架和jsp开发的餐厅卫生安全系统,适合用于Java毕业设计。 功能介绍 餐厅人员: 注册 登录 首页 图片轮播 窗口信息 窗口详情 文明窗口 差评窗口 系统公告 个人中心 管理员:…

亚信安全DeepSecurity中标知名寿险机构云主机安全项目

近日,亚信安全DeepSecurity成功中标国内知名寿险机构的云主机安全项目。亚信安全凭借在云主机安全防护领域的突出技术优势,结合安全运营的能力,以“实战化”为指导,为用户提供无惧威胁攻击、无忧安全运营的一站式云安全体系&#…

Anaconda和Pycharm超详细安装教程(2024版本+Win11)

一、安装Anaconda 1.1 下载Anaconda 在官方网站(Free Download | Anaconda)上下载适用于你的操作系统的 Anaconda 安装包。(这里以windows为例) 1.2 安装Anaconda 打开下载的安装包,并按照安装向导的指示进行安装。在安装过程中,你可以选择默认的安装选项,也可以根据…

Visual Studio安装图文详解教程

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 教程说明 本教程旨在详细介绍 Visual Studio 社区版的安装过程及其注意事项。 Visual Studio简介 Visual Studio 社区版功能完备且可扩展的免费 IDE,可用于创…

NVR接入录像回放平台EasyCVR视频融合平台语音对讲配置

国标GB28181视频平台EasyCVR视频融合平台可拓展性强、视频能力灵活,平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析接入等功能。其中,在语音对讲方面,NVR接入录像回放平台目前…

4种鼓励创业创新的方法

随着市场趋于饱和,许多企业,尤其是初创企业,很难在竞争中保持领先地位。技术为企业彻底改变其营销和管理策略铺平了道路。另一个经过实践检验的成功渗透特定市场的方法是在办公室内部激发创新,从员工到品牌皆如此。 那么究竟如何…

【设计模式-原型】

**原型模式(Prototype Pattern)**是一种创建型设计模式,旨在通过复制现有对象的方式来创建新对象,而不是通过实例化类来创建对象。该模式允许对象通过克隆(复制)来创建新的实例,因此避免了重新创…

LabVIEW提高开发效率技巧----插入式架构

随着LabVIEW项目规模的扩大和系统复杂性的增加,传统的单一代码架构难以应对后期维护和功能扩展的需求。插入式架构(Plug-In Architecture)作为一种模块化设计方式,通过动态加载和运行子VI,使系统功能更加灵活、模块化&…

Oracle OCP认证考试考点详解082系列01

题记: 本篇博文是Oracle OCP认证考试考点详解082系列的第一篇,本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 1. 第一题: 1. 题目 2. 解析及答案 关于Oracle数据库中节…

6.1 特征值介绍

一、特征值和特征向量介绍 本章会开启线性代数的新内容。前面的第一部分是关于 A x b A\boldsymbol x\boldsymbol b Axb:平衡、均衡和稳定状态;现在的第二部分是关于变化的。时间会加入进来 —— 连续时间的微分方程 d u / d t A u \pmb{\textrm{d}…

通过AWS Bedrock探索 Claude 的虚拟桌面魔力:让 AI 代替你动手完成任务!

前言 大家好,昨夜Anthropic 发布了更新。现在 Claude 3.5 Sonnet(V2) 和 Claude 3.5 Haiku,以及名为 computer use 的新功能已经作为公开测试版发布了。 Introducing computer use, a new Claude 3.5 Sonnet, and Claude 3.5 Ha…

生成对抗网络基本原理

生成对抗网络(Generative Adversarial Networks,简称GANs)是由Ian Goodfellow等人在2014年提出的一种深度学习模型,它在生成模型领域引起了革命性的变化。GANs的核心思想是通过引入一个对抗过程来生成新的数据样本,这个…

【1024程序员节】MybatisPlus入门(一)MybatisPlus简介

一、MyBatis简介 MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率 - 官网:https://mybatis.plus/ https://mp.baomidou.com/ MyBatisPlus特性: - 无侵入:只做增强…

接口测试 —— Postman 变量了解一下!

Postman变量是在Postman工具中使用的一种特殊功能,用于存储和管理动态数据。它们可以用于在请求的不同部分、环境或集合之间共享和重复使用值。 Postman变量有以下几种类型: 1、环境变量(Environment Variables): 环境变量是在…

C语言程序设计:现代设计方法习题笔记《chapter3》

第一题 ​ 代码示例&#xff1a; #include<stdio.h>int main() {printf("Enter a date&#xff08;mm/dd/yyyy&#xff09;: ");int day, month, year;scanf_s("%d/%d/%d", &month, &day, &year);printf("%04d%02d%02d", yea…

stm32F103 实现呼吸灯效果

目录 硬件连接 软件实现步骤 初始化系统时钟。 配置 GPIO 引脚。 配置定时器以生成 PWM 信号。 在主循环中调整 PWM 占空比以实现呼吸效果。 示例代码 1. 初始化系统时钟 2. 配置 GPIO 引脚 3. 配置定时器以生成 PWM 信号 4. 在主循环中调整 PWM 占空比以实现呼吸效…

【读书笔记-《网络是怎样连接的》- 2】Chapter2_1-协议栈通信详细过程

第二章从协议栈这部分来看网络中的通信如何实现&#xff0c;准备从两部分来进行分解。本篇是第一部分&#xff1a;详细介绍TCP协议栈收发数据的过程。 首先来看下面的图。从应用程序到网卡需要经过如下几部分&#xff0c;上面的部分通过委托下面的部分来完成工作。首先是应用程…

URP学习(一)

URP是unity出的比较简单的可供改造引擎渲染管线的流程。能实现用较低的代价消耗实现较好的效果。 现记录学习&#xff1a; 一.如何设置URP关键 这步结束后材质会被替换 加package Create/Rendering/URP Universal Rendering Setting设置为urp 材质也需要urp目录下的 几种…

第23周Java主流框架入门-SpringMVC 3.拦截器

Spring MVC 拦截器 (Interceptor) 课程笔记 1. 什么是拦截器 (Interceptor) 拦截器 (Interceptor) 类似于我们之前学习过的 J2EE 过滤器 (Filter)。作用&#xff1a;对请求进行前置和后置的过滤处理。与 Filter 的区别&#xff1a; Interceptor 是 Spring MVC 的标准组件&…

mapbox没有token/token失效,地图闪烁后变空白,报错Error: A valid Mapbox access token is required to use Mapbox GL JS.

目录 mapbox没有token/token失效&#xff0c;地图闪烁后空白&#xff0c;报错Error: A valid Mapbox access token is required to use Mapbox GL JS. 一、问题描述 二、mapbox去除token验证 1、找到mapbox-gl文件夹 2、找到mapbox-gl.js文件 3、找到对应位置并修改 4、清…