Transformers 文档
LayoutLMv3
并获得增强的文档体验
开始使用
LayoutLMv3
概述
LayoutLMv3 模型由 Yupan Huang, Tengchao Lv, Lei Cui, Yutong Lu, Furu Wei 在 LayoutLMv3: Pre-training for Document AI with Unified Text and Image Masking 中提出。LayoutLMv3 简化了 LayoutLMv2,它使用补丁嵌入(如在 ViT 中)而不是利用 CNN 主干,并使用 3 个目标对模型进行预训练:掩码语言建模(MLM)、掩码图像建模(MIM)和词-补丁对齐(WPA)。
论文摘要如下:
自监督预训练技术在文档 AI 领域取得了显著进展。大多数多模态预训练模型使用掩码语言建模目标来学习文本模态上的双向表示,但它们在图像模态的预训练目标上有所不同。这种差异增加了多模态表示学习的难度。在本文中,我们提出了 LayoutLMv3,通过统一的文本和图像掩码对文档 AI 的多模态 Transformer 进行预训练。此外,LayoutLMv3 通过词-补丁对齐目标进行预训练,通过预测文本词的相应图像补丁是否被掩码来学习跨模态对齐。简单统一的架构和训练目标使 LayoutLMv3 成为文本中心和图像中心文档 AI 任务的通用预训练模型。实验结果表明,LayoutLMv3 不仅在文本中心任务(包括表单理解、收据理解和文档视觉问答)中,而且在图像中心任务(如文档图像分类和文档布局分析)中都达到了最先进的性能。

