词袋 - 英文为:Bag of Word(BoW) ,它是自然语言处理中的一个模型,基本上用于从文本中提取特征,以便文本可用于建模,以便在机器学习算法中使用。
现在问题出现了,为什么我们需要从文本中提取特征。 这是因为机器学习算法不能处理原始数据,他们需要数字数据,以便可以从中提取有意义的信息。 将文本数据转换为数字数据称为特征提取或特征编码。
它是怎么运行的 这是从文本中提取特征的非常简单的方法。 假设我们有一个文本文档,并且希望将其转换为数字数据或者说想从中提取特征,那么首先这个模型从文档中的所有单词中提取词汇。 然后通过使用文档术语矩阵,它将建立一个模型。通过这种方式,BoW 仅将文件表示为一袋文字。 丢弃关于文档中单词的顺序或结构的任何信息。
文档术语矩阵的概念
BoW 算法通过使用文档术语矩阵来建立模型。 顾名思义,文档术语矩阵就是文档中出现的各种字数的矩阵。 在这个矩阵的帮助下,文本文档可以表示为各种单词的加权组合。 通过设置阈值并选择更有意义的单词,我们可以构建文档中可用作特征向量的所有单词的直方图。 以下是了解文档术语矩阵概念的示例 -
示例
假设有以下两个句子 -
现在,通过考虑这两句子,有以下13个不同的单词 -
现在,我们需要使用每个句子中的单词计数为每个句子建立一个直方图 -
这样,就得到了已经提取的特征向量。每个特征向量都是 13 维的,因为这里有 13 个不同的单词。
统计学的概念称为 TermFrequency-Inverse Document Frequency(tf-idf)。 每个单词在文档中都很重要。 统计数据有助于我们理解每个词的重要性。
术语频率(tf) 这是衡量每个单词出现在文档中的频率。 它可以通过将每个词的计数除以给定文档中的词的总数来获得。
逆文档频率(idf) 这是衡量在给定的文档集中这个文档有多独特的一个单词。要计算 idf 和制定一个特征向量,我们需要减少像这样的常见词的权重,并权衡稀有词。
在本节中,我们将使用 CountVectorizer 从这些句子中创建矢量来定义字符串集合。
导入必要的软件包 -
from sklearn.feature_extraction.text import CountVectorizer
现在定义一组句子。
Sentences = ['We are using the Bag of Word model', 'Bag of Word model is
used for extracting the features.']
vectorizer_count = CountVectorizer()
features_text = vectorizer.fit_transform(Sentences).todense()
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}
这些是可以用于机器学习的特征向量(文本到数字形式)。