初始AIGC(四):“transformers”的第二个核心模块"Tokenizer" 模块

251 阅读8分钟

前言

在前三篇关于初始AIGC的文章中,我们分别介绍了简单的AI客服、简单的情感分析以及简单的物体识别。今天,我分享一下我最近新学的知识,transformers的第二个核心模块"Tokenizer" 模块,利用它实现进行简单的分词,为以后训练自己的模型做准备。

Tokenizer模块的作用

  1. 文本预处理: Tokenizer 负责将原始文本转换为模型可接受的输入格式。这包括分词(tokenization)、添加特殊标记、截断或填充文本以适应模型输入的长度等。
  2. Tokenization(分词): Tokenizer 将输入文本分割成词汇单元(tokens),这可以是词、子词或字符的组合,具体取决于模型和 Tokenizer 的设计。分词是将文本转换为计算机能够理解的形式的关键步骤。
  3. 生成模型输入: Tokenizer 生成模型接受的输入表示,这通常是一系列整数(token IDs)的形式。这些整数对应于模型预训练时学到的词汇表中的标记。
  4. 处理特殊标记: 处理特殊标记是 Tokenizer 的一部分,这包括添加特殊的起始和结束标记,以及其他可能有助于模型学习的标记。
  5. 截断和填充: 由于深度学习模型对输入的长度有限制,Tokenizer 可能需要截断或填充文本,以确保输入符合模型的要求。
  6. 反向操作: Tokenizer 还提供了将模型输出的整数序列转换回原始文本的逆操作。

实现

  • 还是来到之前文章中聊到过的Colaboratory官网

这里询问GPT简单介绍一下这个网站的作用吧。 Colaboratory(通常简称为Colab)是由谷歌提供的免费云端Jupyter笔记本服务。它的主要作用是提供一个在线的计算环境,用户可以在云端运行和共享Jupyter笔记本。以下是 Colaboratory 的一些主要作用和特点:

  1. 免费云端计算环境: Colab 提供免费的云端计算资源,用户可以在谷歌的服务器上运行代码,而无需担心本地计算机的性能限制。
  2. Jupyter 笔记本支持: Colab 支持 Jupyter 笔记本(以 .ipynb 格式保存),用户可以轻松创建、编辑和运行代码单元、文本单元以及图表等。
  3. 共享与协作: 用户可以轻松共享 Colab 笔记本,并与其他用户实时协作。这使得团队成员、教育者和学生可以方便地共享代码、数据和文档。
  4. 整合谷歌云服务: Colab 与谷歌云(Google Cloud)服务紧密整合,用户可以方便地使用云端存储(如 Google Drive)和其他谷歌云服务。
  5. 深度学习支持: Colab 提供了一些深度学习框架(如 TensorFlow 和 PyTorch)的支持,用户可以在云端使用 GPU 和 TPU 加速来训练深度学习模型。
  6. 大数据处理: Colab 提供了对大数据处理库(如 Apache Spark)的支持,使用户能够处理大规模数据集。
  7. 快速启动: 用户可以在不需要任何设置的情况下快速启动 Colab,只需一个 Google 账号即可访问。

好,正题开始,开始编码:

第一步:导入transformers库

image.png

出现如上图所示,就是证明安装成功了。

之前从没介绍过transformers库的作用,在这里我们继续询问GPT简单介绍一下: "transformers" 库是由Hugging Face公司开发的一个开源自然语言处理(NLP)库,主要用于训练、加载和使用预训练的语言模型。以下是 "transformers" 库的一些主要作用:

  1. 预训练语言模型的使用: 提供了大量预训练的语言模型,如BERT、GPT、RoBERTa等。用户可以轻松加载这些模型,并在自己的任务中进行微调或者直接使用,从而获得先进的自然语言处理性能。

  2. 多任务学习: 允许用户将一个预训练模型用于多个不同的NLP任务,而不需要重新训练整个模型。这种能力使得模型可以在多个任务上共享学到的知识。

  3. 文本生成: 用于生成文本的模型,例如GPT系列,可以用于创作文学作品、自动摘要、对话生成等应用。

  4. 文本分类: 支持文本分类任务,用户可以使用预训练模型进行情感分析、垃圾邮件检测等任务。

  5. 序列标注: 适用于序列标注任务,如命名实体识别(NER)和词性标注。

  6. 问答系统: 支持构建问答系统,用户可以将预训练模型应用于阅读理解和问答任务。

  7. 对话生成: 适用于聊天机器人等对话生成应用。

  8. 快速集成: 提供了方便的API和工具,使得用户可以轻松地在自己的项目中集成和使用预训练模型。

  9. 模型压缩: 提供了一些模型压缩和轻量级模型的技术,以便在资源受限的环境中使用。

    总体而言,"transformers" 库使得自然语言处理任务更加简便,因为它提供了先进的预训练模型,并为用户提供了一整套工具,使得在各种NLP任务中应用这些模型变得更加容易。

