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

TF-IDF------词向量转化:从“文字”到“向量”

在自然语言处理(NLP)领域,词向量转化是一项基础而关键的技术。本文将深入探讨词向量转化的概念、重要性以及实际应用方法。

一、为什么需要词向量转化?

计算机无法直接理解人类语言,它们只能处理数值数据。词向量转化就是将文本数据转换为数值表示的过程,这是所有NLP任务的前提条件。

词向量转化的三大作用

  1. ​语义保留​​:好的词向量能够捕捉词语之间的语义关系

  2. ​维度统一​​:将不同长度的文本转换为固定长度的向量

  3. ​计算可行​​:使文本数据能够参与数学运算和机器学习模型训练

在自然语言处理的世界里,如何快速从海量文本中抓取核心信息?TF-IDF 算法无疑是最经典也最实用的工具之一。无论是论文关键词自动提取、文本特征提取,还是信息检索,TF-IDF 都发挥着不可替代的作用。本文将带你全面剖析 TF-IDF 的原理、计算方法及应用场景,让你从理论到实践彻底掌握这一强大算法。

一、TF-IDF 是什么?

TF-IDF(Term Frequency-Inverse Document Frequency),即词频 - 逆文档频率,是一种用于评估词语在文档中重要性的统计方法。它通过将词频(TF) 和逆文档频率(IDF) 结合,形成一个综合评分,评分越高则说明该词语在当前文档中的重要性越高,越适合作为核心关键词。

这种算法的精妙之处在于其 "平衡机制"——TF 与 IDF 相互调节,高频出现的词语未必就是关键(比如 "的"、"我" 等停用词),而那些在特定文档中高频出现但在整个语料库中低频出现的词语,往往才是真正的核心。

二、拆解 TF-IDF:从词频到逆文档频率

 词频(TF):词语在文档中的 "存在感"

定义与计算

TF(词频)指的是某个给定词语在一篇文章中出现的次数与该文章总词数的比值。

计算公式:

TF = 某个词在文档中出现的次数 / 文档总词数

举个例子:如果一篇 1000 词的文章中,"中国" 出现了 20 次,那么 "中国" 的 TF 值就是 20/1000=0.02;若 "人工智能" 出现了 50 次,则其 TF 值为 50/1000=0.05。

单一词频的局限性

单纯依靠词频来判定关键词存在明显缺陷:

  • 忽略语义、语境等非量化因素,机械统计可能遗漏重要概念;
  • 高频词可能包含无意义词汇(如 "的"、"我"),需进行停用词过滤;
  • 在特定主题专栏中,通用主题词(如 "人工智能")不能作为单篇文章关键词,需结合具体内容(如 "大模型"、"计算机视觉")。

因此,我们需要引入 IDF 来弥补 TF 的不足。

 逆文档频率(IDF):词语的 "独特性" 度量

定义与核心思想

IDF(逆文档频率)用于衡量一个词条的区分能力 —— 某个词语在整个语料库中出现的文档数量越少,其区分能力越强,IDF 值也就越大。

计算公式:

IDF = log (语料库文档总数 / 包含该词条的文档数)

其中,"语料库" 指的是包含特定领域所有文章内容的集合库,比如 CSDN 的 AI 专栏内全部文章、腾讯新闻 "财经" 栏目下的所有文章等,每个领域或栏目都可形成独立语料库。

实例计算:为什么 "大模型" 比 "人工智能" 更关键?

假设我们有一个包含 1000 篇文章的 AI 领域语料库:

  • "人工智能" 出现在 800 篇文章中,其 IDF 值为 log (1000/800)≈0.097;
  • "大模型" 仅出现在 50 篇文章中,其 IDF 值为 log (1000/50)=log (20)≈1.301。

显然,"大模型" 的 IDF 值更高,说明它在该语料库中更具独特性,更适合作为特定文章的关键词。

基本用法

from sklearn.feature_extraction.text import CountVectorizer# 初始化向量化器
vectorizer = CountVectorizer()# 示例文本数据
corpus = ['This is the first document.','This document is the second document.','And this is the third one.','Is this the first document?'
]# 拟合模型并转换文本数据
X = vectorizer.fit_transform(corpus)# 查看结果
print(vectorizer.get_feature_names_out())  # 获取所有特征词
print(X.toarray())  # 查看词频矩阵

运行结果:

TF-IDF 向量化代码详解

这段代码使用 Python 的 scikit-learn 和 pandas 库来计算文本数据的 TF-IDF 值,并对结果进行分析。下面我将详细解释每一部分的功能:

1. 导入库和读取数据

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
data = open("task2_1.txt","r")
line = data.readlines()
  • pandas用于数据处理和分析

  • TfidfVectorizer是 scikit-learn 提供的 TF-IDF 向量化工具

  • 打开名为 "task2_1.txt" 的文件并读取所有行到 line变量中

2. TF-IDF 向量化

vectorizer = TfidfVectorizer()  # 创建 TF-IDF 向量化器
tfidf = vectorizer.fit_transform(line)  # 计算 TF-IDF 值
  • TfidfVectorizer()创建一个向量化器对象,将文本转换为 TF-IDF 特征矩阵

  • fit_transform()方法同时完成两个操作:

    • fit(): 学习词汇表和 IDF (逆文档频率)

    • transform(): 将文档转换为文档-词矩阵

3. 获取特征词列表

wordlist = vectorizer.get_feature_names()
  • get_feature_names()返回词汇表中的所有特征词(单词)列表

4. 转换为 DataFrame 并打印

print(tfidf)
df = pd.DataFrame(tfidf.T.todense(), index=wordlist)
print(df)
  • 首先打印原始的 TF-IDF 稀疏矩阵

  • 然后将其转置(.T),转换为密集矩阵(.todense()),并用特征词作为索引创建 DataFrame

  • 这样每列代表一个文档,每行代表一个词及其在各文档中的 TF-IDF 值

5. 提取特定文档的特征

featurelist = df.iloc[:,5].to_list()
  • 提取 DataFrame 的第6列(索引为5)的所有行,转换为列表

  • 这表示获取第6个文档的所有词的 TF-IDF 值

6. 创建词-TFIDF值字典并排序

resdict = {}
for i in range(0,len(wordlist)):resdict[wordlist[i]] = featurelist[i]
resdict = sorted(resdict.items(), key=lambda x:x[1], reverse=True)
print(resdict[2])
  1. 创建一个空字典 resdict

  2. 遍历所有词,将词作为键,对应的 TF-IDF 值作为值存入字典

  3. 对字典按值(TF-IDF 值)降序排序

  4. 打印排序后列表中索引为2的元素(即 TF-IDF 值第三高的词及其值)

综合代码:

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
data = open("task2_1.txt","r")
line = data.readlines()
vectorizer = TfidfVectorizer()  #转为TF-IDF的向量转换向量
tfidf = vectorizer.fit_transform(line)  #传入数据,返回包含TF-IDF的向量值
wordlist = vectorizer.get_feature_names()
print(tfidf)
df = pd.DataFrame(tfidf.T.todense(),index=wordlist) #恢复为稀疏矩阵todense
print(df)
featurelist = df.iloc[:,5].to_list()
resdict = {}
for i in range(0,len(wordlist)):resdict[wordlist[i]] = featurelist[i]
resdict = sorted(resdict.items(),key = lambda  x:x[1],reverse=True)
print(resdict[2])

http://www.dtcms.com/a/330005.html

相关文章:

  • 【Unity3D实例-功能-下蹲】角色下蹲(三)动画配置
  • 直播预告|鸿蒙生态中的AI新玩法
  • 2025年PMP考试指南:内容、题型与核心变化全解析
  • PyTorch神经网络工具箱(神经网络核心组件)
  • Android图片加载库Glide深度解析与实践指南
  • 模型路由相关论文速览——《Universal Model Routing for Efficient LLM inference》
  • FxSound:为你的音频体验注入专业级享受
  • 汽车高位制动灯难达 CIE 标准?OAS 光学软件高效优化破局
  • 中科米堆CASAIM汽车零部件三维扫描检测解决方案
  • 数据结构摘星题库800题笔记 第1章绪论
  • 5G 迷你图传模块:性能与实用性兼备的传输利器
  • 音频重采样使用RandomOverSampler 还是 SMOTE
  • C# 反射和特性(元数据和反射)
  • 【COMSOL】Comsol学习案例时的心得记录分享
  • 字体优化:Web 排版最佳实践
  • Devextreme-vue + Vue2日历下拉框的使用
  • Redis持久化机制(RDB AOF)
  • Form.Item中判断其他Form.Item的值
  • 边学边做边玩:我的类魂斗罗Java小游戏与Java学习(1)
  • 《MySQL 实战:从建库建表到复杂查询的完整操作指南》
  • Android Framework定制长按电源键关机的窗口
  • 9 ABP Framework 中的 MVC 和 Razor Pages
  • Java pdf工具
  • jvm学习笔记之jvm的生命周期和发展历程
  • Video_AVI_Packet(2)
  • 全球AI安全防护迈入新阶段:F5推出全新AI驱动型应用AI安全解决方案
  • 量子安全新纪元:F5发布全新AI驱动的全栈式后量子加密AI安全方案
  • OpenJDK 17 源码 安全点轮询的信号处理流程
  • ESP-IDF 编译系统说明
  • 单细胞测序分析平台在肿瘤免疫微环境研究中的应用