关于TF-IDF的一个介绍

news2024/12/29 13:10:58

在这篇文章中我将介绍TF-IDF有关的一些知识,包括其概念、应用场景、局限性以及相应的代码。

一、概念

TF-IDF(Term Frequency-Inverse Document Frequency)是一种广泛用于信息检索和文本挖掘中的统计方法,用于评估一个词在一个文档或文档集合中的重要性。TF-IDF值反映了词语的重要性,它由两部分组成:词频(Term Frequency, TF)和逆文档频率(Inverse Document Frequency, IDF)。

1.1 TF

Term Frequency (TF):

词频是指某个词在文档中出现的次数。它是衡量一个词在文档中重要性的一个基本指标。

计算公式为:

1.2 IDF

 Inverse Document Frequency (IDF):

逆文档频率(IDF)是为了补偿词频(TF)的不足而引入的概念。IDF的作用是降低那些在很多文档中都出现的词的重要性,同时提高那些在较少文档中出现的词的重要性。换句话说,IDF试图捕捉一个词的独特性和区分能力。

计算公式为:

其中:

其中 N 是文档总数,

df(t)是包含词 t 的文档数量,

+1是为了避免 df(t)为0时导致的分母为0问题。

1.3 TF-IDF

TF-IDF是TF和IDF的乘积,综合考虑了词频和逆文档频率两个因素。这样既反映了词语在文档中的重要性,又考虑了词语的独特性。

因此,其计算公式为:

二、应用场景

信息检索:在搜索引擎中,可以通过对于TF-IDF的计算来寻找目标目标文档。其中,关于检索模型可以分为布尔模型、向量模型、概率模型这三大种。而其中的向量模型就会用到TF-IDF来计算相似度。

具体的,在向量空间模型中,每个文档和查询都被表示为一个向量,其中每个维度对应一个词汇的TF-IDF值。文档向量和查询向量之间的相似度通常是通过余弦相似度来计算的:

其中,A与B分别为文档向量和查询向量,而||A||与||B||则是其对应的模长。

举个例子:

假设我们有两个文档:

  1. Doc1: "这是一个测试文档"
  2. Doc2: "另一个测试文档"

 我们需要用向量模型来计算得知其相似度。

假设词汇表为 ["这是", "一个", "测试", "文档", "另一个"]。

首先我们计算TF

对于Doc1:

TF("测试",Doc1)=\frac{1}{5}

对于Doc2:

TF("测试",Doc2)=\frac{1}{5}

然后我们计算IDF

假设我们的文档集合 D 包含这两个文档:

那么,

df("测试")=2

N=2

则有:IDF("测试",D)=log(\frac{2}{2+1})=log(\frac{2}{3})

然后计算TF-IDF:

对于Doc1:

TF−IDF("测试",Doc1,D)=\frac{1}{5}*log(\frac{2}{3})

对于Doc2:

TF−IDF("测试",Doc2,D)=\frac{1}{5}*log(\frac{2}{3})

接着我们就可以构建文档向量了:

假设我们构建文档向量时,除了“测试”外还有其他词汇,构造向量如下:

A=[TF−IDF("这是"),TF−IDF("一个"),TF−IDF("测试"),TF−IDF("文档")]

B=[TF−IDF("另一个"),TF−IDF("测试"),TF−IDF("文档")]

具体数值为:

A=[0,0,\frac{1}{5}log(\frac{2}{3}),0,0]

B=[0,0,\frac{1}{5}log(\frac{2}{3}),0,0]

最后,就是计算其相似度

使用余弦相似度计算 AA 和 BB 之间的相似度:

那么,我们带入A与B到计算公式里则可得:

similarity=1

文本分类:在文本分类任务中,TF-IDF用于提取文档的关键特征。通过计算文档中各个词的TF-IDF值,可以得到一组特征向量,这些向量可以输入到诸如朴素贝叶斯(Naive Bayes)、支持向量机(SVM)或其他机器学习算法中,用于训练模型并进行分类预测。

关键词提取:TF-IDF可以用于从文档中提取关键词。通过计算文档中每个词的TF-IDF值,可以选择TF-IDF值最高的若干词作为文档的关键词。这种方法广泛应用于摘要生成、文献检索等领域。

