tokenizers Tokenizer 类

Tokenizer 类

依赖安装

pip install tensorflow
pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple

基类原型

tokenizers.Tokenizer(model)

基类说明

Tokenizer 函数构造一个分词器对象。分词方式主要有word-level、subword-level、char-level三种,其中,subword-level分词方式又有四种不同实现的方法:BPE、Unigram、WordPiece、SentencePiece。
参数 model 表示分词器使用的分词方式,接受一个Model对象,这里主要实现了 word-level 的分词方式以及 subword-level 的分词方式。Tokenizer 类主要的方法有:

# 从指定文件加载 Tokenizer 对象。
from_file(path)
# 从Hugging Face Hub官网上加载一个已存在的Tokenizer对象。参数identifier 就是加载的对象模型。
from_pretrained(identifier, revision = ‘main’, auth_token = None)
# 从 json 格式的字符串来加载 Tokenizer 对象。
from_str(json)
# 从缓冲区来加载 Tokenizer 对象。
from_buffer(buffer)
# 对于给定的一个分句进行编码,返回一个Encoding 对象。参数 pair 表示第二个分句。参数 is_pretokenized 表示是否已经预分词化,如果为 True,则输入的 sequence 和 pair 都应该为一个列表。
encode(sequence, pair = None, is_pretokenized = False, add_special_tokens = True)
# 对多个分句进行编码,返回一个 Encoding 对象。
encode_batch(input, is_pretokenized = False, add_special_tokens = True)
# 表示对一个 id 序列进行解码,将 id 映射为字符串。参数 skip_special_tokens 表示是否跳过特殊的字符串。这些特殊的字符串是由 add_special_tokens 函数来创建的。
decode(ids, skip_special_tokens = True)
# 表示对多个 id 序列进行解码。
decode_batch(sequences, skip_special_tokens = True)
# 添加新的分词,这些分词会添加到词汇表中。
add_tokens(tokens)
# 添加特殊的分词到词汇表中,与 add_tokens 函数不同的是,这些特殊的分词可以在解码时被忽略。
add_special_tokens(tokens)
# 设置在进行 encode_batch 操作时,当各个分句的长度不一样时应用填充。
enable_padding(direction = ‘right’, pad_id = 0, pad_type_id = 0, pad_token =[PAD], length = None, pad_to_multiple_of = None)
# 设置在进行 encode_batch 操作时,当各个分句的长度不一样时对分句进行截取。
enable_truncation(max_length, stride = 0, strategy = ‘longest_first’, direction = ‘right’)
# 禁用填充。
no_padding()
# 禁用截取。
no_truncation()
# 保存 tokenizer 模型(一个 json 文件)到指定路径,参数 pretty 表示用一行还是多行来表示 json 文件,默认为多行。
save(path, pretty = True)
# 用指定文件列表里面的数据来训练分词器。
train(files, trainer = None)
# 将单个 id 转换成单个字符。
id_to_token(id)
# 将单个字符转换成单个 id。
token_to_id(token)

函数使用

tokenizer 模型的加载

# 第一种加载方式
# 从 json 文件中加载 tokenizer 对象
tokenizer0 = tokenizers.Tokenizer.from_file("./tokenizer4/vocab.json")
# 从 hugging face 官网中在线加载 tokenzier 对象
tokenizer1 = tokenizers.Tokenizer.from_pretrained("distilbert-base-uncased")
# 根据 json 文件的内容字符串来加载 tokenizer 对象
with open("./tokenizer4/vocab.json", "r", encoding="utf8") as file:json_dict = json.load(file)json_string = json.dumps(json_dict)
tokenizer2 = tokenizers.Tokenizer.from_str(json_string)# 第二种加载方式
tokenizer = tokenizers.Tokenizer()
tokenizer.model = models.BPE().from_file(vocab="./tokenizer4/vocab.json", merges="./tokenizer4/merges.txt")

tokenizer 模型的训练

