1. One-Hot Encoding (独热编码)

  • 核心思想: 为语料库(所有文档的集合)中的每个唯一单词创建一个维度。对于一个特定的单词,在其对应的维度上标记为1,在所有其他维度上标记为0

  • 表示: 一个非常长的二进制向量(大部分是0),长度等于语料库的词汇表大小(|V|)。

  • 特点:

    • 简单直观: 最容易理解。

    • 高维稀疏: 向量维度极高(词汇量大),且每个向量中只有少数几个位置是1(文档中出现的词),其余都是0,极其稀疏。

    • 无词序信息: 完全丢失了单词在句子中的顺序信息。“猫吃鱼”和“鱼吃猫”的表示完全一样。

    • 无频率信息: 只记录单词是否出现(1),不记录出现的次数。出现一次和出现十次没有区别。

    • 无语义信息: 无法捕捉单词之间的任何语义关系(同义词、反义词等)。“好”和“优秀”被视为完全不同的、无关的维度。

  • 应用场景: 非常基础的文本表示,常用于类别型特征(如标签)的编码。在文本中单独使用较少,常作为构建其他模型(如BOW)的基础组件或用于表示类别标签。

  • 例子:

    • 词汇表:[我, 爱, 自然, 语言, 处理] (|V| = 5)

    • 句子 "我爱自然语言处理" 的 One-Hot 向量: [1, 1, 1, 1, 1]

    • 句子 "我爱编程" 的 One-Hot 向量: [1, 1, 0, 0, 0] (假设词汇表不变,且"编程"不在词汇表中则无法表示,这是其局限)


2. Bag-of-Words (词袋模型, BOW)

  • 核心思想: 建立在 One-Hot 的基础上。忽略单词的顺序、语法和上下文,只关心词汇表中每个单词在文档中出现的频率

  • 表示: 一个长度为 |V| 的整数向量(或有时是实数向量)。每个位置的值表示对应单词在当前文档中出现的次数。

  • 特点:

    • 简单高效: 计算相对简单。

    • 包含频率信息: 比 One-Hot 更进一步,记录了单词出现的次数。

    • 依然高维稀疏: 维度与词汇表大小 |V| 相同,向量中大部分位置仍然是0(该文档未出现的词)。

    • 依然无词序信息: 和 One-Hot 一样,完全丢失了单词顺序。"猫吃鱼"和"鱼吃猫"的 BOW 向量相同。

    • 依然无语义信息: 无法捕捉单词之间的语义关系。

    • 受常见词影响大: "的"、"是"、"在"等常见词(停用词)在所有文档中频繁出现,在向量中占据很大的值,但它们通常携带的信息量很少,可能会淹没真正重要的词。

  • 应用场景: 文本分类(如垃圾邮件识别、情感分析初探)、主题建模(如LDA的基础)等对词序要求不高且需要简单快速模型的任务。

  • 例子 (续用One-Hot词汇表):

    • 词汇表:[我, 爱, 自然, 语言, 处理] (|V| = 5)

    • 句子 "我爱自然语言处理" 的 BOW 向量: [1, 1, 1, 1, 1]

    • 句子 "我爱自然,自然美丽" 的 BOW 向量: [1, 1, 2, 0, 0] ("自然"出现2次)


