大模型词的分割是怎么定的?比如之前文章中的例子中,为什么把“人工智能”放一起,而不是分割为两个词“人工” 和“智能”?

这个问题,它直接命中了自然语言处理中的一个关键挑战:分词。为什么是“人工智能”而不是“人工”和“智能”,这背后并没有一个唯一正确的“上帝法则”,而是不同方法和权衡下的结果。

简单来说,分词策略的选择是在 “语义完整性”“灵活性” 之间做权衡。

让我们来拆解主流的几种分词方法,您就能明白其中的道理了。


主流的分词方法

1. 词级分词
  • 做法:直接将文本切分成独立的词语。这正是之前例子中“我喜欢学习人工智能”被切分成 [“我”, “喜欢”, “学习”, “人工智能”] 的方式。
  • 优点
    • 语义明确:每个Token本身就是一个具有完整含义的词语,易于理解。
    • 对于已有固定含义的复合词(如“人工智能”、“清华大学”)处理得很好。
  • 缺点
    • 词汇表爆炸:需要维护一个非常庞大的词汇表,因为每一种语言都有数十万甚至数百万个词。
    • 无法处理未知词:如果遇到词汇表里没有的词(如新词、专业术语、拼写错误),模型就只能用一个统一的 [UNK] 来代替,导致信息丢失。例如,如果“人工智能”不在词汇表里,它就会被替换成 [UNK],模型完全无法理解。
2. 字符级分词
  • 做法:将文本切分成单个的字符。
    • 英文: "ai" -> ["a", "i"]
    • 中文: “人工智能” -> [“人”, “工”, “智”, “能”]
  • 优点
    • 词汇表极小:英文只有26个字母加符号,中文几千个常用字。
    • 几乎不存在未知词:任何新词都能用字符拼出来。
  • 缺点
    • 语义模糊:单个字符本身携带的语义信息很少。模型需要从零开始学习“人”、“工”、“智”、“能”如何组合成“人工智能”,这大大增加了学习难度和计算成本。
    • 序列过长:处理一个句子需要处理非常长的序列,效率低。
3. 子词分词 - 现代大模型的黄金标准

子词分词法完美地平衡了词级和字符级的优点,它成为了当今所有主流大模型(如BERT、GPT、Llama)的选择。其核心思想是:将频繁出现的、语义完整的词作为一个整体,将不常见的词拆分成有意义的子单元。

a) 如何确定怎么分?
子词算法(如BPE、WordPiece、Unigram)会在一个巨大的语料库上进行统计分析,自动学习出哪些字符组合经常出现,从而形成“子词”单元。

b) 具体如何工作?
我们以 Byte-Pair Encoding (BPE) 算法为例,它从一个字符级的词汇表开始,通过不断合并出现频率最高的相邻字符对来生成新的子词。

假设我们的训练语料中有以下词和频率:
("low", 5), ("lower", 2), ("newest", 6), ("widest", 3)

  1. 初始:词汇表是所有字符:l, o, w, e, r, n, s, t, i, d, ...
  2. 第一轮合并:统计发现 "e""s" 相邻出现了 6+3=9 次(在"newest"和"widest"中),频率最高。于是合并 "es" 加入词汇表。
  3. 第二轮合并:现在 "es""t" 相邻出现了 6+3=9 次,合并成 "est" 加入词汇表。
  4. 继续:算法会继续合并,比如可能出现 "lo", "low", "new", "wi", "ide", "est" 等。

最终,模型学到的词汇表里可能同时包含:

  • 完整的常用词: "the", "and", "人", "喜欢"
  • 常见的词根/子词: "est", "ing", "##ly", "人工", "智能"
  • 单个字符: "a", "b", "我", "的"

c. 实际应用中的分词结果:

对于同一个句子,不同的子词模型可能会给出不同的结果:

  • 可能的分法一(更倾向于合并):
    ["我", "喜欢", "学习", "人工智能"]

    • 因为“人工智能”在训练语料中出现得非常频繁,算法将其作为一个整体保留了下来。
  • 可能的分法二(更倾向于拆分):
    ["我", "喜欢", "学习", "人工", "智能"]

    • 因为“人工”和“智能”本身也是高频词,并且可以组合成其他词(如“人工成本”、“智能家居”),所以模型也可能选择将其拆分。
  • 对于生僻词,如“卷积神经网络”:
    ["卷", "积", "神经", "网络"]["卷积", "神经", "网络"]

    • 如果这个词在训练数据中不常见,它几乎肯定会被拆分成更常见的子词。

总结与类比

为了更直观地理解不同分词方法的逻辑,我们可以参考以下表格:

分词方法 核心逻辑 好比烹饪时… 优点 缺点
词级分词 按现成的菜谱,使用预制好的酱料包。 酱料包(词) 语义完整,方便快捷。 酱料包种类有限,遇到新菜式就没办法。
字符级分词 从最基本的油盐酱醋开始,自己调配一切。 基础调料(字符) 极其灵活,无所不能调配。 步骤繁琐,对厨师要求高,效率低下。
子词分词 既有预制的高汤、卤汁,也有基础的葱姜蒜。 高汤 & 调料(子词) 灵活性效率的完美平衡。 需要先花时间“预制”这些半成品(训练分词器)。

所以,

“人工智能”到底是被放在一起还是分开,取决于训练该模型分词器时所用的大量文本数据中,“人工智能”这个词出现的频率,以及“人工”和“智能”这两个子单元出现的频率。

  • 如果“人工智能”作为一个整体出现的频率非常高,分词器就倾向于将其视为一个不可分割的Token。
  • 反之,如果“人工”和“智能”经常独立出现或与其他字组合,那么分词器就更可能将其拆开。

这种子词分词的策略,使得模型既能理解完整的常见概念,又具备了“猜”出陌生长词含义的强大能力,这正是其成功的关键之一。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