文章相似度计算:TF-IDF可以用于计算文档之间的相似度。通过计算两个文档中相同词汇的TF-IDF值,并使用余弦相似度(Cosine Similarity)等方法,可以评估文档之间的相似程度。这种方法在推荐系统、抄袭检测等方面有广泛应用。具体的相似度计算和上述的检索模型中向量模型的计算方式一致。

三、注意事项

在计算文档的TF-IDF时,我们要注意使用停用词库,像“一样”、“那么”、“还有”等词语虽然在文章中频繁出现,但实际意义不大,不能有助于我们区分不同文档间的差异,所以我们需要引入一个停用词库来筛选并剔除这些词语来。

然后,我们在计算文档的TF-IDF时,得到的往往是一个稀疏矩阵,它及占空间,所以我我们需要改变它的存储方式,就像如下图那样:

从这样的稀疏矩阵:

变为这样:

其中,可以看到元组内的第一项是特征,也就是词语所在的文档,第二项则是其在词汇表中索引位,至于元组后的小数,正是TF-IDF值。

四、python实例

如下这个代码就是用sklearn中现成的函数来直接计算文章的TF-IDF,并且在其中因为是全是中文文档的缘故,我还引用了一个中文的停用词库。代码如下:

from sklearn.feature_extraction.text import TfidfVectorizer
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import string
import jieba

# 加载停用词
def load_stopwords(filepath):
    with open(filepath, 'r', encoding='utf-8') as file:
        stopwords = set(line.strip() for line in file)
    return list(stopwords)

# 标点符号去除函数
def remove_punctuation(text):
    # 定义中文标点符号
    zh_punctuation = r'。\n !?。 "#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃《》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰〾〿–—‘’‛“”„‟…‧﹏'
    # 去除英文和中文标点符号
    translator = str.maketrans('', '', zh_punctuation + string.punctuation)
    try:
        text = str(text).translate(translator)  # 确保text是字符串类型
        return text.strip()
    except Exception as e:
        print(f"Error processing text: {e}")
        return " "

# 文本中文分词处理函数
def chinese_tokenizer(text):
    text = remove_punctuation(text)
    return " ".join(jieba.lcut(text))

# 数据载入及预处理
path = r"C:\Users\20349\Desktop\ArtificialIntelligence\ML\kaggle\TF_IDF\chinese_news.csv"
data_all = pd.read_csv(path)
data_use = data_all.iloc[:500]
data_list = data_use.iloc[:,-1].tolist()
data = [chinese_tokenizer(text) for text in data_list]

# 停用词库
stopwords_path = r"C:\Users\20349\Desktop\ArtificialIntelligence\wordCloud\stopWords.txt"
stopwords = load_stopwords(stopwords_path)

# tfidf
vec = TfidfVectorizer(stop_words=stopwords)
X_tfidf = vec.fit_transform(data)
feature_name = vec.get_feature_names_out()
print(X_tfidf)
print(X_tfidf.toarray())
# 可视化
# 获取非零元素及其对应的TF-IDF值
rows, cols = X_tfidf.shape
for doc_index in range(rows):
    # 获取非零元素及其对应的TF-IDF值
    nonzero_features = X_tfidf.indices[X_tfidf.indptr[doc_index]:X_tfidf.indptr[doc_index + 1]]
    nonzero_values = X_tfidf.data[X_tfidf.indptr[doc_index]:X_tfidf.indptr[doc_index + 1]]

# 排序
sorted_indices = np.argsort(nonzero_values)
sorted_nonzero_features = nonzero_features[sorted_indices]
sorted_nonzero_values = nonzero_values[sorted_indices]

# 绘制TF-IDF散点图
plt.figure(figsize=(10, 6))
plt.scatter(range(len(sorted_nonzero_values)), sorted_nonzero_values, alpha=0.6, label=f'Document {doc_index}')
plt.xlabel('Feature Index Sorted by TF-IDF Value')
plt.ylabel('TF-IDF Value')
plt.title(f'TF-IDF Values for Document {doc_index} (Sorted)')
plt.grid(True)
plt.legend()
plt.show()

其画出的图像为:

