Transformers 文档

UDOP

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

UDOP

PyTorch

概述

UDOP 模型由 Zineng Tang、Ziyi Yang、Guoxin Wang、Yuwei Fang、Yang Liu、Chenguang Zhu、Michael Zeng、Cha Zhang 和 Mohit Bansal 在论文 Unifying Vision, Text, and Layout for Universal Document Processing 中提出。UDOP 采用基于 T5 的编码器-解码器 Transformer 架构,用于处理文档 AI 任务,如文档图像分类、文档解析和文档视觉问答。

论文摘要如下:

我们提出了通用文档处理(UDOP),这是一个基础的文档 AI 模型,它将文本、图像和布局模态与各种任务格式(包括文档理解和生成)统一起来。UDOP 利用文本内容和文档图像之间的空间相关性,用一种统一的表示来建模图像、文本和布局模态。通过一个新颖的视觉-文本-布局 Transformer,UDOP 将预训练和多领域下游任务统一为一个基于提示的序列生成方案。UDOP 在大规模未标记文档语料库上使用创新的自监督目标进行预训练,并利用多样化的标记数据进行训练。UDOP 还通过掩码图像重建学习从文本和布局模态生成文档图像。据我们所知,这是文档 AI 领域首次有一个模型同时实现了高质量的神经文档编辑和内容定制。我们的方法在 9 个文档 AI 任务上达到了业界领先水平,例如,在金融报告、学术论文和网站等不同数据领域的文档理解和问答任务上。UDOP 在文档理解基准(DUE)排行榜上排名第一。*

drawing UDOP 架构。引自原始论文

使用技巧

  • 除了 input_idsUdopForConditionalGeneration 还需要输入 bbox,即输入词元的边界框(2D 位置)。这些可以通过外部 OCR 引擎(如 Google 的 Tesseract,有一个可用的 Python 包装器)获取。每个边界框应为 (x0, y0, x1, y1) 格式,其中 (x0, y0) 对应于边界框左上角的位置,(x1, y1) 代表右下角的位置。请注意,首先需要将边界框归一化到 0-1000 的范围。要进行归一化,可以使用以下函数:
def normalize_bbox(bbox, width, height):
    return [
        int(1000 * (bbox[0] / width)),
        int(1000 * (bbox[1] / height)),
        int(1000 * (bbox[2] / width)),
        int(1000 * (bbox[3] / height)),
    ]

这里,widthheight 对应于词元所在原始文档的宽度和高度。这些可以使用 Python 图像库(PIL)获取,例如:

from PIL import Image

# Document can be a png, jpg, etc. PDFs must be converted to images.
image = Image.open(name_of_your_document).convert("RGB")

width, height = image.size

可以使用 UdopProcessor 为模型准备图像和文本,它会处理所有这些工作。默认情况下,此类使用 Tesseract 引擎从给定文档中提取单词列表和边界框(坐标)。其功能与 LayoutLMv3Processor 相当,因此支持传递 apply_ocr=False(如果你倾向于使用自己的 OCR 引擎)或 apply_ocr=True(如果你想使用默认的 OCR 引擎)。关于所有可能的用例,请参考 LayoutLMv2 的使用指南UdopProcessor 的功能是相同的)。

  • 如果使用自己选择的 OCR 引擎,推荐使用 Azure 的 Read API,它支持所谓的行段。使用段落位置嵌入通常会带来更好的性能。
  • 在推理时,建议使用 generate 方法,根据文档图像自回归地生成文本。
  • 该模型已在自监督和有监督目标上进行了预训练。可以使用预训练期间使用的各种任务前缀(提示)来测试其开箱即用的能力。例如,可以使用 “Question answering. What is the date?” 来提示模型,因为 “Question answering.” 是预训练期间用于 DocVQA 的任务前缀。有关所有任务前缀,请参阅论文(表 1)。
  • 也可以微调 UdopEncoderModel,它是 UDOP 的仅编码器部分,可以看作是一个类似 LayoutLMv3 的 Transformer 编码器。对于判别性任务,可以在其之上添加一个线性分类器,并在标记数据集上进行微调。

此模型由 nielsr 贡献。原始代码可以在这里找到。

资源

以下是 Hugging Face 官方和社区(由 🌎 标志指示)提供的资源列表,帮助您开始使用 UDOP。如果您有兴趣提交资源以包含在此处,请随时发起 Pull Request,我们将进行审核!该资源最好能展示一些新内容,而不是重复现有资源。

  • 有关 UDOP 的演示笔记本可以在这里找到,其中展示了如何在自定义数据集上微调 UDOP 以及进行推理。🌎
  • 文档问答任务指南

UdopConfig

class transformers.UdopConfig

< >

( vocab_size = 33201 d_model = 1024 d_kv = 64 d_ff = 4096 num_layers = 24 num_decoder_layers = None num_heads = 16 relative_attention_num_buckets = 32 relative_attention_max_distance = 128 relative_bias_args = [{'type': '1d'}, {'type': 'horizontal'}, {'type': 'vertical'}] dropout_rate = 0.1 layer_norm_epsilon = 1e-06 initializer_factor = 1.0 feed_forward_proj = 'relu' is_encoder_decoder = True use_cache = True pad_token_id = 0 eos_token_id = 1 max_2d_position_embeddings = 1024 image_size = 224 patch_size = 16 num_channels = 3 **kwargs )

