趋近智
虽然基于空格或标点符号的简单分词方法是基本的首要步骤,但它们在处理语言的复杂性时常常显得不足。请考虑以下难题:
为了更有效地处理文本,基于子词单元的更复杂分词策略已成为现代NLP深度学习模型中的标准做法。子词分词不把整个词作为基本单元,而是将词语拆分为更小的、有意义的片段。这种方法巧妙地平衡了字符级标记的细粒度与词级标记的语义表示。两种主要技术是字节对编码(BPE)和WordPiece。
字节对编码(BPE)最初是作为一种数据压缩算法开发的,后被应用于NLP分词,以有效管理词汇量并处理词形变化。其核心思想是迭代合并频繁出现的字符序列。
BPE工作原理:
</w>或</s>)以区分词的边界。't'后跟'h')。将这对合并成一个新的符号(例如,'th')。示例:
让我们追踪语料“hug hugger huge hugs”上的一个简化BPE过程,添加</w>来标记词尾:
h u g </w> h u g g e r </w> h u g e </w> h u g s </w>{h, u, g, </w>, e, r, s}h:4, u:4, g:5, </w>:4, e:2, r:1, s:1(h u):4, (u g):4, (g </w>):1, (g g):1, (g e):2, (e r):1, (r </w>):1, (e </w>):1, (g s):1, (s </w>):1(h u)和(u g)对最频繁(4次)。我们将u和g合并成ug。
{h, u, g, </w>, e, r, s, ug}h ug </w> h ug g e r </w> h ug e </w> h ug s </w>(h ug)出现4次。合并h和ug成hug。
{h, u, g, </w>, e, r, s, ug, hug}hug </w> hug g e r </w> hug e </w> hug s </w>(hug </w>):1, (hug g):1, (g e):2, (e r):1, (r </w>):1, (hug e):1, (e </w>):1, (hug s):1, (s </w>):1。最频繁的对是(g e)(2次)。合并g和e成ge。
{h, u, g, </w>, e, r, s, ug, hug, ge}hug </w> hug g er </w> hug ge </w> hug s </w>这个过程会继续。像“er”这样的频繁序列可能会被合并。最终,词汇表将包含常用字符和频繁的子词单元。
新文本分词: 要对一个新词(例如,“hugging”)进行分词,BPE会贪婪地应用学到的合并规则。它会首先将其拆分为字符h, u, g, g, i, n, g, </w>。然后它会按照学习的顺序应用学到的合并规则。如果先学到了ug,然后是hug,再是ing(假设),结果可能是['hug', 'g', 'ing', '</w>']。一个未知词如“snuggles”可能会被拆解为['s', 'n', 'ug', 'gle', 's', '</w>'],如果这些子词存在于词汇表中,通过使用已知部分来表示,从而有效处理词外词问题。
OpenAI的GPT系列等模型使用BPE。
WordPiece是另一种流行的子词分词算法,与BPE相似,但合并准则不同。Google的BERT等模型使用它。
WordPiece工作原理:
分词策略: 对新文本进行分词时,WordPiece尝试找到词汇表中可能的最长子词,它与当前词的开头匹配。如果一个子词单元不表示原始词的开头,它通常会加上一个特殊前缀符号,通常是##(例如,“tokenization”可能变为['token', '##ization'])。这种明确的标记有助于模型理解##ization是前一部分的延续。
对比:
| 特征 | BPE | WordPiece |
|---|---|---|
| 合并准则 | 相邻对的最高频率 | 数据似然的最大提升 |
| 实现方式 | 更简单,纯粹基于计数 | 更复杂,涉及似然计算 |
| 子词标记 | 通常使用词尾符号(</w>) |
常使用前缀标记(##)表示延续 |
| 常用模型 | GPT, RoBERTa | BERT, DistilBERT |
BPE和WordPiece都能有效减少词汇量,与词级标记相比,它们通过将词外词拆分为已知子词来处理词外词问题,并捕获词形关系(例如,“run”、“running”可能共享“run”这个子词)。
子词分词提供了一个中间方案,在提供可管理的词汇量的同时,比字符级标记保留更多语义信息,并比词级标记更能处理词外词。请注意Y轴上的对数刻度。
值得一提的是,Google开发的SentencePiece。它将输入文本视为一个原始的Unicode字符流,包括空格。这意味着它无需依赖预分词(如按空格拆分)就能学习分词,并能更容易地处理多种语言。SentencePiece可配置为使用BPE或unigram语言建模方法来构建其子词词汇表。一个重要优势是其完全可逆的分词;原始文本可以从标记中完美重建,因为空格被视为子词单元的一部分(通常由一个元符号如 表示)。
BPE、WordPiece或SentencePiece之间的选择通常取决于您打算使用的特定预训练模型,因为模型通常会与其对应的已训练分词器一起发布。Hugging Face的transformers等库抽象化了许多实现细节,使您能够轻松加载和使用给定模型的相应分词器(例如,BertTokenizer使用WordPiece,GPT2Tokenizer使用BPE)。
训练这些分词器需要大量代表您所从事领域的数据。然而,对于许多应用来说,使用与预训练语言模型关联的预训练分词器是最实际的方法。
理解这些高级分词方法很重要,因为文本的拆分方式从根本上影响着下游模型如何解释和处理语言数据。它们标志着一个重要进展,使现代NLP模型能够更有效地处理多样的词汇和词形。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造