模型架构与原理4217 字

Transformers多模态数据预处理

·全库 317 / 611

《Transformers多模态数据预处理》共 0.4 万字,通篇围绕 数据集、预训练、语音、多模态 展开,归在「模型架构与原理」这一层。

覆盖数据集预训练语音多模态视觉微调

适合要跟模型团队对话、得听懂他们在说什么的人

目录骨架(3 节)
  1. 自然语言处理
  2. 计算机视觉
  3. 构建张量

示例代码

注:将ppt后缀名改为zip后解压

预处理

在您可以在数据集上训练模型之前,数据需要被预处理为期望的模型输入格式。无论您的数据是文本、图像还是音频,它们都需要被转换并组合成批量的张量。🤗 Transformers 提供了一组预处理类来帮助准备数据以供模型使用。在本教程中,您将了解以下内容:

  • 对于文本,使用分词器 (Tokenizer) 将文本转换为一系列标记 (tokens),并创建tokens的数字表示,将它们组合成张量。
  • 对于语音和音频,使用特征提取器 (Feature extractor) 从音频波形中提取顺序特征并将其转换为张量。
  • 图像输入使用图像处理器 (ImageProcessor) 将图像转换为张量。
  • 多模态输入,使用处理器 (Processor) 结合了Tokenizer和ImageProcessor或Processor。

AutoProcessor始终有效的自动选择适用于您使用的模型的正确class,无论您使用的是Tokenizer、ImageProcessor、Feature extractor还是Processor。

在开始之前,请安装🤗 Datasets,以便您可以加载一些数据集来进行实验:

pip install datasets

自然语言处理

处理文本数据的主要工具是 Tokenizer。Tokenizer根据一组规则将文本拆分为tokens。然后将这些tokens转换为数字,然后转换为张量,成为模型的输入。模型所需的任何附加输入都由Tokenizer添加。

如果您计划使用预训练模型,重要的是使用与之关联的预训练Tokenizer。这确保文本的拆分方式与预训练语料库相同,并在预训练期间使用相同的标记 - 索引的对应关系(通常称为词汇表 -vocab)。

开始使用 [AutoTokenizer.from_pretrained] 方法加载一个预训练tokenizer。这将下载模型预训练的vocab:

>>> from transformers import AutoTokenizer

>>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased")

然后将您的文本传递给tokenizer:

>>> encoded_input = tokenizer("Do not meddle in the affairs of wizards, for they are subtle and quick to anger.")
>>> print(encoded_input)
{'input_ids': [101, 2079, 2025, 19960, 10362, 1999, 1996, 3821, 1997, 16657, 1010, 2005, 2027, 2024, 11259, 1998, 4248, 2000, 4963, 1012, 102],
 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}

tokenizer返回一个包含三个重要对象的字典:

  • input_ids 是与句子中每个token对应的索引。
  • attention_mask 指示是否应该关注一个token。
  • token_type_ids 在存在多个序列时标识一个token属于哪个序列。

通过解码 input_ids 来返回您的输入:

>>> tokenizer.decode(encoded_input["input_ids"])
'[CLS] Do not meddle in the affairs of wizards, for they are subtle and quick to anger. [SEP]'

如您所见,tokenizer向句子中添加了两个特殊token - CLS 和 SEP(分类器和分隔符)。并非所有模型都需要特殊token,但如果需要,tokenizer会自动为您添加。

如果有多个句子需要预处理,将它们作为列表传递给tokenizer:

>>> batch_sentences = [
...     "But what about second breakfast?",
...     "Don't think he knows about second breakfast, Pip.",
...     "What about elevensies?",
... ]
>>> encoded_inputs = tokenizer(batch_sentences)
>>> print(encoded_inputs)
{'input_ids': [[101, 1252, 1184, 1164, 1248, 6462, 136, 102],
               [101, 1790, 112, 189, 1341, 1119, 3520, 1164, 1248, 6462, 117, 21902, 1643, 119, 102],
               [101, 1327, 1164, 5450, 23434, 136, 102]],
 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0, 0]],
 'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1],
                    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
                    [1, 1, 1, 1, 1, 1, 1]]}

资料里没有你的场景?

把你手上的数据和想解决的那个环节发上来,我们按具体情况回,不复述方法论。

发布需求