# 中文分词方式,除了 BPE,还有 WordPiece、Unigram 两种
tokenizer = tokenizers.Tokenizer(models.BPE())
tokenizer.pre_tokenizer = pre_tokenizers.Whitespace()
tokenizer.decoder = decoders.BPEDecoder()
trainer = trainers.BpeTrainer()
tokenizer.train(["ch_demo_sm.txt"], trainer)# 英文分词方式,word-level 分词方式
tokenizer = tokenizers.Tokenizer(models.WordLevel())
tokenizer.pre_tokenizer = pre_tokenizers.Whitespace()
trainer = trainers.WordLevelTrainer(special_tokens=["[PAD]"])
tokenizer.train(["en_demo_sm.txt"], trainer)# 英文分词方式,subword-level 分词方式
# 这里使用 wordpiece 分词方法
tokenizer = tokenizers.Tokenizer(models.WordPiece())
tokenizer.pre_tokenizer = pre_tokenizers.Whitespace()
trainer = trainers.WordPieceTrainer(special_tokens=["[PAD]"])
tokenizer.train(["en_demo_sm.txt"], trainer)

tokenizer 模型的保存

# 使用 tokenizer.save 函数保存,会生成一个 vocab.json 文件
tokenizer.save("./tokenizer4/vocab.json")# 使用 tokenizer.model.save 保存,会生成一个 vocab.json 和一个 merges.txt 文件
# 注意这个 vocab.json 和上面的 vocab.json 文件内容不一样。
tokenizer.model.save("./tokenizer4")

使用 tokenizer 模型进行 encode 和 decode 操作

# 编码一个句子
encoding0 = tokenizer.encode("any attempt to leave surprises me.")
# 编码一个有两个分句的句子
encoding1 = tokenizer.encode("any attempt to leave surprises me.", pair="arrival of John dead surprised me.")
# 参数 is_pretokenized=True 时,参数 sequence 应为一个列表
encoding2 = tokenizer.encode(["any attempt to leave surprises me."],is_pretokenized=True)
# 编码多个句子
encodings0 = tokenizer.encode_batch(["any attempt to leave surprises me.","the arrival of John dead surprised me."])
# 编码多个有两个分词的句子
encodings1 = tokenizer.encode_batch([("any attempt to leave surprises me.", "John's arrival dead surprised me."),("John's attempt to leave surprised me.", "the arrival of John dead surprised me.")])
# 参数 is_pretokenized=True 时,参数 sequence 应为一个列表
encodings2 = tokenizer.encode_batch([["any attempt to leave surprises me."],["the arrival of John dead surprised me."]], is_pretokenized=True)# 对一个 ids 进行解码
decode_string = tokenizer.decode(encoding1.ids, skip_special_tokens=False)
# 对多个 ids 进行解码
decode_strings = tokenizer.decode_batch([encodings1[0].ids, encodings1[1].ids])# 将单词变成 id
token_id = tokenizer.token_to_id("me")
# 将 id 变成单词
token = tokenizer.id_to_token(62)

实操

from tokenizers import Tokenizer
from tokenizers.models import BPE
from tokenizers.trainers import BpeTrainer
from tokenizers.pre_tokenizers import Whitespacedef train_tokenizer():# 创建一个空的 BPE 模型tokenizer = Tokenizer(BPE())# 创建一个 Trainer,并指定一些训练参数trainer = BpeTrainer(special_tokens=["<s>", "<pad>", "</s>", "<unk>", "<mask>"])# 创建一个 PreTokenizerpre_tokenizer = Whitespace()# 使用 Trainer 和 PreTokenizer 训练 BPE 模型tokenizer.pre_tokenizer = pre_tokenizer#files = ["/path/to/your/dataset.txt"] # 替换为你用来训练tokenizer的文本数据的路径# 参考地址:https://job.yanxishe.com/blogDetail/18050# 下载地址:https://wortschatz.uni-leipzig.de/en/download/Chinesefiles = ["/home/*/tokenizers/zho_news_2020_10K/zho_news_2020_10K-words.txt"]tokenizer.train(files, trainer)return tokenizerdef count_tokens(text, tokenizer):# 使用 tokenizer 将文本转化为 tokensoutput = tokenizer.encode(text)print("count_tokens", output.tokens)print("count_tokens", output)# 输出的 tokens 的数量return len(output.tokens)# 创建 tokenizer
tokenizer = train_tokenizer()# 测试字符串的 tokens 数量
text = "这是一个测试句子。"
print(count_tokens(text, tokenizer))

