当前位置: 首页 > news >正文

Tokenizer与Embedding

Transformers 系列文章目录

第一章 Transformers 简介

第二章 Transformers 模型推理;

第三章 Tokenizer 与 Embedding


文章目录

  • Transformers 系列文章目录
  • 前言
  • Tokenizer与Embedding
  • 一、Tokenizer(分词器)和Embedding(词嵌入)
    • 1.Tokenizer(分词器)和Embedding(词嵌入)是在自然语言处理中常用的两种技术,用于将文本转换为计算机可以处理的数字表示。
    • 2.Tokenizer(分词器)
    • 3.Embedding(词嵌入)
    • 4.高维度稀疏向量与低维度稠密向量
    • 5.分词器和词嵌入技术联合使用
    • 6.Tokenizer/Embedding数据处理流程
  • 二、Tensorflow使用Tokenizer和Padding
    • 1.使用tensorflow.keras.preprocessing.text里的Tokenizer()方法将句子分词,并以数值代替词。
    • 2.使用tensorflow.keras.preprocessing.sequence里的pad_sequences()方法将token补全。
    • 3.实例
  • 三、Hugging Face的Tokenizer
    • 1.Tokenizer定义
    • 2.Tokenizer的主要功能
    • 3.Tokenizer其中的词汇化功能
    • 4.Hugging Face模型内置Embedding层
    • 5.Tokenizer与Model的数据流向
  • 四、transformers报错
    • 1.模型损坏报错
  • 总结

前言

本文主要整理 Transformers 中 Tokenizer 与 Embedding 的基础概念、两者的数据处理流程、TensorFlow 中 Tokenizer/Padding 的使用方式、Hugging Face Tokenizer 的功能、Tokenizer 与模型的数据流向,以及常见 transformers 模型损坏报错的原因。


Tokenizer与Embedding

一、Tokenizer(分词器)和Embedding(词嵌入)

1.Tokenizer(分词器)和Embedding(词嵌入)是在自然语言处理中常用的两种技术,用于将文本转换为计算机可以处理的数字表示。

2.Tokenizer(分词器)

  • Tokenizer是将文本转换为一个个单词的过程。
  • 在自然语言处理中,文本通常是由一系列单词组成的,而分词器的任务就是将这些单词从文本中分离出来。
  • 例如,在英文中,可以使用空格或标点符号将单词分开;在中文中,需要使用中文分词技术将连续的汉字分成词语。
  • 分词器可以使用基于规则、基于统计或基于神经网络的方法来实现。
  • Tokenizer将文本转换为多个单词后,还有一步骤(可能不属于Tokenizer):将每个单词根据Embedding提供的词汇表,转换为数字(便于电脑理解)。
    • 词汇表一般是tokenizer.json文件,定义单词到token_id的映射规则。
    • 如果没有词汇表,比如直接使用keras提供tokenizer方法,会按顺序定义token_id。

3.Embedding(词嵌入)

  • Embedding是将单词转换为向量表示的过程。(其实不是单词,而是tokenizer输出的token_id数字索引)
    • Embedding训练时,也是通过索引来训练的,而非文字。所以Embedding能够理解tokenizer输出的token_id数字
    • Embedding模型和词汇表是对应的。如果没有词汇表,Embedding模型是不能使用的。
  • 在自然语言处理中,单词通常被表示为一个高维度的稀疏向量,其中每个维度对应一个单词的特征。
  • 例如,在一个包含10000个单词的词表中,每个单词可以表示为一个大小为10000的稀疏向量,其中只有一个维度为1,其余维度都为0。这种高维度的稀疏表示不仅浪费存储空间,而且难以计算单词之间的相似度。
  • 因此,词嵌入技术被用来将单词或子词映射到一个低维度的稠密向量空间中,从而可以更有效地表示和计算单词之间的相似度。
  • 词嵌入模型通常使用神经网络,例如Word2Vec、GloVe和FastText等。
  • 高维度的稀疏向量与低维度的稠密向量所说的维度,就是向量数据库里的维度数

4.高维度稀疏向量与低维度稠密向量

  • 高维度稀疏向量(High-Dimensional Sparse Vectors)
如:[0,0,0,0,...,1,0,0,0],维度为1000,有1000个数据
  • 低维度稠密向量(Low-Dimensional Dense Vectors)
如:[0.2548,-0.2215,0.8522,...,0.7458],维度为128,有128个数据

5.分词器和词嵌入技术联合使用

  • 在自然语言处理任务中,分词器和词嵌入技术通常是联合使用的,目的是将文本转换为计算机可以处理的向量数字。
  • 例如,在文本分类任务中,可使用分词器将文本分成单词序列,然后使用词嵌入技术将每个单词表示为一个向量,最后将这些向量输入到神经网络中进行分类。
  • 这种联合使用的技术被广泛应用于文本分类、文本生成、机器翻译、问答系统等自然语言处理任务中。

