首页 > 其他分享 >HuggingFace | 各种tokenizer有啥区别

HuggingFace | 各种tokenizer有啥区别

时间:2023-07-30 11:55:12浏览次数:35  
标签:tokenizer MT5Tokenizer text 模型 区别 HuggingFace 分词 输入

在 Hugging Face 中,有多种不同的 tokenizer 实现可供选择,每种实现都有其独特的优缺点和用途。

  1. BertTokenizer:适用于 BERT 模型,支持 WordPiece 分词和 Byte-Pair Encoding(BPE)分词算法。它还支持对输入序列进行截断和填充,以适应模型的输入要求。
  2. RobertaTokenizer:适用于 RoBERTa 模型,与 BertTokenizer 类似,但使用的是更大的词表和更严格的分词规则。同时,它还支持处理 Unicode 字符和多语言文本。
  3. AlbertTokenizer:适用于 ALBERT 模型,采用 SentencePiece 分词算法,支持截断和填充等功能。
  4. GPT2Tokenizer:适用于 GPT-2 模型,采用 Byte-Pair Encoding(BPE)分词算法,支持截断和填充等功能。它还支持对特殊标记进行编码,如 [CLS][SEP][MASK]
  5. XLNetTokenizer:适用于 XLNet 模型,支持 SentencePiece 分词算法和 Transformer-XL 模型的相对位置编码。它还支持对输入序列进行截断和填充,以适应模型的输入要求。
  6. ElectraTokenizer:适用于 ELECTRA 模型,也支持 WordPiece 分词和 Byte-Pair Encoding(BPE)分词算法,同时还支持生成嵌入式掩码(masked embeddings)。

MT5Tokenizer

MT5Tokenizer 是 Hugging Face 中用于 Multilingual Translation 5(MT5)模型的分词器。MT5 模型是 Google 最近发布的一种基于 Transformer 的多语言翻译模型,它可以同时处理多种语言之间的翻译任务,包括文本翻译、语音翻译等。

MT5Tokenizer 基于 SentencePiece 分词算法实现,使用了与 MT5 模型相同的词汇表。它支持对多语言文本进行分词,并可以将分词结果转换为模型可接受的输入格式

导入 MT5Tokenizer:导入 MT5Tokenizer 类,并使用 from_pretrained 方法加载预训练的 MT5Tokenizer 分词器。

from transformers import MT5Tokenizer

tokenizer = MT5Tokenizer.from_pretrained("google/mt5-small")

对输入文本进行分词:使用 tokenizer.encode 方法对输入文本进行分词,生成 token id 序列。

text = "Hello, how are you?"
encoded_text = tokenizer.encode(text)
input_ids = encoded_text.input_ids

将分词结果转换为模型的输入格式:根据模型的输入格式要求,对分词结果进行适当的截断和填充,并将其转换为 PyTorch 或 TensorFlow 张量。

import torch

max_length = 128
padding = "max_length"
truncation = True

# 对分词结果进行截断和填充
encoded_text = tokenizer.encode_plus(
    text,
    max_length=max_length,
    padding=padding,
    truncation=truncation,
    return_tensors="pt",
)

# 转换为 PyTorch 张量
input_ids = encoded_text["input_ids"]
attention_mask = encoded_text["attention_mask"]

需要注意的是,MT5Tokenizer 是专门为 MT5 模型设计的分词器,但是可以用于其他模型。

比如:

mGPT 模型和mT5 模型都使用的 MT5Tokenizer 分词器,我们看看两个模型文件中分词器的区别。

mGPT 模型文件

mT5 模型文件

由于 MT5Tokenizer 基于 SentencePiece 分词算法实现,所以两个模型的spiece.model文件相同,tokenizer_config.jsonspecial_tokens_map.json大致相同。

总结

  • 在选择 tokenizer 时,需要根据具体的任务和数据集的特点来进行选择。同时,还需要考虑 tokenizer 的性能、速度、词表大小等因素。如果您不确定该使用哪种 tokenizer,可以尝试使用 Hugging Face 的 AutoTokenizer 类,它会自动根据模型类型选择最适合的 tokenizer。

标签:tokenizer,MT5Tokenizer,text,模型,区别,HuggingFace,分词,输入
From: https://www.cnblogs.com/zhangxuegold/p/17591222.html