运行结果
tokenizers

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/154405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试/人工智能丨人工智能取代软件测试团队

在数字时代&#xff0c;人工智能&#xff08;AI&#xff09;和软件测试如同两位不同领域的英雄&#xff0c;各自拥有独特的技能和力量。然而&#xff0c;当这两者碰撞在一起时&#xff0c;究竟会擦出怎样的火花呢&#xff1f;让我们进入这场奇妙的对决&#xff0c;探索AI如何改…

MFC项目添加CUDA支持

文章目录 前言一、开启项目CUDA支持二、链接CUDA库三、链接cu文件 前言 我目前的项目状况是&#xff1a; 拥有一个MFC项目&#xff1b;拥有现成的 .cuh文件 和 .cu文件。 我想做的是&#xff1a;将.cuh和.cu文件放到我的项目中&#xff0c;并且编译成功跑起来 一、开启项目C…

Halcon (0):C# 联合Halcon方式简介和就业市场说明

文章目录 文章专栏视频资源前言相关视频联合C#开发直接导出C#代码Halcon引擎调用开发函数封装库工程导出 总结就业市场 文章专栏 Halcon开发 视频资源 机器视觉之C#联合Halcon 前言 根据我的测试&#xff0c;我发现Halcon和WPF中的halcon插件&#xff0c;代码具有对应性。就是…

Unity - 实现模型动态伸长缩短,贴图不变形(材质球参数篇)

思路为修改模型材质球的Tiling参数&#xff0c;根据与自身localScale的值得到合适的比例&#xff0c;再修改Tiling值 var mat target.transform.GetComponent<Renderer>().material; var oriValue mat.mainTextureScale;//沿着Y轴伸缩 oriValue.y 1 * target.transfo…

HCIP-二、MSTP+Eth-trunk

二、MSTPEth-trunk 实验拓扑实验需求及解法 实验拓扑 实验需求及解法 //1.如图所示&#xff0c;配置设备名称和 IP 地址。 //2.在 SW1 与 SW2 之间配置链路聚合协议 LACP&#xff0c;完成以下需求&#xff1a; //2.1 SW1 作为主动端&#xff0c;设置系统优先级为最高。 [SW1]l…

报错!Jupyter notebook 500 : Internal Server Error

Jupyter notebook 报错 500 : Internal Server Error 问题背景 tensorflow-gpu环境&#xff0c;为跑特定代码专门开了一个环境&#xff0c;使用conda安装了Jupyter notebook&#xff0c;能够在浏览器打开Jupyter notebook&#xff0c;但是notebook打开ipynb会报错。 问题分析…

Android——Gradle插件项目根目录settings.gradle和build.gradle

一、settings.gradle结构分析 项目根目录下的settings.gradle配置文件示例&#xff1a; pluginManagement {/*** The pluginManagement.repositories block configures the* repositories Gradle uses to search or download the Gradle plugins and* their transitive depen…

【excel技巧】单元格内的公式如何隐藏?

Excel文件中最重要的除了数据还有就是一些公式了&#xff0c;但是只要点击单元格&#xff0c;公式就能显示出来&#xff0c;如果不想别人看到公式应该如何设置呢&#xff1f;今天分享隐藏excel单元格数据的方法。 选中单元格&#xff0c;点击右键打开【设置单元格格式】&#x…

