「机器学习

    技术2026-01-14  11

                          Bag-of-Words

    1.文字问题

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

    3. 局限性

     

    1.文字问题

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

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

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

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

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

     

    2. 什么是Bag-of-Words

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

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

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

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

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

    句子和文档的一种非常常见的特征提取过程是词袋法(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”)之间的差异。

     

    Processed: 0.029, SQL: 9