这个图像是我筛选非0索引后排序得到的,但我们观察会发现其存在异常点,这是因为此时没有用停用词库,那么在加入停用词库后可以得到:

这样,最后那个异常的点就没有了。

如果我们不进行这样的压缩、排序,而是显示全部的索引项时,图像会是这样:

 

图像杂乱我们无法从中获取什么,所以需要一定的处理后才能再去绘制图表。

通过图像,我们可以得知文档的词汇间TF-IDF差值的具体大小,然后可以同过让词汇直接写在图表中的方法来得知最靠前的词汇是什么,而这些词汇就可以作为需要的文章标签来处理。

此上

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

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

相关文章

线路交换与分组交换的深度解析

1. 线路交换 原理 线路交换是一种在通信双方之间建立固定通信路径的方式。当用户发起通信时,网络为其分配一条专用的物理通道,这条通道在整个通话过程中保持不变。这意味着在通话期间,其他用户无法使用这条线路。 优点 稳定性&#xff1a…

在职场,没人告诉你的人情世故

职场中,想要过得游刃有余,就必须懂一些人情世故和处事原则。今天,给大家分享个人认为非常重要的5点人情世故,希望能帮你在职场里少吃点亏、多份从容。 01 不要空口道谢 在职场中,别人帮了你,口头道谢是基…

【GO语言】卡尔曼滤波例程

本文给出一个简单的卡尔曼滤波的 Go 语言实现示例,以及相应的讲解文档。 源代码 package mainimport ("fmt" )type KalmanFilter struct {x float64 // 状态估计P float64 // 估计误差协方差F float64 // 状态转移矩阵H float64 //…

在2核2G服务器安装部署MySQL数据库可以稳定运行吗?

阿里云2核2G服务器可以安装MySQL数据库吗?当然可以,并且可以稳定运行MySQL数据库,目前阿里云服务器网aliyunfuwuqi.com使用的就是阿里云2核2G服务器,在云服务器上安装MySQL数据库,可以稳定运行。 目前阿腾云用于运行M…

AWS IoT Core for Amazon Sidewalk

目录 1 前言2 AWS IoT2.1 准备条件2.2 创建Credentials2.2.1 创建user2.2.2 配置User 2.3 本地CLI配置Credentials 3 小结 1 前言 在测试Sidewalk时,device发送数据,网关接收到,网关通过网络发送给NS,而此处用到的NS是AWS IoT&am…

html中的文本标签(含标签的实现案例)

目录 1.标题标签 2.标题标签的align属性 3.段落标签 4.水平线标签hr 5.换行标签br 6.文本样式标签font ​编辑7.文本格式化标签 8.文本语义标签 1)时间time标签 2)文本高亮Mark标签 3)cite标签 9.特殊字符标签 10.图像标签img 附录&#xff…

前端登录页面验证码

首先&#xff0c;在el-form-item里有两个div&#xff0c;各占一半&#xff0c;左边填验证码&#xff0c;右边生成验证码 <el-form-item prop"code"><div style"display: flex " prop"code"><el-input placeholder"请输入验证…

SpringSession微服务

一.在linux中确保启动起来redis和nacos 依赖记得别放<dependencyManagement></dependencyManagement>这个标签去了 1.首先查看已经启动的服务 docker ps 查看有没有安装redis和nacos 2.启动redis和nacos 发现没有启动redis和nacos,我们先来启动它。&#xff0c;…

在idea使用nacos微服务

一.安装nacos 、依赖记得别放<dependencyManagement></dependencyManagement>这个标签去了 1.在linux拉取镜像安装 docker pull nacos/nacos-server:1.3.1 2.创建挂载目录 mkdir -p /usr/local/docker/nacos/init.d /usr/local/docker/nacos/logs 3.安装nacos…

数据结构:将复杂的现实问题简化为计算机可以理解和处理的形式

整句话的总体意义是&#xff0c;**数据结构是用于将现实世界中的实体和关系抽象为数学模型&#xff0c;并在计算机中表示和实现的关键工具**。它不仅包括如何存储数据&#xff0c;还包括对这些数据的操作&#xff0c;能够有效支持计算机程序的运行。通过这一过程&#xff0c;数…

