当前位置: 首页 > news >正文

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 tokenmerge 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

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

http://www.xdnf.cn/news/705835.html

相关文章:

  • C54-动态开辟内存空间
  • Java交互协议详解:深入探索通信机制
  • 【Linux笔记】Shell-脚本(下)|(常用命令详细版)
  • 基于随机函数链接神经网络(RVFL)的锂电池健康状态(SOH)预测
  • ICASSP2025丨融合语音停顿信息与语言模型的阿尔兹海默病检测
  • .NET 开源工业视觉系统 OpenIVS 快速搭建自动化检测平台
  • 智能仓储落地:机器人如何通过自动化减少仓库操作失误?
  • 自动化中的伦理:驯服人工智能中的偏见与守护合规之路
  • Magentic-UI:人机协作的网页自动化革命
  • Mybatis中实现多表查询(多对一)
  • 【Hive 运维实战】一键管理 Hive 服务:Metastore 与 HiveServer2 控制脚本开发与实践
  • 上传图片转成3D VR效果 / 用photo-sphere-viewer实现图片VR效果
  • HTML、XML、JSON 是什么?有什么区别?又是做什么的?
  • 在 RedHat 系统(RHEL 7/8/9)中安装 ​​pythonnet​​ 和 ​​.NET Core​​ 的完整指南
  • 算法打卡第10天
  • Linux `cp` 命令深度解析与高阶应用指南
  • dify 配置访问前缀
  • WPF 按钮点击音效实现
  • 性能优化深度实践:突破vue应用性能
  • C# 打印PDF的常用方法
  • JS入门——JS引入方式
  • Qt Creator调用Python代码
  • 微信小程序(uniapp)实现腾讯云 IM 消息撤回
  • 本地部署消息代理软件 RabbitMQ 并实现外部访问( Windows 版本 )
  • stm32cube ide如何生成LL库工程
  • 云原生时代 Kafka 深度实践:02快速上手与环境搭建
  • 公司数据不泄露,DeepSeek R1本地化部署+web端访问+个人知识库搭建与使用
  • Git的三种合并方式
  • LVS+Keepalived 高可用群集
  • 第二章 1.7 数据采集安全风险防范之数据质量管理