跳到主内容
快讯直播
AI智模界
AI 词典

SentencePiece:中英日共用一张词表的分词器

一句话定义:SentencePiece 是 Google 开源的分词工具(tokenizer),它把原始文本直接当作一串 Unicode 字符来切分,不做“先按空格或词典切词”的预处理,输出的是子词(subword)。

它到底做了什么

传统分词器的流程是“两步走”:先按规则把句子切成单词——英文看空格,中文查词典或用统计模型切词——再把切出来的单词拆成更小的子词。问题就出在第一步:它绑定了语言。中文、日文没有空格,泰文连词边界都难找,每换一种语言就得换一套规则。

SentencePiece 把这一步直接砍掉。它把整句话连空格一起当成字符流,空格不是分隔符,而是一个普通符号,统一写成 ▁。然后在这个字符流上跑子词算法(BPE 或 unigram 语言模型):统计哪些相邻字符总是黏在一起,就把它们合并成一个 token,反复迭代,直到词表大小达到设定值。

打个比方:传统做法像先按词典把文章拆成一个个词,再决定哪些词该拼在一起;SentencePiece 像不看词典,只看“哪几块积木总是被同时拿起来”,就把它们预先粘成一块大积木。空格也是一块积木(▁),所以解码时能精确还原原句的空格位置。

为什么中英日能共用一张词表

因为整个过程不依赖“词”这个概念。训练语料混着中英日,算法一视同仁地统计字符共现:

  • 中文里“人工智能”四个字高频连用,就合成一个 token;
  • 日文里“ありがとう”连用,也会合成一个 token;
  • 英文里“▁the”常出现,同样合成一个 token。

同一套统计、同一张词表,就能同时装下多种文字。遇到没见过的字也不会“查无此词”——最差的情况是拆成单字符,所以基本没有未登录词(OOV)问题。

和相邻概念的区别

对比项传统分词器(按空格/按词典)SentencePiece
是否需要预分词需要,每种语言一套规则不需要,直接吃原始字符
空格当作分隔符丢掉当作普通符号,记作 ▁
词表通常一种语言一张多语言可共用一张
未知词可能变成 [UNK]回退到字符,基本不会

字节级 BPE(byte-level BPE)同样不依赖语言规则,但它以字节为单位,词表里全是字节对;SentencePiece 更多以字符和子词为单位,并且显式保留空格信息。两者都是为了让模型摆脱“单词”这个包袱。

对从业者和普通人的意义

对做多语言模型的人来说,一份词表跑遍中日韩英,省掉了为每种语言维护分词器的麻烦;▁ 的存在让生成任务能准确还原空格,输出格式更可控;没有 OOV,也让低资源语言的处理更省心。具体某个模型用哪种分词器、词表多大,以该模型的官方页面为准。

对普通人来说,这解释了一个常见现象:同一段意思,中文和英文切出来的 token 数量比例,常常和字数比例对不上。因为切法不同,计费和上下文长度也不一样。知道这件事,写提示词、估算用量时会更有数。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。