Transformers 4.37 中文文档(八十九)(4)

简介: Transformers 4.37 中文文档(八十九)

Transformers 4.37 中文文档(八十九)(3)https://developer.aliyun.com/article/1563232


TFLayoutLMv3ForTokenClassification

class transformers.TFLayoutLMv3ForTokenClassification

<来源>

( config: LayoutLMv3Config **kwargs )

参数

  • config(LayoutLMv3Config](/docs/transformers/v4.37.2/en/main_classes/model#transformers.TFPreTrainedModel.from_pretrained)方法以加载模型权重。

LayoutLMv3 模型在顶部带有一个标记分类头(在最终隐藏状态的顶部有一个线性层),例如用于序列标记(信息提取)任务的FUNSDSROIECORDKleister-NDA

此模型继承自 TFPreTrainedModel。查看超类文档以获取库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入、修剪头等)。

此模型还是tf.keras.Model子类。将其用作常规的 TF 2.0 Keras 模型,并参考 TF 2.0 文档以获取与一般用法和行为相关的所有信息。

transformers中的 TensorFlow 模型和层接受两种格式的输入:

  • 将所有输入作为关键字参数(类似于 PyTorch 模型),或
  • 将所有输入作为列表、元组或字典放在第一个位置参数中。

第二种格式得到支持的原因是,当将输入传递给模型和层时,Keras 方法更喜欢这种格式。由于这种支持,当使用诸如model.fit()之类的方法时,对您来说应该“只需工作” - 只需以model.fit()支持的任何格式传递您的输入和标签!但是,如果您想在 Keras 方法之外使用第二种格式,比如在使用 KerasFunctional API 创建自己的层或模型时,有三种可能性可以用来收集所有输入张量在第一个位置参数中:

  • 只包含input_ids的单个张量,没有其他内容:model(input_ids)
  • 按照文档字符串中给定的顺序,长度可变的列表,包含一个或多个输入张量:model([input_ids, attention_mask])model([input_ids, attention_mask, token_type_ids])
  • 一个字典,其中包含与文档字符串中给定的输入名称相关联的一个或多个输入张量:model({"input_ids": input_ids, "token_type_ids": token_type_ids})

请注意,当使用子类化创建模型和层时,您无需担心这些问题,因为您可以像对待任何其他 Python 函数一样传递输入!

call

<来源>

( input_ids: tf.Tensor | None = None bbox: tf.Tensor | None = None attention_mask: tf.Tensor | None = None token_type_ids: tf.Tensor | None = None position_ids: tf.Tensor | None = None head_mask: tf.Tensor | None = None inputs_embeds: tf.Tensor | None = None labels: tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None pixel_values: tf.Tensor | None = None training: Optional[bool] = False ) → export const metadata = 'undefined';transformers.modeling_tf_outputs.TFTokenClassifierOutput or tuple(tf.Tensor)

