tiktoken学习

1.tiktoken是OpenAI编写的进行高效分词操作的库文件。

2.操作过程:

复制代码
enc = tiktoken.get_encoding("gpt2")
train_ids = enc.encode_ordinary(train_data)
val_ids = enc.encode_ordinary(val_data)

以这段代码为例,get_encoding是创建了一个Encoding对象,结构如下:

复制代码
{
    "name": "gpt2",    #Encoding的名称
    "pat_str": r"""'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+""",  #分词正则表达式
    "mergeable_ranks": {b"!": 0, b"\"": 1, ...},  # 50,000+ 条目  #存储预加载的分词表
    "special_tokens": {"<|endoftext|>": 50256},   #特殊分词
    "explicit_n_vocab": 50257  #增加的特殊分词
}

encode_ordinary是利用BPE合并来对输入的train_data进行编码。

BPE合并:利用预加载的mergeable_ranks字典,通过最大前缀匹配查找最大字词映射对train_data编码。

复制代码
while current_byte in mergeable_ranks:
    find next byte that forms existing token
    merge if found in ranks

3.为什么说tiktoken高效?

使用高性能语言Rust实现

避免Python解释器开销;直接操作字节数组,避免Python对象的创建开销;并行处理。

基于Trie树的高效查找

复制代码
struct TrieNode {
    children: HashMap<u8, TrieNode>,
    token_id: Option<u32>,  // 匹配成功时返回 token ID
}

优化:Aho-Corasick 自动机,可以通过增加失败指针fail来避免每次失败从头遍历。就相当于这条路走不通,但是不会从头走,而是会走附近的分岔路看看有没有可以走的。

BPE合并的增量处理

复制代码
fn encode_bytes(bytes: &[u8], trie: &Trie) -> Vec<u32> {
    let mut tokens = Vec::new();
    let mut start = 0;
    
    while start < bytes.len() {
        let (end, token_id) = trie.longest_match(&bytes[start..]);
        tokens.push(token_id);
        start += end;
    }
    
    tokens
}

单次遍历:在扫描过程中同时完成匹配和合并

贪心最长匹配:总是选择可能的最长token

预加载mergeable_ranks

不需要实时建立,提高效率

相关推荐
问道飞鱼1 天前
【大模型学习】提示词工程(Prompt Engineering)技术深度报告
学习·prompt·提示词
hssfscv1 天前
Javaweb学习笔记——后端实战7 springAOP
笔记·后端·学习
来两个炸鸡腿1 天前
【Datawhale组队学习202601】Base-NLP task06 大模型训练与量化
人工智能·学习·自然语言处理
bylander1 天前
【AI学习】TM Forum自智网络L4级标准体系
人工智能·学习·智能体·自动驾驶网络
我想我不够好。1 天前
2026.1.28 消防监控学习
学习
Engineer邓祥浩1 天前
设计模式学习(24) 23-22 策略模式
学习·设计模式·策略模式
2601_949720261 天前
flutter_for_openharmony手语学习app实战+手语识别实现
学习·flutter
浅念-1 天前
C语言——内存函数
c语言·经验分享·笔记·学习·算法
●VON1 天前
Flutter for OpenHarmony:基于 SharedPreferences 的本地化笔记应用架构与实现
笔记·学习·flutter·ui·架构·openharmony·von
求真求知的糖葫芦1 天前
耦合传输线分析学习笔记(九)对称耦合微带线S参数矩阵推导与应用(下)
笔记·学习·矩阵·射频工程