10 词袋模型生成词向量

在上一篇文章中,我们探讨了文本预处理中的“词干提取”和“词形还原”。在进行进一步的自然语言处理(NLP)任务之前,了解如何将文本转化为可供计算机处理的数值数据是至关重要的。这一篇,我们将专注于如何通过“词袋模型”生成词向量。

什么是词袋模型?

“词袋模型”(Bag-of-Words, BoW)是一种简单而有效的文本表示方法,它忽略了词语的顺序和语法,仅关心词语的出现频次。我们将文本视为一个“词的集合”,在这个集合中,词的顺序不再重要。使用词袋模型,我们可以将文本转化为一个向量,以便后续的分析和建模。

词袋模型的步骤

  1. 文本预处理:在将文本转化为词袋模型之前,我们通常会进行一些预处理工作,例如去除停用词、词干提取和词形还原。这一部分我们在上一篇文章中已经讨论过。

  2. 构建词典:从所有预处理后的文本中提取出唯一的词汇表,称为词典。

  3. 构建词向量:针对每一篇文档,我们生成一个向量,向量的每个维度对应于词典中的一个词,值表示该词在文档中的出现频率或存在与否。

案例分析:词袋模型的使用

假设我们有以下三篇简短的文本:

1
2
3
文档 1: 我 喜欢 自然语言处理
文档 2: 自然语言处理 很有趣
文档 3: 我 爱 编程

第一步:文本预处理

我们可以进行简单的预处理,去除停用词(如“我”、“很”)并提取词干,假设最终保留的词是:

1
自然语言处理, 喜欢, 有趣, 爱, 编程

第二步:构建词典

从上述文本中提取的词典为:

1
词典 = ["自然语言处理", "喜欢", "有趣", "爱", "编程"]

第三步:构建词向量

现在我们为每篇文档构建词向量。使用最简单的方式,计算每个词的出现频率。

  • 文档 1: [1, 1, 0, 0, 0]
  • 文档 2: [1, 0, 1, 0, 0]
  • 文档 3: [0, 0, 0, 1, 1]

最终的词向量表示为:

1
2
3
文档 1: [1, 1, 0, 0, 0]
文档 2: [1, 0, 1, 0, 0]
文档 3: [0, 0, 0, 1, 1]

Python实现词袋模型

以下是一个简单的Python代码示例,使用 sklearn 库实现词袋模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from sklearn.feature_extraction.text import CountVectorizer

# 我们的文档
documents = [
"我 喜欢 自然语言处理",
"自然语言处理 很有趣",
"我 爱 编程"
]

# 初始化 CountVectorizer
vectorizer = CountVectorizer()

# 将文档转化为词向量
X = vectorizer.fit_transform(documents)

# 获取词典
vocabulary = vectorizer.get_feature_names_out()

# 输出词向量
print(f"词典: {vocabulary}")
print("词向量呈现:\n", X.toarray())

这个代码会输出词典及其对应的词向量:

1
2
3
4
5
词典: ['编程' '爱' '很' '有趣' '自然语言处理' '喜欢']
词向量呈现:
[[0 0 0 0 1 1]
[0 0 1 1 1 0]
[1 1 0 0 0 0]]

总结

在本篇中,我们探讨了“词袋模型”的原理和实现,介绍了如何将文本转化为数值向量。词袋模型是许多NLP任务的基础,可以作为后续特征选择和机器学习模型的输入。

接下来的一篇文章中,我们将深入探讨“词向量之TF-IDF”,它是一种在词袋模型基础上改进的文本表示方法,能够考虑到词的重要性。我们将讨论TF-IDF的原理以及如何在Python中实现它,敬请期待!

10 词袋模型生成词向量

https://zglg.work/nlp-zero/10/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-11

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论