参数

  • vocab_size (int, 可选, 默认为 33201) — UDOP 模型的词汇表大小。定义了在调用 UdopForConditionalGeneration 时传递的 inputs_ids 可以表示的不同词元的数量。
  • d_model (int, 可选, 默认为 1024) — 编码器层和池化层的大小。
  • d_kv (int, 可选, 默认为 64) — 每个注意力头的键、查询、值投影的大小。投影层的 inner_dim 将定义为 num_heads * d_kv
  • d_ff (int, 可选, 默认为 4096) — 每个 UdopBlock 中中间前馈层的大小。
  • num_layers (int, 可选, 默认为 24) — Transformer 编码器和解码器中的隐藏层数量。
  • num_decoder_layers (int, 可选) — Transformer 解码器中的隐藏层数量。如果未设置,将使用与 num_layers 相同的值。
  • num_heads (int, 可选, 默认为 16) — Transformer 编码器和解码器中每个注意力层的注意力头数量。
  • relative_attention_num_buckets (int, 可选, 默认为 32) — 每个注意力层使用的桶的数量。
  • relative_attention_max_distance (int, 可选, 默认为 128) — 用于桶分离的较长序列的最大距离。
  • relative_bias_args (list[dict], 可选, 默认为 [{'type' -- '1d'}, {'type': 'horizontal'}, {'type': 'vertical'}]): 一个包含相对偏置层参数的字典列表。
  • dropout_rate (float, 可选, 默认为 0.1) — 所有 dropout 层的比率。
  • layer_norm_epsilon (float, 可选, 默认为 1e-06) — 层归一化层使用的 epsilon 值。
  • initializer_factor (float, 可选, 默认为 1.0) — 用于初始化所有权重矩阵的因子(应保持为 1,内部用于初始化测试)。
  • feed_forward_proj (string, 可选, 默认为 "relu") — 要使用的前馈层的类型。应为 "relu""gated-gelu" 之一。Udopv1.1 使用 "gated-gelu" 前馈投影。原始 Udop 使用 "relu"
  • is_encoder_decoder (bool, 可选, 默认为 True) — 模型是否应作为编码器/解码器运行。
  • use_cache (bool, 可选, 默认为 True) — 模型是否应返回最后一个键/值注意力(并非所有模型都使用)。
  • pad_token_id (int, 可选, 默认为 0) — 词汇表中填充词元的 ID。
  • eos_token_id (int, 可选, 默认为 1) — 词汇表中序列结束词元的 ID。
  • max_2d_position_embeddings (int, 可选, 默认为 1024) — 相对位置编码的最大绝对位置嵌入。
  • image_size (int, 可选, 默认为 224) — 输入图像的大小。
  • patch_size (int, 可选, 默认为 16) — 视觉编码器使用的图像块大小。
  • num_channels (int, 可选, 默认为 3) — 输入图像的通道数。

这是用于存储 UdopForConditionalGeneration 配置的配置类。它用于根据指定的参数实例化一个 UDOP 模型,定义模型架构。使用默认值实例化配置将产生与 UDOP microsoft/udop-large 架构类似的配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。

UdopTokenizer

class transformers.UdopTokenizer

< >

( vocab_file eos_token = '</s>' unk_token = '<unk>' sep_token = '</s>' pad_token = '<pad>' sep_token_box = [1000, 1000, 1000, 1000] pad_token_box = [0, 0, 0, 0] pad_token_label = -100 only_label_first_subword = True additional_special_tokens = None sp_model_kwargs: typing.Optional[dict[str, typing.Any]] = None legacy = True add_prefix_space = True **kwargs )

参数

  • vocab_file (str) — 词汇表文件的路径。
  • eos_token (str, 可选, 默认为 "</s>") — 序列结束词元。

    在使用特殊词元构建序列时,这不是用于序列结束的词元。使用的词元是 `sep_token`。

  • unk_token (str, 可选, 默认为 "<unk>") — 未知词元。不在词汇表中的词元无法转换为 ID,将被设置为此词元。
  • sep_token (str, 可选, 默认为 "</s>") — 分隔符词元,用于从多个序列构建一个序列时,例如,序列分类的两个序列,或问答任务中的文本和问题。它也用作使用特殊词元构建的序列的最后一个词元。
  • pad_token (str, 可选, 默认为 "<pad>") — 用于填充的词元,例如在批处理不同长度的序列时使用。
  • sep_token_box (list[int], 可选, 默认为 [1000, 1000, 1000, 1000]) — 用于特殊 [SEP] 词元的边界框。
  • pad_token_box (list[int], 可选, 默认为 [0, 0, 0, 0]) — 用于特殊 [PAD] 词元的边界框。
  • pad_token_label (int, 可选, 默认为 -100) — 用于填充词元的标签。默认为 -100,这是 PyTorch 的 CrossEntropyLoss 的 `ignore_index`。
  • only_label_first_subword (bool, 可选, 默认为 True) — 是否仅标记第一个子词,在提供单词标签的情况下。
  • additional_special_tokens (list[str], 可选, 默认为 ["<s>NOTUSED", "</s>NOTUSED"]) — 分词器使用的额外特殊词元。
  • sp_model_kwargs (dict, 可选) — 将传递给 SentencePieceProcessor.__init__() 方法。SentencePiece 的 Python 包装器可用于设置以下内容等:

    • enable_sampling:启用子词正则化。

    • nbest_size:unigram 的采样参数。对 BPE-Dropout 无效。

      • nbest_size = {0,1}:不执行采样。
      • nbest_size > 1:从 nbest_size 个结果中采样。
      • nbest_size < 0:假设 nbest_size 是无限的,并使用前向过滤和后向采样算法从所有假设(格)中采样。
    • alpha:unigram 采样的平滑参数,以及 BPE-dropout 的合并操作的 dropout 概率。

  • legacy (bool, 可选,默认为 True) — 是否使用分词器的 legacy 行为。Legacy 指的是在合并 #24622 之前的行为,该合并修复了正确处理特殊词元(special token)之后出现的词元的问题。一个简单的例子:

    • legacy=True

改编自 LayoutXLMTokenizerT5Tokenizer。基于 SentencePiece

此分词器继承自 PreTrainedTokenizer,其中包含了大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。

build_inputs_with_special_tokens

< >

( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None ) list[int]

参数

  • token_ids_0 (list[int]) — 将要添加特殊词元的 ID 列表。
  • token_ids_1 (list[int], 可选) — 用于序列对的可选的第二组 ID 列表。

返回

list[int]

带有适当特殊标记的输入ID列表。