第二步:导入AutoTokennizer类,提供预训练模型来选择相应的Tokenizer。

代码:

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('uer/roberta-base-finetuned-dianping-chinese')

如图:

image.png

代码解释:

from transformers import AutoTokenizer:导入了 transformers 库中的 AutoTokenizer 类。AutoTokenizer 类可以根据给定的模型名称或路径自动选择相应的 Tokenizer。它是 transformers 库的一个核心组件,用于处理文本数据的分词操作。

tokenizer = AutoTokenizer.from_pretrained('uer/roberta-base-finetuned-dianping-chinese'):创建了一个 AutoTokenizer 类的实例,并使用 from_pretrained 方法加载了一个预训练的中文 RoBERTa 模型的 Tokenizer。模型的名称是 'uer/roberta-base-finetuned-dianping-chinese'。这个模型基于 RoBERTa 架构,在大众点评评论数据上进行了微调。from_pretrained 方法会自动下载并加载预训练模型的权重和相关配置。

第三步:对中文文本进行分词

  • 为后续的处理或分析任务准备分词后的文本表示。

代码:

sens = "小人物也有大梦想,祝看到这的各位都能事事顺利,平平安安"
tokens = tokenizer.tokenize(sens)
tokens

如图:

image.png

代码解释:

  1. sens = "小人物也有大梦想,祝看到这的各位都能事事顺利,平平安安":定义了一个包含中文文本的字符串 sens

  2. tokens = tokenizer.tokenize(sens):使用之前创建的 tokenizer 对象的 tokenize 方法对文本进行分词。这个方法接受一个字符串作为输入,并返回一个包含分词结果的列表。分词是将输入文本拆分成词汇单元的过程。

  3. tokens 打印tokens

AutoTokenizer为什么可以分词?

  • 因为AutoTokenizer可以维护一份词汇表

如图:

image.png

分词整数化

  • 使用了之前创建的 tokenizer 对象,通过 convert_tokens_to_ids 方法将分词后的词汇单元列表转换为对应的模型词汇表中的整数标识

代码:

ids = tokenizer.convert_tokens_to_ids(tokens)
ids

如图:

image.png

解释:

  • 整数标识是将每个词汇单元映射到模型词汇表中唯一整数的过程。这对于将文本转换为模型可接受的输入形式是很重要的。在训练过程中,模型通过学习嵌入向量(embedding)来表示每个整数标识。最终,ids 是一个包含输入文本中所有词汇单元的整数标识的列表。这个列表可以用作模型的输入,例如传递给深度学习模型进行推理。

在上述ids序列的开头和结尾添加特殊标记

  • 这是因为许多预训练模型要求输入序列以及结束的标记。

代码:

ids = tokenizer.encode(sens, add_special_tokens=True)
ids

如图:

image.png

解码原始文本

  • 使用 tokenizer 对象将整数标识序列解码为原始的文本序列,以便查看模型处理后的文本。

代码:

str_sen = tokenizer.decode(ids, skip_special_tokens=False)
str_sen

如图:

image.png

解释:

  1. tokenizer 对象的 decode 方法用于将整数标识序列解码为原始的文本序列。
  2. ids 是整数标识序列,即之前使用 encode 方法得到的结果。
  3. skip_special_tokens=False 表示在解码时保留特殊标记(special tokens),例如 [CLS] 和 [SEP]。

留言

上述功能可能比较简单,但学会分词这对我们以后训练自己的模型却有着很大的帮助,在之后我的AI学习过程中,我还会继续给大家分享本人的学习过程,在之后和大家一起去训练属于自己的AI模型。如果喜欢博主的文章的话,可以给博主点个关注哦,您的关注将会成为我更新的动力,给大家带来更好的内容。♥(ˆ◡ˆԅ)