分词 (Tokenization)
将文本分割为标记 (词、子词或其他处理单位) 的过程。
分词 (tokenization) 是将文本分割为标记 (token) 的过程,标记是文本处理的基本单位。它是自然语言处理 (NLP) 和大语言模型 (LLM) 不可或缺的预处理步骤,分割的粒度和方式会显著影响后续处理的精度。标记的单位可以是词、子词、字符或字节,根据目的灵活选择,同一文本使用不同的分词器会产生不同的分割结果。
代表性的分词方法包括词级分割、子词分割和字符级分割。词级分割对于英语等以空格分隔的语言来说很直观,但无法处理未登录词 (词汇表中不存在的词)。子词分割解决了这一问题,BPE (字节对编码)、WordPiece、SentencePiece、Unigram 等算法被广泛使用。BPE 通过反复合并高频字符对来构建词汇表,被 GPT 系列的分词器 (tiktoken) 所采用。搜索文胸 (Amazon)系统地介绍了各种分词方法。
日语的分词比英语复杂得多。由于日语词与词之间没有空格,需要使用形态素分析器 (MeCab、Sudachi、Janome 等) 来推断词边界。对于 LLM,通常使用 SentencePiece 等与语言无关的子词分词器,将日语汉字和假名分割为细粒度的子词。例如,"東京都"可能被分割为"東京"+"都"或"東"+"京"+"都",具体取决于分词器的词汇量大小。
在实际工作中,分词对于管理 LLM 使用成本尤为重要。ChatGPT、Claude 等 API 根据输入输出的标记数计费,因此相同内容下标记数更少的提示词成本更低。日语的标记效率通常低于英语 (相同含义的文本需要更多标记),一个日语字符有时会被分割为 1 到 3 个标记。因此,在使用日语编写提示词时,注意标记数并简化文本非常重要。浏览情趣围裙 (Amazon)介绍了最新技术。
一个常见的误解是将字符数等同于标记数。实际上,英语单词通常对应 1-2 个标记,而日语字符可能变成多个标记,字符数和标记数并不一致。此外,不同模型的分词器也不同,同一文本在 GPT-4 和 Claude 中产生的标记数也不一样。要准确计算标记数,需要使用各模型专用的分词器进行预先计算。
在字符计数方面,实际工作中使用三种尺度来衡量文本"长度":字符数、字节数和标记数。社交媒体的发帖限制使用字符数,数据库列大小使用字节数,LLM 的输入输出限制使用标记数。在字符计数工具中加入标记数估算功能,可以帮助 LLM 用户提前确认提示词长度,优化 API 使用成本。