netty之NettyServer字符串编码器

前言 netty通信就向一个流水channel管道&#xff0c;我们可以在管道的中间插入一些‘挡板’为我们服务。比如字符串的编码解码&#xff0c;在前面我们使用new StringDecoder(Charset.forName(“GBK”))进行字符串解码&#xff0c;这样我们在收取数据就不需要手动处理字节码。那…

二叉树相关知识

目录 一.基础 1. 定义 2. 二叉树的特点 3. 二叉树的类型 (1) 满二叉树&#xff1a; (2) 完全二叉树&#xff1a; (3) 斜二叉树&#xff1a; (4) 二叉搜索树&#xff08;Binary Search Tree&#xff0c;BST&#xff09; (5)平衡二叉搜索树&#xff08;Balanced Binary Se…

CSS | 面试题:你知道几种移动端适配方案?

目录 一、自适应和响应式 二、为什么要做移动端适配&#xff1f; 三、当前流行的几种适配方案 (1) 方案一&#xff1a;百分比设置&#xff08;不推荐&#xff09; (2) 方案二&#xff1a;rem 动态设置 font-size px 与 rem 的单位换算 手动换算 less/scss函数 webpac…

存储主动防御,为什么Gartner技术曲线尤为重视?

【科技明说 &#xff5c; 科技热点关注】 近来&#xff0c;从Gartner发布的2024年存储技术成熟曲线&#xff08;Hype Cycle for Storage Technologies ,2024&#xff09;的相关报告看出&#xff0c;到2028年&#xff0c;所有存储产品都将融入专注于数据主动防御的网络存储功能&…

PyCharm 社区版(2024.2.3)安装、配置、创建项目

PyCharm 社区版&#xff08;2024.2.3&#xff09;安装、配置、创建项目 本文目录&#xff1a; 零、时光宝盒 一、PyCharm简介 二、PyCharm特点和功能 三、PyCharm的安装 3.1、PyCharm的安装条件 3.2、下载PyCharm 3.3、安装PyCharm 四、配置PyCharm 4.1、PyCharm的汉化…

基础算法--递归算法【难点、重点】

今天我们即将要开始讲解算法中第一块儿难啃地骨头--递归了&#xff0c;相信有不少小伙伴都因递归而迷惑过&#xff0c;本文就来给大家详细的讲解一下递归到底是什么东西。让你也能瞬间将他打回原形。 递归的理解 在学习递归之前&#xff0c;我们先理解递归。什么是递归呢&…

【论文阅读】MRFS: Mutually Reinforcing Image Fusion and Segmentation(CVPR2024)

MRFS: Mutually Reinforcing Image Fusion and Segmentation&#xff08;CVPR2024&#xff09; 背景和动机 1.特征中和缺点和低光信息丢失。 红外和可见光图像通常在强度和梯度分布方面表现出显着差异。在这种情况下&#xff0c;传统的固定比例的无监督损失可能会削弱有价值…

NASA:ATLAS/ICESat-2 L3B 每日和每月网格极地海面高度异常 V003

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATLAS/ICESat-2 L3B Daily and Monthly Gridded Polar Sea Surface Height Anomaly V003 ATLAS/ICESat-2 L3B 每日和每月网格极地海面高度异常 V003 简介 ATLAS/ICESat-2 L3B Daily and Monthly G…

Gamisodes在Sui上推出动画版《神探加杰特》

没错&#xff0c;大家喜爱的卡通角色《神探加杰特》将以全新可玩形式登陆Sui区块链&#xff0c;这要归功于Gamisodes。通过其独特技术&#xff0c;Gamisodes正将《神探加杰特》重新制作为互动式剧集&#xff0c;并在Sui上重现这一经典系列。 Gamisodes平台推出了真正互动的《神…

高精度四则运算专题

高精度X高精度加法、减法、乘法 高精度X普通精度 乘法 高精度X普通精度 除法 目录 高精度X高精度 加法 题目 要点 代码 高精度X高精度 减法 题目 要点 代码 高精度X普通精度 乘法 题目 要点 代码 高精度X高精度 乘法 要点 代码 高精度X普通精度 除法 题目 要点 代…