该模型由 nielsr 贡献。该模型的 TensorFlow 版本由 chriskoo、tokec 和 lre 添加。原始代码可在 此处 找到。
用法提示
- 在数据处理方面,LayoutLMv3 与其前身 LayoutLMv2 相同,除了:
- 图像需要调整大小并以常规 RGB 格式的通道进行归一化。而 LayoutLMv2 在内部对图像进行归一化,并期望通道以 BGR 格式。
- 文本使用字节对编码 (BPE) 进行标记化,而不是 WordPiece。由于数据预处理的这些差异,可以使用 LayoutLMv3Processor,它在内部结合了 LayoutLMv3ImageProcessor(用于图像模态)和 LayoutLMv3Tokenizer/LayoutLMv3TokenizerFast(用于文本模态)来准备模型的所有数据。
- 关于 LayoutLMv3Processor 的使用,请参阅其前身的使用指南。
资源
官方 Hugging Face 和社区(以🌎表示)资源的列表,以帮助您开始使用 LayoutLMv3。如果您有兴趣提交资源以包含在此处,请随时打开拉取请求,我们将对其进行审查!该资源理想情况下应展示一些新内容,而不是重复现有资源。
LayoutLMv3 几乎与 LayoutLMv2 完全相同,因此我们也包含了您可以为 LayoutLMv3 任务改编的 LayoutLMv2 资源。对于这些笔记本,在为模型准备数据时,请务必改用 LayoutLMv2Processor!
- LayoutLMv3ForTokenClassification 由此示例脚本和笔记本支持。
- 一个关于如何使用 LayoutLMv2ForTokenClassification 执行推理的笔记本,以及一个关于在没有标签的情况下如何使用 LayoutLMv2ForTokenClassification 执行推理的笔记本。
- 一个关于如何使用 🤗 Trainer 对 LayoutLMv2ForTokenClassification 进行微调的笔记本。
- Token分类任务指南
文档问答
LayoutLMv3Config
class transformers.LayoutLMv3Config
< 来源 >( vocab_size = 50265 hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout_prob = 0.1 attention_probs_dropout_prob = 0.1 max_position_embeddings = 512 type_vocab_size = 2 initializer_range = 0.02 layer_norm_eps = 1e-05 pad_token_id = 1 bos_token_id = 0 eos_token_id = 2 max_2d_position_embeddings = 1024 coordinate_size = 128 shape_size = 128 has_relative_attention_bias = True rel_pos_bins = 32 max_rel_pos = 128 rel_2d_pos_bins = 64 max_rel_2d_pos = 256 has_spatial_attention_bias = True text_embed = True visual_embed = True input_size = 224 num_channels = 3 patch_size = 16 classifier_dropout = None **kwargs )
参数
- vocab_size (
int
, 可选, 默认为 50265) — LayoutLMv3 模型的词汇表大小。定义了调用 LayoutLMv3Model 时传入的inputs_ids
可以表示的不同 token 的数量。 - hidden_size (
int
, 可选, 默认为 768) — 编码器层和池化层维度。 - num_hidden_layers (
int
, 可选, 默认为 12) — Transformer 编码器中的隐藏层数量。 - num_attention_heads (
int
, 可选, 默认为 12) — Transformer 编码器中每个 attention 层的 attention head 数量。 - intermediate_size (
int
, 可选, 默认为 3072) — Transformer 编码器中“中间”(即前馈)层的维度。 - hidden_act (
str
或function
, 可选, 默认为"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"selu"
和"gelu_new"
。 - hidden_dropout_prob (
float
, 可选, 默认为 0.1) — 嵌入、编码器和池化器中所有全连接层的 dropout 概率。 - attention_probs_dropout_prob (
float
, 可选, 默认为 0.1) — attention 概率的 dropout 比率。 - max_position_embeddings (
int
, 可选, 默认为 512) — 此模型可能使用的最大序列长度。通常为了以防万一会设置一个较大的值(例如 512 或 1024 或 2048)。 - type_vocab_size (
int
, 可选, 默认为 2) — 调用 LayoutLMv3Model 时传入的token_type_ids
的词汇表大小。 - initializer_range (
float
, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态分布初始化器的标准差。 - layer_norm_eps (
float
, 可选, 默认为 1e-5) — 层归一化层使用的 epsilon 值。 - max_2d_position_embeddings (
int
, 可选, 默认为 1024) — 2D 位置嵌入可能使用的最大值。通常为了以防万一会设置一个较大的值(例如 1024)。 - coordinate_size (
int
, 可选, 默认为128
) — 坐标嵌入的维度。 - shape_size (
int
, 可选, 默认为128
) — 宽度和高度嵌入的维度。 - has_relative_attention_bias (
bool
, 可选, 默认为True
) — 是否在自注意力机制中使用相对注意力偏差。 - rel_pos_bins (
int
, 可选, 默认为 32) — 自注意力机制中使用的相对位置 bin 的数量。 - max_rel_pos (
int
, 可选, 默认为 128) — 自注意力机制中使用的相对位置的最大数量。 - max_rel_2d_pos (
int
, 可选, 默认为 256) — 自注意力机制中 2D 相对位置的最大数量。 - rel_2d_pos_bins (
int
, 可选, 默认为 64) — 自注意力机制中 2D 相对位置 bin 的数量。 - has_spatial_attention_bias (
bool
, 可选, 默认为True
) — 是否在自注意力机制中使用空间注意力偏差。 - visual_embed (
bool
, 可选, 默认为True
) — 是否添加补丁嵌入。 - input_size (
int
, 可选, 默认为224
) — 图像的大小(分辨率)。 - num_channels (
int
, 可选, 默认为3
) — 图像的通道数。 - patch_size (
int
, 可选, 默认为16
) — 补丁的大小(分辨率)。 - classifier_dropout (
float
, 可选) — 分类头的 dropout 比率。
这是用于存储 LayoutLMv3Model 配置的配置类。它用于根据指定的参数实例化 LayoutLMv3 模型,定义模型架构。使用默认值实例化配置将产生与 LayoutLMv3 microsoft/layoutlmv3-base 架构类似的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。更多信息请参阅 PretrainedConfig 的文档。
示例
>>> from transformers import LayoutLMv3Config, LayoutLMv3Model
>>> # Initializing a LayoutLMv3 microsoft/layoutlmv3-base style configuration
>>> configuration = LayoutLMv3Config()
>>> # Initializing a model (with random weights) from the microsoft/layoutlmv3-base style configuration
>>> model = LayoutLMv3Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
LayoutLMv3FeatureExtractor
预处理单张或批量图像。
LayoutLMv3ImageProcessor
class transformers.LayoutLMv3ImageProcessor
< 源 >( do_resize: bool = True size: typing.Optional[dict[str, int]] = None resample: Resampling = <Resampling.BILINEAR: 2> do_rescale: bool = True rescale_value: float = 0.00392156862745098 do_normalize: bool = True image_mean: typing.Union[float, collections.abc.Iterable[float], NoneType] = None image_std: typing.Union[float, collections.abc.Iterable[float], NoneType] = None apply_ocr: bool = True ocr_lang: typing.Optional[str] = None tesseract_config: typing.Optional[str] = '' **kwargs )
参数
- do_resize (
bool
, 可选, 默认为True
) — 是否将图像的(高、宽)尺寸调整为(size["height"], size["width"])
。可以在preprocess
中通过do_resize
覆盖。 - size (
dict[str, int]
可选, 默认为{"height" -- 224, "width": 224}
): 调整大小后的图像尺寸。可以在preprocess
中通过size
覆盖。 - resample (
PILImageResampling
, 可选, 默认为PILImageResampling.BILINEAR
) — 如果调整图像大小,使用的重采样滤波器。可以在preprocess
中通过resample
覆盖。 - do_rescale (
bool
, 可选, 默认为True
) — 是否通过指定的rescale_value
对图像的像素值进行重新缩放。可以在preprocess
中通过do_rescale
覆盖。 - rescale_factor (
float
, 可选, 默认为 1 / 255) — 图像像素值缩放的比例。可以在preprocess
中通过rescale_factor
覆盖。 - do_normalize (
bool
, 可选, 默认为True
) — 是否对图像进行归一化。可以在preprocess
方法中通过do_normalize
参数覆盖。 - image_mean (
Iterable[float]
或float
, 可选, 默认为IMAGENET_STANDARD_MEAN
) — 如果对图像进行归一化,则使用的均值。这是一个浮点数或浮点数列表,其长度与图像中的通道数相同。可以在preprocess
方法中通过image_mean
参数覆盖。 - image_std (
Iterable[float]
或float
, 可选, 默认为IMAGENET_STANDARD_STD
) — 如果对图像进行归一化,则使用的标准差。这是一个浮点数或浮点数列表,其长度与图像中的通道数相同。可以在preprocess
方法中通过image_std
参数覆盖。 - apply_ocr (
bool
, 可选, 默认为True
) — 是否应用 Tesseract OCR 引擎以获取单词 + 归一化边界框。可以在preprocess
方法中通过apply_ocr
参数覆盖。 - ocr_lang (
str
, 可选) — Tesseract OCR 引擎使用的语言,由其 ISO 代码指定。默认使用英语。可以在preprocess
方法中通过ocr_lang
参数覆盖。 - tesseract_config (
str
, 可选) — 转发给 Tesseract 调用时config
参数的任何附加自定义配置标志。例如:“—psm 6”。可以在preprocess
方法中通过tesseract_config
参数覆盖。
构建 LayoutLMv3 图像处理器。
预处理
< 源 >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] do_resize: typing.Optional[bool] = None size: typing.Optional[dict[str, int]] = None resample = None do_rescale: typing.Optional[bool] = None rescale_factor: typing.Optional[float] = None do_normalize: typing.Optional[bool] = None image_mean: typing.Union[float, collections.abc.Iterable[float], NoneType] = None image_std: typing.Union[float, collections.abc.Iterable[float], NoneType] = None apply_ocr: typing.Optional[bool] = None ocr_lang: typing.Optional[str] = None tesseract_config: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None data_format: ChannelDimension = <ChannelDimension.FIRST: 'channels_first'> input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None )
参数
- images (
ImageInput
) — 要预处理的图像。期望像素值范围为 0 到 255 的单张或批量图像。如果传入像素值在 0 到 1 之间的图像,请设置do_rescale=False
。 - do_resize (
bool
, 可选, 默认为self.do_resize
) — 是否调整图像大小。 - size (
dict[str, int]
, 可选, 默认为self.size
) — 应用resize
后输出图像的期望大小。 - resample (
int
, 可选, 默认为self.resample
) — 如果调整图像大小,使用的重采样滤波器。可以是PILImageResampling
滤波器之一。仅在do_resize
设置为True
时有效。 - do_rescale (
bool
, 可选, 默认为self.do_rescale
) — 是否将图像像素值重新缩放到 [0, 1] 之间。 - rescale_factor (
float
, 可选, 默认为self.rescale_factor
) — 应用于图像像素值的重新缩放因子。仅在do_rescale
设置为True
时有效。 - do_normalize (
bool
, 可选, 默认为self.do_normalize
) — 是否对图像进行归一化。 - image_mean (
float
或Iterable[float]
, 可选, 默认为self.image_mean
) — 用于归一化的均值。仅在do_normalize
设置为True
时有效。 - image_std (
float
或Iterable[float]
, 可选, 默认为self.image_std
) — 用于归一化的标准差。仅在do_normalize
设置为True
时有效。 - apply_ocr (
bool
, 可选, 默认为self.apply_ocr
) — 是否应用 Tesseract OCR 引擎以获取单词 + 归一化边界框。 - ocr_lang (
str
, 可选, 默认为self.ocr_lang
) — Tesseract OCR 引擎使用的语言,由其 ISO 代码指定。默认使用英语。 - tesseract_config (
str
, 可选, 默认为self.tesseract_config
) — 转发给 Tesseract 调用时config
参数的任何附加自定义配置标志。 - return_tensors (
str
或TensorType
, 可选) — 返回张量的类型。可以是以下之一:- 未设置:返回
np.ndarray
列表。 TensorType.TENSORFLOW
或'tf'
:返回tf.Tensor
批次。TensorType.PYTORCH
或'pt'
:返回torch.Tensor
批次。TensorType.NUMPY
或'np'
:返回np.ndarray
批次。TensorType.JAX
或'jax'
:返回jax.numpy.ndarray
批次。
- 未设置:返回
- data_format (
ChannelDimension
或str
, 可选, 默认为ChannelDimension.FIRST
) — 输出图像的通道维度格式。可以是以下之一:ChannelDimension.FIRST
:图像格式为 (num_channels, height, width)。ChannelDimension.LAST
:图像格式为 (height, width, num_channels)。
- input_data_format (
ChannelDimension
或str
, 可选) — 输入图像的通道维度格式。如果未设置,则从输入图像推断通道维度格式。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
:图像格式为 (num_channels, height, width)。"channels_last"
或ChannelDimension.LAST
:图像格式为 (height, width, num_channels)。"none"
或ChannelDimension.NONE
:图像格式为 (height, width)。
预处理一张或一批图像。
LayoutLMv3ImageProcessorFast
class transformers.LayoutLMv3ImageProcessorFast
< 源 >( **kwargs: typing_extensions.Unpack[transformers.models.layoutlmv3.image_processing_layoutlmv3_fast.LayoutLMv3FastImageProcessorKwargs] )
构建一个快速的 Layoutlmv3 图像处理器。
预处理
< 源 >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] **kwargs: typing_extensions.Unpack[transformers.models.layoutlmv3.image_processing_layoutlmv3_fast.LayoutLMv3FastImageProcessorKwargs] ) → <class 'transformers.image_processing_base.BatchFeature'>
参数
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']]
) — 要预处理的图像。期望像素值范围为 0 到 255 的单张或批量图像。如果传入像素值在 0 到 1 之间的图像,请设置do_rescale=False
。 - do_resize (
bool
, 可选) — 是否调整图像大小。 - size (
dict[str, int]
, 可选) — 模型的最大输入维度。 - default_to_square (
bool
, 可选) — 调整图像大小时是否默认使用正方形,如果大小为整数。 - resample (
Union[PILImageResampling, F.InterpolationMode, NoneType]
) — 调整图像大小时使用的重采样滤波器。可以是枚举PILImageResampling
之一。仅在do_resize
设置为True
时有效。 - do_center_crop (
bool
, 可选) — 是否中心裁剪图像。 - crop_size (
dict[str, int]
, 可选) — 应用center_crop
后输出图像的大小。 - do_rescale (
bool
, 可选) — 是否重新缩放图像。 - rescale_factor (
Union[int, float, NoneType]
) — 如果do_rescale
设置为True
,则图像按此比例因子进行重新缩放。 - do_normalize (
bool
, 可选) — 是否对图像进行归一化。 - image_mean (
Union[float, list[float], NoneType]
) — 用于归一化的图像均值。仅在do_normalize
设置为True
时有效。 - image_std (
Union[float, list[float], NoneType]
) — 用于归一化的图像标准差。仅在do_normalize
设置为True
时有效。 - do_convert_rgb (
bool
, 可选) — 是否将图像转换为 RGB。 - return_tensors (
Union[str, ~utils.generic.TensorType, NoneType]
) — 如果设置为 `pt`,则返回堆叠的张量,否则返回张量列表。 - data_format (
~image_utils.ChannelDimension
, 可选) — 仅支持ChannelDimension.FIRST
。为与慢速处理器兼容而添加。 - input_data_format (
Union[str, ~image_utils.ChannelDimension, NoneType]
) — 输入图像的通道维度格式。如果未设置,通道维度格式将从输入图像中推断。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
:图像格式为 (num_channels, height, width)。"channels_last"
或ChannelDimension.LAST
:图像格式为 (height, width, num_channels)。"none"
或ChannelDimension.NONE
:图像格式为 (height, width)。
- device (
torch.device
, optional) — 处理图像的设备。如果未设置,设备将从输入图像中推断。 - disable_grouping (
bool
, optional) — 是否禁用按大小对图像进行分组以单独处理而不是批量处理。如果为 None,则如果图像在 CPU 上,将设置为 True,否则为 False。此选择基于经验观察,详细信息请参见:https://github.com/huggingface/transformers/pull/38157 - apply_ocr (
bool
, optional, 默认为True
) — 是否应用 Tesseract OCR 引擎以获取单词 + 标准化边界框。可以通过preprocess
方法中的apply_ocr
参数覆盖。 - ocr_lang (
str
, optional) — Tesseract OCR 引擎使用的语言,由其 ISO 代码指定。默认使用英语。可以通过preprocess
方法中的ocr_lang
参数覆盖。 - tesseract_config (
str
, optional) — 调用 Tesseract 时转发到config
参数的任何其他自定义配置标志。例如:’—psm 6’。可以通过preprocess
方法中的tesseract_config
参数覆盖。
返回
<class 'transformers.image_processing_base.BatchFeature'>
- data (
dict
) — 由 call 方法返回的列表/数组/张量字典(“pixel_values”等)。 - tensor_type (
Union[None, str, TensorType]
, 可选) — 您可以在此处提供一个`tensor_type`,以便在初始化时将整数列表转换为PyTorch/TensorFlow/Numpy张量。
LayoutLMv3Tokenizer
class transformers.LayoutLMv3Tokenizer
< 来源 >( vocab_file merges_file errors = 'replace' bos_token = '<s>' eos_token = '</s>' sep_token = '</s>' cls_token = '<s>' unk_token = '<unk>' pad_token = '<pad>' mask_token = '<mask>' add_prefix_space = True cls_token_box = [0, 0, 0, 0] sep_token_box = [0, 0, 0, 0] pad_token_box = [0, 0, 0, 0] pad_token_label = -100 only_label_first_subword = True **kwargs )
参数
- vocab_file (
str
) — 词汇文件路径。 - merges_file (
str
) — 合并文件路径。 - errors (
str
, optional, 默认为"replace"
) — 解码字节到 UTF-8 时遵循的范式。有关更多信息,请参阅 bytes.decode。 - bos_token (
str
, optional, 默认为"<s>"
) — 预训练期间使用的序列开始标记。可作为序列分类器标记使用。使用特殊标记构建序列时,这不是序列开头使用的标记。使用的标记是
cls_token
。 - eos_token (
str
, optional, 默认为"</s>"
) — 序列结束标记。使用特殊标记构建序列时,这不是序列结束使用的标记。使用的标记是
sep_token
。 - sep_token (
str
, optional, 默认为"</s>"
) — 分隔标记,用于从多个序列构建序列时,例如用于序列分类的两个序列或用于问答的文本和问题。它也用作使用特殊标记构建的序列的最后一个标记。 - cls_token (
str
, optional, 默认为"<s>"
) — 分类器标记,用于序列分类(整个序列的分类而非逐标记分类)时使用。它是使用特殊标记构建序列时的第一个标记。 - unk_token (
str
, optional, 默认为"<unk>"
) — 未知标记。不在词汇表中的标记不能转换为 ID,而是设置为此标记。 - pad_token (
str
, optional, 默认为"<pad>"
) — 用于填充的标记,例如在对不同长度的序列进行批处理时。 - mask_token (
str
, optional, 默认为"<mask>"
) — 用于掩码值的标记。这是使用掩码语言建模训练此模型时使用的标记。这是模型将尝试预测的标记。 - add_prefix_space (
bool
, optional, 默认为True
) — 是否在输入中添加初始空格。这允许将首词像任何其他词一样处理。(RoBERTa tokenizer 通过前面的空格检测单词的开头)。 - cls_token_box (
list[int]
, optional, 默认为[0, 0, 0, 0]
) — 用于特殊 [CLS] 标记的边界框。 - sep_token_box (
list[int]
, optional, 默认为[0, 0, 0, 0]
) — 用于特殊 [SEP] 标记的边界框。 - pad_token_box (
list[int]
, optional, 默认为[0, 0, 0, 0]
) — 用于特殊 [PAD] 标记的边界框。 - pad_token_label (
int
, optional, 默认为 -100) — 用于填充标记的标签。默认为 -100,这是 PyTorch 的 CrossEntropyLoss 的ignore_index
。 - only_label_first_subword (
bool
, optional, 默认为True
) — 如果提供了词标签,是否只标记第一个子词。
构造一个 LayoutLMv3 分词器。基于 RoBERTatokenizer
(字节对编码或 BPE)。LayoutLMv3Tokenizer 可用于将单词、单词级边界框和可选的单词标签转换为标记级 input_ids
、attention_mask
、token_type_ids
、bbox
和可选的 labels
(用于标记分类)。
此分词器继承自 PreTrainedTokenizer,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。
LayoutLMv3Tokenizer 执行端到端分词:标点符号分割和子词。它还将单词级边界框转换为标记级边界框。
__call__
< 来源 >( 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 )
参数
- 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]]
, optional) — 单词级整数标签(用于 FUNSD、CORD 等标记分类任务)。 - add_special_tokens (
bool
, optional, 默认为True
) — 是否使用模型相关的特殊标记对序列进行编码。 - padding (
bool
,str
or PaddingStrategy, optional, 默认为False
) — 激活和控制填充。接受以下值:True
或'longest'
:填充到批次中最长的序列(如果只提供一个序列,则不进行填充)。'max_length'
:填充到由参数max_length
指定的最大长度,如果未提供该参数,则填充到模型可接受的最大输入长度。False
或'do_not_pad'
(默认):不填充(即,可以输出包含不同长度序列的批次)。
- truncation (
bool
,str
or TruncationStrategy, optional, 默认为False
) — 激活和控制截断。接受以下值:True
或'longest_first'
:截断到由参数max_length
指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。这将逐个标记进行截断,如果提供了一对序列(或一批序列),则从最长的序列中移除一个标记。'only_first'
:截断到由参数max_length
指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。如果提供了一对序列(或一批序列),这将只截断第一个序列。'only_second'
:截断到由参数max_length
指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。如果提供了一对序列(或一批序列),这将只截断第二个序列。False
或'do_not_truncate'
(默认):不截断(即,可以输出序列长度大于模型最大允许输入大小的批次)。
- max_length (
int
, optional) — 控制截断/填充参数之一要使用的最大长度。如果未设置或设置为
None
,这将使用预定义的模型最大长度(如果截断/填充参数之一需要最大长度)。如果模型没有特定的最大输入长度(例如 XLNet),则截断/填充到最大长度将被禁用。 - stride (
int
, optional, 默认为 0) — 如果与max_length
一起设置为数字,当return_overflowing_tokens=True
时返回的溢出标记将包含截断序列末尾的一些标记,以在截断序列和溢出序列之间提供一些重叠。此参数的值定义了重叠标记的数量。 - pad_to_multiple_of (
int
, optional) — 如果设置,将序列填充到所提供值的倍数。这对于在计算能力>= 7.5
(Volta) 的 NVIDIA 硬件上启用 Tensor Cores 尤其有用。 - return_tensors (
str
或 TensorType, optional) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:'tf'
:返回 TensorFlowtf.constant
对象。'pt'
:返回 PyTorchtorch.Tensor
对象。'np'
:返回 Numpynp.ndarray
对象。
- add_special_tokens (
bool
, optional, 默认为True
) — 是否使用模型相关的特殊标记对序列进行编码。 - padding (
bool
,str
or PaddingStrategy, optional, 默认为False
) — 激活和控制填充。接受以下值:True
或'longest'
:填充到批次中最长的序列(如果只提供一个序列,则不进行填充)。'max_length'
:填充到由参数max_length
指定的最大长度,如果未提供该参数,则填充到模型可接受的最大输入长度。False
或'do_not_pad'
(默认):不填充(即,可以输出包含不同长度序列的批次)。
- truncation (
bool
,str
or TruncationStrategy, optional, 默认为False
) — 激活和控制截断。接受以下值:True
或'longest_first'
:截断到由参数max_length
指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。这将逐个标记进行截断,如果提供了一对序列(或一批序列),则从最长的序列中移除一个标记。'only_first'
:截断到由参数max_length
指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。如果提供了一对序列(或一批序列),这将只截断第一个序列。'only_second'
:截断到由参数max_length
指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。如果提供了一对序列(或一批序列),这将只截断第二个序列。False
或'do_not_truncate'
(默认):不截断(即,可以输出序列长度大于模型最大允许输入大小的批次)。
- max_length (
int
, optional) — 控制截断/填充参数之一要使用的最大长度。如果未设置或设置为None
,这将使用预定义的模型最大长度(如果截断/填充参数之一需要最大长度)。如果模型没有特定的最大输入长度(例如 XLNet),则截断/填充到最大长度将被禁用。 - stride (
int
, optional, 默认为 0) — 如果与max_length
一起设置为数字,当return_overflowing_tokens=True
时返回的溢出标记将包含截断序列末尾的一些标记,以在截断序列和溢出序列之间提供一些重叠。此参数的值定义了重叠标记的数量。 - pad_to_multiple_of (
int
, optional) — 如果设置,将序列填充到所提供值的倍数。这对于在计算能力>= 7.5
(Volta) 的 NVIDIA 硬件上启用 Tensor Cores 尤其有用。 - return_tensors (
str
或 TensorType, optional) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:'tf'
:返回 TensorFlowtf.constant
对象。'pt'
:返回 PyTorchtorch.Tensor
对象。'np'
:返回 Numpynp.ndarray
对象。
对一个或多个序列或一对序列进行分词并准备输入模型的主要方法,其中包含词级别的归一化边界框和可选标签。
LayoutLMv3TokenizerFast
class transformers.LayoutLMv3TokenizerFast
< 来源 >( vocab_file = None merges_file = None tokenizer_file = None errors = 'replace' bos_token = '<s>' eos_token = '</s>' sep_token = '</s>' cls_token = '<s>' unk_token = '<unk>' pad_token = '<pad>' mask_token = '<mask>' add_prefix_space = True trim_offsets = True cls_token_box = [0, 0, 0, 0] sep_token_box = [0, 0, 0, 0] pad_token_box = [0, 0, 0, 0] pad_token_label = -100 only_label_first_subword = True **kwargs )
参数
- vocab_file (
str
) — 词汇文件路径。 - merges_file (
str
) — 合并文件路径。 - errors (
str
, optional, 默认为"replace"
) — 解码字节到 UTF-8 时遵循的范式。有关更多信息,请参阅 bytes.decode。 - bos_token (
str
, optional, 默认为"<s>"
) — 预训练期间使用的序列开始标记。可作为序列分类器标记使用。使用特殊标记构建序列时,这不是序列开头使用的标记。使用的标记是
cls_token
。 - eos_token (
str
, optional, 默认为"</s>"
) — 序列结束标记。使用特殊标记构建序列时,这不是序列结束使用的标记。使用的标记是
sep_token
。 - sep_token (
str
, optional, 默认为"</s>"
) — 分隔标记,用于从多个序列构建序列时,例如用于序列分类的两个序列或用于问答的文本和问题。它也用作使用特殊标记构建的序列的最后一个标记。 - cls_token (
str
, optional, 默认为"<s>"
) — 分类器标记,用于序列分类(整个序列的分类而非逐标记分类)时使用。它是使用特殊标记构建序列时的第一个标记。 - unk_token (
str
, optional, 默认为"<unk>"
) — 未知标记。不在词汇表中的标记不能转换为 ID,而是设置为此标记。 - pad_token (
str
, 可选, 默认为"<pad>"
) — 用于填充的标记,例如在对不同长度序列进行批处理时。 - mask_token (
str
, 可选, 默认为"<mask>"
) — 用于遮盖值的标记。在使用遮盖语言模型训练此模型时使用的标记。这是模型将尝试预测的标记。 - add_prefix_space (
bool
, 可选, 默认为False
) — 是否在输入中添加初始空格。这使得可以将第一个单词视为任何其他单词。(RoBERTa分词器通过前面的空格检测单词的开头)。 - trim_offsets (
bool
, 可选, 默认为True
) — 后处理步骤是否应修剪偏移量以避免包含空格。 - cls_token_box (
list[int]
, 可选, 默认为[0, 0, 0, 0]
) — 用于特殊 [CLS] 标记的边界框。 - sep_token_box (
list[int]
, 可选, 默认为[0, 0, 0, 0]
) — 用于特殊 [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
) — 如果提供了单词标签,是否只标记第一个子词。
构建一个“快速”LayoutLMv3分词器(由HuggingFace的tokenizers库支持)。基于BPE。
此分词器继承自PreTrainedTokenizerFast,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。
__call__
< 源 >( 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 )
参数
- 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
对象。
- 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
对象。
对一个或多个序列或一对序列进行分词并准备输入模型的主要方法,其中包含词级别的归一化边界框和可选标签。
LayoutLMv3Processor
类 transformers.LayoutLMv3Processor
< 源 >( image_processor = 无 tokenizer = 无 **kwargs )
参数
- image_processor (
LayoutLMv3ImageProcessor
, 可选) — LayoutLMv3ImageProcessor 的实例。图像处理器是必需的输入。 - tokenizer (
LayoutLMv3Tokenizer
或LayoutLMv3TokenizerFast
, 可选) — LayoutLMv3Tokenizer 或 LayoutLMv3TokenizerFast 的实例。分词器是必需的输入。
构建一个 LayoutLMv3 处理器,它将 LayoutLMv3 图像处理器和 LayoutLMv3 分词器组合成一个单一的处理器。
LayoutLMv3Processor 提供了准备模型数据所需的所有功能。
它首先使用LayoutLMv3ImageProcessor 来调整和标准化文档图像大小,并可选地应用 OCR 来获取单词和标准化边界框。然后将这些信息连同附加参数提供给LayoutLMv3Tokenizer 或LayoutLMv3TokenizerFast,后者将单词和边界框转换为标记级别的 input_ids
、attention_mask
、token_type_ids
、bbox
。可选地,可以提供整数 word_labels
,这些标签将转换为标记级别的 labels
以用于标记分类任务(例如 FUNSD、CORD)。
__call__
< 源 >( images text: typing.Union[str, list[str], list[list[str]]] = None 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 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 return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None **kwargs ) → transformers.modeling_outputs.BaseModelOutput 或 tuple(torch.FloatTensor)
此方法首先将 images
参数转发到 **call**()。如果 LayoutLMv3ImageProcessor 以 apply_ocr
设置为 True
初始化,它将获取的单词和边界框以及附加参数传递给 **call**() 并返回输出,以及调整大小和标准化的 pixel_values
。如果 LayoutLMv3ImageProcessor 以 apply_ocr
设置为 False
初始化,它将用户指定的单词(text
/`text_pair
)和 boxes
以及附加参数传递给 **call**() 并返回输出,以及调整大小和标准化的 pixel_values
。
有关更多信息,请参阅上述两种方法的文档字符串。
LayoutLMv3Model
类 transformers.LayoutLMv3Model
< 源 >( config )
参数
- config (LayoutLMv3Model) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只加载配置。请查看 from_pretrained() 方法来加载模型权重。
裸 Layoutlmv3 模型,输出原始隐藏状态,顶部没有任何特定头。
此模型继承自PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
此模型也是 PyTorch torch.nn.Module 子类。请将其作为常规 PyTorch 模块使用,并参考 PyTorch 文档以了解所有与一般用法和行为相关的事项。
前向传播
< 源 >( input_ids: typing.Optional[torch.LongTensor] = None bbox: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None pixel_values: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
, 形状为(batch_size, token_sequence_length)
) — 词汇表中输入序列标记的索引。注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
是 [CLS] 标记。有关patch_sequence_length
,请参见pixel_values
。索引可以使用 AutoTokenizer 获得。有关详细信息,请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.**call**()。
- bbox (
torch.LongTensor
, 形状为(batch_size, token_sequence_length, 4)
, 可选) — 每个输入序列标记的边界框。选择范围为[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
。 - attention_mask (
torch.FloatTensor
, 形状为(batch_size, sequence_length)
, 可选) — 掩码,用于避免在填充标记索引上执行注意力。掩码值选择范围为[0, 1]
:- 1 表示标记未被遮盖,
- 0 表示标记被遮盖。
- token_type_ids (
torch.LongTensor
, 形状为(batch_size, token_sequence_length)
, 可选) — 段标记索引,用于指示输入的第一个和第二个部分。索引选择范围为[0, 1]
:- 0 对应于*句子A*标记,
- 1 对应于*句子B*标记。
注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
是 [CLS] 标记。有关patch_sequence_length
,请参见pixel_values
。 - position_ids (
torch.LongTensor
, 形状为(batch_size, token_sequence_length)
, 可选) — 每个输入序列标记在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 1]
。注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
是 [CLS] 标记。有关patch_sequence_length
,请参见pixel_values
。 - head_mask (
torch.FloatTensor
, 形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 掩码,用于清除自注意力模块中选定的头。掩码值选择范围为[0, 1]
:- 1 表示头部未被遮盖,
- 0 表示头部被遮盖。
- inputs_embeds (
torch.FloatTensor
, 形状为(batch_size, token_sequence_length, hidden_size)
, 可选) — 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids
。如果您想更好地控制如何将*input_ids*索引转换为关联向量,而不是模型的内部嵌入查找矩阵,这将非常有用。 - pixel_values (
torch.FloatTensor
, 形状为(batch_size, num_channels, image_size, image_size)
, 可选) — 对应于输入图像的张量。像素值可以使用{image_processor_class}
获得。有关详细信息,请参阅{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
进行图像处理)。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通元组。
返回
transformers.modeling_outputs.BaseModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutput 或 torch.FloatTensor
的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含根据配置 (LayoutLMv3Config) 和输入的不同元素。
-
last_hidden_state (
torch.FloatTensor
, 形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层输出的隐藏状态序列。 -
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 后的注意力权重,用于计算自注意力头中的加权平均值。
LayoutLMv3Model 的前向方法,覆盖了 __call__
特殊方法。
虽然前向传播的配方需要在此函数中定义,但在此之后应该调用 Module
实例,而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。
示例
>>> from transformers import AutoProcessor, AutoModel
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv3-base", apply_ocr=False)
>>> model = AutoModel.from_pretrained("microsoft/layoutlmv3-base")
>>> 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
LayoutLMv3ForSequenceClassification
类 transformers.LayoutLMv3ForSequenceClassification
< 源 >( config )
参数
- config (LayoutLMv3ForSequenceClassification) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只加载配置。请查看 from_pretrained() 方法来加载模型权重。
带序列分类头的 LayoutLMv3 模型([CLS] 标记最终隐藏状态顶部的线性层),例如用于文档图像分类任务,如 RVL-CDIP 数据集。
此模型继承自PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
此模型也是 PyTorch torch.nn.Module 子类。请将其作为常规 PyTorch 模块使用,并参考 PyTorch 文档以了解所有与一般用法和行为相关的事项。
前向传播
< 源 >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None bbox: typing.Optional[torch.LongTensor] = None pixel_values: typing.Optional[torch.LongTensor] = None ) → transformers.modeling_outputs.SequenceClassifierOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 词汇表中输入序列标记的索引。默认情况下会忽略填充。可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
,可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值选择在[0, 1]
之间:- 1 表示**未被掩码**的标记,
- 0 表示**被掩码**的标记。
- token_type_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 分段标记索引,用于指示输入的第一部分和第二部分。索引选择在[0, 1]
之间:- 0 对应于**句子 A** 标记,
- 1 对应于**句子 B** 标记。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 输入序列中每个标记在位置嵌入中的位置索引。选择范围为[0, config.n_positions - 1]
。 - head_mask (
torch.FloatTensor
,形状为(num_heads,)
或(num_layers, num_heads)
,可选) — 用于使自注意力模块的选定头部无效的掩码。掩码值选择在[0, 1]
之间:- 1 表示头部**未被掩码**,
- 0 表示头部**被掩码**。
- inputs_embeds (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
,可选) — 可选地,您可以直接传递嵌入表示而不是传递input_ids
。如果您希望对如何将input_ids
索引转换为相关向量有比模型内部嵌入查找矩阵更多的控制,这会很有用。 - labels (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 用于计算掩码语言建模损失的标签。索引应在[0, ..., config.vocab_size]
或 -100 之间(参见input_ids
文档字符串)。索引设置为-100
的标记将被忽略(掩码),损失仅针对标签在[0, ..., config.vocab_size]
中的标记计算。 - output_attentions (
bool
,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
,可选) — 是否返回 ModelOutput 而不是普通的元组。 - bbox (
torch.LongTensor
,形状为(batch_size, sequence_length, 4)
,可选) — 每个输入序列标记的边界框。选择范围为[0, config.max_2d_position_embeddings-1]
。每个边界框应为 (x0, y0, x1, y1) 格式的标准化版本,其中 (x0, y0) 对应于边界框左上角的位置,(x1, y1) 表示右下角的位置。 - pixel_values (
torch.LongTensor
,形状为(batch_size, num_channels, image_size, image_size)
,可选) — 对应于输入图像的张量。像素值可以使用{image_processor_class}
获得。有关详细信息,请参见{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
处理图像)。
返回
transformers.modeling_outputs.SequenceClassifierOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.SequenceClassifierOutput 或一个 torch.FloatTensor
元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),其中包含根据配置 (LayoutLMv3Config) 和输入的不同元素。
-
loss (形状为
(1,)
的torch.FloatTensor
,可选,当提供labels
时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。 -
logits (形状为
(batch_size, config.num_labels)
的torch.FloatTensor
) — 分类(如果 config.num_labels==1,则为回归)分数(SoftMax 之前)。 -
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 后的注意力权重,用于计算自注意力头中的加权平均值。
LayoutLMv3ForSequenceClassification 的前向方法,覆盖了 __call__
特殊方法。
虽然前向传播的配方需要在此函数中定义,但在此之后应该调用 Module
实例,而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。
示例
>>> from transformers import AutoProcessor, AutoModelForSequenceClassification
>>> from datasets import load_dataset
>>> import torch
>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv3-base", apply_ocr=False)
>>> model = AutoModelForSequenceClassification.from_pretrained("microsoft/layoutlmv3-base")
>>> 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")
>>> sequence_label = torch.tensor([1])
>>> outputs = model(**encoding, labels=sequence_label)
>>> loss = outputs.loss
>>> logits = outputs.logits
LayoutLMv3ForTokenClassification
class transformers.LayoutLMv3ForTokenClassification
< 源 >( config )
参数
- config (LayoutLMv3ForTokenClassification) — 模型的配置类,包含模型的所有参数。使用配置文件初始化并不会加载与模型相关的权重,只加载配置。请查看 from_pretrained() 方法来加载模型权重。
LayoutLMv3 模型,其顶部有一个标记分类头(最终隐藏状态顶部的一个线性层),例如用于序列标注(信息提取)任务,如 FUNSD、SROIE、CORD 和 Kleister-NDA。
此模型继承自PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
此模型也是 PyTorch torch.nn.Module 子类。请将其作为常规 PyTorch 模块使用,并参考 PyTorch 文档以了解所有与一般用法和行为相关的事项。
前向传播
< 源 >( input_ids: typing.Optional[torch.LongTensor] = None bbox: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None pixel_values: typing.Optional[torch.LongTensor] = None ) → transformers.modeling_outputs.TokenClassifierOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 词汇表中输入序列标记的索引。默认情况下会忽略填充。可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- bbox (
torch.LongTensor
,形状为(batch_size, sequence_length, 4)
,可选) — 每个输入序列标记的边界框。选择范围为[0, config.max_2d_position_embeddings-1]
。每个边界框应为 (x0, y0, x1, y1) 格式的标准化版本,其中 (x0, y0) 对应于边界框左上角的位置,(x1, y1) 表示右下角的位置。 - attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
,可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值选择在[0, 1]
之间:- 1 表示**未被掩码**的标记,
- 0 表示**被掩码**的标记。
- token_type_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 分段标记索引,用于指示输入的第一部分和第二部分。索引选择在[0, 1]
之间:- 0 对应于**句子 A** 标记,
- 1 对应于**句子 B** 标记。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 输入序列中每个标记在位置嵌入中的位置索引。选择范围为[0, config.n_positions - 1]
。 - head_mask (
torch.FloatTensor
,形状为(num_heads,)
或(num_layers, num_heads)
,可选) — 用于使自注意力模块的选定头部无效的掩码。掩码值选择在[0, 1]
之间:- 1 表示头部**未被掩码**,
- 0 表示头部**被掩码**。
- inputs_embeds (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
,可选) — 可选地,您可以直接传递嵌入表示而不是传递input_ids
。如果您希望对如何将input_ids
索引转换为相关向量有比模型内部嵌入查找矩阵更多的控制,这会很有用。 - labels (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 用于计算标记分类损失的标签。索引应在[0, ..., config.num_labels - 1]
之间。 - output_attentions (
bool
,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
,可选) — 是否返回 ModelOutput 而不是普通的元组。 - pixel_values (
torch.LongTensor
,形状为(batch_size, num_channels, image_size, image_size)
,可选) — 对应于输入图像的张量。像素值可以使用{image_processor_class}
获得。有关详细信息,请参见{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
处理图像)。
返回
transformers.modeling_outputs.TokenClassifierOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.TokenClassifierOutput 或一个 torch.FloatTensor
元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),其中包含根据配置 (LayoutLMv3Config) 和输入的不同元素。
-
loss (形状为
(1,)
的torch.FloatTensor
,可选,当提供labels
时返回) — 分类损失。 -
logits (形状为
(batch_size, sequence_length, config.num_labels)
的torch.FloatTensor
) — 分类分数(SoftMax 之前)。 -
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 后的注意力权重,用于计算自注意力头中的加权平均值。
LayoutLMv3ForTokenClassification 的前向方法,覆盖了 __call__
特殊方法。
虽然前向传播的配方需要在此函数中定义,但在此之后应该调用 Module
实例,而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。
示例
>>> from transformers import AutoProcessor, AutoModelForTokenClassification
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv3-base", apply_ocr=False)
>>> model = AutoModelForTokenClassification.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="pt")
>>> outputs = model(**encoding)
>>> loss = outputs.loss
>>> logits = outputs.logits
LayoutLMv3ForQuestionAnswering
class transformers.LayoutLMv3ForQuestionAnswering
< 源 >( config )
参数
- config (LayoutLMv3ForQuestionAnswering) — 模型的配置类,包含模型的所有参数。使用配置文件初始化并不会加载与模型相关的权重,只加载配置。请查看 from_pretrained() 方法来加载模型权重。
Layoutlmv3 转换器,其顶部有一个跨度分类头,用于像 SQuAD 这样的抽取式问答任务(在隐藏状态输出顶部有一个线性层,用于计算 `span start logits` 和 `span end logits`)。
此模型继承自PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
此模型也是 PyTorch torch.nn.Module 子类。请将其作为常规 PyTorch 模块使用,并参考 PyTorch 文档以了解所有与一般用法和行为相关的事项。
前向传播
< 源 >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None start_positions: typing.Optional[torch.LongTensor] = None end_positions: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None bbox: typing.Optional[torch.LongTensor] = None pixel_values: typing.Optional[torch.LongTensor] = None ) → transformers.modeling_outputs.QuestionAnsweringModelOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 词汇表中输入序列标记的索引。默认情况下会忽略填充。可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
,可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值选择在[0, 1]
之间:- 1 表示**未被掩码**的标记,
- 0 表示**被掩码**的标记。
- token_type_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 分段标记索引,用于指示输入的第一部分和第二部分。索引选择在[0, 1]
之间:- 0 对应于**句子 A** 标记,
- 1 对应于**句子 B** 标记。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 输入序列中每个标记在位置嵌入中的位置索引。选择范围为[0, config.n_positions - 1]
。 - head_mask (
torch.FloatTensor
,形状为(num_heads,)
或(num_layers, num_heads)
,可选) — 用于使自注意力模块的选定头部无效的掩码。掩码值选择在[0, 1]
之间:- 1 表示头部**未被掩码**,
- 0 表示头部**被掩码**。
- inputs_embeds (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
,可选) — 可选地,您可以直接传递嵌入表示而不是传递input_ids
。如果您希望对如何将input_ids
索引转换为相关向量有比模型内部嵌入查找矩阵更多的控制,这会很有用。 - start_positions (
torch.LongTensor
,形状为(batch_size,)
,可选) — 用于计算标记分类损失的标注跨度起始位置(索引)的标签。位置将被限制为序列的长度 (sequence_length
)。序列之外的位置不计入损失计算。 - end_positions (
torch.LongTensor
,形状为(batch_size,)
,可选) — 用于计算标记分类损失的标注跨度结束位置(索引)的标签。位置将被限制为序列的长度 (sequence_length
)。序列之外的位置不计入损失计算。 - output_attentions (
bool
,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
,可选) — 是否返回 ModelOutput 而不是普通的元组。 - bbox (
torch.LongTensor
,形状为(batch_size, sequence_length, 4)
,可选) — 每个输入序列标记的边界框。选择范围为[0, config.max_2d_position_embeddings-1]
。每个边界框应为 (x0, y0, x1, y1) 格式的标准化版本,其中 (x0, y0) 对应于边界框左上角的位置,(x1, y1) 表示右下角的位置。 - pixel_values (
torch.LongTensor
,形状为(batch_size, num_channels, image_size, image_size)
,可选) — 对应于输入图像的张量。像素值可以使用{image_processor_class}
获得。有关详细信息,请参见{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
处理图像)。
返回
transformers.modeling_outputs.QuestionAnsweringModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.QuestionAnsweringModelOutput 或一个 torch.FloatTensor
元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),其中包含根据配置 (LayoutLMv3Config) 和输入的不同元素。
-
loss (
torch.FloatTensor
of shape(1,)
, 可选, 当提供labels
时返回) — 总范围提取损失是起始位置和结束位置的交叉熵之和。 -
start_logits (
torch.FloatTensor
of shape(batch_size, sequence_length)
) — 范围起始分数(SoftMax 之前)。 -
end_logits (
torch.FloatTensor
of shape(batch_size, sequence_length)
) — 范围结束分数(SoftMax 之前)。 -
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 后的注意力权重,用于计算自注意力头中的加权平均值。
LayoutLMv3ForQuestionAnswering 的前向方法,覆盖了 __call__
特殊方法。
虽然前向传播的配方需要在此函数中定义,但在此之后应该调用 Module
实例,而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。
示例
>>> from transformers import AutoProcessor, AutoModelForQuestionAnswering
>>> from datasets import load_dataset
>>> import torch
>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv3-base", apply_ocr=False)
>>> model = AutoModelForQuestionAnswering.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="pt")
>>> start_positions = torch.tensor([1])
>>> end_positions = torch.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
TFLayoutLMv3Model
类 transformers.TFLayoutLMv3Model
< 源 >( 配置 *输入 **kwargs )
参数
- config (LayoutLMv3Config) — 模型配置类,包含模型的所有参数。用配置文件初始化并不会加载与模型相关的权重,只加载配置。请查看 from_pretrained() 方法以加载模型权重。
不带任何特定头部的纯LayoutLMv3模型,输出原始隐藏状态。此模型继承自 TFPreTrainedModel。请查看父类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。
此模型也是 keras.Model 的子类。请将其作为常规的TF 2.0 Keras模型使用,并参考TF 2.0文档以了解与通用用法和行为相关的所有事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入作为关键字参数(如 PyTorch 模型),或
- 所有输入作为第一个位置参数中的列表、元组或字典。
支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用 model.fit()
等方法时,一切都应该“正常工作”——只需以 model.fit()
支持的任何格式传递您的输入和标签即可!但是,如果您想在 Keras 方法(如 fit()
和 predict()
)之外使用第二种格式,例如在使用 Keras Functional
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 函数一样传递输入!
调用
< 源 >( 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 pixel_values: tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: bool = False ) → transformers.modeling_tf_outputs.TFBaseModelOutput 或 tuple(tf.Tensor)
参数
- input_ids (
Numpy array
或tf.Tensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列标记的索引。请注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
表示 [CLS] 标记。有关patch_sequence_length
,请参阅pixel_values
。索引可以通过 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- bbox (
Numpy array
或tf.Tensor
,形状为(batch_size, sequence_length, 4)
,可选) — 每个输入序列标记的边界框。选择范围为[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 (
tf.Tensor
,形状为(batch_size, num_channels, height, width)
) — 文档图像批次。每张图像被分成形状为(num_channels, config.patch_size, config.patch_size)
的补丁,补丁的总数(=patch_sequence_length
)等于((height / config.patch_size) * (width / config.patch_size))
。 - attention_mask (
tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 掩码,用于避免对填充标记索引执行注意力操作。掩码值选择在[0, 1]
之间:- 1 表示未被掩码的标记,
- 0 表示被掩码的标记。
请注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
用于 [CLS] 标记。有关patch_sequence_length
,请参阅pixel_values
。 - token_type_ids (
Numpy array
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 分段标记索引,用于指示输入的第一和第二部分。索引选择在[0, 1]
之间:- 0 对应于句子 A 标记,
- 1 对应于句子 B 标记。
请注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
表示 [CLS] 标记。有关patch_sequence_length
,请参阅pixel_values
。 - position_ids (
Numpy array
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 输入序列标记在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 1]
。请注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
表示 [CLS] 标记。有关patch_sequence_length
,请参阅pixel_values
。 - head_mask (
tf.Tensor
,形状为(num_heads,)
或(num_layers, num_heads)
,可选) — 掩码,用于使自注意力模块的选定头部无效。掩码值选择在[0, 1]
之间:- 1 表示头部未被掩码,
- 0 表示头部被掩码。
- inputs_embeds (
tf.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.modeling_tf_outputs.TFBaseModelOutput 或 tuple(tf.Tensor)
一个 transformers.modeling_tf_outputs.TFBaseModelOutput 或一个 tf.Tensor
的元组(如果传入 return_dict=False
或 config.return_dict=False
),包含根据配置(LayoutLMv3Config)和输入的不同元素。
-
last_hidden_state (
tf.Tensor
of shape(batch_size, sequence_length, hidden_size)
) — 模型最后一层输出的隐藏状态序列。 -
hidden_states (
tuple(tf.FloatTensor)
,可选,当传入output_hidden_states=True
或config.output_hidden_states=True
时返回) —tf.Tensor
的元组(一个用于嵌入输出 + 一个用于每层输出),形状为(batch_size, sequence_length, hidden_size)
。模型在每个层输出的隐藏状态加上初始嵌入输出。
-
attentions (
tuple(tf.Tensor)
,可选,当传入output_attentions=True
或config.output_attentions=True
时返回) —tf.Tensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
TFLayoutLMv3Model 前向方法,覆盖 __call__
特殊方法。
虽然前向传播的配方需要在此函数中定义,但在此之后应该调用 Module
实例,而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。
示例
>>> from transformers import AutoProcessor, TFAutoModel
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv3-base", apply_ocr=False)
>>> model = TFAutoModel.from_pretrained("microsoft/layoutlmv3-base")
>>> 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="tf")
>>> outputs = model(**encoding)
>>> last_hidden_states = outputs.last_hidden_state
TFLayoutLMv3ForSequenceClassification
类 transformers.TFLayoutLMv3ForSequenceClassification
< 源 >( 配置: LayoutLMv3Config **kwargs )
参数
- config (LayoutLMv3Config) — 模型配置类,包含模型的所有参数。用配置文件初始化并不会加载与模型相关的权重,只加载配置。请查看 from_pretrained() 方法以加载模型权重。
带序列分类头的 LayoutLMv3 模型([CLS] 标记最终隐藏状态顶部的线性层),例如用于文档图像分类任务,如 RVL-CDIP 数据集。
此模型继承自 TFPreTrainedModel。请查看父类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。
此模型也是 keras.Model 的子类。请将其作为常规的TF 2.0 Keras模型使用,并参考TF 2.0文档以了解与通用用法和行为相关的所有事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入作为关键字参数(如 PyTorch 模型),或
- 所有输入作为第一个位置参数中的列表、元组或字典。
支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用 model.fit()
等方法时,一切都应该“正常工作”——只需以 model.fit()
支持的任何格式传递您的输入和标签即可!但是,如果您想在 Keras 方法(如 fit()
和 predict()
)之外使用第二种格式,例如在使用 Keras Functional
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 函数一样传递输入!
调用
< 源 >( 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 labels: tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None bbox: tf.Tensor | None = None pixel_values: tf.Tensor | None = None training: Optional[bool] = False ) → transformers.modeling_tf_outputs.TFSequenceClassifierOutput 或 tuple(tf.Tensor)
参数
- input_ids (
Numpy array
或tf.Tensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列标记的索引。请注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
表示 [CLS] 标记。有关patch_sequence_length
,请参阅pixel_values
。索引可以通过 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- bbox (
Numpy array
或tf.Tensor
,形状为(batch_size, sequence_length, 4)
,可选) — 每个输入序列标记的边界框。选择范围为[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 (
tf.Tensor
,形状为(batch_size, num_channels, height, width)
) — 文档图像批次。每张图像被分成形状为(num_channels, config.patch_size, config.patch_size)
的补丁,补丁的总数(=patch_sequence_length
)等于((height / config.patch_size) * (width / config.patch_size))
。 - attention_mask (
tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 掩码,用于避免对填充标记索引执行注意力操作。掩码值选择在[0, 1]
之间:- 1 表示未被掩码的标记,
- 0 表示被掩码的标记。
请注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
用于 [CLS] 标记。有关patch_sequence_length
,请参阅pixel_values
。 - token_type_ids (
Numpy array
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 分段标记索引,用于指示输入的第一和第二部分。索引选择在[0, 1]
之间:- 0 对应于句子 A 标记,
- 1 对应于句子 B 标记。
请注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
表示 [CLS] 标记。有关patch_sequence_length
,请参阅pixel_values
。 - position_ids (
Numpy array
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 输入序列标记在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 1]
。请注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
表示 [CLS] 标记。有关patch_sequence_length
,请参阅pixel_values
。 - head_mask (
tf.Tensor
,形状为(num_heads,)
或(num_layers, num_heads)
,可选) — 掩码,用于使自注意力模块的选定头部无效。掩码值选择在[0, 1]
之间:- 1 表示头部未被掩码,
- 0 表示头部被掩码。
- inputs_embeds (
tf.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.modeling_tf_outputs.TFSequenceClassifierOutput 或 tuple(tf.Tensor)
一个 transformers.modeling_tf_outputs.TFSequenceClassifierOutput 或一个 tf.Tensor
的元组(如果传入 return_dict=False
或 config.return_dict=False
),包含根据配置(LayoutLMv3Config)和输入的不同元素。
-
loss (
tf.Tensor
,形状为(batch_size, )
,可选,当提供labels
时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。 -
logits (
tf.Tensor
,形状为(batch_size, config.num_labels)
) — 分类(或回归,如果 config.num_labels==1)分数(SoftMax 之前)。 -
hidden_states (
tuple(tf.Tensor)
,可选,当传入output_hidden_states=True
或config.output_hidden_states=True
时返回) —tf.Tensor
的元组(一个用于嵌入输出 + 一个用于每层输出),形状为(batch_size, sequence_length, hidden_size)
。模型在每个层输出的隐藏状态加上初始嵌入输出。
-
attentions (
tuple(tf.Tensor)
,可选,当传入output_attentions=True
或config.output_attentions=True
时返回) —tf.Tensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
TFLayoutLMv3ForSequenceClassification 前向方法,覆盖 __call__
特殊方法。
虽然前向传播的配方需要在此函数中定义,但在此之后应该调用 Module
实例,而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。
示例
>>> from transformers import AutoProcessor, TFAutoModelForSequenceClassification
>>> from datasets import load_dataset
>>> import tensorflow as tf
>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv3-base", apply_ocr=False)
>>> model = TFAutoModelForSequenceClassification.from_pretrained("microsoft/layoutlmv3-base")
>>> 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="tf")
>>> sequence_label = tf.convert_to_tensor([1])
>>> outputs = model(**encoding, labels=sequence_label)
>>> loss = outputs.loss
>>> logits = outputs.logits
TFLayoutLMv3ForTokenClassification
类 transformers.TFLayoutLMv3ForTokenClassification
< 源 >( 配置: LayoutLMv3Config **kwargs )
参数
- config (LayoutLMv3Config) — 模型配置类,包含模型的所有参数。用配置文件初始化并不会加载与模型相关的权重,只加载配置。请查看 from_pretrained() 方法以加载模型权重。
LayoutLMv3 模型,其顶部有一个标记分类头(最终隐藏状态顶部的一个线性层),例如用于序列标注(信息提取)任务,如 FUNSD、SROIE、CORD 和 Kleister-NDA。
此模型继承自 TFPreTrainedModel。请查看父类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。
此模型也是 keras.Model 的子类。请将其作为常规的TF 2.0 Keras模型使用,并参考TF 2.0文档以了解与通用用法和行为相关的所有事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入作为关键字参数(如 PyTorch 模型),或
- 所有输入作为第一个位置参数中的列表、元组或字典。
支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用 model.fit()
等方法时,一切都应该“正常工作”——只需以 model.fit()
支持的任何格式传递您的输入和标签即可!但是,如果您想在 Keras 方法(如 fit()
和 predict()
)之外使用第二种格式,例如在使用 Keras Functional
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 函数一样传递输入!
调用
< 源 >( 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 ) → transformers.modeling_tf_outputs.TFTokenClassifierOutput 或 tuple(tf.Tensor)
参数
- input_ids (
Numpy array
或tf.Tensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列标记的索引。请注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
表示 [CLS] 标记。有关patch_sequence_length
,请参阅pixel_values
。索引可以通过 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- bbox (
Numpy array
或tf.Tensor
,形状为(batch_size, sequence_length, 4)
,可选) — 每个输入序列标记的边界框。选择范围为[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 (
tf.Tensor
,形状为(batch_size, num_channels, height, width)
) — 文档图像批次。每张图像被分成形状为(num_channels, config.patch_size, config.patch_size)
的补丁,补丁的总数(=patch_sequence_length
)等于((height / config.patch_size) * (width / config.patch_size))
。 - attention_mask (
tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 掩码,用于避免对填充标记索引执行注意力操作。掩码值选择在[0, 1]
之间:- 1 表示未被掩码的标记,
- 0 表示被掩码的标记。
请注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
用于 [CLS] 标记。有关patch_sequence_length
,请参阅pixel_values
。 - token_type_ids (
Numpy array
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 分段标记索引,用于指示输入的第一和第二部分。索引选择在[0, 1]
之间:- 0 对应于句子 A 标记,
- 1 对应于句子 B 标记。
请注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
表示 [CLS] 标记。有关patch_sequence_length
,请参阅pixel_values
。 - 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
。 - 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 (形状为
(batch_size, sequence_length)
的tf.Tensor
,可选) — 用于计算令牌分类损失的标签。索引应在[0, ..., config.num_labels - 1]
之间。
返回
transformers.modeling_tf_outputs.TFTokenClassifierOutput 或 tuple(tf.Tensor)
一个 transformers.modeling_tf_outputs.TFTokenClassifierOutput 或一个 tf.Tensor
元组 (如果传入 return_dict=False
或 config.return_dict=False
),包含根据配置 (LayoutLMv3Config) 和输入的不同元素。
-
loss (
tf.Tensor
,形状为(n,)
,可选,其中 n 是未被掩盖的标签数量,当提供labels
时返回) — 分类损失。 -
logits (
tf.Tensor
,形状为(batch_size, sequence_length, config.num_labels)
) — 分类分数(SoftMax 之前)。 -
hidden_states (
tuple(tf.Tensor)
,可选,当传入output_hidden_states=True
或config.output_hidden_states=True
时返回) —tf.Tensor
的元组(一个用于嵌入输出 + 一个用于每层输出),形状为(batch_size, sequence_length, hidden_size)
。模型在每个层输出的隐藏状态加上初始嵌入输出。
-
attentions (
tuple(tf.Tensor)
,可选,当传入output_attentions=True
或config.output_attentions=True
时返回) —tf.Tensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 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 >( 配置: LayoutLMv3Config **kwargs )
参数
- config (LayoutLMv3Config) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型关联的权重,只加载配置。请查看 from_pretrained() 方法来加载模型权重。
LayoutLMv3 模型,在顶部带有一个用于抽取式问答任务(如 DocVQA)的跨度分类头(在隐藏状态输出的文本部分上方的线性层,用于计算 span start logits
和 span end logits
)。
此模型继承自 TFPreTrainedModel。请查看父类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。
此模型也是 keras.Model 的子类。请将其作为常规的TF 2.0 Keras模型使用,并参考TF 2.0文档以了解与通用用法和行为相关的所有事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入作为关键字参数(如 PyTorch 模型),或
- 所有输入作为第一个位置参数中的列表、元组或字典。
支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用 model.fit()
等方法时,一切都应该“正常工作”——只需以 model.fit()
支持的任何格式传递您的输入和标签即可!但是,如果您想在 Keras 方法(如 fit()
和 predict()
)之外使用第二种格式,例如在使用 Keras Functional
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 函数一样传递输入!
调用
< source >( 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 ) → transformers.modeling_tf_outputs.TFQuestionAnsweringModelOutput 或 tuple(tf.Tensor)
参数
- input_ids (形状为
(batch_size, sequence_length)
的Numpy 数组
或tf.Tensor
) — 词汇表中输入序列令牌的索引。请注意,
sequence_length = token_sequence_length + patch_sequence_length + 1
,其中1
是指 [CLS] 令牌。有关patch_sequence_length
,请参阅pixel_values
。索引可以使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- 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] 令牌。有关patch_sequence_length
,请参阅pixel_values
。 - 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
。 - 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
。 - 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 而不是普通的元组。 - 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 (形状为
(batch_size, )
的tf.Tensor
,可选,在提供start_positions
和end_positions
时返回) — 总跨度提取损失是起始位置和结束位置的交叉熵之和。 -
start_logits (形状为
(batch_size, sequence_length)
的tf.Tensor
) — 跨度起始分数(SoftMax 之前)。 -
end_logits (形状为
(batch_size, sequence_length)
的tf.Tensor
) — 跨度结束分数(SoftMax 之前)。 -
hidden_states (
tuple(tf.Tensor)
,可选,当传入output_hidden_states=True
或config.output_hidden_states=True
时返回) —tf.Tensor
的元组(一个用于嵌入输出 + 一个用于每层输出),形状为(batch_size, sequence_length, hidden_size)
。模型在每个层输出的隐藏状态加上初始嵌入输出。
-
attentions (
tuple(tf.Tensor)
,可选,当传入output_attentions=True
或config.output_attentions=True
时返回) —tf.Tensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 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