首页 > 其他分享 >HuggingFace的transformers 库中的tokenizer介绍

HuggingFace的transformers 库中的tokenizer介绍

时间:2024-08-11 22:49:14浏览次数:14  
标签:transformers tokenizer 词汇表 HuggingFace ID token 文本 分词

在自然语言处理中,tokenizer 是一个非常关键的组件,它将文本转化为模型可以理解的格式。这个过程通常包括以下几个步骤:

1. 文本标准化

  • 小写化:将所有文本转换为小写,以减少不同形式的单词(如 "Apple" 和 "apple")被视为不同词的情况。
  • 去除标点符号:删除或替换标点符号,不过在某些场景下,保留标点符号可能是有必要的,因为它们包含情感或语法信息。
  • 去除特殊字符:移除不必要的字符,比如 HTML 标签或其他非语言符号。

2. 分词(Tokenization)

  • 按空格分词:最简单的方式是按空格分词,将每个单词视为一个 token。但这无法处理复杂情况,如多词短语或连接符。
  • 子词分词(Subword Tokenization):例如在 BERT 和 RoBERTa 中使用的 Byte-Pair Encoding (BPE) 或 WordPiece。这些算法会将罕见词拆分为更小的子词,从而减少词汇量,并提高模型处理新词或罕见词的能力。
  • 字符级分词:将每个字符视为一个 token,适用于处理拼写错误频繁或词汇量特别大的情况。

3. 词汇表映射

  • 词汇表构建tokenizer 会使用一个预定义的词汇表(vocabulary)或在训练过程中构建的词汇表。词汇表中每个 token 都对应一个唯一的 ID。
  • 未知词处理:对于词汇表中没有的词,通常会用一个特殊的 <UNK> token 或者将其拆分为已知的子词来表示。

4. 附加特殊标记

  • 起始标记和结束标记:例如 <CLS> 用于句子开头,<SEP> 用于句子分隔。BERT 和 RoBERTa 等模型会在输入句子时添加这些标记。
  • 填充(Padding):为了使输入批次中的所有序列具有相同长度,短于最大长度的序列会被填充,通常使用 <PAD> token。

5. 编码(Encoding)

  • Token ID 转换:将每个 token 转换为词汇表中的对应 ID。
  • 生成注意力掩码(Attention Mask):对于填充的部分生成一个掩码,用于告知模型忽略这些部分。
  • 位置编码(Positional Encoding):有些模型需要为每个 token 提供位置编码,以保持序列信息(尽管这个步骤通常由模型内部处理)。

6. 返回编码后的输出

  • 最终,tokenizer 会输出一个包含 token ID 的序列,注意力掩码,以及可能的其他辅助信息,如 token 类型 ID(用于区分句子 A 和句子 B)。

示例:Hugging Face 的 transformers 库中的 tokenizer

from transformers import RobertaTokenizer

# 加载预训练的 RoBERTa tokenizer
tokenizer = RobertaTokenizer.from_pretrained('roberta-base')

# 输入文本
text = "Hello, how are you?"

# 执行tokenizer,包含分词、词汇表映射、添加特殊标记等步骤
tokens = tokenizer(text, padding=True, truncation=True, return_tensors="pt")

# 打印输出
print(tokens)

在这个示例中,tokenizer 将文本 "Hello, how are you?" 转换为 RoBERTa 模型可以接受的格式,包括 token ID、注意力掩码等。

总结

tokenizer 是将自然语言文本转化为模型输入的关键组件。它包含文本标准化、分词、词汇表映射、添加特殊标记、编码等多个步骤,使得模型能够理解和处理输入文本。

标签:transformers,tokenizer,词汇表,HuggingFace,ID,token,文本,分词
From: https://www.cnblogs.com/chentiao/p/18354059