相关文章

  • watch和computed的区别
    官方文档vue-计算属性computed——>计算属性官方对于计算属性的解释是:对于任何复杂逻辑,你都应当使用计算属性。计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。个人理解:计算属性是为了模板中的表达式简洁,易维护,符合用于简单运算的设计......
  • VS选择Visual C++中的控制台项目和空项目、Windows桌面应用程序三者之间有什么区别?
    在VisualStudio中创建C/C++项目时,可以选择控制台项目、空项目和Windows桌面应用程序,它们有以下区别:控制台项目(ConsoleApplication):这种项目类型适用于命令行应用程序的开发。它提供一个命令行界面,可以在控制台中进行输入和输出操作,通常用于简单的控制台程序,如计算器、文件......
  • Modbus tcp转ETHERCAT网关modbus tcp主从站区别
    捷米JM-ECT-TCP网关能够连接到Modbustcp总线和ETHERCAT总线中,实现两种不同协议设备之间的通讯。这个网关能够大大提高工业生产的效率和生产效益,让生产变得更加智能化。捷米JM-ECT-TCP是自主研发的一款ETHERCAT 从站功能的通讯网关。该产品主要功能是将ETHERCAT 网络和MODBU......
  • ETHERNET/IP转RS485/RS232网关ethernet和tcp/ip的区别
    网络数据传输遇到的协议不同、数据互通麻烦等问题,一直困扰着大家。然而,现在有一种神器——捷米JM-EIP-RS485/232,它将ETHERNET/IP网络和RS485/RS232总线连接在一起,让数据传输更加便捷高效。那么,它是如何实现这一功能的呢?JM-EIP-RS485/232是一款自主研发的通讯网关,可以在ETHERNET/......
  • HuggingFace | HuggingFace中from_pretrained函数的加载
    我们使用huggingface的from_pretrained()函数加载模型和tokenizer,那么加载这些需要什么文件?加载模型测试代码:如果加载成功,就打印1。fromtransformersimportAutoModelForMaskedLMmodel=AutoModelForMaskedLM.from_pretrained("./bert-base-chinese")print(1)文件目......
  • Huggingface | 修改模型的embedding
    目标:在NLP领域,基于公开语料的预训练模型,在专业领域迁移时,会遇到专业领域词汇不在词汇表的问题,本文介绍如何添加专有名词到预训练模型。NLP的处理流程:对输入的句子进行分词,得到词语及下标通过embedding层获得词语对应的embeddingembedding送入到预训练模型,经过attention注意......
  • SAP CDS view 定义的数据库视图和传统 SQL 语句定义视图的区别
    SAPCDS(CoreDataServices)是SAPHANA数据模型开发的一种技术。它提供了一种领域特定的语言,用于定义数据模型,以及对数据进行查询、转换和展示。与传统的SQL(StructuredQueryLanguage)相比,SAPCDSview语法具有许多独特的特点和优势。在本文中,我将详细比较SAPCDSview语......
  • SAP CDS View 和 SAP HANA View 的区别
    SAPCDS(CoreDataServices)视图和SAPHANA视图都是用于数据提取和模型化的工具。它们的主要区别在于创建位置、语法、性能优化等方面。具体的区别和联系如下:创建位置:SAPCDS视图是在ABAP层创建的,它们是ABAP字典的一部分。另一方面,SAPHANA视图是在数据库层创建的,它们存在于HANA......
  • worry和worried的区别
    worry和worried的区别是worry既是名词,又是动词。  1、从时态方面讲,worried是worry的过去式,从主被动方面讲,worry是主动式,worried是被动式,动词的被动式是be+这个单词的过去形式,beworriedabout表示一个状态,而worryabout表示一个动作,就像determinetodosth和bedetermi......
  • Vue 2 和 Vue 3 中 toRefs的区别
    摘要:本文将介绍Vue2和Vue3中toRefs函数的不同用法和行为,并解释其在各个版本中的作用。正文:Vue是一款流行的JavaScript框架,用于构建用户界面。在Vue2和Vue3中,都存在一个名为toRefs的函数,但其行为在这两个版本中有所不同。Vue2中的toRefs在Vue2中,使用......