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

【NLP】 1. 文本在计算机里的表示: One-Hot, sparse vector, bag of words

文本的表示

一段文本,或者一个词,我们如何来表示它? 我们可以通过类似字典的方式来解释它,或者通过有关联的词句来解释。 但是我们如何将自然语言输入给计算机呢? 计算机读取的是比特,而不是文字。 那么关键的一步就是将词句转换成计算机可以“理解”的数字。 接下来介绍关键技术。

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

定义
将每个词表示为一个与词表大小相同的向量,在该词对应的位置为1,其余位置为0。

示例: 假设词汇表 (Vocabulary) 是:

["cat", "dog", "fish", "bird"]

那么 "dog" 的 One-Hot 编码是:

[0, 1, 0, 0]

优缺点: ✅ 计算简单,易于理解
❌ 词与词之间没有关系(语义无法捕捉)
❌ 词表太大时,向量维度会变得极高(稀疏性问题)

1.1 稀疏向量(Sparse Vector)

  • 在之前的案例中,[0, 1, 0, 0] 是 “dog” 的one-hot 编码,1的索引是1(索引:[0,1,2,3]),那么这个时候sparse vector可以表示为(1)。

  • 那么如果"dog"出现了三次,如何表示呢? 这时可以写成[(1,3)],1代表索引,3代表频率。

  • 如果[“cat”, “dog”, “fish”, “bird”]中,"dog"出现了99次,"bird"出现了66次,那么sparse vector应该表示为[(1,99), (3,66)],用字典map可以表示为{1:99, 3:66}

1.2 one-hot vector, sparse vector 和 map的效率比较

存储大小耗时
one-hot词汇表大小O(n) - 词汇表大小
sparse vector只存储非0标记根据算法决定
map(哈希表映射)取决于数据结构,可能更加高效O(1)

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

词袋模型 (Bag-of-Words, BoW) 是 NLP 中最基础的文本表示方法之一。它忽略单词顺序,仅关注文本中词的出现次数。这种方法可以将文本转换为机器学习模型可用的数值特征。

1. 词袋模型的基本概念

BoW 模型的核心思想是:

  • 创建词汇表:从所有文档中提取唯一的词,形成一个固定大小的词汇表
  • 统计词频:对每个文档,计算词汇表中每个词的出现次数,构成特征向量。

示例

假设有两个文本:

文档1: "I love NLP and deep learning"
文档2: "NLP is amazing"

构建词汇表(假设小写处理):

["i", "love", "nlp", "and", "deep", "learning", "is", "amazing"]

然后将每个文档转换为向量:

ilovenlpanddeeplearningisamazing
文档111111100
文档200100011

词的顺序被忽略,只统计了出现次数。

2. 词袋模型的实现

可以使用 sklearn 中的 CountVectorizer 来实现 BoW:

from sklearn.feature_extraction.text import CountVectorizer

# 文档列表
corpus = ["I love NLP and deep learning", "NLP is amazing"]

# 创建 BoW 模型
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)

# 输出 BoW 特征矩阵
print(vectorizer.get_feature_names_out())  # 查看词汇表
print(X.toarray())  # 转换成数组

输出

['amazing' 'and' 'deep' 'i' 'learning' 'love' 'nlp' 'is']
[[0 1 1 1 1 1 1 0]
 [1 0 0 0 0 0 1 1]]
  • get_feature_names_out() 显示词汇表
  • X.toarray() 是 BoW 矩阵,每行对应一个文档,每列对应一个词的出现次数

相关文章:

  • MCU的应用场景:从智能家居到工业控制
  • 【Go】无法访问 proxy.golang.org 进行依赖下载
  • spring bean的生命周期和循环依赖
  • 量子信息理论入门:探索量子世界的奇妙信息处理方式
  • .gitignore 文件用于 Git 应忽略的文件夹的格式
  • 详细讲一下 Webpack 主要生命周期钩子流程(重难点)
  • SpringBoot美发门店管理系统开发与设计
  • 网页制作18-Javascipt图像特效の图片闪烁
  • MySQL 横向衍生表(Lateral Derived Tables)
  • element ui设置结束时间为23:59:59
  • VSTO(C#)Excel开发12:多线程的诡异
  • DLMS电能表通讯协议学习笔记
  • 蓝桥杯 第五天 2021 国赛 第 5 题 最小权值
  • Secs/Gem第一讲 · 总结精华版(基于secs4net项目的ChatGpt介绍)
  • 芯谷D6211B:IP摄像头IR滤波器开关驱动的理想选择
  • c++ 中的可变参数模板与折叠表达式
  • 简述下npm,cnpm,yarn和pnpm的区别,以及跟在后面的-g,--save, --save-dev代表着什么
  • 学习网络层
  • python unity通讯数据解析2
  • STAR Decomposition 一种针对极端事件的信号分解方法 论文精读加复现
  • 5月1日全国铁路发送旅客2311.9万人次,创历史新高
  • 韩国代总统、国务总理韩德洙宣布辞职,将择期宣布参选总统
  • 今年五一假期出游人群规模预计比去年提升8%,哪里最热门?
  • 秦洪看盘|资金切换主线,重构市场风格
  • 4月人民币对美元即期汇率微跌,今年以来升值0.48%
  • 不准打小孩:童年逆境经历视角下的生育友好社会