解释词元,分词和中英文分词法
定义:它是什么?
LLM 本质是 “数值计算模型”,无法直接理解文字符号,必须先将句子拆分为可被编码的 “基本语义单元”,再转换为数值序列才能处理。我们现介绍下面几个概念:
词元(Token) 是大语言模型处理文本时所使用的最基本的、不可再分的计算单元。它是一个纯粹的计算构件 (Computational Construct),而非语言学意义上的单位(如音素、词素或单词)。
分词(Tokenization) 则是指将一段原始文本(Raw Text)按照特定算法,切分成一串词元序列(Sequence of Tokens)的过程。这个过程是所有文本输入模型进行下一步处理前的强制性预处理步骤。
分词器(Tokenizer) 是一个处在大语言模型体系最前端的预处理模块。其核心职能是执行一个翻译过程:将人类可读的原始文本字符串(String),转换为模型能够进行数学运算的、由整数构成的序列(Sequence of Integers)。
这个过程包含两个核心步骤:
分词(Tokenization):依据特定的算法规则,将输入的文本流切分成一系列被称为 “词元”(Token) 的基本单位。这些词元不一定等同于我们语言学意义上的“词”,它可能是一个完整的词(如 “language”)、一个词缀(如 “-ing”)、一个汉字(如 “语”),或是一组常见的汉字组合(如 “语言”)。
编码(Encoding):为每一个切分出的词元,从一个预先构建好的巨大“词汇表”(Vocabulary)中,查找其对应的唯一整数ID。这个词汇表可以被理解为模型专属的“新华字典”,它规定了模型所能“认识”的全部基本单位及其索引编号。
通过这样的过程,我们可以将一个完整的句子转化成一个数值序列。
机理阐释:它如何工作?
想象一位档案管理员整理一批未经分类的历史文献。他的工作不是直接将整本书放进档案柜,而是:
第一步(分词): 按照某种编目规则(例如,按篇章、段落、甚至关键概念),将文献内容拆解成一个个可管理的“知识卡片”。这就是分词过程。
第二步(编码): 为每一张“知识卡片”分配一个独一无二的档案编号。这个编号系统就是词汇表。
最终,一本厚重的历史文献就被转化成了一串有序的档案编号。当需要检索或分析时,计算机处理的是这些编号,而非原始的、非结构化的文字。大模型的“阅读”过程与此高度类似:它接收的是一串代表着词元的数字ID序列,而非我们输入的句子本身。
功能意义:为什么要进行分词?
此步骤看似简单,但其必要性与意义是根本性的:
人类语言能够组合出的句子是近乎无限的,任何模型都无法直接处理这种无限性。通过将文本切分为一个有限的词元集合(一个典型模型的词汇表大小在几万到几十万之间),模型得以在一个封闭且可控的符号系统内进行计算。这为后续的概率统计分析提供了数学基础。
神经网络的运算对象是数字构成的张量(Tensors),而非文本。分词和编码将文本转化为模型可以处理的数学对象。否则,模型将无法开始任何学习或推理过程。
分词算法的设计,其终极目标是找到“有意义”的最小切分单位。一个理想的分词器应该能将 "unthinkable" 切分为 "un-" 和 "thinkable",从而让模型有机会学习到 "un-" 这个前缀所携带的否定语义。因此,分词的方式,直接定义了模型理解语言的“原子粒度”。
常见分词算法:从粗糙到精妙的演进
分词算法的选择,体现了在“词汇表大小”、“计算效率”和“语义保留度”三者之间的权衡。
基于词的分词 (Word-based Tokenization)
- 机理:最符合直觉的方式。在英文中以空格和标点为分隔符,直接将句子切分为单词。
- 局限:
- 词汇爆炸:需要为每一种词形(如 “eat”, “eats”, “eating”)都创建一个词条,导致词汇表规模极其庞大。
- 未登录词问题 (Out-of-Vocabulary, OOV):如果遇到训练数据中没出现过的词(如新造词、拼写错误、专业术语),模型将无法处理,这严重影响了模型的泛化能力。
基于字符的分词 (Character-based Tokenization)
- 机理:将文本切分成最基本的字符单元。例如,英文就是26个字母+数字+标点,中文就是数千个常用汉字。
- 局限:
- 优点:词汇表非常小,彻底解决了OOV问题。
- 缺点:完全破坏了词汇的语义结构。模型需要耗费巨大的计算资源,仅仅为了从字符序列中重新学习什么是“单词”,这在效率上是不可接受的,且效果不佳。序列会变得过长,加剧了长程依赖问题。
子词分词 (Subword Tokenization) - 当前主流
这是一种介于上述两者之间的精妙平衡方案,其核心思想是数据压缩。常见的高频词作为一个整体保留,而稀有词则被拆解成更小的、有意义的子词片段。主流大模型(如GPT系列、Llama)均采用此类算法,其中最具代表性的是 BPE (Byte Pair Encoding)。
BPE是一种源于数据压缩算法的分词策略,它通过迭代式地合并最高频的字节对(或字符对)来构建词汇表。
BPE算法主要分三步:
- 初始化:词汇表最初只包含所有基本字符。
- 迭代合并:在整个语料库中,找出出现频率最高的相邻词元对,例如 "t" 和 "h",将它们合并成一个新的词元 "th",并加入词汇表。
- 循环:不断重复第二步。下一轮可能会发现 "the" 和 "n" 是高频组合,于是合并成 "then"。这个过程持续进行,直到词汇表达到预设的规模(例如5万)。
这种方法解决了OOV问题:任何未见过的词,最终都可以被拆解成已知的子词或单个字符的组合,模型总能处理它。
同时兼顾效率与语义:常见词(如 "language")因为频率高,会被完整保留为一个词元,处理效率高。稀有词(如 "epistemology")会被拆分为 "epis", "tem", "ology" 等子词,模型有机会学习到词根和词缀的语义,具有更好的泛化性。
中文分词的独特性与现代方案
相较于天然有空格分隔的英文,中文分词面临一个独特的挑战:文本是连续的字符流,词与词之间没有明确边界。
在LLM时代之前,中文自然语言处理的第一步通常是“中文分词”(Chinese Word Segmentation, CWS),这是一个独立的研究领域。它依赖于大规模的词典和复杂的统计模型(如隐马尔可夫模型HMM、条件随机场CRF)来寻找文本中最可能的切分路径(例如,判断“发展中国家”应该切分为“发展-中-国家”还是“发展中-国家”)。这种方法依赖于分词工具的准确性,一旦分错,错误便会传导至下游任务。同时,这个
大模型时代的方案:幸运的是,现代主流中文大模型(如ChatGLM、文心一言等)也普遍采用了基于子词(Subword)的思路,从而绕过了传统“硬分词”的难题。其做法通常是:
直接将单个汉字视为BPE算法的初始“字符”。
然后,在海量的中文语料上运行类似BPE的算法,学习哪些汉字组合是高频且有意义的。
最终的词汇表里,既包含了大量单个汉字(如“的”、“我”、“人”),也包含了海量的高频词(如“语言”、“模型”、“共和国”、“实事求是”)。
这种方法兼顾整体性与灵活性:常用词被作为一个整体单位,保留了其固有的语义完整性。而长词、罕见词则被灵活拆分,使得模型能在子词层面进行泛化学习。
同时具有强大的新词发现能力:对于训练语料中未出现过的新词、网络流行语(如“绝绝子”、“yyds”)或专业术语,模型不再束手无策。它可以自然地将其拆解成单字或已知的子词组合进行处理,表现出极强的鲁棒性(Robustness)。
结论
在基于BPE的分词框架下,一个模型可以无缝地处理多种语言。在其巨大的词汇表中,可以同时包含英文的子词、中文的汉字与词组、以及其他语言的词元。这使得大语言模型具有多语言功能。
回到我们为非计算机科学背景学者构建概念框架的目标上来。分词器,绝非一个单纯的技术组件,它实质上是模型认知世界的第一层“滤镜”,或可称之为一种被固化的“前理解”(Pre-understanding)。
术语表 (Glossary)
- 分词器 (Tokenizer):将人类语言文本转换为模型能够处理的数字ID序列的“翻译官”。它定义了模型“阅读”世界的基本单位。
- 词元 (Token):经分词器切分后的基本单位,可以是一个词、一个字、词缀或高频词组。它是模型进行数学运算的原子。
- 词汇表 (Vocabulary):一本模型专属的“字典”,收录了所有它能识别的“词元”以及它们各自唯一的数字ID。词汇表的大小是有限的。
- 未登录词 (Out-of-Vocabulary, OOV):指在模型的“词汇表”中不存在的词。这是老式分词方法的一个主要痛点,但在子词分词中基本被解决。
- 子词分词 (Subword Tokenization):当前主流的分词策略。它将文本切分为有意义的子词片段,实现了对常见词的整体保留和对生僻词的灵活拆分,在效率和语义间取得了平衡。
- BPE (Byte Pair Encoding):一种经典的子词分词算法,通过不断合并语料库中最高频的相邻单元来构建词汇表。
- 中文分词 (Chinese Word Segmentation, CWS):传统中文信息处理的预处理步骤,指使用特定算法(如基于词典或统计模型)将连续的汉字序列切分为词语序列。
几个有意义的问题 (Some Meaningful Questions)
- 在法律或哲学研究中,许多术语(如“正当程序”、“主体间性”)具有不可分割的概念整体性。如果大模型的分词器基于统计频率将其拆分为“正当-程序”或“主体-间-性”,这是否在输入阶段就已经破坏了该术语的精确内涵?我们依赖一个无法从结构上保证概念完整性的工具进行学术分析,其风险何在?
- 模型的词汇表是通过对海量数据进行统计构建的。如果训练数据主要源自强势文化或官方话语体系,那么方言、少数民族语言或特定社群的“行话”中的词汇,很可能被分解成毫无意义的单个汉字。这是否意味着,分词器本身就在执行一种技术性的“话语规训”,使得非主流的表达方式在进入模型时就被“降级”和“边缘化”?
- 分词器将语言视为由“词元原子”构成的集合。这一根本性的“原子论”假设,与后结构主义等强调语境、关系和差异的理论是否存在冲突?当模型通过组合这些固定的“原子”来生成文本时,它是否还能真正捕捉到意义的流动性和语境依赖性,还是仅仅在进行一场高超的“符号乐高”游戏?
- 人类语言是活的,新词、新概念层出不穷。子词分词机制虽然能处理新词,但它处理的方式是“拆解还原”而非“整体接纳”。当一个社会正在孕育一个全新的概念(例如一个新的社会运动或身份认同标签)时,模型在能够将其作为一个整体词元纳入词汇表之前,是否会持续性地“误读”或“肢解”这一新概念?这对于研究社会动态和新思潮的学者意味着什么


被折叠的 条评论
为什么被折叠?



