1 概述
1.1 案例介绍
Tokenizer是连接自然语言与模型输入的关键组件,负责将文本转换为模型可处理的数字序列,并在推理时解码数字回文本。仓颉编写的分词器基于Huggingface标准格式,支持编码(文本→ID序列)和解码(ID序列→文本),兼容Qwen2系列模型的tokenizer.json文件。其核心功能包括子词划分、特殊标记处理及动态填充,确保输入文本与模型词表精准对齐。通过参考Rust、Python等多语言实现,该分词器优化了处理效率,为模型提供稳定可靠的文本转换基础。
通过实际操作,让大家深入了解如何进行华为云的开发者云主机完成CodeArts IDE for Cangjie编辑器的部署,并利用该编译器对如何部署Qwen2模型以及Tokenizer的实际作用,体验其在模型开发中所扮演的角色。
1.2 适用对象
- 企业
- 个人开发者
- 高校学生
1.3 案例时间
本案例总时长预计40分钟。
1.4 案例流程
说明:
- 练习使用CodeArts IDE for Cangjie编辑器;
- 下载完整Qwen2-0.5B模型;
- 仓颉调用本地已部署的Qwen模型;
1.5 资源总览
资源名称 | 规格 | 单价(元) | 时长(分钟) |
华为开发者空间 - 云主机 | 鲲鹏通用计算增强型 kc2 | 4vCPUs | 8G | Ubuntu | 免费 | 40 |
最新案例动态,请查阅 《跨平台分词利器:仓颉版Tokenizer的Qwen模型适配》。小伙伴快来领取华为开发者空间,进入云开发环境桌面版实操吧!
2 基于仓颉编程语言的Qwen分词器
2.1 开发者空间配置
面向广大开发者群体,华为开发者空间提供一个随时访问的“开发桌面云主机”、丰富的“预配置工具集合”和灵活使用的“场景化资源池”,开发者开箱即用,快速体验华为根技术和资源。
领取云主机后可以直接进入华为开发者空间工作台界面,点击打开云主机 > 进入桌面连接云主机。
点击桌面CodeArts IDE for Cangjie,打开编辑器,点击新建工程,名称demo,其他保持默认配置,点击创建。
产物类型说明:
- executable,可执行文件;
- static,静态库,是一组预先编译好的目标文件的集合;
- dynamic,动态库,是一种在程序运行时才被加载到内存中的库文件,多个程序共享一个动态库副本,而不是像静态库那样每个程序都包含一份完整的副本。
创建完成后,打开src/main.cj,点击编辑器右上角运行按钮直接运行,终端窗口可以看到打印内容。
CodeArts IDE for Cangjie的入门使用介绍就到这里,接下来我们进行分词器的学习。
2.2 Cangjie+Qwen2分词器使用指南
2.2.1 获取你的Tokenizer工具
前往仓颉gitcode论坛官网下载Cangjie-Examples项目完整代码
gitcode:
https://gitcode.com/Cangjie/Cangjie-Examples
进入云主机桌面,右键选择Open Terminal Here打开终端命令窗口,克隆仓颉示例代码仓库。
git clone https://gitcode.com/Cangjie/Cangjie-Examples.git
2.2.2 Tokenizer项目结构简介
分词器(Tokenizer),主要用于将自然语言文本转换为模型可以理解的标记(tokens),以及将模型生成的标记转换回自然语言文本。分词器在自然语言处理(NLP)任务中扮演着至关重要的角色,因为它直接影响到模型的输入和输出的质量。
- tokenizer_config.cj: 定义了用于 JSON 反序列化的结构体,这些结构体用于解析分词器的配置文件: TokenJson: 表示一个标记(token)的配置信息。
public struct TokenJson <: JsonDeserializable<TokenJson>
//表示一个标记(token)的配置信息。
public struct NormalizerJson <: JsonDeserializable<NormalizerJson>
//表示归一化(normalization)的配置信息。
public struct PatternJson <: JsonDeserializable<PatternJson>
//表示模式(pattern)的配置信息。
public struct ProcessJson <: JsonDeserializable<ProcessJson>
//表示预处理(preprocessing)或后处理(post-processing)的配置信息。
public struct PreTokenizerJson <: JsonDeserializable<PreTokenizerJson>
//表示预分词器(pre-tokenizer)的配置信息。
public struct ModelJson <: JsonDeserializable<ModelJson>
//表示模型(model)的配置信息,包括词汇表(vocab)和合并对(merges)。
public struct TokenizerJson <: JsonDeserializable<TokenizerJson>
//表示整个分词器的配置信息,包含版本、截断(truncation)、填充(padding)、添加的标记、归一化、预分词器、后处理、解码器和模型。
public struct JsonHelper
//辅助模块,提供从 JSON 读取字段的工具函数。
- tokenizer.cj: 实现了分词器的核心逻辑,包括
Tokenizer
类及其子类Tiktoken
和HuggingfaceTokenizer
public open class Tokenizer
//提供了分词器的基本功能和接口。
public class Tiktoken <: Tokenizer
//继承自 `Tokenizer`: 实现了最长匹配策略的分词器。
public class HuggingfaceTokenizer <: Tokenizer
//继承自 `Tokenizer`: 实现了基于 BPE 的分词器。
- main.cj: 包含主函数,用于测试分词器的功能。
- 测试1: 基础编码解码功能验证。
- 测试2: 特殊标记处理验证。
- 测试3: 聊天模板应用验证。
2.2.3 领取你的AI装备
前往Huggingface官网下载Qwen2系列模型(推荐新手模型:QWen2-0.5B-Instruct)
官方传送门 | 国内加速镜像:
https://hf-mirror.com/Qwen/Qwen2-0.5B-Instruct
在Tokenizer项目目录下创建download文件夹。
进入download文件夹中,打开终端窗口执行以下命令直接克隆代码。
git clone https://hf-mirror.com/Qwen/Qwen2-0.5B-Instruct
2.2.4 Cangjie让你的AI开口说话
使用CodeArts IDE for Cangjie打开Tokenizer示例项目。左上角点击文件 > 打开项目,选择前面克隆的示例代码目录Cangjie-Examples下的Tokenizer项目打开。
打开Tokenizer\scr\main.cj,通过CodeArts IDE for Cangjie点击运行。
测试验证
===== 测试一:基础功能 =====
编码结果:[99489, 108386, 3837, 14990, 1879, 0]
解码输出:世界你好,hello world!
===== 测试二:特殊标记处理 =====
特殊标记:<|im_end|>
完整编码:[99489, 108386, 3837, 14990, 1879, 0, 151645]
带标记解码:世界你好,hello world!<|im_end|>
纯净解码:世界你好,hello world!
===== 测试三:对话流解析 =====
输入示例:
<|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
世界你好,hello world!<|im_end|>
<|im_start|>assistant
此刻,您已掌握仓颉分词器的核心功能,它将成为您处理自然语言任务的得力助手,助力探索AI语言模型的无限可能。