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)

实操

指定单个文件

参考:
https://www.utheme.cn/aigc/28687.html

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

指定路径

参考:
https://job.yanxishe.com/blogDetail/18050

from tokenizers import Tokenizer
from tokenizers.models import BPE
from tokenizers.trainers import BpeTrainer
from tokenizers.pre_tokenizers import Whitespacefrom pathlib import Pathdef 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的文本数据的路径##files = ["/home/lianap/llm/datasets/test/rm-static/dataset_infos.json"] # 替换为你用来训练tokenizer的文本数据的路径#files = ["/home/lianap/tokenizers/zho_news_2020_10K/zho_news_2020_10K-words.txt"] # 替换为你用来训练tokenizer的文本数据的路径#tokenizer.train(files, trainer)paths = [str(x) for x in Path("./zho_news_2020_10K/").glob("**/*.txt")]#tokenizer.train(files=paths, vocab_size=52_000, min_frequency=2, special_tokens=[#    "<s>",#    "<pad>",#    "</s>",#    "<unk>",#    "<mask>",#])tokenizer.train(files=paths, trainer=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 = "这是一个测试句子。"
#text = "测试字符串的tokens数量。"
#text = "hello world"
print(count_tokens(text, tokenizer))

tokenizers2

收藏

https://zhuanlan.zhihu.com/p/591335566
https://blog.csdn.net/m0_74053536/article/details/134151336

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

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

相关文章

备案信息一键查询:网站备案信息查询API的操作与优势

前言 在当今数字化的时代&#xff0c;企业的在线存在至关重要。而为了确保在网络空间的法规合规性&#xff0c;了解和管理网站备案信息变得尤为重要。为了使这一过程更为高效、便捷&#xff0c;网站备案信息查询API应运而生&#xff0c;为企业提供了一种简便的方式来获取和管理…

C++_String增删查改模拟实现

C_String增删查改模拟实现 前言一、string默认构造、析构函数、拷贝构造、赋值重载1.1 默认构造1.2 析构函数1.3 拷贝构造1.4 赋值重载 二、迭代器和范围for三、元素相关&#xff1a;operator[ ]四、容量相关&#xff1a;size、resize、capacity、reserve4.1 size、capacity4.2…

斯坦福NLP课程来了

生成式AI&#xff0c;尤其是以ChatGPT为首的大语言模型正在改变人们的生活方式&#xff0c;我想一定有小伙伴想加入NLP这个行列。 微软重磅发布4个适合初学者的机器学习资料 我在前一篇文章中分享了微软人工智能初学者课程&#xff0c;其中的【生成式AI】非常适合初学者&…

五大匹配算法

五大匹配算法 五大匹配算法 BF 匹配、RK 匹配、KMP 匹配、BM 匹配、Sunday 匹配。 1、BF 匹配 // BF 匹配&#xff08;暴力匹配&#xff09; public static int bfMatch(String text, String pattern) {char[] t text.toCharArray();char[] p pattern.toCharArray();int i …

CCF CSP认证 历年题目自练Day48

题目 试题编号&#xff1a; 201803-3 试题名称&#xff1a; URL映射 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述   URL 映射是诸如 Django、Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件。对于从浏览器发来的 H…

渗透测试高级技巧(二):对抗前端动态密钥与非对称加密防护

在前文的技术分享中&#xff0c;我们描述了验签和静态对称加密&#xff08;静态密钥 AES&#xff09;的常见场景&#xff0c;大家我相信遇到类似的加解密清醒&#xff0c;基本都可以通过热加载的基本使用获得破解前端加密解密的方法&#xff0c;达到一个比较好的测试状态。 在…

定时器的使用

目录 前言 正文 1.方法 schedule(TimerTask task, Date time) 的测试 &#xff08;1&#xff09;执行任务的时间晚于当前时间(在未来执行)的效果 &#xff08;2&#xff09;线程TimerThread不销毁的原因 &#xff08;3&#xff09;使用 public void cancel() 方法实现 T…

阿里云高效计划学生和老师免费代金券申请认证方法

阿里云高校计划学生和教师均可参与&#xff0c;完成学生认证和教师验证后学生可以免费领取300元无门槛代金券和3折优惠折扣&#xff0c;适用于云服务器等全量公共云产品&#xff0c;订单原价金额封顶5000元/年&#xff0c;阿里云百科aliyunbaike.com分享阿里云高校计划入口及学…

不是说人工智能是风口吗,那为什么工作还那么难找?

最近确实有很多媒体、机构渲染人工智能可以拿高薪&#xff0c;这在行业内也是事实&#xff0c;但前提是你有足够的竞争力&#xff0c;真的懂人工智能。 首先&#xff0c;人工智能岗位技能要求高&#xff0c;人工智能是一个涵盖了多个学科领域的综合性学科&#xff0c;包括数学、…

LiteOS同步实验(实现生产者-消费者问题)

效果如下图&#xff1a; 给大家解释一下上述效果&#xff1a;在左侧&#xff08;顶格&#xff09;的是生产者&#xff08;Producer&#xff09;&#xff1b;在右侧&#xff08;空格&#xff09;的是消费者&#xff08;Consumer&#xff09;。生产者有1个&#xff0c;代号为“0”…

Scala如何写一个通用的游戏数据爬虫程序

以前想要获取一些网站数据的时候&#xff0c;都是通过人工手动复制粘贴&#xff0c;这样的效率及其低下。数据少无所谓&#xff0c;如果需要采集大量数据&#xff0c;手动就显得乏力了。半夜睡不着&#xff0c;爬起来写一段有关游戏商品数据的爬虫通用模板&#xff0c;希望能帮…

Git——感谢尚硅谷官方文档

Git——尚硅谷学习笔记 第1章 Git 概述1.1 何为版本控制1.2 为什么需要版本控制1.3 版本控制工具1.4 Git 简史1.5 Git 工作机制1.6 Git 和代码托管中心 第2章 Git 安装第 3 章 Git 常用命令3.1 设置用户签名3.2 初始化本地库3.3 查看本地库状态3.4 添加暂存区3.4.1 将工作区的文…