《NLP自然语言处理》—— 关键字提取之TF-IDF算法

news2024/11/15 4:39:19

文章目录

  • 一、TF-IDF算法介绍
  • 二、举例说明
  • 三、示例:代码实现
  • 四、总结

一、TF-IDF算法介绍

  • TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于信息检索与文本挖掘的常用加权技术。TF-IDF是一种统计方法,用以评估一个词语对于一个文件集或一个语料库中的其中一份文件的重要程度。词语的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
  • TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为这个词或者短语具有很好的类别区分能力,适合用来分类。
  • TF(Term Frequency,词频)
    • 词频(TF)指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(一般是词频除以文章总词数),以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)
    • 计算公式如下:
      在这里插入图片描述
  • IDF(Inverse Document Frequency,逆文档频率)
    • 逆文档频率(IDF)是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。如果包含词条t的文档越少,IDF越大,则说明词条t具有很好的类别区分能力。
    • 计算公式如下:
      在这里插入图片描述
    • +1是为了避免包含该词的文档数为0的时候,分子为0的情况发生
  • TF-IDF的计算公式
    在这里插入图片描述

二、举例说明

  • 假设有一篇名为《中国的蜜蜂养殖》文章,假定该文长度为1000个词,“中国”、“蜜蜂”、养殖"各出现20次,则这三个词的"词频”(TF)都为0.02。

  • 然后,搜索Google发现,包含"的"字的网页共有250亿张,假定这就是中文网页总数(语料库的文档总数)。包含"中国"的网页共有62.3亿张,包含"蜜蜂"的网页为0.484亿张,包含"养殖"的网页为0.973亿张

  • 则通过计算公式可以得到它们的逆文档频率(IDF)和TF-IDF如下:

    \包含该词的文档数(亿)IDFTFTF-IDF
    中国62.30.6030.020.0121
    蜜蜂0.4842.7130.020.0543
    养殖0.9732.4100.020.0482

三、示例:代码实现

  • TfidfVectorizer() 是 sklearn 库中用于将文本集合转换为 TF-IDF 特征矩阵的一个类。

  • TfidfVectorizer 类有许多参数,但以下是一些最常用的:

    • input: 指定输入数据的格式,可以是 ‘filename’、‘file’ 或 ‘string’。默认为 ‘content’,这意味着输入应该是字符串列表或字符串的生成器。
    • max_df: 指定词或短语的文档频率(DF)的上限。高于此值的词或短语将被忽略。这有助于去除一些太常见的词(如停用词)。
    • min_df: 指定词或短语的文档频率(DF)的下限。低于此值的词或短语将被忽略。这有助于去除一些非常罕见的词。
    • max_features: 指定要保留的词的最大数量(基于文档频率)。这有助于减少特征空间的维度。
    • ngram_range: 一个元组 (min_n, max_n),用于指定不同 n 值对应的 n-grams 的范围。例如,(1, 1) 表示单词(unigrams),(1, 2) 表示单词和二元组(bigrams)。
    • stop_words: 一个字符串列表,包含要忽略的停用词。可以是一个预定义的列表,如 - ‘english’,也可以是一个自定义的列表。
    • lowercase: 布尔值,指定是否将所有文本转换为小写。默认为 True。
    • use_idf: 布尔值,指定是否使用 IDF(逆文档频率)重新加权。默认为 True。
    • smooth_idf: 布尔值,指定在计算 IDF 时是否应用平滑(添加 1 到文档频率,以避免除以零)。默认为 True。
  • 主要方法

    • fit(X, y=None): 计算词汇表的词汇IDF值。
    • fit_transform(X, y=None): 拟合模型并转换 X。
    • transform(X): 将 X 转换为 TF-IDF 特征矩阵。
    • get_feature_names_out(): 返回词汇表中所有特征的名称
  • 示例

    from sklearn.feature_extraction.text import TfidfVectorizer  
      
    # 示例文本
    """
    corpus代表整个语料库,其中的每一句,代表一个文档
    """  
    corpus = [  
        'This is the first document.',  
        'This document is the second document.',  
        'And this is the third one.',  
        'Is this the first document?',  
    ]  
      
    # 创建 TF-IDF 向量化器  
    vectorizer = TfidfVectorizer()  
      
    # 拟合和转换数据  
    X = vectorizer.fit_transform(corpus)  
      
    # 获取特征名称(词汇)  
    feature_names = vectorizer.get_feature_names_out()  
      
    # 将 TF-IDF 矩阵转换为 DataFrame,可以清楚的看出每个词汇的TF-IDF值
    import pandas as pd  
    df = pd.DataFrame(X.toarray(), columns=feature_names)  
    print(df)
    
    • 由于输出面板中看不全结果,我们可以在调试模式中打开我们想要查看的内容
    • 我们可以查看这个语料库中一共有多少个特征词汇,注意这里每个词汇的前后顺序是根据26个英文字母的顺序进行
      在这里插入图片描述
      在这里插入图片描述
    • 通过上图中的结果,我们可以直观的看到每篇文档中每个特征词汇的TF-IDF值,并且可以选出每篇文档中TF-IDF值最高的,作为关键词汇

