NLP 中的子词分词

2024 年 9 月 19 日 | 阅读 11 分钟

引言

自然语言处理 (NLP) 使用一种称为子词分词的技术,将文本分解成比整个单词或字符更小的、更易于处理的单元,称为子词。这项技术解决了传统词级别分词的不足之处,尤其是在处理不常见的词、外语词汇和词汇表外 (OOV) 术语时。

子词分词对于形态结构复杂的语言尤其有用,在这些语言中,单词可能有多种形式和屈折变化。通过将不熟悉的词分解成可识别的子词单元,有助于模型处理它们,从而提高语言模型整体性能并实现更好的泛化。

子词分词技术包括 WordPiece、SentencePiece 和字节对编码 (BPE)。SentencePiece 和 WordPiece 使用统计方法来识别最可能的子词单元,而 BPE 则迭代地组合最常见的字符对或子词。

像 BERT、GPT 和 T5 这样的现代 NLP 模型经常采用这些技术来提高准确性和有效性。子词分词是当前 NLP 管道的重要组成部分,因为它在词级别和字符级别分词之间取得了平衡。

子词分词方法类型

  • BPE,或字节对编码

一种名为字节对编码 (BPE) 的子词分词方法,它在文本语料库中迭代地组合最常见的字符或子词对,直到达到预定的词汇表大小。BPE 最初是为了数据压缩而开发的,后来被修改用于自然语言处理 (NLP),以减小词汇表大小并使模型能够将未知词分解为可理解的子词单元。在该方法中,每个字母首先被视为一个单独的标记,并且在词汇表足够大以包含语料库中的大多数单词后,最常见的相邻对会定期组合。BPE 通常用于神经翻译和其他 NLP 应用,例如 GPT 等系统,在这些系统中,保持可接受的词汇表大小至关重要,因为它以其简单性和有效性而闻名。

  • Word-Piece

WordPiece 是 Google 为其神经机器翻译系统开发的一种子词分词方法。WordPiece 通过最大化语言模型给定文本的概率来选择子词,而 BPE 则组合最常见的子词对。通过这种方法生成的子词单元更具意义,尤其是在复杂或语义丰富的语言中。WordPiece 从语料库中所有可能的子词开始,并迭代地删除对概率影响最小的子词,直到词汇表达到目标大小。这种方法在处理不在词典中的单词以及减少不常见单词的频率方面效果特别好。WordPiece 在词汇表大小和模型整体性能之间取得平衡的能力使其成为 BERT 等基于 Transformer 的模型的流行选择。

  • Unigram 语言模型

Unigram 语言模型是一种随机子词分词技术,它假设每个子词都是独立生成的,并且每个子词的选择都旨在最大化整个训练语料库的概率。与 WordPiece 和 BPE 不同,该方法侧重于文本的统计特征,而不是重复组合子词。Unigram 模型通过删除语料库中整体概率最低的子词来定期减小大型初始词汇表。通过这种方法,可以通过改变子词的详细程度来使分词更加灵活,以适应常见和不常见的模式。SentencePiece 库实现了 Unigram 模型,该模型对于需要灵活分词策略的应用程序(例如多语言模型)特别有用。

  • Sentence Piece

SentencePiece 是一种分词库,它实现了与 BPE 类似的 Unigram 语言模型。与依赖于特定于语言的预处理的传统分词技术不同,SentencePiece 直接处理原始文本,因此具有语言无关性,适用于各种语言和字符集。SentencePiece 在使用文本语料库生成子词后,根据接收到的词汇表将输入文本进行分割。在处理多语言任务时,这种方法非常有益,因为它确保了跨语言的分词一致性。SentencePiece 被用于多语言 BERT 和 T5 模型,通过消除对特定于语言的规则的需求,简化了分词过程。由于其简单性和适应性,它在处理复杂和多样化数据集的 NLP 任务中很常用。

  • 基于词缀的分词

一种称为“基于词缀的分词”的子词分词方法,它将单词分解成词缀,词缀是语言中最小的有意义的单元。与依赖于频率或概率的 BPE 和 WordPiece 等统计方法相比,基于词缀的分词侧重于单词的语法结构。这种方法在形态结构复杂的语言中效果特别好,因为在这些语言中,单词可能有各种屈折形式。基于词缀的分词通过将单词分解成基本形式和词缀来保留语义价值,使模型能够理解同一单词不同变体之间的联系。尽管基于词缀的分词不像统计方法那样流行,但在需要更深入理解语言学系统(例如形态分析和资源有限的语言处理)的任务中非常有用。

  • 字符级别分词

