codecamp

AI人工智能 词袋(BOW)模型

词袋 - 英文为:Bag of Word(BoW) ,它是自然语言处理中的一个模型,基本上用于从文本中提取特征,以便文本可用于建模,以便在机器学习算法中使用。

现在问题出现了,为什么我们需要从文本中提取特征。 这是因为机器学习算法不能处理原始数据,他们需要数字数据,以便可以从中提取有意义的信息。 将文本数据转换为数字数据称为特征提取或特征编码。

它是怎么运行的 这是从文本中提取特征的非常简单的方法。 假设我们有一个文本文档,并且希望将其转换为数字数据或者说想从中提取特征,那么首先这个模型从文档中的所有单词中提取词汇。 然后通过使用文档术语矩阵,它将建立一个模型。通过这种方式,BoW 仅将文件表示为一袋文字。 丢弃关于文档中单词的顺序或结构的任何信息。

文档术语矩阵的概念

BoW 算法通过使用文档术语矩阵来建立模型。 顾名思义,文档术语矩阵就是文档中出现的各种字数的矩阵。 在这个矩阵的帮助下,文本文档可以表示为各种单词的加权组合。 通过设置阈值并选择更有意义的单词,我们可以构建文档中可用作特征向量的所有单词的直方图。 以下是了解文档术语矩阵概念的示例 -

示例

假设有以下两个句子 -

  • 句子1 - 正在使用词袋模型。
  • 句子2 - Bag of Words模型用于提取特征。

现在,通过考虑这两句子,有以下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 个不同的单词。

统计概念

统计学的概念称为 TermFrequency-Inverse Document Frequency(tf-idf)。 每个单词在文档中都很重要。 统计数据有助于我们理解每个词的重要性。

术语频率(tf) 这是衡量每个单词出现在文档中的频率。 它可以通过将每个词的计数除以给定文档中的词的总数来获得。

逆文档频率(idf) 这是衡量在给定的文档集中这个文档有多独特的一个单词。要计算 idf 和制定一个特征向量,我们需要减少像这样的常见词的权重,并权衡稀有词。

在NLTK中建立一个词袋模型

在本节中,我们将使用 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}

这些是可以用于机器学习的特征向量(文本到数字形式)。

AI人工智能 块化:将数据分割成块
AI人工智能 解决问题
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

AI人工智能监督学习(回归)

AI人工智能无监督学习:聚类

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }