「机器学习_8」Bag-of-Words

                      Bag-of-Words

1.文字问题

2. 什么是Bag-of-Words(具体例子)

3. 局限性

 

1.文字问题

文本建模的一个问题是它很杂乱,机器学习算法之类的技术更喜欢定义明确的固定长度输入和输出。

机器学习算法无法直接处理原始文本;文本必须转换为数字。具体来说,是数字向量

在语言处理中,矢量x是从文本数据中导出的,以便反映文本的各种语言特性。

这称为特征提取或特征编码。

一种流行且简单的使用文本数据进行特征提取的方法称为 Bag-of-Words.

 

2. 什么是Bag-of-Words

词袋模型或简称BoW是一种从文本中提取特征以用于建模的方法,例如用于机器学习算法。

该方法非常简单和灵活,可以用于从文档提取特征的多种方式。

词袋是描述文档中单词出现的文本表示。它涉及两件事:

  1. 已知单词的词汇表。
  2. 已知单词存在的一种度量。

它被称为单词的“  ”,因为有关文档中单词顺序或结构的任何信息都将被丢弃。该模型仅关注已知单词是否出现在文档中,而不关注文档中的何处。

句子和文档的一种非常常见的特征提取过程是词袋法(BOW)。在这种方法中,我们查看文本中单词的直方图,即将每个单词计数视为一个特征。

此外,仅从内容上我们就可以了解有关文档含义的信息。

词袋可以根据需要简单或复杂。复杂性在于决定如何设计已知单词(或标记)的词汇表以及如何对已知单词的存在进行度量。

我们将仔细研究这两个问题。

词袋模型的示例

让我们用一个实际的例子来具体说明单词模型。

步骤1:收集资料

下面是查尔斯·狄更斯(Charles Dickens)的《两个城市的故事书的前几行摘录,摘自古腾堡计划

It was the best of times,
it was the worst of times,
it was the age of wisdom,
it was the age of foolishness,

 对于这个小例子,让我们将每行视为一个单独的“文档”,并将这4行视为整个文档集。

步骤2:设计词汇

现在,我们可以列出模型词汇表中所有单词的列表。

这里的独特词(忽略大小写和标点符号)是:

  • “it”
  • “was”
  • “the”
  • “best”
  • “of”
  • “times”
  • “worst”
  • “age”
  • “wisdom”
  • “foolishness”

这是一个包含24个单词的语料库中的10个单词的词汇表。

步骤3:建立文件向量

下一步是对每个文档中的单词打分。目的是将自由文本的每个文档转换为向量,我们可以将其用作机器学习模型的输入或输出。

因为我们知道词汇表有10个单词,所以我们可以使用10的固定长度文档表示形式,在向量中的每一个位置为每个单词评分。

最简单的评分方法是将单词的存在标记为布尔值,0表示不存在,1表示存在

使用我们词汇表中上面列出的单词的任意顺序,我们可以遍历第一个文档(It was the best of times,)并将其转换为二进制向量。

  • “it” = 1
  • “was” = 1
  • “the” = 1
  • “best” = 1
  • “of” = 1
  • “times” = 1
  • “worst” = 0
  • “age” = 0
  • “wisdom” = 0
  • “foolishness” = 0

二进制的表示如下:

1

[1, 1, 1, 1, 1, 1, 0, 0, 0, 0]

另外几个的表示如下:

1

2

3

"it was the worst of times" = [1, 1, 1, 0, 1, 1, 1, 0, 0, 0]

"it was the age of wisdom" = [1, 1, 1, 0, 1, 0, 0, 1, 1, 0]

"it was the age of foolishness" = [1, 1, 1, 0, 1, 0, 0, 1, 0, 1]

单词的所有排序都名义上被丢弃,我们有一致的方式从语料库中的任何文档中提取特征,以备建模时使用。

与已知单词的词汇重叠的新文档,但可能包含词汇之外的单词,仍可以进行编码,仅对已知单词的出现进行评分,而忽略未知单词。您可以看到它如何自然地扩展到大词汇量和大文档。

 

管理词汇

随着词汇量的增加,文档的向量表示也随之增加。

在前面的示例中,文档向量的长度等于已知单词的数量。

您可以想象,对于一个非常大的语料库(例如数千本书),向量的长度可能是数千个或数百万个位置。此外,每个文档在词汇表中可能只包含很少的已知单词。

这将导致矢量具有很多零分,称为稀疏矢量或稀疏表示

建模时,稀疏向量需要更多的内存和计算资源,而大量的位置或维数会使建模过程对传统算法非常具有挑战性。

有一些简单的文本清除技术可以用在第一步,例如

  • 忽略大小写
  • 忽略标点符号
  • 忽略不包含很多信息的频繁单词,称为停用词,例如“ a”,“ of”等。
  • 修复拼写错误的单词。
  • 使用词干算法将词减少到词干(例如,从“播放”中“播放”)。

一种更复杂的方法是创建分组词的词汇表。这既改变了词汇的范围,又使词袋能够从文档中获取更多含义。

在这种方法中,每个单词或标记都称为“gram”。反过来,创建两个单词对的词汇表又称为bigram模型。同样,仅对出现在语料库中的二元模型进行建模,而不是对所有可能的二元模型进行建模。

N-gram的简单介绍

:一个2 gram(通常更称为双字母组)是一个两个单词的单词序列,例如“ please turn”,“ turn your”或“ your homework”,以及3 gram(通常更称为三字母)是由三个词组成的单词序列,例如““please turn your”, or “turn your homework”


因此对于该文本(“It was the best of times” )的分词为:

  • “it was”
  • “was the”
  • “the best”
  • “best of”
  • “of times”

然后,词汇表跟踪单词的三元组称为三元组模型,通用方法称为n元组模型,其中n表示分组单词的数量。

通常,对于文档分类之类的任务,简单的bigram方法比单个单词袋模型更好。

 

计分单词

一旦选择了词汇表,就需要对示例文档中单词的出现进行评分。在实际的示例中,我们已经看到一种非常简单的评分方法:单词存在与否的二进制评分。

一些其他简单的计分方法包括:

  • 计数。计算每个单词在文档中出现的次数。
  • 频率。计算文档中所有单词中每个单词出现在文档中的频率。

 

3. 词袋的局限性

该模型非常易于理解和实施,并为您在特定文本数据上的自定义提供了很大的灵活性。

它已成功用于预测问题,例如语言建模和文档分类

但是,它存在一些缺点,例如:

  • 词汇表:词汇表需要仔细设计,尤其是为了管理尺寸,这会影响文档表示的稀疏性。
  • 稀疏:由于计算原因(空间和时间复杂度)以及信息原因,稀疏表示难以建模,而挑战在于模型在如此大的表示空间中利用很少的信息。
  • 含义放弃单词顺序会忽略上下文,从而忽略文档中单词的含义(语义)。上下文和含义可以为模型提供很多帮助,如果建模可以说明不同排列的相同单词(“this is interesting” vs “is this interesting”),同义词(“old bike” vs “used bike”)之间的差异。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章