3. TF-IDF (词频-逆文档频率)

  • 核心思想: 对 BOW 的重要改进。旨在解决 BOW 中常见词权重过高的问题。它认为:

    • 一个词在当前文档中出现的次数越多(TF - Term Frequency,词频),它对描述该文档越重要。

    • 但是,如果这个词在整个语料库的很多文档中都出现(DF - Document Frequency,文档频率很高),那么它就越常见、越普通,区分不同文档的能力就越弱。因此需要降低其权重。

    • IDF - Inverse Document Frequency (逆文档频率) 就是用来惩罚这种常见词的。IDF 值与该词的文档频率 DF 成反比。IDF(t) = log(N / (DF(t) + 1)) (N 是语料库中文档总数,DF(t) 是包含词 t 的文档数,+1 避免除0)。

  • 计算: 对于文档 d 中的词 t

    • TF(t, d): 词 t 在文档 d 中出现的频率(可以是原始计数、标准化计数、对数化等)。

    • IDF(t)log(N / (DF(t) + 1))

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

  • 表示: 一个长度为 |V| 的实数向量。每个位置的值是相应单词在当前文档中的 TF-IDF 权重。

  • 特点:

    • 降低常见词权重,提高重要词权重: 这是 TF-IDF 的核心优势。常见词(如"的"、"是")虽然 TF 可能高,但 IDF 极低(因为 DF 极高),导致其 TF-IDF 值很低。而只在少数特定文档中频繁出现的词(如专业术语、主题关键词)会同时拥有较高的 TF 和较高的 IDF,因此获得很高的 TF-IDF 值。

    • 包含频率信息: 基于 TF。

    • 考虑语料库全局信息: 通过 IDF 引入了语料库级别的统计信息。

    • 依然高维稀疏: 维度 |V| 大,向量稀疏。

    • 依然无词序信息: 和 BOW/One-Hot 一样。

    • 依然无语义信息: 无法捕捉语义关系。

  • 应用场景: 信息检索(搜索引擎排序)、文本分类、关键词提取、文档相似度计算等。是 BOW 的强有力替代者,在实践中应用非常广泛。

  • 例子 (简化):

    • 假设语料库有 1000 个文档 (N=1000)。

    • 词 "自然" 出现在 100 个文档中 (DF=100),其 IDF(自然) = log(1000 / 101) ≈ log(9.9) ≈ 2.29

    • 词 "的" 出现在 990 个文档中 (DF=990),其 IDF(的) = log(1000 / 991) ≈ log(1.01) ≈ 0.01

    • 在某个特定文档 d 中:

      • "自然" 出现了 5 次 (TF(自然, d) = 5) -> TF-IDF(自然, d) ≈ 5 * 2.29 = 11.45

      • "的" 出现了 20 次 (TF(的, d) = 20) -> TF-IDF(的, d) ≈ 20 * 0.01 = 0.2

    • 尽管"的"在文档 d 中出现次数更多 (TF更高),但其 TF-IDF 权重远低于"自然",因为"自然"更能代表该文档的特性。


4. N-Gram

  • 核心思想: 不同于前三种方法(主要关注单个词),N-Gram 关注连续的词序列。它将文本视为由连续的 N 个单词组成的单元(称为 gram)构成的序列。

    • Unigram (1-gram): 单个词。本质上就是 BOW/TF-IDF 所基于的单元。

    • Bigram (2-gram): 连续的两个词。例如:"我爱","爱自然","自然语言","语言处理"。

    • Trigram (3-gram): 连续的三个词。例如:"我爱自然","爱自然语言","自然语言处理"。

    • 以此类推。

  • 表示: 构建一个基于 N-Gram 的词汇表。然后可以用 BOW 或 TF-IDF 的方式来表示文档:

    • N-Gram BOW: 向量长度为 N-Gram 词汇表大小,每个位置的值是相应 N-Gram 在当前文档中出现的次数。

    • N-Gram TF-IDF: 向量长度为 N-Gram 词汇表大小,每个位置的值是相应 N-Gram 在当前文档中的 TF-IDF 权重。

  • 特点:

    • 捕捉局部词序信息: 这是 N-Gram 最大的优势!通过组合连续的词,它部分地保留了单词之间的顺序和上下文信息。使用 Bigram 就能区分"猫吃鱼"("猫吃", "吃鱼")和"鱼吃猫"("鱼吃", "吃猫")。

    • 缓解未登录词问题: 即使一个词没在训练语料中出现过,包含它的 N-Gram(特别是较低阶的)可能出现过,模型仍能处理。

    • 维度爆炸: N-Gram 词汇表的大小远大于单词词汇表的大小(|V|^N 量级)。对于 Bigram,词汇表大小约为 |V|^2;Trigram 约为 |V|^3。这导致特征向量维度急剧膨胀(比 One-Hot/BOW/TF-IDF 高得多),稀疏性也更高。实际应用中 N 通常取 2 或 3,很少超过 5。

    • 语义信息有限: 虽然捕捉了局部共现,但仍然不能很好地理解深层次的语义关系或长距离依赖。例如,"好"和"优秀"作为不同词,它们的 N-Gram 仍然是不同的特征。

  • 应用场景: 需要捕捉局部词序的任务,如:

    • 拼写检查(纠正错词需要前后文)

    • 机器翻译(短语结构)

    • 语音识别(声学模型与语言模型结合)

    • 基础的文本生成(预测下一个词)

    • 结合 BOW/TF-IDF 用于文本分类(提供比 unigram 更丰富的特征)


关键区别总结表

