分词与词表

理解 Token、词表与编号,比较按词、按字符和子词切分在词表大小、序列长度与未登录词处理上的取舍。

知识课 · 约 15 分钟 · 更新于 2026-09-20

处理文本时,要先按一套确定的规则,把文字切成一串单元。这个过程称为 分词(tokenization) ,每个单元称为 Token 。Token 可以是一个词、一个字符,也可以是词的一部分。

例如,playing 可以作为一个 Token,也可以拆成 play 和 ing,或者继续拆成单个字母。不同切法会改变一段文本的 Token 数量,也会改变需要收录哪些 Token。

词表与编号

词表(vocabulary) 收录分词器可以使用的全部 Token,并为每个 Token 分配一个唯一的整数编号,称为 Token ID 。分词器(tokenizer)按照切分规则和词表,把输入文本转换成 Token ID 序列。

实际词表通常由一批文本建立,这批文本称为 语料 。构建词表时,一般先确定切分方式,再从语料中统计候选 Token,按规则收录并编号。词表还可以包含用于特殊用途的 Token。一张词表通常服务于许多文本,其中的大部分条目不会出现在某一句话里。

把文本转换为 Token ID 序列称为 编码(encoding) 。反过来,根据 ID 查回 Token,再按规则拼接成文本,称为 解码(decoding) 。图中的整数序列是 We learn daily. 的 Token ID 序列。上例保留了大小写、词、空格和句点,因此可以还原原句。若切分时丢弃空格,或把所有大写字母改成小写,单靠 ID 就无法恢复丢失的细节。

Token ID 只表示词表中的编号。编号的大小不表示词义、重要程度或相似程度。同一个 Token 在另一张词表里可以有不同的 ID;编码和解码必须使用相互对应的词表与规则。

按词分词

按词分词 把完整的词作为基本单位。对于英文,可以用空格和标点帮助确定词的边界。中文句子通常没有词间空格,例如“我喜欢自然语言处理”可以切成“我”“喜欢”“自然语言”“处理”,需要额外的规则来确定这些边界。

下面把 play playing replay replaying 按完整的词切分。示例词表只收录表示这段文本所需的 Token,并把空格作为独立的一项。

按词切分时,一个已收录的词通常只需要一个 Token,序列较短。但 play、playing、replay、replaying 是四种不同的完整形式,词表需要为它们分别保留条目。文本涉及的领域和语言越多,需要考虑的人名、专业词和词形变化就越多。

如果词表只收录了 play 和 playing,输入 replaying 时就找不到对应的编号。这类词称为 未登录词(out-of-vocabulary,OOV) 。一种常见处理方式是预先在词表中加入表示“未知”的特殊 Token,例如 <unk>,遇到未登录词时使用它的 ID。

这样能得到合法的 ID 序列,但会丢失原词。replay 和 replaying 如果都映射为 <unk>,解码时就无法判断原来出现的是哪一个。扩大词表可以收录更多词,却很难提前列全未来输入中的新词。

按字符分词

新词通常由已有的字符组成。 按字符分词 把单个字符作为 Token,例如把 play 切成 p、l、a、y。在这些简单文本中,字符可以直观地理解为一个英文字母、一个汉字、一个空格或一个标点。

仍用同一段文本,按字符拆分,并为每种不同的字符分配一个编号。

只要 r、e、p、l、a、y、i、n、g 都在字符词表中,即使词表没有完整的 replaying,也能逐字符表示它。当语料包含大量不同的词时,许多词会重复使用同一批字符,字符词表通常比按词建立的词表小,也更容易表示新词。

代价是序列变长。replaying 按完整的词表示只需要 1 个 Token,按字符表示需要 9 个。模型要处理更多位置,通常会增加计算与存储开销。字符切分也没有自动解决全部未知输入问题,固定字符词表仍可能缺少某个生僻字或其他符号。

子词分词

子词分词(subword tokenization) 允许词表同时收录较短的片段和完整的词。常见的片段可以在多个词中重复使用,较少见的完整词则拆成已有片段,从而在词表大小与序列长度之间取得折中。

例如,词表可以收录 re、play 和 ing。play 直接使用一个 Token,replay 可以切成 re 和 play,playing 切成 play 和 ing,replaying 则切成 re、play、ing。几个片段就能表示多种词形,不必为每种词形单独增加一个完整词条目。

对同一段文本使用这些片段,并保留空格,就能得到下面的子词序列和示例词表。

三个示例分别统计了序列长度与词表大小。这里仅有四种完整词形,按词词表甚至比字符词表更小。这些词表只覆盖示例文本,不能据此判断三种方法在大规模语料上的词表大小关系。

示例中的 re 和 ing 恰好具有常见的语言含义,但子词不要求对应词根或词缀。实际分词算法可以依据语料中的出现情况选择片段,得到的片段也可能没有独立词义。子词能否表示一个新词,仍取决于组成它所需的片段或更小单位是否在词表中。

子词词表里应该保留哪些片段、同一段文字有多种切法时如何选择,都需要具体算法确定。《BPE 分词器》会介绍一种从语料中逐步建立词表与切分规则的方法。