【大语言模型】基础:TF-IDF
TF-IDF (Term Frequency-Inverse Document Frequency) 是一种用于信息检索与文本挖掘的统计方法,用来评估一个词对于一个文件集或一个语料库中的其中一份文件的重要性。它是一种常用于文本处理和自然语言处理的权重计算技术。
原理
TF-IDF 由两部分组成:词频(TF),文档频率(DF)和逆文档频率(IDF)。每一部分的计算方法如下:
-
词频(TF, Term Frequency):指某一个给定的词语在该文件中出现的频率。这个数字通常会被标准化(通常是词频除以文章总词数),以防止它偏向长的文件。(即使某一特定的词语在长文件中出现频率较高,其实该词语可能并不重要。

-
文档频率(DF): 是文本挖掘和信息检索中的一个基本概念,特别是在计算 TF-IDF(词频-逆文档频率) 时经常被用到。尽管通常在TF-IDF计算中讨论DF的倒数,但单独理解它也同样重要。定义为包含词 t 的文档数目,在语料库 D 中。它衡量一个词在整个语料库中的普遍性或稀有性。

-
逆文档频率(IDF, Inverse Document Frequency):这是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到:

-
TF-IDF:然后将TF和IDF相乘得到一个词的TF-IDF分数,该分数即为词在文档中的重要性:

比较TF-IDF与余弦相似度(Cosine Similarity),TF-IDF 主要用于调整词在文档中的权重,而余弦相似度是一种衡量两个文本向量方向相似度的方法。
TF-IDF
目的:
- 权重调整:TF-IDF 通过增加罕见词的权重而降低常见词的权重,从而提供了一种评估词语在一个或多个文档中重要性的方法。
优点:
- 区分文档特有的重要词汇:对于只在少数文档中出现,但在这些文档中出现频率较高的词,TF-IDF 会赋予较高的权重。
局限性:
- 无法直接用于相似性度量:TF-IDF 本身是一个用于调整单词权重的统计方法,它需要与其他技术(如余弦相似度)结合使用,才能用于文档相似性度量。
余弦相似度
目的:
- 相似性度量:余弦相似度通过计算两个向量之间的角度余弦值来度量它们的相似度,用于比较两个文本向量的方向一致性。
优点:
- 规模不变性:余弦相似度衡量的是方向一致性而非向量的大小,因此它对文本长度不敏感,适用于比较长度不同的文档。
- 直观度量相似性:可以直接用于评估两个文本的相似度,特别是结合了TF-IDF后,可以有效反映出文本内容的语义相似性。
局限性:
- 依赖于向量表达:余弦相似度的效果很大程度上依赖于文本向量的构建方式(如使用TF-IDF或其他词向量模型)。
结合使用 TF-IDF 和 余弦相似度
在实际应用中,TF-IDF 通常与余弦相似度结合使用来提高文本相似性度量的准确性:
- 向量化:首先使用 TF-IDF 对文档中的每个词进行权重计算,生成文档的向量表示。
- 相似性计算:然后计算这些基于 TF-IDF 的向量之间的余弦相似度,以确定文档间的相似性。
下面看下TF-IDF代码实现:
import numpy as np
from collections import defaultdict
import math# 示例语料库
documents = ["the sky is blue","the sun is bright","the sun in the sky is bright","we can see the shining sun, the bright sun"
]# 计算词频的函数
def compute_tf(text):# 将文本分割为词项terms = text.split()tf_data = {}for term in terms:tf_data[term] = tf_data.get(term, 0) + 1# 按文档中的总词数进行标准化total_terms = len(terms)for term in tf_data:tf_data[term] = tf_data[term] / total_termsreturn tf_data# 计算逆文档频率的函数
def compute_idf(documents):N = len(documents)idf_data = defaultdict(lambda: 0)for document in documents:terms = set(document.split())for term in terms:idf_data[term] += 1# 计算IDFfor term, count in idf_data.items():idf_data[term] = math.log(N / float(count))return idf_data# 计算TF-IDF的函数
def compute_tfidf(documents):# 计算各个文档的TFtfs = [compute_tf(doc) for doc in documents]# 计算语料库的IDFidfs = compute_idf(documents)# 计算TF-IDFtf_idf = []for doc_tf in tfs:doc_tf_idf = {}for term, value in doc_tf.items():doc_tf_idf[term] = value * idfs[term]tf_idf.append(doc_tf_idf)return tf_idf# 为语料库计算TF-IDF
tf_idf_scores = compute_tfidf(documents)# 输出结果
for idx, doc_scores in enumerate(tf_idf_scores):print(f"文档 {idx + 1} 的TF-IDF分数:")for term, score in doc_scores.items():print(f" {term}: {score:.4f}")
创建Heatmap显示单词在各个文档中的权重:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Create a DataFrame from the TF-IDF dictionary
tf_idf_df = pd.DataFrame(tf_idf_scores)
tf_idf_df = tf_idf_df.fillna(0) # Fill NaN values with 0# Create a heatmap
plt.figure(figsize=(12, 8))
sns.heatmap(tf_idf_df, annot=True, cmap="YlGnBu", fmt=".2f")
plt.title('TF-IDF Scores Heatmap')
plt.xlabel('Terms')
plt.ylabel('Documents')
plt.show()

相关文章:
【大语言模型】基础:TF-IDF
TF-IDF (Term Frequency-Inverse Document Frequency) 是一种用于信息检索与文本挖掘的统计方法,用来评估一个词对于一个文件集或一个语料库中的其中一份文件的重要性。它是一种常用于文本处理和自然语言处理的权重计算技术。 原理 TF-IDF 由两部分组成࿱…...
[开发日志系列]PDF图书在线系统20240415
20240414 Step1: 创建基础vueelment项目框架[耗时: 1h25min(8:45-10:10)] 检查node > 升级至最新 (考虑到时间问题,没有使用npm命令行执行,而是觉得删除重新下载最新版本) > > 配置vue3框架 取名:Online PDF Book System 遇到的报错: 第一报错: npm ERR! …...
蓝桥杯 — — 纯质数
纯质数 题目: 思路: 一个最简单的思路就是枚举出所有的质数,然后再判断这个质数是否是一个纯质数。 枚举出所有的质数: 可以使用常规的暴力求解法,其时间复杂度为( O ( N N ) O(N\sqrt{N}) O(NN )&…...
OpenCV基本图像处理操作(三)——图像轮廓
轮廓 cv2.findContours(img,mode,method) mode:轮廓检索模式 RETR_EXTERNAL :只检索最外面的轮廓;RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中;RETR_CCOMP:检索所有的轮廓,并将他们组…...
比特币突然暴跌
作者:秦晋 周末愉快。 今天给大家分享两则比特币新闻,也是两个数据。一则是因为中东地缘政治升温,传统资本市场的风险情绪蔓延至加密市场,引发加密市场暴跌。比特币跌至66000美元下方。杠杆清算金额高达8.5亿美元。 二则是&#x…...
使用SpeechRecognition和vosk处理ASR
SpeechRecognition可以支持多种模型语音转文字,感觉vosk还不错,使用起来也简单一些;百度也有PaddleSpeech,但是安装起来太麻烦,不是这个库版本不对就是那个库有问题,用起来不方便; 安装SpeechR…...
【Go】通道:缓冲通道和非缓冲通道
目录 通道的基本概念 缓冲通道 非缓冲通道 总结 通道的基本概念 在Go语言中,通道是一种特殊的类型,用于在goroutine之间传递数据。你可以将通道想象为数据的传输管道。通道分为两种类型: 非缓冲通道(Unbuffered Channels&…...
Java中数组的使用
在Java编程中,数组是一种非常重要的数据结构,它允许我们存储相同类型的多个元素。对于初学者来说,理解数组的基本概念、初始化、遍历、默认值以及内存分配和使用注意事项是非常关键的。 一、数组的概念 数组是一个可以容纳多个相同类型数据…...
CAP5_Monday
A Set to Max (Easy Version) 给定数组 a 和 b,可以执行以下操作任意次 : 让 a l ∼ a r a_l\sim a_r al∼ar 中的所有所有元素变成 a i a_i ai ( l ≤ i ≤ r ) (l\leq i\leq r) (l≤i≤r), 其中 1 ≤ l ≤ r ≤ n 1\leq l \leq r \leq n 1≤…...
科大讯飞星火开源大模型iFlytekSpark-13B GPU版部署方法
星火大模型的主页:iFlytekSpark-13B: 讯飞星火开源-13B(iFlytekSpark-13B)拥有130亿参数,新一代认知大模型,一经发布,众多科研院所和高校便期待科大讯飞能够开源。 为了让大家使用的更加方便,科…...
SpringBoot基于RabbitMQ实现消息延迟队列方案
知识小科普 在此之前,简单说明下基于RabbitMQ实现延时队列的相关知识及说明下延时队列的使用场景。 延时队列使用场景 在很多的业务场景中,延时队列可以实现很多功能,此类业务中,一般上是非实时的,需要延迟处理的&a…...
Go语言使用标准库时常见错误
Go的标准库是一组增加和拓展语言的核心包。然而,很容易误用标准库,或者我们对其行为理解有限,导致产生了bug或不应该在生产级应用程序中某些功能。 1. 提供错误的持续时间 标准库提供了获取 time.Duration 的常用函数和方法,但由于 time.Duration 是 int64 的自定义类型,…...
UE5不打包启用像素流 ubuntu22.04
首先查找引擎中像素流的位置: zkzk-ubuntu2023:/media/zk/Data/Linux_Unreal_Engine_5.3.2$ sudo find ./ -name get_ps_servers.sh [sudo] zk 的密码: ./Engine/Plugins/Media/PixelStreaming/Resources/WebServers/get_ps_servers.sh然后在指定路径中…...
Redis 常用数据类型常用命令和应用场景
首先先混个眼熟 Redis 中的 8 种常用数据类型: 5 种基础数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合࿰…...
ins视频批量下载,instagram批量爬取视频信息
简介 Instagram 是目前最热门的社交媒体平台之一,拥有大量优质的视频内容。但是要逐一下载这些视频往往非常耗时。在这篇文章中,我们将介绍如何使用 Python 编写一个脚本,来实现 Instagram 视频的批量下载和信息爬取。 我们使用selenium获取目标用户的 HTML 源代码,并将其保存…...
Canvas图形编辑器-数据结构与History(undo/redo)
Canvas图形编辑器-数据结构与History(undo/redo) 这是作为 社区老给我推Canvas,于是我也学习Canvas做了个简历编辑器 的后续内容,主要是介绍了对数据结构的设计以及History能力的实现。 在线编辑: https://windrunnermax.github.io/CanvasEditor开源地…...
阿里云Centos7下编译glibc
编译glibc 原来glibc版本 编译前需要的环境: CentOS7 gcc 8.3.0 gdb 8.3.0 make 4.0 binutils 2.39 (ld -v) python 3.6.8 其他看INSTALL, 但有些版本也不易太高 wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.37.tar.gz tar -zxf glibc-2.37.tar.gz cd glibc-2.37/ …...
UE5数字孪生系列笔记(四)
场景的切换 创建一个按钮的用户界面UMG 创建一个Actor,然后将此按钮UMG添加到组件Actor中 调节几个全屏的背景 运行结果 目标点切换功能制作 设置角色到这个按钮的位置效果 按钮被点击就进行跳转 多个地点的切换与旋转 将之前的目标点切换逻辑替换成旋转的逻…...
品牌故事化:Kompas.ai如何塑造深刻的品牌形象
在这个信息爆炸的时代,品牌故事化已经成为企业塑造独特形象、与消费者建立情感联系的重要手段。一个引人入胜的品牌故事不仅能够吸引消费者的注意力,还能够在消费者心中留下持久的印象,建立起强烈的情感连接。本文将深入探讨品牌故事化对于构…...
5g和2.4g频段有什么区别
运行的频段不同 2.4G和5G频段的主要区别在于它们运行的频段不同,2.4G频段运行在2.4GHz的频段上,而5G频段(这里指的是5GHz频段)运行在5GHz的频段上。12 这导致了两者在传输速度、覆盖范围、抗干扰能力等方面的明显差异。以下是详…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