通过连接和添加特殊标记,从序列或序列对构建用于序列分类任务的模型输入。序列格式如下:

  • 单个序列:X </s>
  • 序列对:A </s> B </s>

get_special_tokens_mask

< >

( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None already_has_special_tokens: bool = False ) list[int]

参数

  • token_ids_0 (list[int]) — ID 列表。
  • token_ids_1 (list[int], 可选) — 用于序列对的可选的第二组 ID 列表。
  • already_has_special_tokens (bool, 可选,默认为 False) — 词元列表是否已使用模型的特殊词元进行格式化。

返回

list[int]

一个范围为 [0, 1] 的整数列表:1 表示特殊标记,0 表示序列标记。

从没有添加特殊标记的标记列表中检索序列ID。此方法在使用分词器prepare_for_model方法添加特殊标记时调用。

create_token_type_ids_from_sequences

< >

( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None ) list[int]

参数

  • token_ids_0 (list[int]) — ID 列表。
  • token_ids_1 (list[int], 可选) — 用于序列对的可选的第二组 ID 列表。

返回

list[int]

零列表。

根据传入的两个序列创建掩码,用于序列对分类任务。T5 不使用令牌类型 ID,因此返回零列表。

save_vocabulary

< >

( save_directory: str filename_prefix: typing.Optional[str] = None )

UdopTokenizerFast

class transformers.UdopTokenizerFast

< >

( vocab_file = None tokenizer_file = None eos_token = '</s>' sep_token = '</s>' unk_token = '<unk>' pad_token = '<pad>' sep_token_box = [1000, 1000, 1000, 1000] pad_token_box = [0, 0, 0, 0] pad_token_label = -100 only_label_first_subword = True additional_special_tokens = None **kwargs )

参数

  • vocab_file (str, 可选) — 词汇表文件的路径。
  • tokenizer_file (str, 可选) — 分词器文件的路径。
  • eos_token (str, 可选,默认为 "</s>") — 序列结束词元。

    当使用特殊词元构建序列时,这不是用于序列结束的词元。使用的词元是 `sep_token`。

  • sep_token (str, 可选,默认为 "</s>") — 分隔符词元,用于从多个序列构建一个序列,例如用于序列分类的两个序列,或用于问答的文本和问题。它也用作使用特殊词元构建的序列的最后一个词元。
  • unk_token (str, 可选,默认为 "<unk>") — 未知词元。不在词汇表中的词元无法转换为 ID,将被设置为此词元。
  • pad_token (str, 可选,默认为 "<pad>") — 用于填充的词元,例如在批处理不同长度的序列时使用。
  • sep_token_box (list[int], 可选,默认为 [1000, 1000, 1000, 1000]) — 用于特殊 [SEP] 词元的边界框。
  • pad_token_box (list[int], 可选,默认为 [0, 0, 0, 0]) — 用于特殊 [PAD] 词元的边界框。
  • pad_token_label (int, 可选,默认为 -100) — 用于填充词元的标签。默认为 -100,这是 PyTorch 的 CrossEntropyLoss 的 `ignore_index`。
  • only_label_first_subword (bool, 可选,默认为 True) — 如果提供了单词标签,是否只标记第一个子词。
  • additional_special_tokens (list[str], 可选,默认为 ["<s>NOTUSED", "</s>NOTUSED"]) — 分词器使用的额外特殊词元。

构建一个“快速”的 UDOP 分词器(由 HuggingFace 的 *tokenizers* 库支持)。改编自 LayoutXLMTokenizerT5Tokenizer。基于 BPE

此分词器继承自 PreTrainedTokenizerFast,其中包含了大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。

batch_encode_plus_boxes

< >

( batch_text_or_text_pairs: typing.Union[list[str], list[tuple[str, str]], list[list[str]]] is_pair: typing.Optional[bool] = None boxes: typing.Optional[list[list[list[int]]]] = None word_labels: typing.Optional[list[list[int]]] = None add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy] = None max_length: typing.Optional[int] = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_token_type_ids: typing.Optional[bool] = None return_attention_mask: typing.Optional[bool] = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True **kwargs )

参数

  • batch_text_or_text_pairs (list[str], list[tuple[str, str]], list[list[str]], list[tuple[list[str], list[str]]], 对于非快速分词器,还支持 list[list[int]], list[tuple[list[int], list[int]]]) — 待编码的序列批次或序列对批次。这可以是一个字符串/字符串序列/整数序列的列表,或者是一个字符串/字符串序列/整数序列对的列表(详情请见 `encode_plus`)。

对一个序列列表或序列对列表进行分词并为模型做准备。

此方法已弃用,应改用 `__call__`。

build_inputs_with_special_tokens

< >

( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None ) list[int]

参数

  • token_ids_0 (list[int]) — 将要添加特殊词元的 ID 列表。
  • token_ids_1 (list[int], 可选) — 用于序列对的可选的第二组 ID 列表。

返回

list[int]

带有适当特殊标记的输入ID列表。

通过连接和添加特殊 token,为序列分类任务从序列或序列对构建模型输入。XLM-RoBERTa 序列的格式如下:

  • 单个序列:<s> X </s>
  • 序列对:<s> A </s></s> B </s>

call_boxes

< >

( text: typing.Union[str, list[str], list[list[str]]] text_pair: typing.Union[list[str], list[list[str]], NoneType] = None boxes: typing.Union[list[list[int]], list[list[list[int]]], NoneType] = None word_labels: typing.Union[list[int], list[list[int]], NoneType] = None add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy] = None max_length: typing.Optional[int] = None stride: int = 0 pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_token_type_ids: typing.Optional[bool] = None return_attention_mask: typing.Optional[bool] = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True **kwargs ) BatchEncoding