6.Tokenizer/Embedding数据处理流程

二、Tensorflow使用Tokenizer和Padding

1.使用tensorflow.keras.preprocessing.text里的Tokenizer()方法将句子分词,并以数值代替词。

  • 使用tensorflow.keras.preprocessing.text里的Tokenizer()方法将句子分词,并以数值代替词。返回分词器对象。
  • 公式:
tokenizer = Tokenizer(num_words=None, oov_token=None)
  • 参数:
    • num_words:设置最频繁使用的数值数量(比如一共有100个数值,但是num_words值为5,那么只有最频繁的5个会被使用。)
    • oov_token:当对没有设数值的词时,使用的代替符号,默认为None为空。
  • 返回分词器对象后,使用tokenizer.fit_on_texts(texts),根据texts句子内容建立对应的分词列表索引。
  • 返回分词器对象后,使用tokenizer.word_index,返回分词列表索引
  • 返回分词器对象后,使用tokenizer.texts_to_sequences(texts),对texts句子做分词,并以数值代替。

2.使用tensorflow.keras.preprocessing.sequence里的pad_sequences()方法将token补全。

  • 公式:
padded = pad_sequences(sequences, maxlen=None, padding='pre', value=0.)
  • 参数:
    • sequences:句子内容字符串
    • maxlen:句子最长的长度数值,过长会被截断。默认None不限制长度。
    • padding:补充方式,默认’pre’为前补全。'post’为后补全
    • value:补全的内容,默认为数值0

3.实例

代码

fromtensorflow.keras.preprocessing.textimportTokenizerfromtensorflow.keras.preprocessing.sequenceimportpad_sequences sentences=['I love my dog','I love my cat','You love my dog!','Do you think my dog is amazing?']tokenizer=Tokenizer(num_words=100,oov_token="<OOV>")tokenizer.fit_on_texts(sentences)word_index=tokenizer.word_index sequences=tokenizer.texts_to_sequences(sentences)print(word_index)print(sequences)test_data=['I really love my dog','My dog loves my manatee']test_seq=tokenizer.texts_to_sequences(test_data)print(test_seq)padded=pad_sequences(sequences,padding='post',maxlen=6)print(padded)

结果

{'<OOV>': 1, 'my': 2, 'love': 3, 'dog': 4, 'i': 5, 'you': 6, 'cat': 7, 'do': 8, 'think': 9, 'is': 10, 'amazing': 11} [[5, 3, 2, 4], [5, 3, 2, 7], [6, 3, 2, 4], [8, 6, 9, 2, 4, 10, 11]] [[5, 1, 3, 2, 4], [2, 4, 1, 2, 1]] [[ 5 3 2 4 0 0] [ 5 3 2 7 0 0] [ 6 3 2 4 0 0] [ 6 9 2 4 10 11]]

三、Hugging Face的Tokenizer

1.Tokenizer定义

  • 在Hugging Face的Transformers框架中,Tokenizer是一个用于将文本转换为输入模型所需的tokens(子词)序列的工具。
  • Tokenizer的主要作用是将文本分解为模型能够处理的基本单元。

2.Tokenizer的主要功能

  • 分词:将输入文本拆分为单个的词或子词。这可能包括去除标点符号、数字和其他非字母字符,将剩余的字母字符拆分为单词。
  • 词汇化:根据Embedding提供的词汇表,将单词转换为模型已知的索引。这意味着每个单词都会映射到一个唯一的整数,该整数表示在词汇表中的位置。
  • 添加特殊标记:将文本中的特殊标记(如开头标记、结尾标记和分隔符)添加到输入序列中,以便模型能够识别文本结构。
  • 添加Padding和Masking:将输入序列padding(填充)到最长序列的长度,以便所有输入样本都有相同的形状。此外,它会将输入序列中的填充位置标记为0,以便模型能够区分实际的单词和填充位置。Masking(掩码)侧将过长的序列忽略掉多余的单词。

3.Tokenizer其中的词汇化功能

  • 当有输入到模型时,Tokenizer会将文本转换为输入序列tokens,再将这些tokens转换为词汇表中的索引。
  • 词汇表索引是生成预训练模型时同时生成的,就是说生成预训练模拟的同时使用Embedding层生成这个索引表。
  • 然后,Embedding层就是将这些索引转换为一个具有固定大小的向量表示。
  • Embedding层的作用是将离散的词汇表索引映射到连续的向量空间中。这有助于解决词汇表中的词汇之间在语义和语法上的关系,使模型能够捕捉到这些关系。Embedding向量通常具有较低的维度(例如128或256),这使得模型能够在训练过程中学习这些向量之间的相互作用。
  • 在传递给Transformer模型的输入序列中,Embedding层为每个token生成一个固定大小的向量表示。这些向量表示将被模型的各个层处理,以生成最终的预测。因此,Tokenizer和Embedding层在将文本转换为模型能够处理的形式方面起到关键作用。