参数

  • input_ids(形状为(batch_size, sequence_length)Numpy数组或tf.Tensor)— 输入序列令牌在词汇表中的索引。
    注意,sequence_length = token_sequence_length + patch_sequence_length + 1,其中1代表[CLS]令牌。查看pixel_values以获取patch_sequence_length
    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
    什么是输入 ID?
  • bbox(形状为(batch_size, sequence_length, 4)Numpy数组或tf.Tensor可选)— 每个输入序列令牌的边界框。选择范围为[0, config.max_2d_position_embeddings-1]。每个边界框应该是(x0, y0, x1, y1)格式的归一化版本,其中(x0, y0)对应于边界框左上角的位置,(x1, y1)表示右下角的位置。
    注意,sequence_length = token_sequence_length + patch_sequence_length + 1,其中1代表[CLS]令牌。查看pixel_values以获取patch_sequence_length
  • pixel_values(形状为(batch_size, num_channels, height, width)tf.Tensor)— 文档图像的批处理。每个图像被分成形状为(num_channels, config.patch_size, config.patch_size)的补丁,并且补丁的总数(=patch_sequence_length)等于((height / config.patch_size) * (width / config.patch_size))
  • attention_mask(形状为(batch_size, sequence_length)tf.Tensor可选)— 用于避免在填充令牌索引上执行注意力的掩码。选择在[0, 1]范围内的掩码值:
  • 1 表示未被掩码的令牌。
  • 0 表示被掩码的令牌。
  • 注意,sequence_length = token_sequence_length + patch_sequence_length + 1,其中1代表[CLS]令牌。查看pixel_values以获取patch_sequence_length
    什么是注意力掩码?
  • token_type_ids(形状为(batch_size, sequence_length)Numpy数组或tf.Tensor可选)— 段令牌索引,用于指示输入的第一部分和第二部分。索引在[0, 1]中选择:
  • 0 对应于句子 A令牌,
  • 1 对应于句子 B令牌。
  • 注意,sequence_length = token_sequence_length + patch_sequence_length + 1,其中1代表[CLS]令牌。查看pixel_values以获取patch_sequence_length
    什么是令牌类型 ID?
  • position_ids(形状为(batch_size, sequence_length)Numpy数组或tf.Tensor可选)— 每个输入序列令牌在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 1]
    注意,sequence_length = token_sequence_length + patch_sequence_length + 1,其中1代表[CLS]令牌。查看pixel_values以获取patch_sequence_length
    什么是位置 ID?
  • head_mask(形状为(num_heads,)(num_layers, num_heads)tf.Tensor可选)— 用于使自注意力模块的选定头部失效的掩码。选择在[0, 1]范围内的掩码值:
  • 1 表示头部未被掩码
  • 0 表示头部被掩码
  • inputs_embeds(形状为(batch_size, sequence_length, hidden_size)tf.Tensor可选)— 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制如何将input_ids索引转换为相关向量,这将很有用,而不是使用模型的内部嵌入查找矩阵。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回的张量下的attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回的张量下的hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。
  • labels (tf.Tensor of shape (batch_size, sequence_length)可选) — 用于计算标记分类损失的标签。索引应在[0, ..., config.num_labels - 1]范围内。

返回

transformers.modeling_tf_outputs.TFTokenClassifierOutput 或tuple(tf.Tensor)

