English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

访客
1 / ?
返回课程列表

单词到数字

边境处的翻译器

语言模型从不直接看到文本。它看到的是整数。分词器位于边境关口:人类的单词流入,整数 ID 流出。生成过程则反转流动:整数 ID 返回,分词器渲染文本。


三个任务:


1. 分段。 将字符串切分成片段(tokens)。

2. 映射。 为每个片段分配一个来自固定词汇表的唯一整数 ID。

3. 反向。 在生成时从 ID 重构文本。


为什么用片段,而不是整词

整词词汇表会爆炸式增长。仅英语就有数十万种形式。更糟的是,用整词训练的模型无法处理拼写错误、新名字或外语短语:任何未见过的词都会映射到单一的 <UNK> 槽位。


子词分词解决了这个问题。一个常见片段的词汇表可以组合成任何单词,包括训练中从未见过的单词。两种策略占主导地位:BPE(字节对编码)和分布式分割。ANDREA 选择了第二种策略。


Harris vs BPE

为什么使用子词

一个全词分词器在罕见单词 `proporian`(**ANDREA-12M** 在第 43,100 步生成的一个单词)上失败。命名两个子词分词器(**BPE** 或 **Harris**)避免而全词分词器无法避免的 distinct 问题。

单词在哪里断开

Zellig Harris, 1955

一位名叫Zellig Harris的语言学家注意到了一些事情。在一个单词内部,给定字母序列后跟随的不同字母的数量变化很大。在un之后,你可以找到数十种字母:a, b, c, d, e ... 而在unbel之后,只有极少数字母跟随:i(然后是ievable)。


后继多样性的激增标志着可能的语素边界。在un(一个前缀)之后,多样性急剧增加,因为许多词根可以跟随。在像believ这样的词根内部,多样性保持较低,因为字母之间相互预测。在语素之间的过渡处,多样性再次激增。


从多样性激增到片段

在训练语料库上运行该检测器。每个词都会贡献统计证据。一个分词器收集在词素形状边界处反复出现的高频片段:unreprebelievknowingablelytioned


无标签。 无语言学家手动标注词素。字母共现的统计量完成这项工作。


Harris 与 BPE


属性HarrisBPE
边界标准后继多样性峰值配对频率
语言形态形态素对齐(前缀、词根、后缀)频繁字节对
示例:unbelievablyun + believ + abl + yunb + eli + eva + bly
泛化强(词根 + 词缀重组)较弱(配对无需对齐)

两者都会产生子词片段。Harris 分段倾向于与语言学家称为形态素的对齐:最小的有意义单位。BPE 片段优化压缩:最频繁的字节对被合并,而不考虑含义。

分段一个单词

对单词 `replayed` 应用 Harris 风格的推理。提出三个**形态素**分段,并用一个短语为每个分段辩护(它扮演什么角色:前缀、词根或后缀)。

三个词汇层

ANDREA词汇的结构

Harris分词产生一个具有三个层的词汇:


板块 1:256 个基础字节。 每个可能的 UTF-8 字节(0x00 到 0xFF)都有自己的令牌 ID。安全网:语料库中包含的任何字符,分词器都可以表示为字节序列。<UNK> 永不触发。


板块 2:N 个词素片段。 通过分布分析发现的常见片段。ANDREA-12M 训练时 N = 4096;ANDREA-120M 训练时 N = 8192。每个片段将重复出现的多字节字符串压缩为单个令牌。


板块 3:1 个 BOS 令牌。 一个特殊标记,放置在每个训练序列的开头。让模型学习“此位置无过去”。ANDREA-12M 和 ANDREA-120M 都精确保留一个 ID 给 BOS。


词汇表大小


模型基础字节词素段 (N)BOS词汇表大小
ANDREA-12M256409614353
ANDREA-120M256819218449

256 + N + 1 = 词汇表大小。简单。可重现。开放。


为什么字节块很重要

字节后备保证了覆盖率。如果模型遇到日本語且分词器没有日语形态素,单个UTF-8字节会承载序列通过。模型在字节上训练;稀有脚本的质量取决于容量和曝光度,但没有输入会崩溃分词器。

计算词汇表

ANDREA-480M(家族中的第三个模型,未来活动24会涵盖它)计划在更大的语料库上训练一个Harris分词器,N = 16,384个段。计算其词汇表大小。展示公式。然后用一句话解释为什么字节层即使N增长仍保持在256。

序列开始

为什么序列需要一个标记

仅解码器 transformer 从先前的上下文预测下一个 token。位置 0 没有先前的上下文。没有标记的情况下,位置 0 处于逻辑空洞:模型无从关注。


BOS 解决了空洞。 一个特殊的单一 token(ID = 256 + N)在训练期间位于每个序列的开头。模型学习:


- “当你看到 BOS 时,预测自然文本的可能第一个 token。”

- “当你看到 BOS 后跟一个词时,那个词是序列的开始,而不是延续。”


一个标记,多重用途


BOS 出现在:


- 训练时: 预置到输入模型的每个文本块前。

- 推理时: 预置到提示前,让模型看到熟悉的“新开始”信号。

- 边界标记: 在某些流水线中,作为串联文档的分隔符。


ANDREA 为 BOS 保留了精确的一个 ID。没有 EOS,没有 PAD,除了词汇表所需之外没有特殊标记。简单性始终是 permacomputer 的核心价值:每个标记都必须证明其位置的价值。


活动 3 继续

活动 3 (grow_a_language_model_tokenizer_diet) 涵盖了当 N 过大或 tokenizer 语料库与训练语料库偏离时会发生什么。ANDREA-12M 浪费了 63.6% 的词汇表;ANDREA-120M 修复了它。请继续阅读。

仅 BOS 的权衡取舍

反思 ANDREA 做出的一个设计选择:只有一个特殊标记 (BOS),没有 EOS,没有 PAD。命名这种选择带来的一个权衡取舍。权衡取舍可以是好处(更简单的引擎、更少的浪费槽位)或约束(某些训练技巧需要额外标记)。一句话就足够。