什么是分词器?
Scrapeless Agent Browser 为下游文本处理工作流提供网页访问能力。
分词器是一种组件,它将输入文本转换为模型可以处理的单位,通常是用数字标识符表示的标记。相应的解码过程会将标记序列转换回文本。分词过程定义了可读内容与模型词汇表之间的表示边界;它本身并不理解一个陈述是否为真。
对于开发者来说,分词器在估算上下文大小、准备训练样本以及正确处理模型输入时非常重要。相同的文本在不同的分词器下会产生不同的分词序列。请使用与模型相关联的分词器,而不要假定词数统计器或其他模型的编码与之等价。
文本如何变成 Token ID
分词器通常会应用一系列操作,其中可能包括规范化、初始切分、分段,以及将各个片段映射到词汇标识符。具体细节因设计而异。一些系统还会在模型处理消息之前插入特殊标记,或使用模板来格式化消息。
标记标识符在其词汇表中具有特定含义。来自某个分词器的标识符不应被传递给不同的模型,并假定它表示相同的文本。词汇表内容和处理规则是模型接口的一部分。在你的应用程序和数据集制备记录中,将分词器配置与模型版本关联保存。
对于一个假想的文档分类器而言,可读段落是源输入,而标记 ID 是其编码表示。如果在分词之前的预处理意外删除了一个否定词,分词器就可能忠实地编码错误的句子。应当验证完整的文本处理路径,而不是把每一个表示错误都归咎于词表。
为什么子词单元很常见
当有用时,子词分词会使用小于整个单词的单位来表示文本。这样,词表就可以通过已知片段的组合来表达不熟悉的术语。常见单词仍然可以被紧凑地表示,而较罕见的单词则可能被拆分成多个单位。因此,一个 token 并不是单词的可靠同义概念。
The 用于表示生僻词的子词方法 提出了一种使用更小单元来处理开放词汇翻译的实用方法。这个核心思想有助于解释,为什么产品标识符、生僻姓名和技术复合词,与可见长度相似的熟悉散文相比,会有不同的分词成本。
Do not infer semantic boundaries from token boundaries. A segment can be part of a meaningful word without being meaningful by itself. When displaying extracted entities or enforcing field-length limits, use the original text and task requirements. Token boundaries are useful for model representation and budgeting, but they do not replace language-aware validation of the content.
字节对编码和 Unigram 分词
字节对编码通过对高频相邻单元的学习合并来构建一种分词方案。其具体的初始表示形式和实现方式可能各不相同。在编码时,学习到的规则决定了文本如何被划分为词汇条目。最终得到的片段反映了训练过程和分词器配置。
Unigram 分词在选择子词单元时采用了不同的方法。关于…的研究 子词正则化和多重分词 研究了在训练过程中如何使用不同的分词方式。这与在大型语言模型中采样下一个输出标记的过程不同,因此分词器采样和生成温度不应被描述为同一种控制手段。
The SentencePiece 分词器和去分词器 直接从原始句子演示子词处理,而不需要事先进行分词。对于应用设计,应关注与你所选模型一起提供的具体分词器。仅凭算法家族并不能告诉你所有规范化规则、特殊标记或消息格式要求。
标准化可以改变表示形式
规范化是一种预处理步骤,它在分词之前将输入转换为选定的形式。根据具体的分词器,它可能会影响大小写、字符形式或空白符。这些选择会影响模型可以保留哪些区别。不要假设每个分词器都会保留输入的每一个字节,应当检查实际配置。
这对于精确匹配任务很重要。产品代码、数学表达式或源代码片段可能包含差异具有重要意义的字符。如果您的应用程序需要精确保留,请通过编码和解码测试具有代表性的示例,并将结果与原始文本进行比较。将特定任务的转换与分词器行为分开,这样任何更改的来源都是可见的。
对于网页文本,抽取会引入另一个边界。移除标记、合并表格单元格或折叠空白字符,都会在分词器运行之前改变含义。 网页数据获取工作流程 涉及获取有用内容;在文本准备过程中,你的应用程序必须保留下游任务所需的结构。
特殊标记和消息模板
特殊标记可以标示边界或特定于模型的控制信息,而不是普通词语。它们的含义取决于模型和分词器的配置。消息模板可能会在用户可见文本周围添加分隔符或角色标记,因此仅统计一条消息的文本可能会低估编码请求的实际内容。
使用所选模型支持的格式化路径。即使结果文本在日志中看起来相似,手动拼接角色标签也可能生成与预期消息模板不同的输入。将任何自定义序列化与应用实际调用的接口进行核对。
将不受信任的内容与特权消息构造区分开来。检索到的页面可能包含看起来像特殊标记或指令的文本。应将其视为源内容,通过合适的接口处理,而不是允许它改变消息边界。分词和序列化应保留应用预期的角色和数据边界,而不是让外部字符串意外地定义它们。
Token 计数取决于文本和分词器
Token 计数会随着分词器、输入的语言和结构,以及在其周围添加的任何格式而变化。标点密集的代码、生僻标识符和普通散文在可见字符长度相同的情况下,计数可能不同。因此,从单词到 token 的固定换算只是估算,而不是精确测量。
在做预算时,在接口允许的情况下统计完整的序列化输入。包括指令、保留的历史记录、工具定义和选定的证据。为输出生成以及模型服务文档中说明的任何附加核算类别预留与应用相适应的余量。不要将本地估算作为远程服务返回的最终使用记录呈现。
在迁移模型时,通过新分词器跑一份具有代表性的语料,并检查计数分布。短样本可能会错过扩展最多的文档类型。分别查看篇幅较长的技术页面、多语言内容和结构化记录。使用这些结果来调整接入检查和上下文组装,而不改变源材料的含义。
分块与分词是不同的操作
分块是将文档划分为用于存储、检索或处理的单元,而分词是将这些单元编码给模型。一个块中可能包含许多 token。仅按 token 计数来选择块边界,可能会把定义与其限定条件分开,或把表格中的值与解释该行的内容分离。
从文档结构和应用需要回答的问题入手。在合适的地方使用标题、段落和完整的步骤单元,然后使用正确的分词器检查 token 大小。保留源偏移量或其他定位器,以便可以在上下文中检查选定的块。
如果你通过 Agent Browser收集页面,需将收集到的源文件、清洗后的文本、块以及编码后的输入区分为不同的工件。每个阶段回答不同的调试问题。浏览器收集成本和模型 token 使用量也是分开的,因此要将 Scrapeless service accounting 保留在分词器计数之外,而不是混在其中。
在模型边界处验证分词
分词器验证应针对那些会影响应用的错误。测试不常见字符、有意义的空白、较长标识符、空输入以及你实际发送的消息格式。检查编码和解码是否保留了任务所需的区分。记录有意进行的转换,以免它们看起来像无法解释的数据丢失。
在训练时,保持分词器和词表与模型检查点及准备流水线兼容。更改词表不是替换解析器的简单外观调整。它会改变模型接收的表示方式,并可能需要超出预处理之外的更改。避免仅仅为了得到更小的数字而更换分词器,却不检查模型预期的输入表示。
在通过服务进行推理时,要区分你能控制的部分与服务端处理的部分。本地分词器可以支持估算和调试,但远程接口可能会应用额外的序列化。在将估算视为可互换的度量之前,应在具有代表性的请求上,将估算与返回的使用情况进行比较。
要点
分词器将文本转换为特定于模型的单元和标识符。使用正确的分词器,在编码前保留所需的源区分,并测试完整的消息格式。当计数或输出看起来不对时,将抽取、规范化、序列化和模型兼容性作为独立边界分别检查。
在编码之前先收集有用的文本
将 Agent Browser 用于被允许的网页交互,并将抽取决策与模型分词分开。
立即注册即可获得 $5 in free credit — 无需信用卡.
领取你的 $5 额度 →FAQ
分词是否等同于按空格拆分?
分词可以把空格作为一种信号,但现代模型分词器通常会将文本拆分为子词或其他单元。标点符号和空白的处理也各不相同。使用选定的分词器检查实际行为,而不是假定每个以空格分隔的词都对应一个 token。
两个分词器会产生不同的计数吗?
两个分词器可能会对同一文本产生不同计数,因为它们的词表、切分规则和预处理不同。当消息格式添加模型特定标记时,计数也会发生变化。使用适配模型的计数来进行上下文规划,并在评估记录中保留分词器的身份。
解码是否总能精确还原原始文本?
是否能精确保留往返取决于分词器配置以及编码前应用的任何预处理。规范化可能会有意改变文本。测试对你的任务重要的字符和格式,并将解码结果与原始源文本进行比较,而不是假定逐字节一致。
分词器能检测内容是否真实可信吗?
分词器对内容进行编码,并不判断其事实真伪。被正确编码的文本同样可能包含错误、缺乏支撑的断言或恶意指令。在后续阶段评估证据和应用行为,同时让分词专注于表示和与模型的兼容性。