跨平台分词利器:仓颉版Tokenizer的Qwen模型适配

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

6d60d5f04533581f4ed71dacf7cc05aa.png{{{width="70%" height="auto"}}}

说明:

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

1.5 资源总览

资源名称规格单价(元)时长(分钟)
华为开发者空间——云主机2vCPU 4GB X86 Ubuntu

4vCPUs 8GB ARM Ubuntu
免费40

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

2.1 开发者空间配置

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

如果还没有领取开发者空间云主机,可以参考免费领取云主机文档领取。

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

a1aae6ff53aac98855ef597dd6899967.png

552fc96c3b58a06e294e4a760ae719e3.PNG

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

产物类型说明

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

28acbca9146a8a6aacbfdd4f6ac3791b.png

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

8aaa6cc304676cf77e05cbf197af18f6.png

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

2.2 Cangjie+Qwen2分词器使用指南

2.2.1 获取你的Tokenizer工具

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

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

339dbb3696703c0dbe87ea720881b46c.png

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

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

c36be360ac4481fb7a42952842bd5691.png

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` 类及其子类 `Tiktoken` 和 `HuggingfaceTokenizer`
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文件夹。

d364a644f50b38a11567bc49d746e9cd.png

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

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

4acbb4c3849dbbf59d675b53c0235fd4.png

2.2.4 Cangjie让你的AI开口说话

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

783601332265b2a0a3d2ffb529c64da8.png

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

2ea384332cf894dc0801e48db712fbdb.png

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值