Keras NLP——词袋模型

一.文本问题

对文本进行建模的一个问题是:机器学习算法不能直接使用原始文本,因为对于目前的计算机和机器学习算法而言,输入和输出是固定长度的,所以文本必须在被模型应用之前转换为固定长度的数字向量。词袋模型是一种为了使用机器学习算法处理文本、对文本建模表示文本数据的方法,在语言建模和文档分类问题上取得了巨大成功。

二.什么是词袋?

词袋模型(简称BoW)是一种从文本中提取特征以用于机器处理的建模方法,该方法非常简单和灵活,并且可以采取多种方式从文档中提取特征。词袋是文本的表示,用于描述文档中单词的出现,它涉及两个方面:1)已知单词的词汇;2)衡量已知单词的存在。之所以被称为“词袋”,因为有关文档中单词的顺序或结构等任何信息都将被丢弃。词袋模型仅关注文档中是否出现已知单词,而不关心文档中该词的位置。作为句子和文档特征提取的一个非常常见的方法,词袋模型将每个单词计数视为一个特征,如果文档具有相似的特征组合,则文档是相似的。词袋模型的复杂性在于决定如何设计已知单词(或标记)的词汇以及如何对已知单词的重要性进行评分。

三.词袋模型的例子

1.收集数据

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

3.创建文档向量

接下来就是对每个文档中的单词进行重要性评分,目标是将每个自由文本文档转换为一个向量,我们可以将其用作机器学习模型的输入或输出。上述例子中词汇表有10个单词,所以使用10的固定长度来表示文档,在向量中有一个位置来对每个单词进行重要性评分。最简单的评分方法是将单词的存在标记为布尔值,0表示没有这个单词,1表示有这个单词。使用词汇表中列出单词的任意排序,可以逐步浏览所有的文档并将其转换为二进制向量,比如该文档集的评分如下:

"It was the best of times"=[1,1,1,1,1,1,0,0,0,0],
"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],

从上面的表示结果看,所有单词的排序都被丢弃了,使用这个方法从语料库中任何文档中提取特征,用于构建机器学习建模。新文档中会包含词汇表中的单词,但是也有可能包含不在词汇表中的单词,已知单词使用原有的词汇表就很容易编码了,但词汇表中不包含的单词就会被忽略掉,所以扩展词汇表适应新文档也是词袋模型必须要面对的一个工作。

四.管理词汇

随着词汇量的增加,文档的向量表示也会增加。在上述的示例中,文档向量的长度等于已知单词的数量。对于一个非常大的语料库,例如数千本书,矢量的长度可能是数千或数百万个位置。但是每个文档只仅仅使用了词汇表中很少的单词,这导致具有许多零分数的向量,称为稀疏向量或稀疏表示。稀疏向量在建模时需要更多的存储器和计算资源,对于传统算法大量数据或高维度会使建模过程非常具有挑战性。因此,当使用词袋模型时,存在减小词汇量的压力。有一些简单的文本清理技术可用作第一步,例如:

  • 无视案例
  • 忽略标点符号
  • 忽略不包含太多信息的常用词(停用词)
  • 修复拼写错误的单词
  • 使用词干算法将单词减少到词干
    更复杂的方法是创建分组词的词汇表。这既改变了词汇表的范围,又允许词袋从文档中捕获更多的含义。在这种方法中,每个单词或标记称为gram。反过来,创建双字对词汇表称为二元组模型,只有出现在语料库中的二元词组被建模,而不是所有可能的二元词组。n-gram是一个n-token单词序列:2-gram(通常称为bigram)是一个双字序列,一个3-gram(通常称为三元音)是一个三字词序列。把每三个词在记录在一起作为一个原子词的词汇表称为三元组模型,一般方法称为n-gram模型,其中n表示分组单词的数量。对于像文档分类这样的任务,通常一个简单的二元组方法比1-gram的词袋模型更好。二元词袋模型比一元词袋模型能力更强大。

五.计算每个词的分值

一旦选择了词汇表,就需要对示例文档中单词的出现进行评分。在上述的示例中,用的是非常简单的评分方法:对单词存在与否的二进制表示。

1.字哈希

哈希函数是一种将数据映射到固定大小的数字集的数学运算。例如,在编程时在哈希表中使用它们,其中可能将名称转换为数字以进行快速查找。在词汇表中使用已知单词的哈希表示,解决了对于大文本语料库具有非常大的词汇表的问题,因为可以选择哈希空间的大小,该大小又是文档的向量表示的大小。

2.TF-IDF

对单词频率进行评分的问题在于,高频率词在文档中占主导地位(例如,得分较高),但可能没什么意义,很多文档的内容往往是由一些频率适中的词表述出来的。一种方法是通过它们在所有文档中出现的频率来重新调整单词的频率,使得在所有文档中频繁出现的频繁单词的分数也会收到惩罚。这种评分方法称为术语频率-反向文档频率,或简称为TF-IDF,其中:

  • Term Frequency:是当前文档中单词频率的得分
  • Inverse Document Frequency:是对文档中单词的罕见程度的评分。
    分数是一个权重,并非所有单词都同样重要或有趣。分数具有突出显示给定文档中不同(包含有用信息)单词的效果。
    因此,罕见术语的idf很高,而常用术语的idf可能很低。

六.词袋的局限性

词袋模型非常易于理解和实现,并为特定文本数据提供了很大的灵活性。它在语言建模和文档分类等预测问题上取得了巨大成功。然而,它有一些缺点,例如:

  • 词汇表需要精心设计,最重要的是为了管理大小,这会影响文档表示的稀疏性
  • 由于计算原因(空间和时间复杂性)以及信息原因,稀疏表示更难以建模,其中挑战是模型在如此大的表示空间中如何利用如此少的信息
  • 丢弃单词顺序忽略了上下文,而忽略了文档中单词的含义(语义)。上下文和意义可以为模型提供很多东西,比如告诉不同排列的相同单词之间的差异,同义词等。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章