一个 transformers.modeling_tf_outputs.TFTokenClassifierOutput 或一个tf.Tensor元组(如果传递return_dict=Falseconfig.return_dict=False)包含根据配置(LayoutLMv3Config)和输入的各种元素。

  • loss (tf.Tensor of shape (n,)可选,当提供labels时返回,其中 n 是未屏蔽标签的数量) — 分类损失。
  • logits (tf.Tensor of shape (batch_size, sequence_length, config.num_labels)) — 分类得分(SoftMax 之前)。
  • hidden_states (tuple(tf.Tensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)tf.Tensor元组(一个用于嵌入的输出 + 一个用于每个层的输出)。
    模型在每个层的隐藏状态以及初始嵌入输出。
  • attentions (tuple(tf.Tensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)tf.Tensor元组(每个层一个)。
    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

TFLayoutLMv3ForTokenClassification 前向方法,覆盖__call__特殊方法。

虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module实例,而不是在此处调用,因为前者负责运行预处理和后处理步骤,而后者会默默忽略它们。

示例:

>>> from transformers import AutoProcessor, TFAutoModelForTokenClassification
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv3-base", apply_ocr=False)
>>> model = TFAutoModelForTokenClassification.from_pretrained("microsoft/layoutlmv3-base", num_labels=7)
>>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
>>> example = dataset[0]
>>> image = example["image"]
>>> words = example["tokens"]
>>> boxes = example["bboxes"]
>>> word_labels = example["ner_tags"]
>>> encoding = processor(image, words, boxes=boxes, word_labels=word_labels, return_tensors="tf")
>>> outputs = model(**encoding)
>>> loss = outputs.loss
>>> logits = outputs.logits

TFLayoutLMv3ForQuestionAnswering

class transformers.TFLayoutLMv3ForQuestionAnswering

< source >

( config: LayoutLMv3Config **kwargs )

参数

  • config(LayoutLMv3Config) — 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。

LayoutLMv3 模型,顶部带有用于提取问答任务的跨度分类头,例如DocVQA(在隐藏状态输出的文本部分顶部的线性层,用于计算span start logitsspan end logits)。

此模型继承自 TFPreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。

此模型还是一个tf.keras.Model子类。将其用作常规的 TF 2.0 Keras 模型,并参考 TF 2.0 文档以获取与一般用法和行为相关的所有内容。

transformers中的 TensorFlow 模型和层接受两种格式的输入:

  • 将所有输入作为关键字参数(类似于 PyTorch 模型),或者
  • 将所有输入作为列表、元组或字典的第一个位置参数。

支持第二种格式的原因是,Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用model.fit()等方法时,应该可以“正常工作” - 只需以model.fit()支持的任何格式传递输入和标签即可!但是,如果您想在 Keras 方法之外使用第二种格式,例如在使用 KerasFunctional API 创建自己的层或模型时,有三种可能性可用于在第一个位置参数中收集所有输入张量:

  • 一个仅包含input_ids的单个张量,没有其他内容:model(input_ids)
  • 一个长度可变的列表,其中包含一个或多个按照文档字符串中给定顺序的输入张量:model([input_ids, attention_mask])model([input_ids, attention_mask, token_type_ids])
  • 一个字典,其中包含一个或多个与文档字符串中给定的输入名称相关联的输入张量:model({"input_ids": input_ids, "token_type_ids": token_type_ids})

请注意,当使用子类化创建模型和层时,您无需担心任何这些,因为您可以像对待任何其他 Python 函数一样传递输入!

call

<来源>

( input_ids: tf.Tensor | None = None attention_mask: tf.Tensor | None = None token_type_ids: tf.Tensor | None = None position_ids: tf.Tensor | None = None head_mask: tf.Tensor | None = None inputs_embeds: tf.Tensor | None = None start_positions: tf.Tensor | None = None end_positions: tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None bbox: tf.Tensor | None = None pixel_values: tf.Tensor | None = None return_dict: Optional[bool] = None training: bool = False ) → export const metadata = 'undefined';transformers.modeling_tf_outputs.TFQuestionAnsweringModelOutput or tuple(tf.Tensor)

参数

  • input_ids(形状为(batch_size, sequence_length)Numpy 数组tf.Tensor) - 词汇表中输入序列标记的索引。
    请注意,sequence_length = token_sequence_length + patch_sequence_length + 1,其中1代表[CLS]标记。查看pixel_values以获取patch_sequence_length
    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
    什么是输入 ID?
  • bbox(形状为(batch_size, sequence_length, 4)Numpy 数组tf.Tensor可选) - 每个输入序列标记的边界框。在范围[0, config.max_2d_position_embeddings-1]中选择。每个边界框应该是(x0, y0, x1, y1)格式的归一化版本,其中(x0, y0)对应于边界框左上角的位置,(x1, y1)表示右下角的位置。
    请注意,sequence_length = token_sequence_length + patch_sequence_length + 1,其中1代表[CLS]标记。查看pixel_values以获取patch_sequence_length
  • pixel_values(形状为(batch_size, num_channels, height, width)tf.Tensor) - 批量文档图像。每个图像被分成形状为(num_channels, config.patch_size, config.patch_size)的补丁,并且补丁的总数(=patch_sequence_length)等于((height / config.patch_size) * (width / config.patch_size))
  • attention_mask(形状为(batch_size, sequence_length)tf.Tensor可选)— 用于避免在填充标记索引上执行注意力的蒙版。蒙版值在[0, 1]中选择:
  • 1 表示标记未被遮蔽,
  • 0 表示标记被遮蔽。
  • 请注意,sequence_length = token_sequence_length + patch_sequence_length + 1,其中1代表[CLS]标记。有关patch_sequence_length的详细信息,请参见pixel_values
    什么是注意力蒙版?
  • token_type_ids(形状为(batch_size, sequence_length)Numpy数组或tf.Tensor可选)— 段标记索引,用于指示输入的第一部分和第二部分。索引在[0, 1]中选择:
  • 0 对应于一个句子 A的标记,
  • 1 对应于一个句子 B的标记。
  • 请注意,sequence_length = token_sequence_length + patch_sequence_length + 1,其中1代表[CLS]标记。有关patch_sequence_length的详细信息,请参见pixel_values
    什么是标记类型 ID?
  • position_ids(形状为(batch_size, sequence_length)Numpy数组或tf.Tensor可选)— 每个输入序列标记在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]中选择。
    请注意,sequence_length = token_sequence_length + patch_sequence_length + 1,其中1代表[CLS]标记。有关patch_sequence_length的详细信息,请参见pixel_values
    什么是位置 ID?
  • head_mask(形状为(num_heads,)(num_layers, num_heads)tf.Tensor可选)— 用于使自注意力模块的选定头部无效的蒙版。蒙版值在[0, 1]中选择:
  • 1 表示头部未被遮蔽,
  • 0 表示头部被遮蔽。
  • inputs_embeds(形状为(batch_size, sequence_length, hidden_size)tf.Tensor可选)— 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids。如果您想要更多控制权,以便将input_ids索引转换为相关向量,而不是模型的内部嵌入查找矩阵,则这很有用。
  • output_attentionsbool可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
  • output_hidden_statesbool可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
  • return_dictbool可选)— 是否返回一个 ModelOutput 而不是一个普通元组。
  • start_positions(形状为(batch_size,)tf.Tensor可选)— 用于计算标记分类损失的标记(索引)的标签的起始位置。位置被夹紧到序列的长度(sequence_length)。超出序列范围的位置不会用于计算损失。
  • end_positions(形状为(batch_size,)tf.Tensor可选)— 用于计算标记分类损失的标记(索引)的标签。位置被夹紧到序列的长度(sequence_length)。超出序列范围的位置不会用于计算损失。