参数

  • text (str, list[str], list[list[str]]) — 待编码的序列或序列批次。每个序列可以是一个字符串、一个字符串列表(单个示例的单词或一批示例的问题)或一个字符串列表的列表(一批单词)。
  • text_pair (list[str], list[list[str]]) — 待编码的序列或序列批次。每个序列应为一个字符串列表(预分词的字符串)。
  • boxes (list[list[int]], list[list[list[int]]]) — 词级边界框。每个边界框都应归一化到 0-1000 的范围。
  • word_labels (list[int], list[list[int]], 可选) — 词级整数标签(用于如 FUNSD、CORD 等词元分类任务)。
  • add_special_tokens (bool, 可选,默认为 True) — 是否使用与模型相关的特殊词元对序列进行编码。
  • padding (bool, strPaddingStrategy, 可选,默认为 False) — 激活并控制填充。接受以下值:

    • True'longest': 填充到批次中最长的序列(如果只提供单个序列则不填充)。
    • 'max_length': 填充到由 `max_length` 参数指定的最大长度,如果未提供该参数,则填充到模型的最大可接受输入长度。
    • False'do_not_pad' (默认): 不填充(即可以输出具有不同长度序列的批次)。
  • truncation (bool, strTruncationStrategy, 可选,默认为 False) — 激活并控制截断。接受以下值:

    • True'longest_first': 截断到由 `max_length` 参数指定的最大长度,如果未提供该参数,则截断到模型的最大可接受输入长度。如果提供了一对序列(或一批序列对),这将逐个词元地截断,从最长的序列中移除一个词元。
    • 'only_first': 截断到由 `max_length` 参数指定的最大长度,如果未提供该参数,则截断到模型的最大可接受输入长度。如果提供了一对序列(或一批序列对),这只会截断第一个序列。
    • 'only_second': 截断到由 `max_length` 参数指定的最大长度,如果未提供该参数,则截断到模型的最大可接受输入长度。如果提供了一对序列(或一批序列对),这只会截断第二个序列。
    • False'do_not_truncate' (默认): 不截断(即可以输出序列长度大于模型最大可接受输入尺寸的批次)。
  • max_length (int, 可选) — 控制截断/填充参数使用的最大长度。

    如果未设置或设置为 None,当截断/填充参数需要最大长度时,将使用预定义的模型最大长度。如果模型没有特定的最大输入长度(如 XLNet),则停用截断/填充到最大长度的功能。

  • stride (int, 可选,默认为 0) — 如果与 `max_length` 一起设置,当 `return_overflowing_tokens=True` 时返回的溢出词元将包含一些来自返回的截断序列末尾的词元,以提供截断和溢出序列之间的一些重叠。此参数的值定义了重叠词元的数量。
  • pad_to_multiple_of (int, 可选) — 如果设置,将序列填充到所提供值的倍数。这对于在计算能力 `>= 7.5` (Volta) 的 NVIDIA 硬件上使用 Tensor Cores 特别有用。
  • return_tensors (strTensorType, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:

    • 'tf': 返回 TensorFlow tf.constant 对象。
    • 'pt': 返回 PyTorch torch.Tensor 对象。
    • 'np': 返回 Numpy np.ndarray 对象。
  • return_token_type_ids (bool, 可选) — 是否返回词元类型 ID。如果保留默认值,将根据特定分词器的默认设置返回词元类型 ID,该设置由 `return_outputs` 属性定义。

    什么是词元类型 ID?

  • return_attention_mask (bool, 可选) — 是否返回注意力掩码。如果保留默认值,将根据特定分词器的默认设置返回注意力掩码,该设置由 `return_outputs` 属性定义。

    什么是注意力掩码?

  • return_overflowing_tokens (bool, 可选,默认为 False) — 是否返回溢出的词元序列。如果提供了一对输入 ID 序列(或一批序列对)并使用 `truncation_strategy = longest_first` 或 `True`,则会引发错误,而不是返回溢出的词元。
  • return_special_tokens_mask (bool, 可选,默认为 False) — 是否返回特殊词元掩码信息。
  • return_offsets_mapping (bool, 可选,默认为 False) — 是否为每个词元返回 `(char_start, char_end)`。

    这仅在继承自 PreTrainedTokenizerFast 的快速分词器上可用,如果使用 Python 的分词器,此方法将引发 `NotImplementedError`。

  • return_length (bool, 可选,默认为 False) — 是否返回编码输入的长度。
  • verbose (bool, 可选,默认为 True) — 是否打印更多信息和警告。
  • **kwargs — 传递给 `self.tokenize()` 方法

返回

BatchEncoding

一个 BatchEncoding,包含以下字段:

  • input_ids — 要输入到模型中的标记 ID 列表。

    什么是输入 ID?

  • bbox — 待输入模型的边界框列表。

  • token_type_ids — 要输入到模型中的标记类型 ID 列表(当 return_token_type_ids=True 或如果 *“token_type_ids”* 在 self.model_input_names 中时)。

    什么是标记类型 ID?

  • attention_mask — 指定模型应关注哪些标记的索引列表(当 return_attention_mask=True 或如果 *“attention_mask”* 在 self.model_input_names 中时)。

    什么是注意力掩码?

  • labels — 待输入模型的标签列表。(当指定 word_labels 时)。

  • overflowing_tokens — 溢出标记序列列表(当指定 max_lengthreturn_overflowing_tokens=True 时)。

  • num_truncated_tokens — 截断标记的数量(当指定 max_lengthreturn_overflowing_tokens=True 时)。

  • special_tokens_mask — 0 和 1 的列表,其中 1 表示添加的特殊标记,0 表示常规序列标记(当 add_special_tokens=Truereturn_special_tokens_mask=True 时)。

  • length — 输入的长度(当 return_length=True 时)。

对一个或多个序列或一对序列进行分词并准备输入模型的主要方法,其中包含词级别的归一化边界框和可选标签。

create_token_type_ids_from_sequences

< >

( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None ) list[int]

参数

  • token_ids_0 (list[int]) — ID 列表。
  • token_ids_1 (list[int], optional) — 可选的第二个ID列表,用于序列对。

返回

list[int]

零列表。

根据传入的两个序列创建用于序列对分类任务的掩码。XLM-RoBERTa 不使用 token 类型 ID,因此返回一个全零列表。

encode_boxes

< >

( text: typing.Union[str, list[str], list[int]] text_pair: typing.Union[str, list[str], list[int], NoneType] = None boxes: typing.Optional[list[list[int]]] = None word_labels: typing.Optional[list[list[int]]] = None add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy] = None max_length: typing.Optional[int] = None stride: int = 0 return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None **kwargs )