字符级别分词是一种将文本中的每个字符都视为一个单独标记的方法。虽然它通常不被归类为子词方法,但它旨在通过将文本分解成尽可能小的单元来处理不在词典中的单词。由于字符级别分词不依赖于包含单词或子词的固定词汇表,因此完全避免了词汇表外单词的问题。由于这种方法允许模型从头开始构建单词,因此在处理姓名、罕见词和其他特殊文本序列时非常可靠。另一方面,字符级别分词可能会导致序列更长,计算更复杂。它通常用于需要对书面内容进行精细控制的任务,例如处理非标准文本输入(如代码或社交媒体帖子)以及用于文本生成的基于字符的模型。

比较不同的子词分词方法

  • 效果和结果

子词分词技术在性能和效率方面有所不同。通过组合最常见的子词对,字节对编码 (BPE) 有效地减小了词汇表的大小,从而在神经机器翻译等应用中产生了可行的词汇表和强大的性能。WordPiece 除了提供有效分词外,还可以通过优化概率来捕捉更复杂的子词结构,从而提高 BERT 等模型中的性能。通过根据统计特征调整子词粒度,Unigram 语言模型提供了灵活性,并且在某些情况下可能不如 WordPiece 和 BPE 有效。SentencePiece 通过结合 BPE 和 Unigram 方法,通过性能和语言无关的适应性相结合,非常适合多语言工作。

  • 对模型准确性的影响

各种子词分词技术对模型准确性有不同的影响。通过在模型准确性和词汇表大小之间取得折衷,BPE 能够以卓越的性能处理 OOV 词。WordPiece 通过选择最大化文本概率的子词,提高了 BERT 等模型的精度,并有助于理解复杂的语言模式。由于其概率方法,Unigram 模型可以通过更灵活的分词来提高准确性,尤其是在存在多种语言变体的情况下。SentencePiece 受益于 BPE 和 Unigram 方法,通过统一的分词方法在跨语言和工作负载中保持卓越的精度。

每种技术的优缺点

  • BPE,或字节对编码

优点包括易于使用和在减少词汇量方面的有效性。然而,由于其纯粹基于频率的方法,对于形态结构复杂的语言,它可能导致分词效果不佳。

  • Word-Path

优点包括处理复杂语言模式和减少罕见词频率的能力。缺点是它可能需要特定的词汇表大小调整,并且计算量更大。

  • Unigram 语言模型

优点是其分词的通用性和灵活性。与 BPE 相比,它可能需要更多的处理能力,并且更难实现。

  • Sentence fragment

优点包括其适应性和设计,它具有语言无关性,适合多样化语言的数据集。缺点是,在某些情况下,它可能无法像 WordPiece 或 Unigram 等更专业的算法那样生成精细的子词。

  • 基于词缀的分词

优点包括高效处理丰富的形态结构,并对语言有更深入的理解。然而,对于具有较少特定词缀的语言,它的作用可能较小,并且需要使用大量的特定语言资源。

  • 字符级分词

优点包括文本表示的灵活性以及处理不常用词的能力。优点包括序列更长以及可能的计算复杂性,这可能会影响训练时间和模型性能。

在 NLP 应用中使用子词分词

  • 神经机器翻译

神经机器翻译 (NMT) 在很大程度上依赖于子词分词,它将大型、不常见的关键字分解成更小、更常见的子词单元,从而使模型能够处理它们。通过在覆盖范围和大小之间取得平衡,使用 WordPiece 和字节对编码 (BPE) 等技术创建词汇表,这提高了翻译速度和准确性。这种技术有助于 NMT 系统处理各种语言输入,并在翻译语言之间产生更准确的翻译。

  • 文本分类

通过捕获相关的子词模式并减轻词汇表外词的影响,子词分词可以提高文本分类问题的模型性能。通过根据语义含义将文本分解成子词,模型能够更准确地理解和分类文本。这在处理具有复杂单词结构或存在特定领域术语的语言时尤其有用。

  • 语言建模

