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

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

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

相关文章:

tiktoken学习

1.tiktoken是OpenAI编写的进行高效分词操作的库文件。 2.操作过程&#xff1a; enc tiktoken.get_encoding("gpt2") train_ids enc.encode_ordinary(train_data) val_ids enc.encode_ordinary(val_data) 以这段代码为例&#xff0c;get_encoding是创建了一个En…...

鲲鹏Arm+麒麟V10,国产化信创 K8s 离线部署保姆级教程

Rainbond V6 国产化部署教程&#xff0c;针对鲲鹏 CPU 麒麟 V10 的离线环境&#xff0c;手把手教你从环境准备到应用上线&#xff0c;所有依赖包提前打包好&#xff0c;步骤写成傻瓜式操作指南。别说技术团队了&#xff0c;照着文档一步步来&#xff0c;让你领导来都能独立完成…...

历年厦门大学计算机保研上机真题

2025厦门大学计算机保研上机真题 2024厦门大学计算机保研上机真题 2023厦门大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school 数字变换过程的最大值与步数 题目描述 输入一个数字 n n n&#xff0c;如果 n n n 是偶数就将该偶数除以 2 2 2&…...

【C++ Qt】认识Qt、Qt 项目搭建流程(图文并茂、通俗易懂)

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本章将开启Qt的学习&#xff0c;Qt是一个较为古老但仍然在GUI图形化界面设计中有着举足轻重的地位&#xff0c;因为它适合嵌入式和多种平台而被广泛使用…...

IoT/HCIP实验-1/物联网开发平台实验Part2(HCIP-IoT实验手册版)

文章目录 概述产品和设备实例的产品和设备产品和设备的关联单个产品有多个设备为产品创建多个设备产品模型和物模型设备影子&#xff08;远程代理&#xff09; 新建产品模型定义编解码插件开发编解码插件工作原理消息类型与二进制码流添加消息&#xff08;数据上报消息&#xf…...

Replacing iptables with eBPF in Kubernetes with Cilium

source: https://archive.fosdem.org/2020/schedule/event/replacing_iptables_with_ebpf/attachments/slides/3622/export/events/attachments/replacing_iptables_with_ebpf/slides/3622/Cilium_FOSDEM_2020.pdf 使用Cilium&#xff0c;结合eBPF、Envoy、Istio和Hubble等技术…...

推荐系统排序指标:MRR、MAP和NDCG

文章目录 MRR: Mean Reciprocal RankMAP: Mean Average PrecisionNDCG: Normalized Discounted Cumulative Gain3个度量标准来自于两个度量家族。第一种度量包括基于二进制相关性的度量。这些度量标准关心的是一个物品在二进制意义上是否是好的。第二个系列包含基于应用的度量。…...

数学建模之最短路径问题

1 问题的提出 这个是我们的所要写的题目&#xff0c;我们要用LINGO编程进行编写这个题目&#xff0c;那么就是需要进行思考这个怎么进行构建这个问题的模型 首先起点&#xff0c;中间点&#xff0c;终点我们要对这个进行设计 2 三个点的设计 起点的设计 起点就是我们进去&am…...

测试概念 和 bug

一 敏捷模型 在面对在开发项目时会遇到客户变更需求以及合并新的需求带来的高成本和时间 出现的敏捷模型 敏捷宣言 个人与交互重于过程与工具 强调有效的沟通 可用的软件重于完备的文档 强调轻文档重产出 客户协作重于合同谈判 主动及时了解当下的要求 相应变化…...

zynq 级联多个ssd方案设计(ECAM BUG修改)

本文讲解采用zynq7045芯片如何实现200T容量高速存储方案设计&#xff0c;对于大容量高速存储卡&#xff0c;首先会想到采用pcie switch级联方式&#xff0c;因为单张ssd的容量是有限制的&#xff08;目前常见的m.2接口容量为4TB&#xff0c;U.2接口容量为16TB&#xff09;&…...

brep2seq 论文笔记

