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 案例流程

跨平台分词利器:基于开发者空间进行仓颉版Tokenizer的Qwen模型适配_仓颉

说明:

  1. 练习使用CodeArts IDE for Cangjie编辑器;
  2. 下载完整Qwen2-0.5B模型;
  3. 仓颉调用本地已部署的Qwen模型;

1.5 资源总览

资源名称

规格

单价(元)

时长(分钟)

华为开发者空间 - 云主机

鲲鹏通用计算增强型 kc2 | 4vCPUs | 8G | Ubuntu

免费

40

最新案例动态,请查阅  《跨平台分词利器:仓颉版Tokenizer的Qwen模型适配》。小伙伴快来领取华为开发者空间,进入云开发环境桌面版实操吧!

2 基于仓颉编程语言的Qwen分词器

2.1 开发者空间配置

面向广大开发者群体,华为开发者空间提供一个随时访问的“开发桌面云主机”、丰富的“预配置工具集合”和灵活使用的“场景化资源池”,开发者开箱即用,快速体验华为根技术和资源。

领取云主机后可以直接进入华为开发者空间工作台界面,点击打开云主机 > 进入桌面连接云主机。

跨平台分词利器:基于开发者空间进行仓颉版Tokenizer的Qwen模型适配_华为开发者空间_02

跨平台分词利器:基于开发者空间进行仓颉版Tokenizer的Qwen模型适配_分词器_03

点击桌面CodeArts IDE for Cangjie,打开编辑器,点击新建工程,名称demo,其他保持默认配置,点击创建

产物类型说明

  • executable,可执行文件;
  • static,静态库,是一组预先编译好的目标文件的集合;
  • dynamic,动态库,是一种在程序运行时才被加载到内存中的库文件,多个程序共享一个动态库副本,而不是像静态库那样每个程序都包含一份完整的副本。

跨平台分词利器:基于开发者空间进行仓颉版Tokenizer的Qwen模型适配_华为开发者空间_04

创建完成后,打开src/main.cj,点击编辑器右上角运行按钮直接运行,终端窗口可以看到打印内容。

跨平台分词利器:基于开发者空间进行仓颉版Tokenizer的Qwen模型适配_华为开发者空间_05

CodeArts IDE for Cangjie的入门使用介绍就到这里,接下来我们进行分词器的学习。

2.2 Cangjie+Qwen2分词器使用指南

2.2.1 获取你的Tokenizer工具

前往仓颉gitcode论坛官网下载Cangjie-Examples项目完整代码
gitcode:

https://gitcode.com/Cangjie/Cangjie-Examples

跨平台分词利器:基于开发者空间进行仓颉版Tokenizer的Qwen模型适配_仓颉_06

进入云主机桌面,右键选择Open Terminal Here打开终端命令窗口,克隆仓颉示例代码仓库。

git clone https://gitcode.com/Cangjie/Cangjie-Examples.git

跨平台分词利器:基于开发者空间进行仓颉版Tokenizer的Qwen模型适配_分词器_07

2.2.2 Tokenizer项目结构简介

分词器(Tokenizer),主要用于将自然语言文本转换为模型可以理解的标记(tokens),以及将模型生成的标记转换回自然语言文本。分词器在自然语言处理(NLP)任务中扮演着至关重要的角色,因为它直接影响到模型的输入和输出的质量。

  1. 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 读取字段的工具函数。
  1. tokenizer.cj: 实现了分词器的核心逻辑,包括 Tokenizer 类及其子类 TiktokenHuggingfaceTokenizer
public open class Tokenizer
//提供了分词器的基本功能和接口。
public class Tiktoken <: Tokenizer
//继承自 `Tokenizer`: 实现了最长匹配策略的分词器。
public class HuggingfaceTokenizer <: Tokenizer
//继承自 `Tokenizer`: 实现了基于 BPE 的分词器。
  1. 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文件夹。

跨平台分词利器:基于开发者空间进行仓颉版Tokenizer的Qwen模型适配_华为开发者空间_08

进入download文件夹中,打开终端窗口执行以下命令直接克隆代码。

git clone https://hf-mirror.com/Qwen/Qwen2-0.5B-Instruct

跨平台分词利器:基于开发者空间进行仓颉版Tokenizer的Qwen模型适配_分词器_09

2.2.4 Cangjie让你的AI开口说话

使用CodeArts IDE for Cangjie打开Tokenizer示例项目。左上角点击文件 > 打开项目,选择前面克隆的示例代码目录Cangjie-Examples下的Tokenizer项目打开。

跨平台分词利器:基于开发者空间进行仓颉版Tokenizer的Qwen模型适配_分词器_10

跨平台分词利器:基于开发者空间进行仓颉版Tokenizer的Qwen模型适配_华为开发者空间_11

打开Tokenizer\scr\main.cj,通过CodeArts IDE for Cangjie点击运行。

跨平台分词利器:基于开发者空间进行仓颉版Tokenizer的Qwen模型适配_华为开发者空间_12

测试验证
===== 测试一:基础功能 =====

编码结果:[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语言模型的无限可能。