参数

  • 使用分词器和词汇表,将字符串 转换 为ID序列(整数)。与执行以下操作相同 —
  • self.convert_tokens_to_ids(self.tokenize(text)) — text (str, list[str]list[int]): 要编码的第一个序列。这可以是一个字符串、一个字符串列表(使用 tokenize 方法分词后的字符串)或一个整数列表(使用 convert_tokens_to_ids 方法分词后的字符串ID)。text_pair (str, list[str]list[int], optional): 可选的要编码的第二个序列。这可以是一个字符串、一个字符串列表(使用 tokenize 方法分词后的字符串)或一个整数列表(使用 convert_tokens_to_ids 方法分词后的字符串ID)。

encode_plus_boxes

< >

( text: typing.Union[str, list[str]] text_pair: typing.Optional[list[str]] = None boxes: typing.Optional[list[list[int]]] = None word_labels: typing.Optional[list[list[int]]] = None add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy] = None max_length: typing.Optional[int] = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_token_type_ids: typing.Optional[bool] = None return_attention_mask: typing.Optional[bool] = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True **kwargs )

参数

  • text (str, list[str] or (for non-fast tokenizers) list[int]) — 要编码的第一个序列。这可以是一个字符串、一个字符串列表(使用 tokenize 方法分词后的字符串)或一个整数列表(使用 convert_tokens_to_ids 方法分词后的字符串ID)。
  • text_pair (str, list[str] or list[int], optional) — 可选的要编码的第二个序列。这可以是一个字符串、一个字符串列表(使用 tokenize 方法分词后的字符串)或一个整数列表(使用 convert_tokens_to_ids 方法分词后的字符串ID)。

对一个序列或一对序列进行分词并为模型做准备。

此方法已弃用,应改用 `__call__`。

UdopProcessor

class transformers.UdopProcessor

< >

( image_processor tokenizer )

参数

构建一个 UDOP 处理器,它将 LayoutLMv3 图像处理器和 UDOP 分词器组合成一个单一的处理器。

UdopProcessor 提供了为模型准备数据所需的所有功能。

它首先使用 LayoutLMv3ImageProcessor 来调整、缩放和归一化文档图像,并可选地应用OCR以获取单词和归一化的边界框。然后将这些提供给 UdopTokenizerUdopTokenizerFast,后者将单词和边界框转换为词元级别的 `input_ids`、`attention_mask`、`token_type_ids` 和 `bbox`。可选地,可以提供整数 `word_labels`,这些标签会被转换为词元级别的 `labels` 用于词元分类任务(如FUNSD, CORD)。

此外,它还支持向分词器传递 `text_target` 和 `text_pair_target`,可用于为语言建模任务准备标签。

__call__

< >

( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = None text: typing.Union[str, list[str], list[list[str]]] = None *args audio = None videos = None **kwargs: typing_extensions.Unpack[transformers.models.udop.processing_udop.UdopProcessorKwargs] )

此方法首先将 `images` 参数转发给 `~UdopImageProcessor.__call__`。如果 `UdopImageProcessor` 初始化时 `apply_ocr` 设置为 `True`,它会将获取的单词和边界框连同其他参数一起传递给 `__call__()` 并返回输出,以及准备好的 `pixel_values`。如果 `UdopImageProcessor` 初始化时 `apply_ocr` 设置为 `False`,它会将用户指定的单词(`text`/`text_pair`)和 `boxes` 连同其他参数一起传递给 `__call__()` 并返回输出,以及准备好的 `pixel_values`。

另外,也可以传递 `text_target` 和 `text_pair_target` 来准备 UDOP 的目标。

有关更多信息,请参阅上述两种方法的文档字符串。

UdopModel

class transformers.UdopModel

< >

( config )

参数

  • config (UdopModel) — 包含模型所有参数的模型配置类。使用配置文件进行初始化不会加载与模型相关的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。

基础的 Udop 模型,输出原始的隐藏状态,顶部没有任何特定的头。

该模型继承自 PreTrainedModel。请查阅超类文档以了解该库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。

该模型也是 PyTorch torch.nn.Module 的子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None bbox: typing.Optional[dict[str, typing.Any]] = None pixel_values: typing.Optional[torch.Tensor] = None visual_bbox: typing.Optional[dict[str, typing.Any]] = None decoder_input_ids: typing.Optional[torch.Tensor] = None decoder_attention_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None encoder_outputs: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None decoder_inputs_embeds: typing.Optional[torch.Tensor] = None decoder_head_mask: typing.Optional[torch.Tensor] = None cross_attn_head_mask: typing.Optional[torch.Tensor] = None use_cache = True output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None )

