自然语言处理中的分词:新手入门全指南

·

分词、文本处理、自然语言处理、标记化、机器学习、大语言模型、子词分词、字节对编码——如果你刚刚踏入 AI 领域,这些高频关键词可能会让你头大。别担心,本文会用通俗易懂的方式拆解“分词”这个听起来枯燥、却决定大模型成败的关键环节。

什么是 NLP 中的分词?

自然语言处理 中,文本朗读给人类听毫无障碍,却令模型头疼:它们只能处理数字。因此,我们需要一把 翻译器,把句子拆成可通过数字表示的最小单位,这些单位就叫 token(标记)。整套流程即 分词 (tokenization)

例如,句子「AI 改变世界」经过模型专属的分词器后,被映射为:

[ 9942, 2675, 4589, 987 ]

模型处理完数字,再反向翻译回文字,你就收到了熟悉的回答。可以说,没有分词,就没有现代 大语言模型 (LLM)

👉 想亲手实验主流分词器?点此立即体验 token 拆分神奇过程


分词的 4 种主流类型

粒度分词方式优缺点速览
词级Word直观易读;词汇爆炸,OOV(未登录词)风险高
子词级Subword平衡容量与性能;可拆解罕见词,业界默认方案
字符级Character体积小、跨语言强;序列太长,语义稀疏
句子级Sentence信息密集;句式无限,训练几乎不可行

(在无表格要求情况下,上述信息仍会呈现为纯文本描述,详见后文。)

单词级分词

将空格与标点作为天然分隔符:

文本: Grammarly loves grammar.
Token 序列: [Grammarly, loves, grammar, .]

缺陷很明显:遇到专有名「Grammarly」就得新建 token,字会越来越大;同义词复数、时态也会滋生长尾。

子词级分词(BPE/WordPiece)

核心思路是「常拼在一起的字节就合并成一个 token」,用 字节对编码 (Byte-Pair Encoding, BPE) 训练即可。
示例(GPT-4o):

"Grammarly" -> "Gr" + "amm" + "arly"

字符级分词

把每个 Unicode 字符拆开:

"cat" -> ["c", "a", "t"]

词汇极小,但序列过长,导致计算量暴增。仅在低资源场景或拼写纠偏任务偶尔采用。

句子级分词

直接把整句当 token:

"AI 改变世界。" -> [AI 改变世界。]

仅适合句子情感极性分类等特殊任务,通用性差得惊人。


如何训练一个子词分词器?

  1. 搜集海量文本语料
  2. 初始化:所有字符作为 token,构建初步字典
  3. 按出现频次,合并最相邻的 2 个 token,更新字典
  4. 重复 3,直至达到设定的词汇上限或合并收益趋于零

小例子:
语料只有 abc abcd,迭代合并后最终得到 token:

["a","b","c"," ","d","ab","abc"]

冷启动时自行训练会消耗昂贵算力,因此多数团队直接复用第三方已训练的分词器。


典型应用场景


分词的利弊总览

好处

挑战

  1. 有限长度:
    Transformer 注意力的复杂度随 token 数 平方 增长,因此对话上下文被严格限制在几千到几十万之间。
  2. 推理偏差:
    问「strawberry 中有几个 r」,由于被拆成 ["str", "aw", "berry"],模型容易答错为 2 而非 3。
  3. 不平衡数据:
    训练语料若偏向某一种语言或领域,分词器将出现“偏科”,影响下游任务公平性。

FAQ:5 个分词高频疑问

Q1. 为什么我的模型有时会把同一个单词拆成不同数量的 token?
A:子词分词由频率驱动,不同版本的分词器或新增语料都可能改变合并规则。

Q2. 中文没有空格,怎么分词?
A:可用 字符级基于 BPE 的子词级;后者对繁体、粤语、古文都更友好。

Q3. 分词器体积会不会影响线上部署?
A:本身仅几十 MB,瓶颈更多来自参数规模千亿级的大模型。

Q4. 想自定义领域词,BPE 能增量热更新吗?
A:主流库支持 add_tokens,但需重新嵌入矩阵并重训或微调模型。

Q5. 低资源语言能直接套用英文分词器吗?
A:易出现 OOV,最好自建小语料 BPE 或用 SentencePiece 的 unigram 算法。


结尾思考:分词的未来趋势

多模态融合、长上下文、低资源语言三大方向,都要求分词器继续进化。字节跳动、Meta、OpenAI 相继推出 混合粒度 tokenizers,以同时兼容文本、代码、乐谱、DNA 序列。

👉 探索下一代多模态 token 经济的更多玩法

至此,你已拥有完备的分词视角。下次面对“token”这个词,你不再陌生,而是可以自信地侃侃而谈它在 自然语言处理、机器学习、大语言模型 中的关键作用。