├── README.md ├── requirements.txt └── rock-n-roll.py /README.md: -------------------------------------------------------------------------------- 1 | # Display GPT Chinese Tokens 2 | 3 | This script displays *all* Chinese tokens for OpenAI's available models. 4 | 5 | ## Usage 6 | 7 | ``` 8 | python3 rock-n-roll.py 9 | ``` 10 | 11 | ## Example 12 | 13 | ### GPT-4o 14 | 15 | ```text 16 | Encoding "o200k_base", encoder.max_token_value=200018 17 | Used by: gpt-4o 18 | 10: 微信公众号天天中彩票 🫣🫣🫣🫣免费视频观看 19 | 9: 🫣🫣🫣有限公司官网 🫣🫣免费🫣在线精品 微信上的天天中彩票 给主人留下些什么吧 微信里的天天中彩票 天天中彩票大神推荐 20 | 8: 彩神争霸大发快三 天天中彩票中大奖 ... 21 | 7: 天天中彩票怎么 天天中彩票提现 ... 22 | 6: 天天中彩票是 视频在线观看 ... 23 | 5: 天天中彩票 重庆时时彩 ... 24 | 4: 彩神争霸 彩神争霸 ... 25 | 3: 中彩票 时时彩 ... 26 | 2: 彩票 天天 ... 27 | ``` 28 | 29 | ### GPT-4 30 | 31 | ``` 32 | Encoding "cl100k_base", `encoder.max_token_value=100276` 33 | Used by: gpt-4, gpt-3.5-turbo, gpt-3.5, gpt-35-turbo, davinci-002, babbage-002, text-embedding-ada-002, text-embedding-3-small, text-embedding-3-large 34 | 35 | 6: 生命周期函数 36 | 4: 生命周期 监听页面 不能为空 微软雅黑 删除成功 自动生成 37 | 3: 请输入 用户名 命周期 字符串 验证码 不存在 数据库 软雅黑 手机号 初始化 设计器 动生成 请选择 初始化 服务器 管理员 38 | 2: 成功 用户 数据 时间 失败 修改 文件 信息 删除 名称 输入 返回 类型 错误 参数 函数 密码 请求 登录 页面 使用 管理 方法 操作 获取 添加 内容 设置 生成 状态 列表 字段 提示 日期 获取 图片 商品 代码 地址 保存 一个 默认 存在 创建 服务 字符 验证 更新 用户 取消 创建 选择 订单 为空 始化 查询 表示 上传 监听 设置 不能 描述 显示 处理 开始 所有 返回 下午 编辑 作者 事件 手机 中国 加载 结果 标题 注意 完成 确定 周期 注册 下载 如果 数据 修改 删除 连接 消息 对象 是否 记录 输出 姓名 说明 通过 当前 支付 格式 北京 输入 文件 数组 重新 设计 分类 输出 以上 异常 参数 版本 网络 隐藏 进行 是否 提交 发送 联系 系统 编号 点击 公司 项目 可以 页面 程序 雅黑 排序 首页 关闭 执行 单位 方式 条件 記事 路径 退出 宋体 例如 更新 相关 默认 搜索 属性 金额 示例 没有 查询 默认 结束 请求 确认 如果 方法 测试 数量 位置 時間 文章 链接 添加 数字 声明 产品 亿元 分钟 按钮 需要 全部 资源 评论 使用 配置 问题 报道 视频 可能 文字 以下 电话 有效 今年 任务 正确 来源 详情 一页 发布 审核 其中 权限 时间 定义 万元 同时 無料 大小 节点 小时 其他 自治 分享 邮箱 新增 商品 正在 注意 备注 价格 我的 我们 移到 功能 若要 长度 送料 在线 39 | ``` 40 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | tiktoken==0.7.0 2 | -------------------------------------------------------------------------------- /rock-n-roll.py: -------------------------------------------------------------------------------- 1 | # Original author: Tianle Cai @ctlllll (Github) 2 | # This is just a slightly more readable copy. 3 | 4 | from tiktoken import get_encoding 5 | from tiktoken.model import MODEL_TO_ENCODING 6 | 7 | encodings = list( 8 | dict.fromkeys(MODEL_TO_ENCODING.values()) 9 | ) 10 | 11 | def is_chinese(ch: str): 12 | code_point = ord(ch) 13 | return ( 14 | 0x4E00 <= code_point <= 0x9FFF or 15 | 0x3400 <= code_point <= 0x4DBF or 16 | 0x20000 <= code_point <= 0x2A6DF or 17 | 0x2A700 <= code_point <= 0x2B73F or 18 | 0x2B740 <= code_point <= 0x2B81F or 19 | 0x2B820 <= code_point <= 0x2CEAF or 20 | 0x2CEB0 <= code_point <= 0x2EBEF or 21 | 0xF900 <= code_point <= 0xFAFF 22 | ) 23 | 24 | def main(): 25 | for enc_name in encodings: 26 | encoder = get_encoding(enc_name) 27 | models = [ 28 | model for model, enc in MODEL_TO_ENCODING.items() 29 | if enc == enc_name 30 | ] 31 | 32 | print(f'Encoding "{enc_name}", {encoder.max_token_value=}') 33 | print(' Used by:', ', '.join(models), end='') 34 | 35 | tokens = [] 36 | for i in range(encoder.max_token_value + 1): 37 | try: 38 | tokens.append( 39 | # Try to decode all tokens. 40 | encoder.decode([i]) 41 | ) 42 | except: 43 | pass 44 | 45 | cn_words = [] 46 | for token in tokens: 47 | chn = ''.join(filter(is_chinese, token)) 48 | 49 | # Keep this token if: 50 | # 1. >= 2 chinese characters 51 | # 2. Not too many other characters 52 | if (len(chn) >= 2 and 53 | len(chn) >= len(token) - 1): 54 | cn_words.append(chn) 55 | 56 | cn_words.sort(key=lambda x: -len(x)) 57 | 58 | for i, word in enumerate(cn_words): 59 | if len(word) != len(cn_words[i - 1]): 60 | print(f'\n{len(word):4}: ', end='') 61 | print(word, end=' ') 62 | 63 | print('\n') 64 | 65 | if __name__ == '__main__': 66 | main() 67 | --------------------------------------------------------------------------------