四、总结

  • TF-IDF的优缺点
    • 优点:

      • 简单有效,易于实现。
      • 可以在不同长度的文档上进行比较。
      • 考虑了词语的普遍重要性(IDF)。
    • 缺点:

      • 没有考虑词语的语义信息,例如同义词和多义词。
      • 对于小数据集可能效果不佳,因为IDF的计算依赖于大量的文档。
      • 没有考虑词语的位置信息,如标题、段落等。
  • 总的来说,TF-IDF是一种简单而强大的文本特征提取方法,在许多自然语言处理任务中都有广泛的应用。然而,对于需要更深入理解文本语义的任务,可能需要结合其他更复杂的自然语言处理技术。

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

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

相关文章

【HarmonyOS NEXT开发】鸿蒙界面开发起步,ArkUI(方舟开发框架)介绍,知识点详解

【HarmonyOS NEXT开发】鸿蒙界面开发起步,ArkUI(方舟开发框架)介绍,知识点详解 大纲 主题:鸿蒙界面开发起步,ArkUI(方舟开发框架)介绍,知识点详解。、 内容摘要:带领直播课的观众一步步熟悉ArkUI的基本框…

语言质量评价对应用翻译质量的影响——以美国市场为例

在竞争激烈的移动应用程序世界中,尤其是在美国这样一个庞大而多样化的市场中,翻译的质量可以决定应用程序的成功与否。语言质量评价对应用翻译的整体质量有着深远的影响,其重要性怎么强调都不为过。 语言质量评价的重要性 语言质量评估是评…

3D打印引领制造业新纪元

增材制造技术,俗称3D打印,作为现代科技发展的璀璨明珠,正稳步迈向制造业舞台的中央,重塑着传统制造行业的格局,一个全新的制造纪元正在悄然到来。 3D打印技术,其核心在于通过精准控制的逐层堆积过程&#x…

SLAM ORB-SLAM2(29)PnP估计姿态

SLAM ORB-SLAM2(29)PnP估计姿态 1. PnP问题2. EPnP算法2.1. 计算4对控制点的世界坐标2.2. 计算齐次质心坐标2.3. 计算4对控制点的相机坐标2.3.1. 构造M矩阵2.3.2. 计算 M T M M^TM MTM的0特征值对应的特征向量2.3.3. 计算零空间的秩2.3.4. 计算线性组合的…

Openldap可视化工具PhpLdapAdmin服务配置

Openldap可视化工具PhpLdapAdmin服务配置 1、创建组 Create a child entry ------> Generic: Posix Group ------> New Posix Group ------> Create Object 1).Create a child entry 2).Generic: Posix Group 3).New Posix Group 4).Create Object 5).查看创建的组…

嵌入式软件--PCB DAY 4

1.原理图重点 (1)CH340N为什么有那么多组极。 (2)TYPEC接口,得到几V的供电,为什么? (3)P0为什么上拉。 (4)单片机烧录时要干什么 &#xff0…

【Zookeeper】小白基础入门

1 Zookeeper入门 1.1 概述 1.2 特点 1.3 数据结构 1.4 应用场景 统一命名服务 统一配置管理 统一集群管理 服务动态上下线 软负载均衡 1.5 下载地址 2 Zookeeper本地安装 2.1 本地模式安装 2.2 配置参数解读 3 Zookeeper集群操作 3.1 集群操作 3.1.1 集群安装 3.1.2 选举…

