Transformers 文档
UDOP
并获得增强的文档体验
开始使用
UDOP
概述
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)排行榜上排名第一。*

使用技巧
- 除了 input_ids,UdopForConditionalGeneration 还需要输入
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)),
]
这里,width
和 height
对应于词元所在原始文档的宽度和高度。这些可以使用 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 编码器。对于判别性任务,可以在其之上添加一个线性分类器,并在标记数据集上进行微调。
资源
以下是 Hugging Face 官方和社区(由 🌎 标志指示)提供的资源列表,帮助您开始使用 UDOP。如果您有兴趣提交资源以包含在此处,请随时发起 Pull Request,我们将进行审核!该资源最好能展示一些新内容,而不是重复现有资源。
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
:
改编自 LayoutXLMTokenizer 和 T5Tokenizer。基于 SentencePiece。
此分词器继承自 PreTrainedTokenizer,其中包含了大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。
build_inputs_with_special_tokens
< 源代码 >( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None ) → list[int]
通过连接和添加特殊标记,从序列或序列对构建用于序列分类任务的模型输入。序列格式如下:
- 单个序列:
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]
从没有添加特殊标记的标记列表中检索序列ID。此方法在使用分词器prepare_for_model
方法添加特殊标记时调用。
create_token_type_ids_from_sequences
< 源代码 >( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None ) → list[int]
根据传入的两个序列创建掩码,用于序列对分类任务。T5 不使用令牌类型 ID,因此返回零列表。
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* 库支持)。改编自 LayoutXLMTokenizer 和 T5Tokenizer。基于 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 )
对一个序列列表或序列对列表进行分词并为模型做准备。
此方法已弃用,应改用 `__call__`。
build_inputs_with_special_tokens
< 源代码 >( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None ) → list[int]
通过连接和添加特殊 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
,str
或 PaddingStrategy, 可选,默认为False
) — 激活并控制填充。接受以下值:True
或'longest'
: 填充到批次中最长的序列(如果只提供单个序列则不填充)。'max_length'
: 填充到由 `max_length` 参数指定的最大长度,如果未提供该参数,则填充到模型的最大可接受输入长度。False
或'do_not_pad'
(默认): 不填充(即可以输出具有不同长度序列的批次)。
- truncation (
bool
,str
或 TruncationStrategy, 可选,默认为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 (
str
或 TensorType, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:'tf'
: 返回 TensorFlowtf.constant
对象。'pt'
: 返回 PyTorchtorch.Tensor
对象。'np'
: 返回 Numpynp.ndarray
对象。
- return_token_type_ids (
bool
, 可选) — 是否返回词元类型 ID。如果保留默认值,将根据特定分词器的默认设置返回词元类型 ID,该设置由 `return_outputs` 属性定义。 - 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,包含以下字段:
-
input_ids — 要输入到模型中的标记 ID 列表。
-
bbox — 待输入模型的边界框列表。
-
token_type_ids — 要输入到模型中的标记类型 ID 列表(当
return_token_type_ids=True
或如果 *“token_type_ids”* 在self.model_input_names
中时)。 -
attention_mask — 指定模型应关注哪些标记的索引列表(当
return_attention_mask=True
或如果 *“attention_mask”* 在self.model_input_names
中时)。 -
labels — 待输入模型的标签列表。(当指定
word_labels
时)。 -
overflowing_tokens — 溢出标记序列列表(当指定
max_length
且return_overflowing_tokens=True
时)。 -
num_truncated_tokens — 截断标记的数量(当指定
max_length
且return_overflowing_tokens=True
时)。 -
special_tokens_mask — 0 和 1 的列表,其中 1 表示添加的特殊标记,0 表示常规序列标记(当
add_special_tokens=True
且return_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]
根据传入的两个序列创建用于序列对分类任务的掩码。XLM-RoBERTa 不使用 token 类型 ID,因此返回一个全零列表。
encode_boxes
< source >( 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
< source >( 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]
orlist[int]
, optional) — 可选的要编码的第二个序列。这可以是一个字符串、一个字符串列表(使用tokenize
方法分词后的字符串)或一个整数列表(使用convert_tokens_to_ids
方法分词后的字符串ID)。
对一个序列或一对序列进行分词并为模型做准备。
此方法已弃用,应改用 `__call__`。
UdopProcessor
class transformers.UdopProcessor
< source >( image_processor tokenizer )
参数
- image_processor (
LayoutLMv3ImageProcessor
) — LayoutLMv3ImageProcessor的一个实例。图像处理器是必需的输入。 - tokenizer (
UdopTokenizer
或UdopTokenizerFast
) — UdopTokenizer 或 UdopTokenizerFast 的一个实例。分词器是必需的输入。
构建一个 UDOP 处理器,它将 LayoutLMv3 图像处理器和 UDOP 分词器组合成一个单一的处理器。
UdopProcessor 提供了为模型准备数据所需的所有功能。
它首先使用 LayoutLMv3ImageProcessor 来调整、缩放和归一化文档图像,并可选地应用OCR以获取单词和归一化的边界框。然后将这些提供给 UdopTokenizer 或 UdopTokenizerFast,后者将单词和边界框转换为词元级别的 `input_ids`、`attention_mask`、`token_type_ids` 和 `bbox`。可选地,可以提供整数 `word_labels`,这些标签会被转换为词元级别的 `labels` 用于词元分类任务(如FUNSD, CORD)。
此外,它还支持向分词器传递 `text_target` 和 `text_pair_target`,可用于为语言建模任务准备标签。
__call__
< source >( 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
< source >( config )
参数
- config (UdopModel) — 包含模型所有参数的模型配置类。使用配置文件进行初始化不会加载与模型相关的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。
基础的 Udop 模型,输出原始的隐藏状态,顶部没有任何特定的头。
该模型继承自 PreTrainedModel。请查阅超类文档以了解该库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。
该模型也是 PyTorch torch.nn.Module 的子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。
forward
< source >( 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()。
- 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
< source >( config )
参数
- config (UdopForConditionalGeneration) — 包含模型所有参数的模型配置类。使用配置文件进行初始化不会加载与模型相关的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。
UDOP 编码器-解码器 Transformer,顶部带有语言建模头,能够在给定文档图像和可选提示的情况下生成文本。
该类基于 T5ForConditionalGeneration,并扩展以处理图像和布局(2D)数据。
该模型继承自 PreTrainedModel。请查阅超类文档以了解该库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。
该模型也是 PyTorch torch.nn.Module 的子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。
forward
< source >( 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()。
- 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=True
或config.use_cache=True
。允许两种格式:
- 一个 Cache 实例,请参阅我们的 kv 缓存指南;
- 一个长度为
config.n_layers
的tuple(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_ids
和decoder_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.BaseModelOutputWithAttentionMask
或 tuple(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.BaseModelOutputWithAttentionMask
或 tuple(torch.FloatTensor)
一个 transformers.models.udop.modeling_udop.BaseModelOutputWithAttentionMask
或一个 torch.FloatTensor
元组(如果传递了 return_dict=False
或 config.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=True
或config.use_cache=True
时返回) — 长度为config.n_layers
的tuple(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=True
或config.output_hidden_states=True
时返回) —torch.FloatTensor
的元组(如果模型有嵌入层,则一个用于嵌入层的输出,+ 每个层一个输出),形状为(batch_size, sequence_length, hidden_size)
。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。 - attentions (
tuple(torch.FloatTensor)
,可选,在传递output_attentions=True
或config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。 - cross_attentions (
tuple(torch.FloatTensor)
,可选,在传递output_attentions=True
和config.add_cross_attention=True
或config.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