特性One-HotBOW (词袋模型)TF-IDFN-Gram
基本单元单个词单个词单个词连续的 N 个词序列
核心信息词是否存在 (0/1)词在当前文档中的频率词在当前文档中的重要性 (TF * IDF)局部词序 (上下文片段)
频率信息❌ (只有存在性)✅ (词频)✅ (加权词频)✅ (N-Gram 频次或加权频次)
词序信息✅ (在 N 窗口内)
语义信息⚠️ (有限,仅局部共现)
维度/稀疏性极高维 / 极稀疏高维 / 稀疏高维 / 稀疏极高维 (V^N) / 极稀疏
解决常见词问题✅ (IDF惩罚)❌ (本身不解决,可结合TF-IDF)
主要优势简单,表示类别简单,包含词频强调区分性强的词捕捉局部上下文和顺序
主要缺点高维稀疏,无频率/顺序/语义无顺序/语义,受常见词影响大无顺序/语义维度爆炸,仅局部顺序
关系BOW 的基础可视为 Unigram (1-gram) 频率常作用于 Unigram 或 N-Gram可结合 BOW/TF-IDF 使用

代码示例

1. One-Hot 编码

代码示例

Python

from sklearn.preprocessing import OneHotEncoder # 示例数据:3 个样本,每个样本是一个类别 data = [["cat"], ["dog"], ["cat"]] # 初始化 One-Hot 编码器 encoder = OneHotEncoder() encoded = encoder.fit_transform(data) # 输出结果 print("One-Hot 编码结果:\n", encoded.toarray()) print("类别映射:", encoder.categories_)

输出

One-Hot 编码结果: [[1. 0.] [0. 1.] [1. 0.]] 类别映射: [array(['cat', 'dog'], dtype=object)]

2. BOW(Bag of Words,词袋模型)

代码示例

Pytho

from sklearn.feature_extraction.text import CountVectorizer # 示例文本 corpus = [ "the cat sat on the mat", "the dog sat on the log", "the cat and the dog sat" ] # 初始化词袋模型 vectorizer = CountVectorizer() X = vectorizer.fit_transform(corpus) # 输出结果 print("词汇表:", vectorizer.get_feature_names_out()) print("BOW 向量:\n", X.toarray())

输出