Brep2Seq: a dataset and hierarchical deep learning network for reconstruction and generation of computer-aided design models | Journal of Computational Design and Engineering | Oxford Academic 这段文本描述了一个多头自注意力机制&#xff08;MultiHead Attenti…...

【运维实战】Linux 中设置 sudo ,8个有用的 sudoers 配置!

在Linux及其他类Unix操作系统中&#xff0c;只有 root 用户能够执行所有命令并进行关键系统操作&#xff0c;例如安装更新软件包、删除程序、创建用户与用户组、修改重要系统配置文件等。 但担任 root 角色的系统管理员可通过配置sudo命令&#xff0c;允许普通系统用户执行特定…...

Ad Hoc

什么是 Ad Hoc&#xff1f; Ad hoc 一词源于拉丁语&#xff0c;意为“为此目的”或“为此特定原因”。一般来讲&#xff0c;它指的是为解决某一特定问题或任务&#xff08;而非为了广泛重复应用&#xff09;而设计的行动、解决方案或组合。在加密货币和区块链领域&#xff0c;…...

江科大SPI串行外设接口hal库实现

hal库相关函数 初始化结构体 typedef struct {uint32_t Mode; /*SPI模式*/uint32_t Direction; /*SPI方向*/uint32_t DataSize; /*数据大小*/uint32_t CLKPolarity; /*时钟默认极性控制CPOL*/uint32_t CLKPhase; /*…...

[网页五子棋][对战模块]前后端交互接口(建立连接、连接响应、落子请求/响应),客户端开发(实现棋盘/棋子绘制)

文章目录 约定前后端交互接口建立连接建立连接响应针对"落子"的请求和响应 客户端开发实现棋盘/棋子绘制部分逻辑解释 约定前后端交互接口 对战模块和匹配模块使用的是两套逻辑&#xff0c;使用不同的 websocket 的路径进行处理&#xff0c;做到更好的耦合 建立连接 …...

【ArcGIS Pro微课1000例】0071:将无人机照片生成航线、轨迹点、坐标高程、方位角

文章目录 一、照片预览二、生成轨迹点三、照片信息四、查看方位角五、轨迹点连成线一、照片预览 数据位于配套实验数据包中的0071.rar,解压之后如下: 二、生成轨迹点 地理标记照片转点 (数据管理),用于根据存储在地理标记照片文件(.jpg 或 .tif)元数据中的 x、y 和 z 坐…...

Ubuntu Zabbix 钉钉报警

文章目录 概要Zabbix警监控脚本技术细节配置zabbix告警 概要 提示&#xff1a;本教程用于Ubuntu &#xff0c;zabbix7.0 Zabbix警监控脚本 提示&#xff1a;需要创建一个脚本 #检查是否有 python3 和版本 rootzabbix:~# python3 --version Python 3.12.3在/usr/lib/zabbix/…...

threejs顶点UV坐标、纹理贴图

1. 创建纹理贴图 通过纹理贴图加载器TextureLoader的load()方法加载一张图片可以返回一个纹理对象Texture&#xff0c;纹理对象Texture可以作为模型材质颜色贴图.map属性的值。 const geometry new THREE.PlaneGeometry(200, 100); //纹理贴图加载器TextureLoader const te…...

STM32 RTC实时时钟\BKP备份寄存器\时间戳

一、Unix时间戳 想要计算当地北京时间&#xff0c;需要根据经度和闰年之类的运算得到(c语言里面可以调用time.h的函数) 二、UTC/GMT&#xff08;科普&#xff09; 三、时间戳转化 C语言的time.h模块提供了时间获取和时间戳转换的相关函数&#xff0c;可以方便的进行秒计数器、…...

springcloud---gateway

目录标题 理解gateway代码示例filter与aop的联系ServerWebExchangeReactor 的 Context那是隐式传递Map吗Context和ThreadLocalSpring 的 AOP 是用的什么为什么过滤器要用异步非阻塞,而 AOP 用同步阻塞?理解gateway 代码示例 import io.netty.channel.Channel; import lombo…...

Axure设计案例——科技感立体柱状图

想让你的数据展示告别平淡无奇&#xff0c;成为吸引全场目光的焦点吗&#xff1f;快来瞧瞧这个Axure设计的科技感立体柱状图案例&#xff01;科技感设计风格借助逼真的立体效果打破传统柱状图的平面感&#xff0c;营造出一种令人眼前一亮的视觉震撼。每一个柱状体都仿佛是真实存…...

app获取相册权限是否意味着所有相片都可随时读取?

针对安卓手机相册的隐私安全问题&#xff0c;我也比较好奇&#xff0c;App授予了相册权限&#xff0c;真的能自动读取用户的照片吗&#xff1f;最近做了一个小实验&#xff0c;我开发了2个小App&#xff0c;这2个App安装的时候只授予了相册权限&#xff0c;没有授予其他任何权限…...

2025年05月29日Github流行趋势

项目名称&#xff1a;agenticSeek 项目地址url&#xff1a;https://github.com/Fosowl/agenticSeek项目语言&#xff1a;Python历史star数&#xff1a;11898今日star数&#xff1a;2379项目维护者&#xff1a;Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…...

第十一节:第一部分:正则表达式:应用案例、爬取信息、搜索替换

正则表达式介绍 String提供的正则表达式的方法的书写规则 正则表达式总结 正则表达式作用&#xff1a; 作用三&#xff1a;搜索替换 案例分析及代码&#xff08;图片解析&#xff09; 代码&#xff1a; 代码一&#xff1a;校验手机号和邮箱格式是否正确 package com.itheima.…...

跟我学c++中级篇——动态库的资源处理

一、动态库的资源管理 动态库在编程中几乎是一个无法绕过的问题&#xff0c;不管是在哪个平台上都一样。在前面的文章中分析知道&#xff0c;编程的一个核心目标就是对计算机的资源进行管理和控制。动态库编程做为一个重要的技术&#xff0c;同样要面对资源的管理这个重要问题…...

新能源集群划分+电压调节!基于分布式能源集群划分的电压调节策略!

适用平台&#xff1a;MatlabYalmip Cplex (具体操作已在程序文件中说明) 参考文献&#xff1a;基于分布式能源集群化分的电压调节策略[D]. 一、文献解读 1. 主要内容/创新点 提出了一种基于分布式能源集群化的电压调节策略&#xff0c;计及分布式能源的有功、无功调节能力&a…...

端午安康 | 以匠心,致长远

端午节快乐 值此端午佳节&#xff0c;数图衷心感谢每一位合作伙伴与客户的信任相伴。 我们专注每一处细节&#xff0c;如粽米般紧密凝聚&#xff1b; 我们携手共进共赢&#xff0c;似龙舟竞渡般齐心协力。 未来&#xff0c;我们愿继续以创新为桨&#xff0c;与您共划时代新篇…...

漫画Android:事件分发的过程是怎样的?

当用户触摸屏幕时&#xff0c;硬件层会捕获触摸信号&#xff0c;并将其转化为内核事件。 Android系统会通过InputManagerService和WindowManagerService等服务将这些事件包装成MotionEvent对象&#xff0c;并将其传递给Activity的dispatchTouchEvent()方法中&#xff0c;Activi…...

2022 RoboCom 世界机器人开发者大赛-本科组(省赛)解题报告 | 珂学家

前言 题解 2022 RoboCom 世界机器人开发者大赛-本科组&#xff08;省赛&#xff09;。 感觉T5是最简单的&#xff0c;其他都不好做。 RC-u5 树与二分图 分值: 30分 思路: 容斥原理 树天然就是二分图&#xff0c;按深度d归类(偶数深度为S1&#xff0c;奇数深度为S2)&#x…...

什么是MCP技术,跟http技术有什么区别

什么是MCP技术&#xff1f; MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;是一种开源协议&#xff0c;旨在标准化大型语言模型&#xff08;LLM&#xff09;与外部数据源和工具之间的集成方式。 核心功能 上下文管理&#xff1a;保存对话历史…...