分词
分词是将文本拆分为较小单元(即“词元”)的过程,这些词元是系统实际处理的对象。 对于语言模型而言,词元通常是子词片段,模型将其作为数字而非完整单词来读取。 在传统搜索中,分词则是将文本拆分为用于构建索引和查询索引的词项。 无论哪种情况,分词都是将原始文本转化为系统可处理单元的关键步骤。
简而言之,分词就是将文本拆分为词元——即大型语言模型 (LLM) 所处理的子词片段,或是搜索索引进行匹配的词项。
分词运行机制
对于语言模型,常见的方法是使用子词分词:
- 选择分词器:模型采用特定的分词方案。 常见的方法包括字节对编码 (BPE)、WordPiece 以及 SentencePiece 的变体,这些方法均基于子词单元构建固定的词表。
- 拆分文本:输入文本被拆分为该词表中的词元,常见词可作为单个词元,而生僻词、代码和表情符号则被拆分为多个词元。
- 映射为 ID:每个词元被转换为一个数字 ID,因为模型处理的是数字,无法直接识别字母。
- 计数:词元的数量决定了文本占用的上下文窗口大小,并且在大多数 API 中,它也决定了请求的费用。
在搜索索引中,分词过程则更为简单且有所不同:文本通常根据空格和标点符号被切分为词项,以便实现文档与查询之间的匹配。 搜索分析器随后可能会执行规范化步骤(例如转换为小写、词干提取或词形还原),这些步骤与基于边界的文本拆分有着本质的不同。
关键点在于,分词是特定于模型和方法的:同一段文本,根据所使用的模型、提供商以及处理方式(是由大型语言模型还是由搜索索引处理)的不同,可能会产生不同的词元数量。 切勿假设词元数量可以在不同系统间直接通用。
分词对比分块和嵌入
- 分词是将文本拆分为模型或索引所使用的最小单位;而分块是将文档拆分为较大的段落以便检索。 “词元”是微小的片段;“块”是指完整的段落。
- 分词会生成离散的词元 ID;嵌入则是将词元或语块转换为能够捕捉语义的连续向量。 前者是查找操作,后者则是经学习得到的表征。
- 子词分词(针对大语言模型)针对固定的模型词表进行优化;搜索分词(针对索引构建)则针对查询与文档之间的词项匹配进行优化。
分词对开发者而言的重要应用场景
- 成本与限制:API 请求通常按词元计费,且受上下文窗口的限制,因此词元数量直接决定了价格以及可处理的内容量。
- 延迟与预算编制:词元数量越多,需要处理的内容就越多,这两者都会增加延迟,因此精简提示词和检索到的上下文是优化响应速度的一种方法。
- 关键词搜索:构建或查询词汇索引依赖于对文档和查询进行一致的分词处理,这也是混合搜索中关键词匹配的基础。
- 在大型语言模型管道中使用搜索 API:由搜索 API 返回用于上下文接地的内容,一旦进入模型上下文就会消耗词元,因此,词元效率高且预先提取的结果有助于控制答案管道的预算,并降低运行成本。
分词往往不引人注目,但它却在后台默默决定了模型能读取什么、搜索索引能匹配什么,以及每次请求的成本。
相关术语
词元、上下文窗口、 分块、 嵌入、大型语言模型 (LLM)、字节对编码 (BPE)、关键词搜索、混合搜索、延迟、搜索 API。