电脑显示找不到mfc140.dll怎么办?哪个修复方法值得推荐

在电脑使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;例如"mfc140.dll文件缺失"这个问题可能会导致某些应用程序无法正常运行&#xff0c;可能给您带来困扰。本篇文章为您提供了六种有效解决此类问题的策略&#xff0c;使您能够迅速修复并恢复应用程…

一篇文章带你了解Python常用自动化测试框架 —— Pytest

在之前的文章里我们已经学习了Python自带测试框架UnitTest&#xff0c;但是UnitTest具有一定的局限性 这篇文章里我们来学习第三方框架Pytest&#xff0c;它在保留了UnitTest框架语法的基础上有着更多的优化处理 下面我们将从以下角度来介绍Pytest&#xff1a; Pytest基本介绍…

mac系统安装docker desktop

Docker的基本概念 Docker 包括三个基本概念: 镜像&#xff08;Image&#xff09;&#xff1a;相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。比如说nginx,mysql,redis等软件可以做成一个镜像。容器&#…

什么是高防CDN?有什么优势?

德迅高防CDN技术概述 随着互联网的快速发展&#xff0c;网络安全问题越来越受到人们的关注。高防CDN(Content Delivery Network)作为一种有效的网络安全防御手段&#xff0c;在企业和个人网站中得到了广泛应用。本文将详细介绍高防CDN的技术原理、防御原理、优点和应用场景&am…

如何验证命令执行漏洞(无回显)

如何验证命令执行漏洞&#xff08;无回显&#xff09; 使用yakit&#xff0c;选择dnslog模块 点击生成一个可用域名 以dvwa为例 命令执行ping一下刚才的域名 随后yakit中会出现回显信息&#xff0c;以此证明拥有命令执行漏洞 信息&#xff0c;以此证明拥有命令执行漏洞

【Java】乡镇卫生院、社区卫生服务中心云HIS源码

云HIS采用云端SaaS服务的方式提供&#xff0c;用户通过浏览器即能访问&#xff0c;无需关注系统的部署、维护、升级等问题&#xff0c;系统充分考虑了模板化、配置化、智能化、扩展化等设计方法&#xff0c;覆盖了基层医院机构的主要工作流程&#xff0c;能够与监管系统有序对接…

TensorFlow实战教程(十八)-Keras搭建卷积神经网络及CNN原理详解

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章详细讲解了Keras实现分类学习,以MNIST数字图片为例进行讲解。本篇文章详细讲解了卷积神经网络CNN原理,并通过Keras编写CNN实现了MNIST分类学习案例。基础性文章,希望对您有所帮助! 一…

vite vue3配置axios

准备 参考 安装axios yarn add axios中文官网 src下新建request文件夹&#xff0c;该文件下新建index.ts import axios from axios; import { ElMessage } from element-plus;// const errorCodeType function (code: number): string { // let errMessage: string 未知…

一阶低通滤波器(一阶巴特沃斯滤波器)

连续传递函数G(s) 离散传递函数G(z) 转换为差分方程形式 一阶巴特沃斯滤波器Filter Designer参数设计&#xff1a;参考之前的博客Matlab的Filter Designer工具设计二阶低通滤波器 设计采样频率100Hz&#xff0c;截止频率20Hz。 注意&#xff1a;设计参数使用在离散系统中&…

【性能测试】稳定性/并发压力测试的TPS计算+5W并发场景设计...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、稳定性测试TPS…

AI生成技术威胁版权保护,水印技术和法律完善是关键/安圭拉小岛以.ai域名注册赚得3000万美元 |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 AI生成技术威胁版权保护&#xff0c;水印技术和法律完善是关键 Sam Altman对…

软件外包开发的验收流程

软件外包开发的验收流程是确保项目符合预期标准并满足客户需求的关键步骤。以下是一个通用的软件外包开发验收流程&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.明确验收标准&#xff1a; 在项目…