AI人工智能 词袋(Bag of Word, BoW)模型
词袋(BoW)是自然语言处理中的一种模型,主要用于从文本中提取特征,以便文本可以用于机器学习算法的建模。
现在出现了一个问题,为什么我们需要从文本中提取特征。这是因为机器学习算法无法处理原始数据,它们需要数值数据才能从中提取有意义的信息。将文本数据转换为数值数据的过程称为特征提取或特征编码。
工作原理
这是一种非常简单的从文本中提取特征的方法。假设我们有一个文本文档,并且我们想将其转换为数值数据,或者说想从中提取特征,那么首先这个模型会从文档中的所有单词中提取词汇表。然后,它将使用文档 - 词矩阵来构建模型。通过这种方式,词袋仅将文档表示为单词的集合。文档中单词的顺序或结构信息将被丢弃。
文档 - 词矩阵的概念
词袋算法使用文档 - 词矩阵来构建模型。顾名思义,文档 - 词矩阵是文档中出现的各种单词计数的矩阵。通过这个矩阵,文本文档可以表示为各种单词的加权组合。通过设置阈值并选择更有意义的单词,我们可以构建文档中所有单词的直方图,将其用作特征向量。以下是一个理解文档 - 词矩阵概念的示例:
示例 假设我们有以下两个句子:
- 句子 1 - 我们正在使用词袋模型。
- 句子 2 - 词袋模型用于提取特征。
现在,考虑这两个句子,我们有以下 13 个不同的单词:
- we(我们)
- are(是)
- using(使用)
- the(这)
- bag(袋)
- of(的)
- words(单词)
- model(模型)
- is(是)
- used(被使用)
- for(用于)
- extracting(提取)
- features(特征)
现在,我们需要使用每个句子中的单词计数为每个句子构建一个直方图:
- 句子 1 - [1,1,1,1,1,1,1,1,0,0,0,0,0]
- 句子 2 - [0,0,0,1,1,1,1,1,1,1,1,1,1]
通过这种方式,我们已经提取了特征向量。每个特征向量是 13 维的,因为我们有 13 个不同的单词。
统计概念
这个统计概念称为词频 - 逆文档频率(tf-idf)。文档中的每个单词都很重要。统计数据帮助我们理解每个单词的重要性。
词频(tf)
它是衡量每个单词在文档中出现频率的指标。可以通过将每个单词的计数除以给定文档中的总单词数来获得。
逆文档频率(idf)
它是衡量一个单词在给定文档集中对该文档的独特性的指标。为了计算 idf 并制定独特的特征向量,我们需要降低常见单词(如 the)的权重,并提高稀有单词的权重。
在 NLTK 中构建词袋模型
在本节中,我们将定义一组字符串,使用 CountVectorizer 从这些句子中创建向量。
让我们导入必要的包:
from sklearn.feature_extraction.text import CountVectorizer
现在定义这组句子。
sentences = ["We are using the Bag of Words model", "Bag of Words model is used for extracting the features"]
vectorizer = CountVectorizer()
vectorizer.fit_transform(sentences)
print(vectorizer.vocabulary_)
上面的程序生成如下输出。它显示在上面的两个句子中我们有 13 个不同的单词:
{'we': 11, 'are': 0, 'using': 10, 'the': 8, 'bag': 1, 'of': 7,
'word': 12, 'model': 6, 'is': 5, 'used': 9, 'for': 4, 'extracting': 2, 'features': 3}
这些是可以用于机器学习的特征向量(文本到数值形式)。