参数

  • input_ids (torch.Tensor,形状为 (batch_size, sequence_length), optional) — 词汇表中输入序列词元的索引。默认情况下,填充将被忽略。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length), optional) — 用于避免对填充词元索引执行注意力操作的掩码。掩码值在 [0, 1] 中选择:

    • 对于未被掩码的词元,值为1,
    • 对于被掩码的词元,值为0。

    什么是注意力掩码?

  • bbox (torch.LongTensor,形状为 ({0}, 4), optional) — 每个输入序列词元的边界框。在 `[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] 词元。关于 `patch_sequence_length`,请参见 `pixel_values`。

  • pixel_values (torch.Tensor,形状为 (batch_size, num_channels, image_size, image_size), optional) — 与输入图像对应的张量。可以使用 `{image_processor_class}` 获取像素值。有关详细信息,请参阅 `{image_processor_class}.__call__`(`{processor_class}` 使用 `{image_processor_class}` 处理图像)。
  • visual_bbox (torch.LongTensor,形状为 (batch_size, patch_sequence_length, 4), optional) — 图像中每个补丁的边界框。如果未提供,将在模型中创建边界框。
  • decoder_input_ids (torch.LongTensor,形状为 (batch_size, target_sequence_length), optional) — 词汇表中解码器输入序列词元的索引。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()什么是解码器输入ID? T5使用 `pad_token_id` 作为生成 `decoder_input_ids` 的起始词元。如果使用 `past_key_values`,可以选择只输入最后的 `decoder_input_ids`(参见 `past_key_values`)。要了解如何为预训练准备 `decoder_input_ids`,请参阅 T5训练
  • decoder_attention_mask (torch.BoolTensor,形状为 (batch_size, target_sequence_length), optional) — 默认行为:生成一个忽略 `decoder_input_ids` 中填充词元的张量。默认情况下也会使用因果掩码。
  • inputs_embeds (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size), optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递 `input_ids`。如果您希望比模型内部的嵌入查找矩阵更好地控制如何将 `input_ids` 索引转换为关联向量,这将非常有用。
  • encoder_outputs (torch.Tensor, optional) — 元组,包含 (`last_hidden_state`, optional: `hidden_states`, optional: `attentions`)。`last_hidden_state` 的形状为 `(batch_size, sequence_length, hidden_size)`,optional) 是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。
  • past_key_values (torch.Tensor, optional) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常是在解码的先前阶段,当 `use_cache=True` 或 `config.use_cache=True` 时,由模型返回的 `past_key_values`。

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 kv 缓存指南
    • 长度为 `config.n_layers` 的 `tuple(torch.FloatTensor)` 的元组,每个元组有两个形状为 `(batch_size, num_heads, sequence_length, embed_size_per_head)` 的张量。这也称为旧版缓存格式。

    模型将输出与输入相同的缓存格式。如果未传递 `past_key_values`,将返回旧版缓存格式。

    如果使用 `past_key_values`,用户可以选择只输入最后的 `input_ids`(那些没有将其过去键值状态提供给此模型的 `input_ids`),形状为 `(batch_size, 1)`,而不是所有形状为 `(batch_size, sequence_length)` 的 `input_ids`。

  • head_mask (torch.Tensor,形状为 (num_heads,)(num_layers, num_heads), optional) — 用于将自注意力模块的选定头部置零的掩码。掩码值在 `[0, 1]` 中选择:

    • 1 表示头部未被掩码
    • 0 表示头部被掩码
  • decoder_inputs_embeds (torch.Tensor,形状为 (batch_size, target_sequence_length, hidden_size), optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递 `decoder_input_ids`。如果使用 `past_key_values`,可以选择只输入最后的 `decoder_inputs_embeds`(参见 `past_key_values`)。如果您希望比模型内部的嵌入查找矩阵更好地控制如何将 `decoder_input_ids` 索引转换为关联向量,这将非常有用。

    如果 `decoder_input_ids` 和 `decoder_inputs_embeds` 都未设置,`decoder_inputs_embeds` 的值将取自 `inputs_embeds`。

  • decoder_head_mask (torch.FloatTensor,形状为 (num_heads,)(num_layers, num_heads), optional) — 用于将解码器中自注意力模块的选定头部置零的掩码。掩码值在 `[0, 1]` 中选择:

    • 1 表示头部未被掩码
    • 0 表示头部被掩码
  • cross_attn_head_mask (torch.Tensor,形状为 (num_heads,)(num_layers, num_heads), optional) — 用于将解码器中交叉注意力模块的选定头部置零的掩码。掩码值在 `[0, 1]` 中选择:

    • 1 表示头部未被掩码
    • 0 表示头部被掩码
  • use_cache (`, 默认为 True) -- 如果设置为 True,则返回 past_key_values` 键值状态,可用于加速解码(参见 `past_key_values`)。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。
  • return_dict (bool, optional) — 是否返回一个 ModelOutput 而不是一个普通的元组。
  • cache_position (torch.LongTensor,形状为 (sequence_length), optional) — 描绘输入序列词元在序列中位置的索引。与 `position_ids` 不同,此张量不受填充影响。它用于在正确的位置更新缓存并推断完整的序列长度。

UdopModel 的 forward 方法重写了 `__call__` 特殊方法。

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

示例

>>> from transformers import AutoProcessor, AutoModel
>>> from datasets import load_dataset
>>> import torch

>>> # load model and processor
>>> # in this case, we already have performed OCR ourselves
>>> # so we initialize the processor with `apply_ocr=False`
>>> processor = AutoProcessor.from_pretrained("microsoft/udop-large", apply_ocr=False)
>>> model = AutoModel.from_pretrained("microsoft/udop-large")

>>> # load an example image, along with the words and coordinates
>>> # which were extracted using an OCR engine
>>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
>>> example = dataset[0]
>>> image = example["image"]
>>> words = example["tokens"]
>>> boxes = example["bboxes"]
>>> inputs = processor(image, words, boxes=boxes, return_tensors="pt")

>>> decoder_input_ids = torch.tensor([[model.config.decoder_start_token_id]])

>>> # forward pass
>>> outputs = model(**inputs, decoder_input_ids=decoder_input_ids)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 1, 1024]

UdopForConditionalGeneration

class transformers.UdopForConditionalGeneration

< >

( config )

参数

  • config (UdopForConditionalGeneration) — 包含模型所有参数的模型配置类。使用配置文件进行初始化不会加载与模型相关的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。

UDOP 编码器-解码器 Transformer,顶部带有语言建模头,能够在给定文档图像和可选提示的情况下生成文本。

该类基于 T5ForConditionalGeneration,并扩展以处理图像和布局(2D)数据。

该模型继承自 PreTrainedModel。请查阅超类文档以了解该库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。

该模型也是 PyTorch torch.nn.Module 的子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None bbox: typing.Optional[dict[str, typing.Any]] = None pixel_values: typing.Optional[torch.Tensor] = None visual_bbox: typing.Optional[dict[str, typing.Any]] = None decoder_input_ids: typing.Optional[torch.Tensor] = None decoder_attention_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None encoder_outputs: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None decoder_inputs_embeds: typing.Optional[torch.Tensor] = None decoder_head_mask: typing.Optional[torch.Tensor] = None cross_attn_head_mask: typing.Optional[torch.Tensor] = None use_cache = True output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None cache_position: typing.Optional[torch.LongTensor] = None )

参数

  • input_ids (torch.Tensor,形状为 (batch_size, sequence_length), optional) — 词汇表中输入序列词元的索引。默认情况下,填充将被忽略。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length), optional) — 用于避免对填充词元索引执行注意力操作的掩码。掩码值在 [0, 1] 中选择:

    • 对于未被掩码的词元,值为1,
    • 对于被掩码的词元,值为0。

    什么是注意力掩码?

  • bbox (torch.LongTensor,形状为 ({0}, 4), optional) — 每个输入序列词元的边界框。在 `[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] 词元。关于 `patch_sequence_length`,请参见 `pixel_values`。

  • pixel_values (torch.Tensor,形状为 (batch_size, num_channels, image_size, image_size), optional) — 与输入图像对应的张量。可以使用 `{image_processor_class}` 获取像素值。有关详细信息,请参阅 `{image_processor_class}.__call__`(`{processor_class}` 使用 `{image_processor_class}` 处理图像)。
  • visual_bbox (torch.LongTensor,形状为 (batch_size, patch_sequence_length, 4), optional) — 图像中每个补丁的边界框。如果未提供,将在模型中创建边界框。
  • decoder_input_ids (torch.LongTensor,形状为 (batch_size, target_sequence_length)可选) — 解码器输入序列在词汇表中的 token 索引。索引可以使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()什么是解码器输入 ID? T5 使用 pad_token_id 作为生成 decoder_input_ids 的起始 token。如果使用 past_key_values,可以选择只输入最后一个 decoder_input_ids(参见 past_key_values)。要了解更多关于如何为预训练准备 decoder_input_ids 的信息,请参阅 T5 训练
  • decoder_attention_mask (torch.BoolTensor,形状为 (batch_size, target_sequence_length)可选) — 默认行为:生成一个忽略 decoder_input_ids 中填充 token 的张量。默认情况下也会使用因果掩码。
  • inputs_embeds (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选地,你可以不传递 input_ids,而是直接传递一个嵌入表示。如果你想比模型内部的嵌入查找矩阵更好地控制如何将 input_ids 索引转换为关联向量,这会很有用。
  • encoder_outputs (torch.Tensor可选) — 元组,包含 (last_hidden_state, 可选: hidden_states, 可选: attentions)。形状为 (batch_size, sequence_length, hidden_size)last_hidden_state可选)是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力机制。
  • past_key_values (torch.Tensor可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速序列解码。这通常包括模型在解码的前一个阶段返回的 past_key_values,此时 use_cache=Trueconfig.use_cache=True

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 kv 缓存指南
    • 一个长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量)。这也称为传统缓存格式。

    模型将输出与输入相同的缓存格式。如果没有传递 past_key_values,将返回传统缓存格式。

    如果使用了 past_key_values,用户可以选择只输入最后一个 input_ids(那些没有给出其过去键值状态的 token),其形状为 (batch_size, 1),而不是所有形状为 (batch_size, sequence_length)input_ids

  • head_mask (torch.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于置零自注意力模块中选定头的掩码。掩码值选自 [0, 1]

    • 1 表示头未被遮盖
    • 0 表示头被遮盖
  • decoder_inputs_embeds (torch.Tensor,形状为 (batch_size, target_sequence_length, hidden_size)可选) — 可选地,你可以不传递 decoder_input_ids,而是直接传递一个嵌入表示。如果使用 past_key_values,可以选择只输入最后一个 decoder_inputs_embeds(参见 past_key_values)。如果你想比模型内部的嵌入查找矩阵更好地控制如何将 decoder_input_ids 索引转换为关联向量,这会很有用。

    如果 decoder_input_idsdecoder_inputs_embeds 都未设置,decoder_inputs_embeds 将取 inputs_embeds 的值。

  • decoder_head_mask (torch.FloatTensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于置零解码器中自注意力模块选定头的掩码。掩码值选自 [0, 1]

    • 1 表示头未被遮盖
    • 0 表示头被遮盖
  • cross_attn_head_mask (torch.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于置零解码器中交叉注意力模块选定头的掩码。掩码值选自 [0, 1]

    • 1 表示头未被遮盖
    • 0 表示头被遮盖
  • use_cache (`,默认为 True) -- 如果设置为 True,将返回 past_key_values` 的键值状态,可用于加速解码(参见 `past_key_values`)。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通的元组。
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算语言建模损失的标签。索引应在 [-100, 0, ..., config.vocab_size - 1] 范围内。所有设置为 -100 的标签都会被忽略(遮盖),损失仅对 [0, ..., config.vocab_size] 范围内的标签进行计算。
  • cache_position (torch.LongTensor,形状为 (sequence_length)可选) — 描绘输入序列 token 在序列中位置的索引。与 position_ids 相反,此张量不受填充影响。它用于在正确的位置更新缓存并推断完整的序列长度。

UdopForConditionalGeneration 的 forward 方法覆盖了 __call__ 特殊方法。

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

示例

>>> from transformers import AutoProcessor, UdopForConditionalGeneration
>>> from datasets import load_dataset

>>> # load model and processor
>>> # in this case, we already have performed OCR ourselves
>>> # so we initialize the processor with `apply_ocr=False`
>>> processor = AutoProcessor.from_pretrained("microsoft/udop-large", apply_ocr=False)
>>> model = UdopForConditionalGeneration.from_pretrained("microsoft/udop-large")

>>> # load an example image, along with the words and coordinates
>>> # which were extracted using an OCR engine
>>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
>>> example = dataset[0]
>>> image = example["image"]
>>> words = example["tokens"]
>>> boxes = example["bboxes"]

>>> # one can use the various task prefixes (prompts) used during pre-training
>>> # e.g. the task prefix for DocVQA is "Question answering. "
>>> question = "Question answering. What is the date on the form?"
>>> encoding = processor(image, question, text_pair=words, boxes=boxes, return_tensors="pt")

>>> # autoregressive generation
>>> predicted_ids = model.generate(**encoding)
>>> print(processor.batch_decode(predicted_ids, skip_special_tokens=True)[0])
9/30/92

UdopEncoderModel

class transformers.UdopEncoderModel

< >

( config: UdopConfig )

参数

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

基础的 Udop 模型,输出原始的隐藏状态,顶部没有任何特定的头。

该模型继承自 PreTrainedModel。请查阅超类文档以了解该库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。

该模型也是 PyTorch torch.nn.Module 的子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None bbox: typing.Optional[dict[str, typing.Any]] = None attention_mask: typing.Optional[torch.Tensor] = None pixel_values: typing.Optional[torch.Tensor] = None visual_bbox: typing.Optional[dict[str, typing.Any]] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.models.udop.modeling_udop.BaseModelOutputWithAttentionMasktuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 输入序列在词汇表中的 token 索引。T5 是一个带有相对位置嵌入的模型,因此你应该能够对输入的左右两边进行填充。

    索引可以使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    要了解更多关于如何为预训练准备 input_ids 的信息,请参阅 T5 训练

  • bbox (torch.LongTensor,形状为 ({0}, 4)可选) — 每个输入序列 token 的边界框。选择范围在 [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] token。有关 patch_sequence_length,请参阅 pixel_values

  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 用于避免对填充 token 索引执行注意力的掩码。掩码值选自 [0, 1]

    • 1 表示 token 未被遮盖
    • 0 表示 token 被遮盖

    什么是注意力掩码?

  • pixel_values (torch.Tensor,形状为 (batch_size, num_channels, image_size, image_size)可选) — 对应于输入图像的张量。像素值可以使用 {image_processor_class} 获取。有关详细信息,请参阅 {image_processor_class}.__call__{processor_class} 使用 {image_processor_class} 处理图像)。
  • visual_bbox (torch.LongTensor,形状为 (batch_size, patch_sequence_length, 4)可选) — 图像中每个补丁的边界框。如果未提供,则在模型中创建边界框。
  • head_mask (torch.Tensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于置零自注意力模块中选定头的掩码。掩码值选自 [0, 1]

    • 1 表示头未被遮盖
    • 0 表示头被遮盖
  • inputs_embeds (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选地,你可以不传递 input_ids,而是直接传递一个嵌入表示。如果你想比模型内部的嵌入查找矩阵更好地控制如何将 input_ids 索引转换为关联向量,这会很有用。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通的元组。

返回

transformers.models.udop.modeling_udop.BaseModelOutputWithAttentionMasktuple(torch.FloatTensor)

一个 transformers.models.udop.modeling_udop.BaseModelOutputWithAttentionMask 或一个 torch.FloatTensor 元组(如果传递了 return_dict=Falseconfig.return_dict=False),根据配置(UdopConfig)和输入,包含不同的元素。

  • last_hidden_state (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)) — 模型最后一层输出的隐藏状态序列。如果使用 past_key_values,则只输出序列的最后一个隐藏状态,形状为 (batch_size, 1, hidden_size)
  • attention_mask (torch.FloatTensor,形状为 (batch_size, sequence_length)可选) — 在模型的前向传播中使用的注意力掩码,用于避免对填充 token 索引执行注意力。掩码值选自 [0, 1] — - 1 表示 token 未被遮盖
    • 0 代表**被掩码**的标记。
  • past_key_values (tuple(tuple(torch.FloatTensor))可选,在传递 use_cache=Trueconfig.use_cache=True 时返回) — 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量,如果 config.is_encoder_decoder=True,则可选地包含 2 个额外的形状为 (batch_size, num_heads, encoder_sequence_length, embed_size_per_head) 的张量。包含预计算的隐藏状态(自注意力块中的键和值,如果 config.is_encoder_decoder=True 则可选地包含交叉注意力块中的键和值),可用于(参见 past_key_values 输入)加速序列解码。
  • hidden_states (tuple(torch.FloatTensor)可选,在传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 的元组(如果模型有嵌入层,则一个用于嵌入层的输出,+ 每个层一个输出),形状为 (batch_size, sequence_length, hidden_size)。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor)可选,在传递 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。
  • cross_attentions (tuple(torch.FloatTensor)可选,在传递 output_attentions=Trueconfig.add_cross_attention=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。解码器交叉注意力层的注意力权重,在注意力 softmax 之后,用于在交叉注意力头中计算加权平均值。

UdopEncoderModel 的 forward 方法覆盖了 __call__ 特殊方法。

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

示例

>>> from transformers import AutoProcessor, UdopEncoderModel
>>> from huggingface_hub import hf_hub_download
>>> from datasets import load_dataset

>>> # load model and processor
>>> # in this case, we already have performed OCR ourselves
>>> # so we initialize the processor with `apply_ocr=False`
>>> processor = AutoProcessor.from_pretrained("microsoft/udop-large", apply_ocr=False)
>>> model = UdopEncoderModel.from_pretrained("microsoft/udop-large")

>>> # load an example image, along with the words and coordinates
>>> # which were extracted using an OCR engine
>>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
>>> example = dataset[0]
>>> image = example["image"]
>>> words = example["tokens"]
>>> boxes = example["bboxes"]
>>> encoding = processor(image, words, boxes=boxes, return_tensors="pt")

>>> outputs = model(**encoding)
>>> last_hidden_states = outputs.last_hidden_state
< > 在 GitHub 上更新