Linux 数据结构 树知识

树:只有一个前驱,但是可以有多个后继 根节点:最顶层节点(没有前驱) 分支节点:有前驱也有后继 叶子节点:没有后继的节点 层:根节点所在为第一层,每过一个…

【uniapp 解决h5 uni.saveFile 不生效】2种方法解决

用uni.saveFile h5报错 saveFile API saveFile is not yet implemented 查看文档发现不支持h5 解决方法: 这个我用了pc 端一样的方法用a标签来下载保存代码如下: 第一种: const a document.createElement(a);a.href filePath; //filePath …

sqli-labs靶场通关攻略(51-60)

Less-51 1、判断闭合方式 输入?sort1 -- 页面闭合成功 2、查询数据库 输入?sort-1 and updatexml(1,concat(1,database()),1) -- 3、查询数据库中的表 输入?sort-1 and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where …

北京青蓝智慧科技2024数博会:共谋数字经济新篇章

在数字化的浪潮下,大数据企业如雨后春笋般涌现,而应用场景更是无处不在。 伴随着“数博十年”的盛约,新老朋友纷纷涌向贵阳国际会议展览中心,于8月28-30日共襄盛举。 2024中国国际大数据产业博览会(简称“数博会”&a…

Django国际化和本地化

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 本节主要介…

一个最基本的多线程3D渲染器方案

概括 渲染器仍然是大多数现代视频游戏的主要组件。通常,这些流水线通过 3D 图形应用程序接口(如 DirectX、OpenGL )暴露出来。现代,多核 CPU 已广泛应用于游戏机和个人电脑。为了确保 GPU 能持续不断地处理数据,渲染器…

惠中科技RDS自清洁膜层:光伏行业的清洁革命与创新先锋

在当今全球能源转型和光伏产业蓬勃发展的背景下,光伏电站的运营维护面临着诸多挑战,其中灰尘污染问题尤为突出。灰尘的堆积不仅降低了光伏板的透光率,还直接影响了电站的发电效率和经济效益。为了有效解决这一难题,惠中科技凭借其…

C++日期差值问题(2个日期之间差几天)

上面是牛客网给出的题目。 思路 假设第一个输入的日期为2011 12 03,第二个输入的日期为2024 02 29。 这两个日期并不相等,我们可以让日期2011 12 03一直加1,直到等于2024 02 29为止。 在这个过程中,每1一次,就让re…

情感共鸣:数业智能心大陆重塑AI心理交互新纪元

在科技蓬勃发展的今天,人工智能如同一张大网,与我们的生活密切交织,在多个层面深刻影响着每一个人。而数业智能心大陆,作为 “AI 心理健康” 领域的佼佼者,正以其独特的技术和创新理念, 为人工智能与用户的…

企业EMS - 能源管理系统 - 能源管理系统源码-能源在线监测平台-双碳平台源码

一、介绍 企业EMS - 能源管理系统 - 能源管理系统源码-能源在线监测平台-双碳平台源码’ 二、软件架构 二、功能介绍 三、数字大屏展示 四、数据采集原理 五、软件截图

C++ 有向图算法

概念 Breadth-First Search (BFS) 目的: 主要用于遍历或搜索图中的所有顶点。 特点: 从根节点开始,先访问所有与之相邻的节点,然后再一层一层地深入。 应用: 可以用来寻找两节点间的最短路径(当边的权重相等时),检测…

笔记:应用Visual Studio Profiler分析CPU使用情况

一、目的:应用Visual Studio Profiler分析CPU使用情况 使用 Visual Studio Profiler 分析 CPU 使用情况可以帮助你识别性能瓶颈,优化代码,提高应用程序的响应速度。 二、实现 以下是如何使用 Visual Studio Profiler 分析 CPU 使用情况的详…

前端问答:如何判断变量是否为数组?

在JavaScript的世界里,判断一个变量的类型是开发者日常工作中不可或缺的一部分,尤其是在处理数组这种关键数据结构时。数组作为一种广泛应用于各种操作的数据结构,无论是简单的数据存储还是复杂的算法实现,都发挥着重要作用。然而…