4.Hugging Face模型内置Embedding层

  • 在Hugging Face的Transformers框架中,大多数预训练模型(包括语言模型和视觉模型)都包含内置的Embedding层。这意味着在使用模型时,Embedding层已经设置好了,无需自行添加Embedding层。
  • 当使用AutoModel、AutoTokenizer和AutoModelForSequenceClassification等自动化构建模型时,Embedding层已经在模型的底层构建好,无需添加Embedding层。使得使用Hugging Face的Transformers框架更加简单和直观
  • 查看输入文本对应的词汇索引实例

代码

fromtransformersimportAutoTokenizer,AutoModel# 加载预训练模型和对应的Tokenizermodel_name="bert-base-uncased"tokenizer=AutoTokenizer.from_pretrained(model_name)model=AutoModel.from_pretrained(model_name)# 输入文本input_text="Hello, how are you?"# 使用 Tokenizer 将文本转换为模型输入input_ids=tokenizer.encode(input_text,add_special_tokens=True)# 将输入传递给模型outputs=model(torch.tensor([input_ids]))

5.Tokenizer与Model的数据流向

四、transformers报错

1.模型损坏报错

  • 报错内容:
safetensors_rust.SafetensorError: Error while deserializing header: MetadataIncompleteBuffer
  • 原因:错误是指在解析预训练模型文件的头部信息时出现了问题。这通常由模型文件损坏引起:预训练模型的文件可能在下载或保存时损坏了。

总结

提示:这里对文章进行总结:

本文整理了 Tokenizer 与 Embedding 的核心关系:Tokenizer 负责把文本切分并转换为 token/token_id,Embedding 负责把 token_id 映射为向量表示。对于 Transformers 模型来说,Tokenizer、词汇表、Embedding 层和模型结构通常是配套使用的,因此在实际推理或训练时需要保持模型文件、Tokenizer 文件和词汇表文件的一致性。

http://www.jsqmd.com/news/866980/

相关文章:

  • 3分钟学会Untrunc:让损坏视频重获新生的开源神器
  • AI——LangChain 三大核心概念
  • After Effects (AE)2026超详细保姆级下载安装教(新手零基础适用)
  • LangChain的传统 Chain 和 LangGraph 选型区别
  • UE5 GAS中安全修改Attribute值的四种正确方式
  • WebKit安全漏洞分析与修复实践指南
  • 普宁坐月子哪家好|实地看了3家之后的真实对比 - 品牌观察
  • 微信自动化终极指南:5个简单步骤让Python帮你处理日常聊天任务
  • 安卓基本代理检测
  • Java HTTPS证书信任链原理与cacerts配置实战
  • Spring AI Alibaba零基础速成(6) ---- 向量化
  • 2026天河区专利代理机构TOP5榜单|吃透天河科创行业痛点,高价值专利、高新补贴申报指南 - 资讯纵览
  • Spring Boot WebSocket 两种集成方式深度解析
  • 微信小程序wxapkg逆向分析终极指南:从文件结构到AST还原
  • vs2010 win32做成后台常驻和系统托盘
  • Windows curl证书错误SEC_E_UNTRUSTED_ROOT解决方案
  • 中国工业新闻网:罗兰艺境:中国B2B制造业GEO市占率48%,覆盖80+行业、60+世界500强,复购率98% - 罗兰艺境GEO
  • PC微信小程序wxapkg解包原理与七步可执行逆向流程
  • DM8 dexp/dimp 逻辑导入导出
  • CyberChef:如何在浏览器中实现400+种数据操作的终极解决方案
  • 基于Nuclei的自动化漏洞监测告警平台
  • PyTorch DataLoader 内存不足怎么办?教你一招避坑
  • Pikachu靶场搭建与Web渗透实战指南
  • 2026年5月最新太原黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 检测回收中心
  • Windows下curl报SEC_E_UNTRUSTED_ROOT的5种正确解决方法
  • DeepSeek API接入全链路实战:从注册到高并发部署的7个关键步骤
  • 魔兽争霸III终极优化指南:5步解决宽屏黑边、FPS限制与地图加载问题
  • 微信小程序wxapkg文件结构解析与源码还原实战
  • 2026年5月最新鹤壁黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 检测回收中心
  • 【LangGraph】House_Agent 实战(一):架构与环境配置