子词分词是自然语言处理中的一种技术,它将原始文本转换为一系列词元,其中每个词元可以是整个单词、单词的一部分,甚至是一个单独的字符。它介于词级分词(将每个单词视为不可分割的单元)和字符级分词(将文本作为单个字符处理)之间。通过使用子词单元,分词器可以高效地处理大型词汇表,表示罕见或未见过的单词,并保留有意义的形态信息。这种方法对于现代大型语言模型和其他处理文本的神经网络架构至关重要。
其核心思想是将单词分解为在训练语料库中频繁出现的小片段。例如,单词“unhappiness”可能被拆分为“un”、“happi”和“ness”,或者如果“unhappiness”足够常见,也可以保留为单个词元。这种灵活性允许模型通过组合已知的子词单元来理解新单词,同时保持词汇表大小可控。子词分词自2010年代中期以来已被广泛采用,并且是基于Transformer (architecture)的模型的关键组成部分。
历史与发展
子词分词的概念源于处理机器翻译和语言建模中开放词汇问题的需求。1990年代和2000年代的早期方法使用形态分析,但这些方法通常依赖于特定语言且计算成本高昂。一个重大突破是字节对编码(BPE)在文本压缩中的引入,由Rico Sennrich及其同事在2016年将其改编用于分词。他们的论文《使用子词单元进行罕见词的神经机器翻译》表明,BPE可以有效地处理Sequence-to-Sequence (Seq2Seq)模型中的罕见词。
大约在同一时间,谷歌开发了WordPiece模型,最初用于语音识别,后来因BERT而广受欢迎。另一种变体Unigram语言模型由工藤拓于2018年提出,并用于ALBERT和T5等模型。这些方法在选择子词单元的方式上有所不同,但都旨在找到文本的最佳分割。
方法与算法
字节对编码(BPE)
BPE是一种数据压缩算法,它迭代地将最频繁出现的连续符号对(最初为字符)合并为一个新符号。对于分词,该过程从将语料库文本拆分为字符开始,然后反复统计相邻对并合并最频繁的对,直到达到目标词汇表大小。生成的词汇表包含字符、子词和完整单词。BPE用于许多模型,包括OpenAI的GPT系列和Meta的LLaMA。
WordPiece
WordPiece与BPE类似,但使用基于似然性的合并标准。它从单个字符开始构建词汇表,然后添加最大化训练数据似然性的新词元。这种方法往往会产生更具语言学意义的子词。WordPiece用于BERT、ELECTRA以及谷歌的其他模型。
Unigram语言模型
Unigram分词将每个子词视为独立单元,并使用概率模型为每个单词选择最佳分割。它从大量可能的子词词汇表开始,然后根据每个词元对整体似然性的贡献进行剪枝。这种方法允许多种分割,并用于SentencePiece实现中。
在现代语言模型中的作用
子词分词几乎是所有当代大型语言模型的关键预处理步骤。像GPT-4、Claude和Gemini这样的模型依赖于分词器,在将文本输入Transformer (architecture)架构之前将其转换为子词词元。分词器的选择影响模型性能、计算效率以及处理多种语言的能力。
例如,具有较大词汇表的分词器可以将更多单词表示为单个词元,从而减少序列长度和计算成本,但也可能增加模型的内存占用。相反,较小的词汇表会迫使更多单词被拆分,这可能导致更长的序列和潜在的意义损失。分词器通常在大规模语料库上训练,并在模型训练期间保持固定。
子词分词还支持跨语言迁移。通过跨语言共享子词单元,模型可以更好地处理代码切换和低资源语言中的罕见词。这对于mBERT和XLM-RoBERTa等多语言模型尤为重要。
挑战与未来方向
尽管子词分词被广泛使用,但它也有局限性。一个问题是它可能产生与形态边界不一致的任意分割,使模型更难学习单词结构。另一个挑战是处理词汇表外单词,尤其是在医学或法律等专业领域,新术语频繁出现。一些研究人员提出了字符级或字节级分词来避免这些问题,但这些方法通常需要更长的序列和更多的计算。
最近的发展包括自适应分词(可以在训练期间调整分词器)以及端到端模型(无需固定分词器即可学习分割文本)。然而,截至2025年,子词分词仍然是大多数生产系统中的标准,正在进行的研究旨在提高其效率和语言学质量。