返回

transformers.modeling_tf_outputs.TFQuestionAnsweringModelOutput 或tuple(tf.Tensor)

一个 transformers.modeling_tf_outputs.TFQuestionAnsweringModelOutput 或一个tf.Tensor元组(如果传递了return_dict=False或当config.return_dict=False时)包含根据配置(LayoutLMv3Config)和输入的不同元素。

  • loss (tf.Tensor,形状为 (batch_size, )可选,当提供 start_positionsend_positions 时返回) — 总跨度提取损失是起始位置和结束位置的交叉熵之和。
  • start_logits (tf.Tensor,形状为 (batch_size, sequence_length)) — 跨度起始得分(SoftMax 之前)。
  • end_logits (tf.Tensor,形状为 (batch_size, sequence_length)) — 跨度结束得分(SoftMax 之前)。
  • hidden_states (tuple(tf.Tensor)可选,当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)tf.Tensor 元组(一个用于嵌入的输出 + 一个用于每个层的输出)。
    模型在每个层的输出以及初始嵌入输出的隐藏状态。
  • attentions (tuple(tf.Tensor)可选,当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — 形状为 (batch_size, num_heads, sequence_length, sequence_length)tf.Tensor 元组(每个层一个)。
    注意力权重在注意力 softmax 之后,用于计算自注意力头中的加权平均值。

TFLayoutLMv3ForQuestionAnswering 的前向方法,覆盖了 __call__ 特殊方法。

虽然前向传递的配方需要在此函数内定义,但应该在此之后调用 Module 实例,而不是在此处调用,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

示例:

>>> from transformers import AutoProcessor, TFAutoModelForQuestionAnswering
>>> from datasets import load_dataset
>>> import tensorflow as tf
>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv3-base", apply_ocr=False)
>>> model = TFAutoModelForQuestionAnswering.from_pretrained("microsoft/layoutlmv3-base")
>>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
>>> example = dataset[0]
>>> image = example["image"]
>>> question = "what's his name?"
>>> words = example["tokens"]
>>> boxes = example["bboxes"]
>>> encoding = processor(image, question, words, boxes=boxes, return_tensors="tf")
>>> start_positions = tf.convert_to_tensor([1])
>>> end_positions = tf.convert_to_tensor([3])
>>> outputs = model(**encoding, start_positions=start_positions, end_positions=end_positions)
>>> loss = outputs.loss
>>> start_scores = outputs.start_logits
>>> end_scores = outputs.end_logits

LayoutXLM

原文:huggingface.co/docs/transformers/v4.37.2/en/model_doc/layoutxlm

概述

LayoutXLM 是由 Yiheng Xu、Tengchao Lv、Lei Cui、Guoxin Wang、Yijuan Lu、Dinei Florencio、Cha Zhang、Furu Wei 提出的LayoutXLM: 多模态预训练用于多语言视觉丰富文档理解。它是在 53 种语言上训练的LayoutLMv2 模型的多语言扩展。

该论文的摘要如下:

最近,使用文本、布局和图像进行多模态预训练已经在视觉丰富文档理解任务中取得了 SOTA  性能,这表明跨不同模态的联合学习具有巨大潜力。在本文中,我们提出了  LayoutXLM,这是一个用于多语言文档理解的多模态预训练模型,旨在消除视觉丰富文档理解的语言障碍。为了准确评估  LayoutXLM,我们还介绍了一个名为 XFUN 的多语言表单理解基准数据集,其中包括 7  种语言(中文、日文、西班牙文、法文、意大利文、德文、葡萄牙文)的表单理解样本,并为每种语言手动标记了键值对。实验结果表明,LayoutXLM  模型在 XFUN 数据集上明显优于现有的 SOTA 跨语言预训练模型。

该模型由nielsr贡献。原始代码可在此处找到。

使用提示和示例

可以直接将 LayoutXLM 的权重插入到 LayoutLMv2 模型中,如下所示:

from transformers import LayoutLMv2Model
model = LayoutLMv2Model.from_pretrained("microsoft/layoutxlm-base")

请注意,LayoutXLM 有自己的分词器,基于 LayoutXLMTokenizer/LayoutXLMTokenizerFast。您可以按以下方式初始化它:

from transformers import LayoutXLMTokenizer
tokenizer = LayoutXLMTokenizer.from_pretrained("microsoft/layoutxlm-base")

与 LayoutLMv2 类似,您可以使用 LayoutXLMProcessor(内部应用 LayoutLMv2ImageProcessor 和 LayoutXLMTokenizer/LayoutXLMTokenizerFast)来为模型准备所有数据。

由于 LayoutXLM 的架构等同于 LayoutLMv2,可以参考 LayoutLMv2 的文档页面获取所有提示、代码示例和笔记本。


Transformers 4.37 中文文档(八十九)(5)https://developer.aliyun.com/article/1563234

相关文章
|
12天前
|
自然语言处理 文字识别 PyTorch
Transformers 4.37 中文文档(八十九)(5)
Transformers 4.37 中文文档(八十九)
18 3
|
12天前
|
存储 PyTorch 算法框架/工具
Transformers 4.37 中文文档(八十七)(5)
Transformers 4.37 中文文档(八十七)
13 3
|
12天前
|
PyTorch TensorFlow 算法框架/工具
Transformers 4.37 中文文档(八十九)(3)
Transformers 4.37 中文文档(八十九)
13 2
|
12天前
|
文字识别 PyTorch 算法框架/工具
Transformers 4.37 中文文档(八十九)(2)
Transformers 4.37 中文文档(八十九)
16 2
|
12天前
|
机器学习/深度学习 PyTorch TensorFlow
Transformers 4.37 中文文档(八十九)(1)
Transformers 4.37 中文文档(八十九)
13 2
|
11天前
|
机器学习/深度学习 存储 PyTorch
Transformers 4.37 中文文档(九十六)(4)
Transformers 4.37 中文文档(九十六)
15 1
|
11天前
|
存储 PyTorch TensorFlow
Transformers 4.37 中文文档(九十六)(2)
Transformers 4.37 中文文档(九十六)
9 1
|
11天前
|
PyTorch 算法框架/工具 索引
Transformers 4.37 中文文档(九十六)(5)
Transformers 4.37 中文文档(九十六)
8 1
|
11天前
|
PyTorch 算法框架/工具 异构计算
Transformers 4.37 中文文档(九十六)(3)
Transformers 4.37 中文文档(九十六)
7 1
|
11天前
|
存储 PyTorch TensorFlow
Transformers 4.37 中文文档(九十六)(1)
Transformers 4.37 中文文档(九十六)
14 1