词汇表: [and' 'cat' 'dog' 'log' 'mat' 'on' 'sat' 'the'] BOW 向量: [[0 1 0 0 1 1 1 2] [0 0 1 1 0 1 1 2] [1 1 1 0 0 1 1 3]]

3. TF-IDF(Term Frequency-Inverse Document Frequency)

代码示例

Python

from sklearn.feature_extraction.text import TfidfVectorizer # 使用相同的文本数据 vectorizer = TfidfVectorizer() X = vectorizer.fit_transform(corpus) # 输出结果 print("词汇表:", vectorizer.get_feature_names_out()) print("TF-IDF 向量:\n", X.toarray())

输出

词汇表: ['and' 'cat' 'dog' 'log' 'mat' 'on' 'sat' 'the'] TF-IDF 向量: [[0. 0.57735027 0. 0. 0.57735027 0.57735027 0.57735027 0. ] [0. 0. 0.57735027 0.57735027 0. 0.57735027 0.57735027 0. ] [0.68346878 0.34173439 0.34173439 0. 0. 0.34173439 0.34173439 0. ]]

4. N-Gram 模型

Python

from sklearn.feature_extraction.text import CountVectorizer # 使用 Bigram(ngram_range=(2,2)) vectorizer = CountVectorizer(ngram_range=(2, 2)) X = vectorizer.fit_transform(corpus) # 输出结果 print("Bigram 词汇表:", vectorizer.get_feature_names_out()) print("Bigram 向量:\n", X.toarray())

输出

Bigram 词汇表: ['cat sat' 'dog sat' 'log the' 'mat the' 'on the' 'sat on' 'the cat' 'the dog' 'the log' 'the mat' 'the sat'] Bigram 向量: [[0 0 0 1 1 1 1 0 0 1 0] [0 0 1 0 1 1 0 1 1 0 0] [0 1 0 0 1 1 1 1 0 0 1]]

总结与关系

  1. One-Hot 是最基础的原子表示。

  2. BOW 是 One-Hot 在文档级别的频率扩展。 BOW 本质上就是基于 Unigram (1-gram)。

  3. TF-IDF 是 BOW 的重要加权改进版。 它在词频(TF)基础上引入了逆文档频率(IDF)来抑制常见词、提升关键词语义权重。TF-IDF 通常作用于 Unigram,但也可以作用于 N-Gram。

  4. N-Gram 改变了基本单元。 它不是基于单个词,而是基于连续的词序列(词组/片段)。这使其能够捕捉局部词序信息。N-Gram 模型本身只定义了单元,通常需要结合 BOW 或 TF-IDF 来形成文档的向量表示(即 N-Gram BOW 或 N-Gram TF-IDF)。

  5. 它们都缺乏深层次语义理解。 这些方法都无法真正理解单词的含义(语义)或复杂的上下文关系。捕捉语义需要更高级的技术,如词嵌入(Word2Vec, GloVe)和上下文相关的语言模型(BERT, GPT)。

选择哪种方法取决于具体任务的需求、计算资源以及对词序和语义的要求。TF-IDF 和 N-Gram (通常是 Bigram/TF-IDF) 在传统机器学习方法中应用非常广泛且有效。而深度学习方法(如基于Transformer的模型)则能更好地捕捉语义和长距离依赖。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

产品经理如何做用户调研和访谈

用户调研和访谈是产品经理挖掘用户需求、优化产品设计的核心环节。在一个完整的产品流程里面,用户调研和访谈是非常重要的。 当年史玉柱推出脑白金时,就曾带领团队在江苏很多城市进行了大量的走访(用户调研),和一帮老…

【python 读取抖音/小红书/微博今日头条/百度热点等平台的热点新闻】

轻松获取全网热点,Python助你掌握实时舆情 在信息爆炸的时代,抖音、小红书、微博、今日头条和百度热点等平台每天都会产生海量热门内容。无论是品牌营销、竞品分析还是舆情监控,掌握这些热点新闻至关重要。利用Python的强大爬虫技术&#xff…

【1.3 MySQL知识库 - 轻松理解版】

🚀 MySQL知识库 - 轻松理解版 一、MySQL核心知识顺口溜 🎵 🎤 经典记忆口诀 MySQL数据库,InnoDB引擎强 ACID事务特性,隔离级别四档 索引加速查询,B树是主梁 主从复制备份,读写分离扛 锁机制防…

计算机网络期末速成 网络层 判断及单选题

判断题 路由器和链路层交换机都被称为分组交换机。路由器与链路层交换机间的根本区别是:路由器在网络层存储转发IP数据报,链路层交换机在链路层存储转发帧。 A. 对 B. 错 答案: 对 解析: 路由器和链路层交换机确实都是分组交换机,但工作层次不同。路由器…

代理 AI 时代的隐私重构:从边界控制到信任博弈

过去,我们将隐私等同于边界与权限控制,依赖墙壁、锁和规则构筑防线。而如今,随着代理 AI 深度介入生活,成为能感知、决策的自主实体,它不仅处理数据,更在重塑我们的数字形象与内在认知。在此背景下&#xf…

C++实现手写strstr函数

strstr 函数用于在主字符串中查找子字符串的首次出现位置,以下是高效的实现方案: KMP算法优化版本 #include <iostream> #include <string> #include <vector> using namespace std; // 计算KMP算法的部分匹配表(PMT) vector<int> getNext(const…

Linux操作系统网络服务模块一SSH带外管理概述

前言&#xff1a; 在复杂的网络运维环境中&#xff0c;​SSH带外管理&#xff08;Out-of-Band Management&#xff09;​​ 是确保系统高可用性的核心技术手段。区别于依赖业务网络的“带内管理”&#xff0c;带外管理通过独立物理通道​&#xff08;如专用管理网口或串…

org.springframework.cloud.gateway 组件解释

org.springframework.cloud.gateway 是 Spring Cloud 生态系统中的一个新一代的、功能强大的 API 网关。 1. 什么是 API 网关 (API Gateway)&#xff1f; 在讲解 Spring Cloud Gateway 之前&#xff0c;我们先要理解它扮演的角色——API 网关。 在一个微服务架构中&#xff0…

linux ollama 下载安装

linux ollama 下载安装 ollama 下载地址ollama 手动安装解决找不到命令的问题升级[gcc](https://so.csdn.net/so/search?qgcc&spm1001.2101.3001.7020)Centos7 停止维护之后 [升级gcc||找不到devtoolset-8-gcc* 问题解决方案](https://www.cnblogs.com/Jedi-Pz/p/18447117…

2025 渗透工具:【中国蚁剑】连接一句话MUA文件 远控虚拟机靶机

温馨提示&#xff1a; 本程序仅作为虚拟机测试环境使用&#xff0c;请勿用于任何不当用途。使用即表示您同意自行承担可能产生的所有责任。 一、场景复现 1、PhpMystudy软件启动网页模拟靶机 小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01; 2、开启apache 3、…

Datawhale 网络爬虫技术入门第2次笔记

正则表达式 正则表达式&#xff08;Regular Expression&#xff09;&#xff0c;⼀种使⽤表达式的⽅式对字符串进⾏匹配的语法规则。 正则的语法&#xff1a;使⽤元字符进⾏排列组合来匹配字符串。 在线测试正则表达式&#xff1a;在线正则表达式测试OSCHINA.NET在线工具,os…

详解Redis的集群模式(主从复制、哨兵与Cluster)

一、主从复制 (Master-Slave Replication) 1. 基本概念 主从复制是Redis最简单的集群模式&#xff0c;由一个主节点(Master)和一个或多个从节点(Slave)组成。 2. 工作原理 数据同步&#xff1a;从节点启动时会向主节点发送SYNC命令&#xff0c;主节点执行BGSAVE生成RDB文件并…

如何使用 Airtest 对 Flutter 和 Unity 应用进行UI自动化测试

使用 Airtest 进行 Flutter/Unity UI 自动化测试终极指南 一、 核心原理&#xff1a;为什么 Airtest 能行&#xff1f; 要理解如何用&#xff0c;先要明白其原理。Airtest 采取了“两条腿走路”的策略&#xff0c;这正是它能通吃各种UI技术的关键。 第一条腿&#xff1a;基于…

河马剧场多部自制剧霸榜,短剧精品化战略持续推进

临近暑期&#xff0c;短剧市场热度逐渐攀升。近期&#xff0c;DataEye发布6月9日—6月15日微短剧热力榜显示河马剧场以8部作品占据TOP30近三分之一席位&#xff0c;前三名中更是占据2个席位&#xff0c;以题材多元化、用户覆盖广、数据爆发力强的特点引领行业风向。其中&#x…

幂级数 (0,R); R ;(R,+oo)

很好&#xff0c;我们现在来回答你问的这个问题&#xff1a; &#x1f7e0; 幂级数在收敛半径 R R R 以外会发生什么&#xff1f; 我们考虑一个一般形式的幂级数&#xff1a; ∑ n 0 ∞ a n ( x − x 0 ) n \sum_{n0}^{\infty} a_n (x - x_0)^n n0∑∞​an​(x−x0​)n 它的…

C#学习13——正则表达式

一、正则表达式 是一种匹配输入文本的模式&#xff0c;是由特殊字符组成&#xff0c;用于匹配字符串中的字符组合。 二、正则表达式有哪些&#xff1f; 1.Regex 类&#xff08;引入System.Text.RegularExpressions;&#xff09; Regex 类用于表示一个正则表达式。 1&#…

【Redis】持久化机制:RDB / AOF 的应用与场景

文章目录 Redis 持久化一、RDB1.1 说明1.2 触发机制手动触发自动触发 1.3 流程说明1.4 文件处理1.5 优缺点 & 适用场景 二、AOF2.1 说明2.2 使用 AOF2.3 命令写入2.4 文件同步2.5 重写机制2.6 启动时数据恢复2.7 优缺点 & 适用场景 三、不使用 AOF / RDB 的情况3.1 场景…

Python 企业级开发与DevOps实践

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 大型项目结构与设计模式 项目结构规范 text 复制 下载 enterprise_app/ ├── docs/ # 项目文档 ├── tests/ # 测试代码 │ ├── unit/ …

E结构体基础.go

前言&#xff1a;结构体是一种用户自定义的数据类型&#xff0c;它可以将多个不同类型的数据整合在一起&#xff0c;形成一个有机的整体。这就好比在现实生活中&#xff0c;我们有各种各样的物品&#xff0c;它们各自有不同的属性和用途&#xff0c;而结构体就像是一个收纳箱&a…

Spring @Autowired 依赖注入全解析

Autowired 是 Spring 框架中实现依赖注入的核心注解&#xff0c;其自动装配过程可分为以下步骤&#xff0c;结合了类型匹配、名称解析和容器协作机制&#xff1a; 1. 组件扫描与 Bean 定义注册 扫描阶段&#xff1a;Spring 容器启动时&#xff0c;通过 ComponentScan 或 XML 配…