相关文章

  • HuggingFace:使用 Transformer 对 DNA 序列进行高效大规模嵌入提取
    我有一个非常大的数据框(60+百万行),我想使用转换器模型来获取这些行(DNA序列)的嵌入。基本上,这首先涉及标记化,然后我可以获得嵌入。由于RAM限制,我发现标记化然后将所有内容嵌入到一个py文件中是行不通的。这是我发现的解决方法,适用于大约3000万行的数据帧(但不适用于较大的d......
  • [Paper Reading] DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT D
    DEFORMABLEDETR:DEFORMABLETRANSFORMERSFOREND-TO-ENDOBJECTDETECTIONlink时间:2021(ICLR)机构:Sensetime&USTC&CUHKTL;DR参考2DDeformableConv,通过在ReferencePoint附近增加samplepoints,将DETR的收敛速度提升10倍,对于小目标效果也更好。Method背景知识:参考......
  • 为什么 Langchain HuggingFaceEmbeddings 模型尺寸与 HuggingFace 上所述的不一样
    我使用的是langchainHuggingFaceEmbeddings模型:dunzhang/stella_en_1.5B_v5。当我查看https://huggingface.co/spaces/mteb/leaderboard时,我可以看到型号是8192。但当我这样做时len(embed_model.embed_query("heyyou"))它给了我1024。请问为什么会有这种差......
  • Scalable Diffusion Models with Transformers(DIT)代码笔记
    完整代码来源:DiTDiT模型主要是在diffusion中,使用transformer模型替换了UNet模型,使用class来控制图像生成。根据论文,模型越大,patchsize越小,FID越小。模型越大,参数越多,patchsize越小,参与计算的信息就越多,模型效果越好。模型使用了Imagenet训练,有1000个分类,class_labe......
  • 无法在 Llama Index 中加载 HuggingFace Embeddings llama3.1
    我有一个非常简单的代码,如下所示:fromllama_index.embeddings.huggingfaceimportHuggingFaceEmbeddingembed_model=HuggingFaceEmbedding(model_name="meta-llama/Meta-Llama-3-8B")我看到这个模型,meta-llama/Meta-Llama-3-8B,只有4.5GB,而我有16GBRAM,最多只使用20......
  • AI论文阅读笔记 | Timer: Generative Pre-trained Transformers Are Large Time Serie
    一、基本信息题目:Timer:GenerativePre-trainedTransformersAreLargeTimeSeriesModels会议:ICML2024原文:https://arxiv.org/abs/2402.02368源码:​​​​​​​https://github.com/thuml/Timer二、基本内容 1、解决什么问题虽然深度学习对时间序列的分析做出了显著......
  • Coggle数据科学 | Kaggle干货:自定义transformers数据集
    本文来源公众号“Coggle数据科学”,仅用于学术分享,侵权删,干货满满。原文链接:Kaggle干货:自定义transformers数据集transformers是现在NLP同学必备的库,但在使用的过程中主要的代码是需要自定义数据集,那么如何舒服的读取数据,并使用transformers进行训练模型呢?本文的内容如下:自......
  • datasets(HuggingFace)学习笔记
    一、概述(1)datasets使用ApacheArrow格式,使得加载数据集没有内存限制(2)datasets的重要模块:load_dataset:用于加载原始数据文件load_from_disk:用于加载Arrow数据文件DatasetDict:用于操作多个数据集,保存、加载、处理等Dataset:用于操作单个数据集,保存、加载、处理等二、数据......
  • 如何使用 HuggingFace 的 run_translation.py 脚本从头开始训练翻译?
    我尝试了各种HuggingFace脚本来构建语言模型,例如run_mlm.py(link)、run_clm.py(link)和run_translation.py(link)。对于前两个脚本,它可以从头开始训练语言模型(即没有基本模型)。但是,我无法使用run_translatio......
  • elasticsearch8.X tokenizer分词器优化
    一、使用指定中文分词器1.1一个查询小例子我们安装好es和kibana之后,就可以在kibana控制台开始我们的查询探索之旅。首先创建一个包含了两个字段“product"和"summary"的索引product_00:PUTproduct_00{"mappings":{"properties":{"product":{"typ......