为了更好地处理语言模型中的罕见词和未见过词,使用了子词分词。SentencePiece 和 WordPiece 是 GPT 和 BERT 等系统采用的两种方法,它们创建了一个灵活的语言模型,可以更准确地进行文本序列识别和预测。其结果是更好的语言生成、理解和上下文分析。

  • 多语言数据管理

子词分词为多语言自然语言处理任务提供了一种处理多种语言文本的一致方法。特别是,SentencePiece 是为处理不同语言而设计的,无需特定于语言的预处理。通过使用共享的子词词汇表,能够处理多种语言文本的模型简化了多语言模型的构建和训练。

  • 命名实体识别 (NER)

子词分词将复杂名称和对象分解成易于识别的子词单元,这有助于命名实体识别。这使得 NER 模型能够更准确地理解和分类实体——包括人物、组织和地点——即使它们以不常见或罕见的方式出现。像 BPE 和 WordPiece 这样的技术通过提供更细粒度的标记编码,使得更精确的识别成为可能。

  • 对话理解

子词分词可用于语音识别系统,以处理转录和发音差异。通过将口语音节分割成更小的单元,模型可以更有效地处理各种口音和语音风格,从而提高口语转录和识别能力。

  • 文本生成

子词分词使模型能够处理大量词汇并生成逻辑文本序列,这有助于文本生成任务。即使在生成新词或罕见词时,模型也能通过 WordPiece 和 BPE 等技术生成更流畅、更相关的文本。这对于聊天机器人、内容生成自动化和创意写作等应用至关重要。

  • 信息提取

子词分词将单词分解成子词,用于信息检索系统,以改进查询-文档匹配。这使得即使搜索包含罕见或特定术语,也能更准确地检索相关文档。子词单元允许检索系统覆盖更广泛的术语空间,从而提高搜索结果的相关性和准确性。

子词分词的局限性和挑战

  • 过度分段问题

子词分词的一个问题是过度分段,即文本被分割成过于细粒度的子词单元。这可能导致子词数量过多,从而增加计算成本,并使模型难以形成有意义的表示。过度分段可能导致标记碎片化,这可能会影响模型性能,尤其是在更长、更连贯的子词更有用的时候。

  • 计算复杂性

子词分词技术会增加大量的计算复杂性,特别是如果它们依赖于 BPE 和 Unigram 等数学模型。由于它们需要处理大型词汇表和解析大型语料库,因此训练这些模型可能需要大量资源。此外,在推理过程中对文本进行分词可能比更简单的词级别或字符级别方法花费的时间更长,这可能会降低整体性能。

  • 处理常见和罕见词

子词分词有助于处理不在词典中的单词,但它可能无法很好地处理非常罕见或频繁出现的单词。例如,在训练数据中,如果罕见词的频率不足,它们可能不会被突出显示,而常见词可能会被分解成不那么有意义的子词。平衡常见词和罕见词的表示是一个常见问题。

  • 语义丢失

语义有时会因子词分词而丢失,尤其是在单词被分割成非常小的子词单元时。模型可能更难完全理解单词和习语的上下文或重要性,因为这种碎片化。分词的子词级别直接影响模型理解和生成文本的能力。

  • 独特的语言变体

不同语言的形态和句法特点会影响子词分词的工作效果。并非所有语言都能从 BPE 或 WordPiece 等技术中获得同等的好处,特别是那些形态结构复杂或丰富的语言。分词技术可能难以调整以适应特定于语言的差异,可能需要更多的定制。

  • 预处理需求

为了让文本准备好进行分词,子词分词技术通常需要大量预处理。标准化、小写化和标点符号删除是这些预处理的例子,这些预处理可能不总是符合某些 NLP 任务或语言的要求。确保预处理操作不会意外更改文本的含义或结构很重要。

  • 增加模型复杂性

完成 NLP 模型与子词分词可能会使它们更加复杂。为了妥善处理子词标记,模型可能需要包含更多用于子词处理和解释的层或技术。由于这种增加的复杂性,可能会导致资源需求增加和训练时间延长。

  • 处理上下文外的词

子词分词可能无法完全解决上下文外的词或短语的问题,在这些情况下,一个词的含义可能会根据上下文发生巨大变化。虽然子词分词对于 OOV 词很有用,但在特定上下文场景中理解和生成文本仍然很困难,这需要使用其他技术来捕捉上下文中的细微差别。