什么是子词分词

AI 的“积木搭建法”:深入浅出子词分词技术

想象一下,我们想教一个非常聪明的机器人读懂人类的语言,比如中文或英文。我们人类一眼就能看出“不可思议”是一个词,或者“unbelievable”是由“un-”、“believe”、“-able”构成的。但对于机器人来说,这可不是件容易的事。它需要一种方法,把我们日常交流的文字,分解成它能理解、能处理的最小单位。这就是自然语言处理(NLP)领域中一个非常基础且关键的概念——分词(Tokenization)

而我们今天要讲的“子词分词”,就是一种特别聪明的文字分解策略,它像一套高效的“乐高积木”,让AI能够更灵活、更智能地理解语言。

词粒度分词的困境:词汇量爆炸与“文盲”机器人

最初,人们想到的是“词粒度分词”,也就是把一句话切分成一个个完整的词。例如,“我爱北京天安门”会被切分成“我”、“爱”、“北京”、“天安门”。这听起来很直观,但在实际应用中很快遇到了两个大麻烦:

  1. 词汇量爆炸: 就像一本巨大的字典,如果我们要把人类所有可能用到的词(包括各种时态、单复数、前缀后缀等形态变化)都收录进去,这个“字典”会变得极其庞大。对于计算机来说,记住并高效查找这数百万甚至上千万个词,是沉重的负担。
  2. “文盲”机器人(OOV 问题): 机器人没见过的词,它就不认识了。比如,你教它认识了“苹果”,但突然遇到“苹果手机”,如果“苹果手机”不在它的字典里,它就把它当成了一个“未知词”(UNK),直接“跳过”或标记为“不认识”,这就会导致信息丢失和理解偏差。想象一下,你用普通话跟外国人交流,如果他只认识单个的字,不理解由字组合成的词语,交流就会非常困难。

字粒度分词的无奈:信息量稀释与“鹦鹉学舌”

既然词太多了不好办,那干脆把文字切分成单个的字或字母怎么样?比如英文的“unbelievable”变成“u”、“n”、“b”、“e”、“l”、“i”、“e”、“v”、“a”、“b”、“l”、“e”。这确实解决了词汇量爆炸和“文盲”问题(因为只要认识几十个字母或几千个汉字,就能表达所有内容)。

但新的问题出现了:信息量稀释。单个的字母或汉字携带的语义信息太少了。比如“un”和“able”,单独拎出来意义不大,但组合起来就有“否定”和“能力”这样的额外含义。如果把所有文字都拆成最细小的颗粒,计算机就需要处理更长的序列才能捕捉到完整的意义,这就像把一本书拆成一页一页的碎片,再让AI从碎片中理解整本书的意义,效率会非常低下。

子词分词:巧妙的“积木搭建”智慧

子词分词,就是为了解决上述矛盾而诞生的一种“两全其美”的策略。它的核心思想是:频繁出现的完整词不需要拆分,不常出现的词或新词可以分解成有意义的子部分

我们可以用“乐高积木”来做个形象的比喻:

  • 词粒度分词 就像你有很多预先做好的、固定形状的大型乐高模型(比如一整艘宇宙飞船),你直接用它们来搭建。优点是直接,但缺点是模型种类太多,而且遇到没见过的新模型就束手无策。
  • 字粒度分词 就像你只有最基础的最小颗粒(1x1 的乐高砖),虽然理论上能搭出所有东西,但效率太低,拼一个“宇宙飞船”需要的天文数字般的砖块和时间,且模型内部结构(语义)在搭建过程中变得模糊。
  • 子词分词 则像一套聪明设计的乐高套装。它包含了一些常用的、有意义的“组件”(比如一个轮子、一个驾驶舱、一个机翼,或者“un-”、“-ing”、“-able”这样的词缀),也保留了最基础的小颗粒(单个字母或汉字)。

当AI遇到一个新词“unfriendable”(不可交友的),它可能没有见过这个完整的词。但是,通过子词分词,它可以将其分解成它已知的“un”、“friend”、“able”这些“乐高组件”。就算“unfriendable”本身不在字典里,但AI通过这几个它认识的“积木”就知道这个词的大致意思了。

子词分词的优势:

  1. 处理未知词(OOV)能力强: 即使是模型从未见过的生僻词、新词或拼写错误,也能通过将其拆解为已知的子词来理解,大大提升了模型的泛化能力。
  2. 有效控制词汇量: 避免了词粒度分词中词汇量过大的问题。AI只需要维护一个相对小而精的子词“组件库”,就能组合出绝大多数的词汇。
  3. 更好地捕捉语义信息: 相较于字粒度,子词通常带有更丰富的语义信息,比如前缀(un-、re-)、后缀(-ing、-able)等,这有助于AI更好地理解词语的构成和含义。
  4. 跨语言通用性: 对于像中文、日文、韩文这样词与词之间没有空格分隔的语言,以及德语等通过词缀构造复杂长词的语言,子词分词尤为有效。它不依赖空格,能灵活地从文本中学习有意义的片段。

常见的子词分词算法(AI的“乐高搭建说明书”)

为了找到最有效的“乐高组件”,AI领域发展出了几种主流的子词分词算法,最常见包括:

  • 字节对编码 (BPE - Byte Pair Encoding): 这是一种相对简单直观的方法。它首先将文本拆分成字符,然后反复合并出现频率最高的相邻字符对,直到达到预设的词汇量或不再有高频组合。比如,“low”、“lowest”中,“low”和“est”可能被合并。GPT、BERT等许多大型语言模型都广泛使用了BPE及其变种。
  • WordPiece: 作为 BPE 的一种变体,WordPiece 更加关注合并后能否使语言模型的概率最大化,而不是简单地合并频率最高的对。它被 Google 的 BERT、DistilBERT 等模型采用。
  • Unigram Language Model (ULM): 与 BPE 和 WordPiece 的“合并”策略不同,ULM 采用“删除”策略。它从一个非常大的初始词汇表开始,通过计算每个子词对语言模型损失的贡献,逐步删除那些不重要的子词,直到达到目标词汇量。
  • SentencePiece: 由 Google 开发的开源工具,它统一了 BPE 和 ULM 算法,并且不强制要求输入文本预先分词,尤其擅长处理没有空格的语言(如中文、日文)。

最新的发展趋向

当前,子词分词技术依然是大型语言模型(LLMs)如 ChatGPT 等理解和生成人类语言的核心组成部分。随着AI模型能力的不断提升,研究人员也在探索更加先进和高效的分词方法,以进一步优化模型的性能和效率。在某些前沿研究中,甚至有探索直接使用像素或字节作为输入,试图在更根本的层面替代传统分词器,就像 DeepSeek-OCR 这样的尝试,旨在从根本上改变文本输入方式,但也并非直接取代子词分词本身,而是提供了一种处理文本内容的新范式。

总而言之,子词分词就像是为AI量身定制的一套精巧的“文字积木”,它在词汇量和语义信息之间找到了一个完美的平衡点,让AI能够更高效、更灵活地理解我们丰富多彩的人类语言,从而为我们如今享受的各种智能应用打下了坚实的基础。