Transformers 文件

LayoutLMV2

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

LayoutLMV2

PyTorch

概述

LayoutLMV2 模型由 Yang Xu, Yiheng Xu, Tengchao Lv, Lei Cui, Furu Wei, Guoxin Wang, Yijuan Lu, Dinei Florencio, Cha Zhang, Wanxiang Che, Min Zhang, Lidong Zhou 在 LayoutLMv2: Multi-modal Pre-training for Visually-Rich Document Understanding 中提出。LayoutLMV2 改進了 LayoutLM,在多個文件影像理解基準測試中取得了最先進的成果。

  • 從掃描文件中提取資訊:FUNSD 資料集(包含 199 份標註表格,超過 30,000 個單詞),CORD 資料集(包含 800 份收據用於訓練,100 份用於驗證,100 份用於測試),SROIE 資料集(包含 626 份收據用於訓練,347 份用於測試)以及 Kleister-NDA 資料集(包含來自 EDGAR 資料庫的保密協議,其中 254 份文件用於訓練,83 份文件用於驗證,203 份文件用於測試)。
  • 文件影像分類:RVL-CDIP 資料集(包含 400,000 張影像,屬於 16 個類別之一)。
  • 文件視覺問答:DocVQA 資料集(包含 12,000 多張文件影像上的 50,000 個問題)。

論文摘要如下:

由於其有效的模型架構和大規模未標註掃描/數字原生文件的優勢,文字和佈局的預訓練在各種富視覺文件理解任務中被證明是有效的。在本文中,我們透過在多模態框架中預訓練文字、佈局和影像來提出 LayoutLMv2,其中利用了新的模型架構和預訓練任務。具體來說,LayoutLMv2 不僅使用現有的掩碼視覺語言建模任務,還在預訓練階段使用新的文字-影像對齊和文字-影像匹配任務,從而更好地學習跨模態互動。同時,它還將空間感知自注意力機制整合到 Transformer 架構中,使得模型能夠充分理解不同文字塊之間的相對位置關係。實驗結果表明,LayoutLMv2 在各種下游富視覺文件理解任務上優於強基線,並取得了新的最先進結果,包括 FUNSD (0.7895 -> 0.8420)、CORD (0.9493 -> 0.9601)、SROIE (0.9524 -> 0.9781)、Kleister-NDA (0.834 -> 0.852)、RVL-CDIP (0.9443 -> 0.9564) 和 DocVQA (0.7295 -> 0.8672)。預訓練的 LayoutLMv2 模型可在該 https URL 公開獲取。

LayoutLMv2 依賴於 detectron2torchvisiontesseract。執行以下命令進行安裝:

python -m pip install 'git+https://github.com/facebookresearch/detectron2.git'
python -m pip install torchvision tesseract

(如果您正在為 LayoutLMv2 進行開發,請注意,透過文件測試也需要安裝這些包。)

使用技巧

  • LayoutLMv1 和 LayoutLMv2 的主要區別在於,後者在預訓練期間加入了視覺嵌入(而 LayoutLMv1 僅在微調期間新增視覺嵌入)。
  • LayoutLMv2 在自注意力層的注意力分數中添加了相對 1D 注意力偏差和空間 2D 注意力偏差。詳細資訊可在論文第 5 頁找到。
  • 關於如何在 RVL-CDIP、FUNSD、DocVQA、CORD 上使用 LayoutLMv2 模型的演示筆記本可在此處找到。
  • LayoutLMv2 使用 Facebook AI 的 Detectron2 包作為其視覺骨幹網路。請參閱 此連結 以獲取安裝說明。
  • 除了 input_idsforward() 還需要 2 個額外的輸入,即 imagebboximage 輸入對應於文字標記出現的原始文件影像。模型期望每個文件影像的大小為 224x224。這意味著如果您有一批文件影像,image 應該是一個形狀為 (batch_size, 3, 224, 224) 的張量。它可以是 torch.TensorDetectron2.structures.ImageList。您不需要歸一化通道,因為模型會完成此操作。需要注意的是,視覺骨幹網路期望 BGR 通道而不是 RGB,因為 Detectron2 中的所有模型都使用 BGR 格式進行預訓練。bbox 輸入是輸入文字標記的邊界框(即 2D 位置)。這與 LayoutLMModel 相同。這些可以透過外部 OCR 引擎(例如 Google 的 Tesseract(有一個 Python 包裝器可用))獲取。每個邊界框應採用 (x0, y0, x1, y1) 格式,其中 (x0, y0) 對應於邊界框左上角的位置,(x1, y1) 表示右下角的位置。請注意,首先需要將邊界框歸一化到 0-1000 範圍。要進行歸一化,可以使用以下函式:
def normalize_bbox(bbox, width, height):
    return [
        int(1000 * (bbox[0] / width)),
        int(1000 * (bbox[1] / height)),
        int(1000 * (bbox[2] / width)),
        int(1000 * (bbox[3] / height)),
    ]

在這裡,widthheight 對應於標記所在原始文件的寬度和高度(在調整影像大小之前)。例如,可以使用 Python Image Library (PIL) 庫獲取這些資訊,如下所示:

from PIL import Image

image = Image.open(
    "name_of_your_document - can be a png, jpg, etc. of your documents (PDFs must be converted to images)."
)

width, height = image.size

然而,這個模型包含一個全新的 LayoutLMv2Processor,它可以直接用於為模型準備資料(包括在後臺應用 OCR)。更多資訊可以在下面的“用法”部分找到。

  • 在內部,LayoutLMv2Model 將透過其視覺骨幹網路傳送 image 輸入以獲得低解析度特徵圖,其形狀等於 LayoutLMv2Configimage_feature_pool_shape 屬性。然後將此特徵圖展平以獲得影像標記序列。由於特徵圖的大小預設為 7x7,因此將獲得 49 個影像標記。然後將這些標記與文字標記連線起來,並透過 Transformer 編碼器傳送。這意味著如果將文字標記填充到最大長度,模型的最後隱藏狀態將具有 512 + 49 = 561 的長度。更一般地說,最後隱藏狀態的形狀將為 seq_length + image_feature_pool_shape[0] * config.image_feature_pool_shape[1]
  • 呼叫 from_pretrained() 時,將列印一個警告,其中包含長長的未初始化引數列表。這不是問題,因為這些引數是批歸一化統計量,在自定義資料集上微調時會獲得值。
  • 如果你想在分散式環境中訓練模型,請務必在模型上呼叫 synchronize_batch_norm,以便正確同步視覺骨幹網路的批歸一化層。

此外,還有一個 LayoutXLM,它是 LayoutLMv2 的多語言版本。更多資訊可以在 LayoutXLM 的文件頁面上找到。

資源

一份官方 Hugging Face 和社群 (標有 🌎) 資源列表,可幫助您開始使用 LayoutLMv2。如果您有興趣提交資源以包含在此處,請隨時開啟拉取請求,我們將對其進行審查!該資源理想情況下應展示一些新內容,而不是重複現有資源。

文字分類
問答
Token 分類

用法:LayoutLMv2Processor

為模型準備資料最簡單的方法是使用 LayoutLMv2Processor,它在內部結合了影像處理器 (LayoutLMv2ImageProcessor) 和分詞器 (LayoutLMv2TokenizerLayoutLMv2TokenizerFast)。影像處理器處理影像模態,而分詞器處理文字模態。處理器結合了兩者,這對於 LayoutLMv2 這樣的多模態模型來說是理想的。請注意,如果您只想處理一種模態,您仍然可以分別使用它們。

from transformers import LayoutLMv2ImageProcessor, LayoutLMv2TokenizerFast, LayoutLMv2Processor

image_processor = LayoutLMv2ImageProcessor()  # apply_ocr is set to True by default
tokenizer = LayoutLMv2TokenizerFast.from_pretrained("microsoft/layoutlmv2-base-uncased")
processor = LayoutLMv2Processor(image_processor, tokenizer)

簡而言之,可以將文件影像(以及可能附加的資料)提供給 LayoutLMv2Processor,它將建立模型所需的輸入。在內部,處理器首先使用 LayoutLMv2ImageProcessor 對影像進行 OCR 以獲取單詞列表和歸一化邊界框,並將其調整為給定大小以獲取 image 輸入。然後將單詞和歸一化邊界框提供給 LayoutLMv2TokenizerLayoutLMv2TokenizerFast,它們將它們轉換為標記級別的 input_idsattention_masktoken_type_idsbbox。可以選擇向處理器提供單詞標籤,這些標籤將轉換為標記級別的 labels

LayoutLMv2Processor 在內部使用 PyTesseract,它是 Google Tesseract OCR 引擎的 Python 封裝器。請注意,您仍然可以使用自己選擇的 OCR 引擎,並自行提供單詞和歸一化框。這需要使用 apply_ocr 設定為 False 來初始化 LayoutLMv2ImageProcessor

總共有 5 種處理器支援的用例。下面,我們列出所有這些用例。請注意,這些用例均適用於批處理和非批處理輸入(我們以非批處理輸入為例進行說明)。

用例 1:文件影像分類(訓練、推理)+ 標記分類(推理),apply_ocr = True

這是最簡單的情況,其中處理器(實際上是影像處理器)將對影像執行 OCR 以獲取單詞和歸一化邊界框。

from transformers import LayoutLMv2Processor
from PIL import Image

processor = LayoutLMv2Processor.from_pretrained("microsoft/layoutlmv2-base-uncased")

image = Image.open(
    "name_of_your_document - can be a png, jpg, etc. of your documents (PDFs must be converted to images)."
).convert("RGB")
encoding = processor(
    image, return_tensors="pt"
)  # you can also add all tokenizer parameters here such as padding, truncation
print(encoding.keys())
# dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'bbox', 'image'])

用例 2:文件影像分類(訓練、推理)+ 標記分類(推理),apply_ocr=False

如果需要自行執行 OCR,可以將影像處理器初始化為 apply_ocr 設定為 False。在這種情況下,應自行向處理器提供單詞和相應的(歸一化)邊界框。

from transformers import LayoutLMv2Processor
from PIL import Image

processor = LayoutLMv2Processor.from_pretrained("microsoft/layoutlmv2-base-uncased", revision="no_ocr")

image = Image.open(
    "name_of_your_document - can be a png, jpg, etc. of your documents (PDFs must be converted to images)."
).convert("RGB")
words = ["hello", "world"]
boxes = [[1, 2, 3, 4], [5, 6, 7, 8]]  # make sure to normalize your bounding boxes
encoding = processor(image, words, boxes=boxes, return_tensors="pt")
print(encoding.keys())
# dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'bbox', 'image'])

用例 3:標記分類(訓練),apply_ocr=False

對於標記分類任務(例如 FUNSD、CORD、SROIE、Kleister-NDA),還可以提供相應的單詞標籤以訓練模型。然後,處理器會將這些標籤轉換為標記級別的 labels。預設情況下,它只會標記單詞的第一個詞片段,並將剩餘的詞片段標記為 -100,這是 PyTorch 的 CrossEntropyLoss 的 ignore_index。如果您希望標記單詞的所有詞片段,可以將分詞器初始化為 only_label_first_subword 設定為 False

from transformers import LayoutLMv2Processor
from PIL import Image

processor = LayoutLMv2Processor.from_pretrained("microsoft/layoutlmv2-base-uncased", revision="no_ocr")

image = Image.open(
    "name_of_your_document - can be a png, jpg, etc. of your documents (PDFs must be converted to images)."
).convert("RGB")
words = ["hello", "world"]
boxes = [[1, 2, 3, 4], [5, 6, 7, 8]]  # make sure to normalize your bounding boxes
word_labels = [1, 2]
encoding = processor(image, words, boxes=boxes, word_labels=word_labels, return_tensors="pt")
print(encoding.keys())
# dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'bbox', 'labels', 'image'])

用例 4:視覺問答(推理),apply_ocr=True

對於視覺問答任務(例如 DocVQA),您可以向處理器提供一個問題。預設情況下,處理器將對影像應用 OCR,並建立 [CLS] 問題標記 [SEP] 單詞標記 [SEP]。

from transformers import LayoutLMv2Processor
from PIL import Image

processor = LayoutLMv2Processor.from_pretrained("microsoft/layoutlmv2-base-uncased")

image = Image.open(
    "name_of_your_document - can be a png, jpg, etc. of your documents (PDFs must be converted to images)."
).convert("RGB")
question = "What's his name?"
encoding = processor(image, question, return_tensors="pt")
print(encoding.keys())
# dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'bbox', 'image'])

用例 5:視覺問答(推理),apply_ocr=False

對於視覺問答任務(例如 DocVQA),您可以向處理器提供一個問題。如果您想自行執行 OCR,可以將自己的單詞和(歸一化)邊界框提供給處理器。

from transformers import LayoutLMv2Processor
from PIL import Image

processor = LayoutLMv2Processor.from_pretrained("microsoft/layoutlmv2-base-uncased", revision="no_ocr")

image = Image.open(
    "name_of_your_document - can be a png, jpg, etc. of your documents (PDFs must be converted to images)."
).convert("RGB")
question = "What's his name?"
words = ["hello", "world"]
boxes = [[1, 2, 3, 4], [5, 6, 7, 8]]  # make sure to normalize your bounding boxes
encoding = processor(image, question, words, boxes=boxes, return_tensors="pt")
print(encoding.keys())
# dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'bbox', 'image'])

LayoutLMv2Config

class transformers.LayoutLMv2Config

< >

( 詞彙表大小 = 30522 隱藏層大小 = 768 隱藏層數量 = 12 注意力頭數量 = 12 中間層大小 = 3072 隱藏啟用函式 = 'gelu' 隱藏層 dropout 機率 = 0.1 注意力機率 dropout 機率 = 0.1 最大位置嵌入 = 512 型別詞彙表大小 = 2 初始化器範圍 = 0.02 層歸一化 epsilon = 1e-12 填充 token id = 0 最大 2D 位置嵌入 = 1024 最大相對位置 = 128 相對位置 bin 數量 = 32 快速 QKV = True 最大相對 2D 位置 = 256 相對 2D 位置 bin 數量 = 64 轉換同步批歸一化 = True 影像特徵池形狀 = [7, 7, 256] 座標大小 = 128 形狀大小 = 128 具有相對注意力偏差 = True 具有空間注意力偏差 = True 具有視覺分段嵌入 = False Detectron2 配置引數 = None **kwargs )

引數

  • vocab_size (int, 可選, 預設為 30522) — LayoutLMv2 模型的詞彙表大小。定義了呼叫 LayoutLMv2ModelTFLayoutLMv2Model 時傳入的 inputs_ids 可以表示的不同標記的數量。
  • hidden_size (int, 可選, 預設為 768) — 編碼器層和池化層的維度。
  • num_hidden_layers (int, 可選, 預設為 12) — Transformer 編碼器中的隱藏層數量。
  • num_attention_heads (int, 可選, 預設為 12) — Transformer 編碼器中每個注意力層的注意力頭數量。
  • intermediate_size (int, 可選, 預設為 3072) — Transformer 編碼器中“中間”(即前饋)層的維度。
  • hidden_act (strfunction, 可選, 預設為 "gelu") — 編碼器和池化器中的非線性啟用函式(函式或字串)。如果是字串,則支援 "gelu""relu""selu""gelu_new"
  • hidden_dropout_prob (float, 可選, 預設為 0.1) — 嵌入、編碼器和池化器中所有全連線層的 dropout 機率。
  • attention_probs_dropout_prob (float, 可選, 預設為 0.1) — 注意力機率的 dropout 比率。
  • max_position_embeddings (int, 可選, 預設為 512) — 該模型可能使用的最大序列長度。通常為了以防萬一(例如 512、1024 或 2048),將其設定為一個較大的值。
  • type_vocab_size (int, 可選, 預設為 2) — 呼叫 LayoutLMv2ModelTFLayoutLMv2Model 時傳入的 token_type_ids 的詞彙表大小。
  • initializer_range (float, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。
  • layer_norm_eps (float, 可選, 預設為 1e-12) — 層歸一化層使用的 epsilon。
  • max_2d_position_embeddings (int, 可選, 預設為 1024) — 2D 位置嵌入可能使用的最大值。通常為了以防萬一(例如 1024),將其設定為一個較大的值。
  • max_rel_pos (int, 可選, 預設為 128) — 自注意力機制中使用的最大相對位置數。
  • rel_pos_bins (int, 可選, 預設為 32) — 自注意力機制中使用的相對位置 bin 數量。
  • fast_qkv (bool, 可選, 預設為 True) — 是否在自注意力層中使用單個矩陣表示查詢、鍵和值。
  • max_rel_2d_pos (int, optional, defaults to 256) — 自注意力機制中相對2D位置的最大數量。
  • rel_2d_pos_bins (int, optional, defaults to 64) — 自注意力機制中2D相對位置的bin數量。
  • image_feature_pool_shape (list[int], optional, defaults to [7, 7, 256]) — 平均池化特徵圖的形狀。
  • coordinate_size (int, optional, defaults to 128) — 座標嵌入的維度。
  • shape_size (int, optional, defaults to 128) — 寬度和高度嵌入的維度。
  • has_relative_attention_bias (bool, optional, defaults to True) — 是否在自注意力機制中使用相對注意力偏差。
  • has_spatial_attention_bias (bool, optional, defaults to True) — 是否在自注意力機制中使用空間注意力偏差。
  • has_visual_segment_embedding (bool, optional, defaults to False) — 是否新增視覺段嵌入。
  • detectron2_config_args (dict, optional) — 包含Detectron2視覺骨幹配置引數的字典。有關預設值的詳細資訊,請參閱此檔案

這是用於儲存LayoutLMv2Model配置的配置類。它用於根據指定引數例項化LayoutLMv2模型,定義模型架構。使用預設值例項化配置將生成與LayoutLMv2 microsoft/layoutlmv2-base-uncased架構相似的配置。

配置物件繼承自PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀PretrainedConfig的文件。

示例

>>> from transformers import LayoutLMv2Config, LayoutLMv2Model

>>> # Initializing a LayoutLMv2 microsoft/layoutlmv2-base-uncased style configuration
>>> configuration = LayoutLMv2Config()

>>> # Initializing a model (with random weights) from the microsoft/layoutlmv2-base-uncased style configuration
>>> model = LayoutLMv2Model(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

LayoutLMv2FeatureExtractor

class transformers.LayoutLMv2FeatureExtractor

< >

( *args **kwargs )

__call__

< >

( images **kwargs )

預處理單張或批次影像。

LayoutLMv2ImageProcessor

class transformers.LayoutLMv2ImageProcessor

< >

( do_resize: bool = True size: typing.Optional[dict[str, int]] = None resample: Resampling = <Resampling.BILINEAR: 2> apply_ocr: bool = True ocr_lang: typing.Optional[str] = None tesseract_config: typing.Optional[str] = '' **kwargs )

引數

  • do_resize (bool, optional, defaults to True) — 是否將影像的(高度,寬度)尺寸調整為(size["height"], size["width"])。可在preprocess方法中的do_resize引數覆蓋。
  • size (dict[str, int] optional, defaults to {"height" -- 224, "width": 224}):調整大小後圖像的尺寸。可在preprocess方法中的size引數覆蓋。
  • resample (PILImageResampling, optional, defaults to Resampling.BILINEAR) — 調整影像大小時使用的重取樣濾波器。可在preprocess方法中的resample引數覆蓋。
  • apply_ocr (bool, optional, defaults to True) — 是否應用Tesseract OCR引擎以獲取單詞+標準化邊界框。可在preprocess方法中的apply_ocr引數覆蓋。
  • ocr_lang (str, optional) — Tesseract OCR引擎使用的語言,由其ISO程式碼指定。預設使用英語。可在preprocess方法中的ocr_lang引數覆蓋。
  • tesseract_config (str, optional, defaults to "") — 呼叫Tesseract時傳遞給config引數的任何附加自定義配置標誌。例如:“—psm 6”。可在preprocess方法中的tesseract_config引數覆蓋。

構建LayoutLMv2影像處理器。

preprocess

< >

( 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: Resampling = 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) — 要預處理的影像。
  • do_resize (bool, optional, defaults to self.do_resize) — 是否調整影像大小。
  • size (dict[str, int], optional, defaults to self.size) — 調整大小後輸出影像的所需尺寸。
  • resample (PILImageResampling, optional, defaults to Resampling.BILINEAR) — 調整影像大小時使用的重取樣濾波器。可以是列舉PIL.Image重取樣濾波器之一。僅在do_resize設定為True時有效。
  • apply_ocr (bool, optional, defaults to self.apply_ocr) — 是否應用Tesseract OCR引擎以獲取單詞+標準化邊界框。
  • ocr_lang (str, optional, defaults to self.ocr_lang) — Tesseract OCR引擎使用的語言,由其ISO程式碼指定。預設使用英語。
  • tesseract_config (str, optional, defaults to self.tesseract_config) — 呼叫Tesseract時傳遞給config引數的任何附加自定義配置標誌。
  • return_tensors (str or TensorType, optional) — 要返回的張量型別。可以是以下之一:
    • 未設定:返回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 or str, optional, defaults to ChannelDimension.FIRST) — 輸出影像的通道維度格式。可以是以下之一:
    • ChannelDimension.FIRST:影像格式為(通道數,高度,寬度)。
    • ChannelDimension.LAST:影像格式為(高度,寬度,通道數)。

預處理一張或一批影像。

LayoutLMv2ImageProcessorFast

class transformers.LayoutLMv2ImageProcessorFast

< >

( **kwargs: typing_extensions.Unpack[transformers.models.layoutlmv2.image_processing_layoutlmv2_fast.LayoutLMv2FastImageProcessorKwargs] )

構建一個快速Layoutlmv2影像處理器。

preprocess

< >

( 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.layoutlmv2.image_processing_layoutlmv2_fast.LayoutLMv2FastImageProcessorKwargs] ) <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, optional) — 是否調整影像大小。
  • size (dict[str, int], optional) — 描述模型的最大輸入維度。
  • default_to_square (bool, optional) — 如果尺寸是整數,則調整大小時是否預設為正方形影像。
  • resample (Union[PILImageResampling, F.InterpolationMode, NoneType]) — 調整影像大小以使用的重取樣濾波器。可以是列舉PILImageResampling之一。僅在do_resize設定為True時有效。
  • do_center_crop (bool, optional) — 是否對影像進行中心裁剪。
  • crop_size (dict[str, int], optional) — 應用center_crop後輸出影像的尺寸。
  • do_rescale (bool, optional) — 是否縮放影像。
  • rescale_factor (Union[int, float, NoneType]) — 如果do_rescale設定為True,則按此縮放因子縮放影像。
  • do_normalize (bool, optional) — 是否對影像進行歸一化。
  • image_mean (Union[float, list[float], NoneType]) — 用於歸一化的影像平均值。僅在do_normalize設定為True時有效。
  • image_std (Union[float, list[float], NoneType]) — 用於歸一化的影像標準差。僅在do_normalize設定為True時有效。
  • do_convert_rgb (bool, optional) — 是否將影像轉換為RGB。
  • return_tensors (Union[str, ~utils.generic.TensorType, NoneType]) — 如果設定為`pt`,則返回堆疊張量,否則返回張量列表。
  • data_format (~image_utils.ChannelDimension, optional) — 僅支援ChannelDimension.FIRST。為與慢速處理器相容而新增。
  • input_data_format (Union[str, ~image_utils.ChannelDimension, NoneType]) — 輸入影像的通道維度格式。如果未設定,通道維度格式將從輸入影像中推斷。可以是以下之一:
    • "channels_first"ChannelDimension.FIRST:影像格式為(通道數,高度,寬度)。
    • "channels_last"ChannelDimension.LAST:影像格式為(高度,寬度,通道數)。
    • "none"ChannelDimension.NONE:影像格式為(高度,寬度)。
  • device (torch.device, optional) — 處理影像的裝置。如果未設定,裝置將從輸入影像中推斷。
  • disable_grouping (bool, optional) — 是否停用按大小對影像進行分組,以便單獨處理而非批處理。如果為None,則在影像位於CPU上時設定為True,否則設定為False。此選擇基於經驗觀察,詳情請參閱此處:https://github.com/huggingface/transformers/pull/38157
  • apply_ocr (bool, optional, defaults to True) — 是否應用Tesseract OCR引擎以獲取單詞+標準化邊界框。可在preprocess方法中的apply_ocr引數覆蓋。
  • ocr_lang (str, optional) — Tesseract OCR引擎使用的語言,由其ISO程式碼指定。預設使用英語。可在preprocess方法中的ocr_lang引數覆蓋。
  • tesseract_config (str, 可選) — 轉發給 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張量。

LayoutLMv2Tokenizer

class transformers.LayoutLMv2Tokenizer

< >

( vocab_file do_lower_case = True do_basic_tokenize = True never_split = None unk_token = '[UNK]' sep_token = '[SEP]' pad_token = '[PAD]' cls_token = '[CLS]' mask_token = '[MASK]' cls_token_box = [0, 0, 0, 0] sep_token_box = [1000, 1000, 1000, 1000] pad_token_box = [0, 0, 0, 0] pad_token_label = -100 only_label_first_subword = True tokenize_chinese_chars = True strip_accents = None model_max_length: int = 512 additional_special_tokens: typing.Optional[list[str]] = None **kwargs )

構建一個 LayoutLMv2 分詞器。基於 WordPiece。LayoutLMv2Tokenizer 可用於將單詞、單詞級邊界框和可選的單詞標籤轉換為標記級 input_idsattention_masktoken_type_idsbbox 和可選的 labels(用於標記分類)。

此分詞器繼承自 PreTrainedTokenizer,其中包含大多數主要方法。使用者應參閱此超類以獲取有關這些方法的更多資訊。

LayoutLMv2Tokenizer 執行端到端分詞:標點符號分割和 WordPiece。它還將單詞級邊界框轉換為標記級邊界框。

__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 ) BatchEncoding

引數

  • text (str, List[str], List[List[str]]) — 要編碼的序列或序列批次。每個序列可以是字串、字串列表(單個示例的單詞或批次示例的問題)或字串列表的列表(單詞批次)。
  • text_pair (List[str], List[List[str]]) — 要編碼的序列或序列批次。每個序列都應為字串列表(預標記化的字串)。
  • boxes (List[List[int]], List[List[List[int]]]) — 單詞級邊界框。每個邊界框應歸一化為 0-1000 比例。
  • word_labels (List[int], List[List[int]], 可選) — 單詞級整數標籤(用於 FUNSD、CORD 等標記分類任務)。
  • add_special_tokens (bool, 可選, 預設為 True) — 是否使用與模型相關的特殊標記編碼序列。
  • padding (bool, strPaddingStrategy, 可選, 預設為 False) — 啟用並控制填充。接受以下值:

    • True'longest': 填充到批次中最長的序列(如果只提供單個序列則不填充)。
    • 'max_length': 填充到由引數 max_length 指定的最大長度,如果未提供該引數,則填充到模型可接受的最大輸入長度。
    • False'do_not_pad'(預設):不填充(即可以輸出序列長度不同的批次)。
  • truncation (bool, strTruncationStrategy, 可選, 預設為 False) — 啟用並控制截斷。接受以下值:

    • True'longest_first': 截斷到由引數 max_length 指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或批次),這將逐個標記地截斷,從對中最長的序列中移除一個標記。
    • 'only_first': 截斷到由引數 max_length 指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或批次),這將只截斷一對序列中的第一個序列。
    • 'only_second': 截斷到由引數 max_length 指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或批次),這將只截斷一對序列中的第二個序列。
    • False'do_not_truncate'(預設):不截斷(即可以輸出序列長度大於模型最大可接受輸入大小的批次)。
  • max_length (int, 可選) — 控制由截斷/填充引數之一使用的最大長度。

    如果未設定或設定為 None,則如果截斷/填充引數之一要求最大長度,則將使用預定義的模型最大長度。如果模型沒有特定的最大輸入長度(如 XLNet),則將停用截斷/填充到最大長度。

  • stride (int, 可選, 預設為 0) — 如果與 max_length 一起設定為一個數字,則當 return_overflowing_tokens=True 時返回的溢位標記將包含來自截斷序列末尾的一些標記,以在截斷序列和溢位序列之間提供一些重疊。此引數的值定義了重疊標記的數量。
  • pad_to_multiple_of (int, 可選) — 如果設定,將序列填充到所提供值的倍數。這對於在計算能力 >= 7.5 (Volta) 的 NVIDIA 硬體上啟用 Tensor Cores 特別有用。
  • return_tensors (strTensorType, 可選) — 如果設定,將返回張量而不是 Python 整數列表。可接受的值為:

    • 'tf': 返回 TensorFlow tf.constant 物件。
    • 'pt': 返回 PyTorch torch.Tensor 物件。
    • 'np': 返回 Numpy np.ndarray 物件。
  • return_token_type_ids (bool, 可選) — 是否返回標記型別 ID。如果保留預設值,將根據特定分詞器的預設設定返回標記型別 ID,由 return_outputs 屬性定義。

    什麼是標記型別 ID?

  • return_attention_mask (bool, 可選) — 是否返回注意力掩碼。如果保留預設值,將根據特定分詞器的預設設定返回注意力掩碼,由 return_outputs 屬性定義。

    什麼是注意力掩碼?

  • return_overflowing_tokens (bool, 可選, 預設為 False) — 是否返回溢位標記序列。如果提供了一對輸入 ID 序列(或批次),並且 truncation_strategy = longest_firstTrue,則會引發錯誤,而不是返回溢位標記。
  • return_special_tokens_mask (bool, 可選, 預設為 False) — 是否返回特殊標記掩碼資訊。
  • return_offsets_mapping (bool, 可選, 預設為 False) — 是否為每個標記返回 (char_start, char_end)

    這僅在繼承自 PreTrainedTokenizerFast 的快速分詞器上可用,如果使用 Python 的分詞器,此方法將引發 NotImplementedError

  • return_length (bool, 可選, 預設為 False) — 是否返回編碼輸入的長度。
  • verbose (bool, 可選, 預設為 True) — 是否列印更多資訊和警告。
  • **kwargs — 傳遞給 self.tokenize() 方法

返回

BatchEncoding

一個 BatchEncoding,包含以下欄位:

  • input_ids — 要輸入到模型中的標記 ID 列表。

    什麼是輸入 ID?

  • bbox — 待輸入模型的邊界框列表。

  • token_type_ids — 要輸入到模型中的標記型別 ID 列表(當 return_token_type_ids=True 或如果 *“token_type_ids”* 在 self.model_input_names 中時)。

    什麼是標記型別 ID?

  • attention_mask — 指定模型應關注哪些標記的索引列表(當 return_attention_mask=True 或如果 *“attention_mask”* 在 self.model_input_names 中時)。

    什麼是注意力掩碼?

  • labels — 待輸入模型的標籤列表。(當指定 word_labels 時)。

  • overflowing_tokens — 溢位標記序列列表(當指定 max_lengthreturn_overflowing_tokens=True 時)。

  • num_truncated_tokens — 截斷標記的數量(當指定 max_lengthreturn_overflowing_tokens=True 時)。

  • special_tokens_mask — 0 和 1 的列表,其中 1 表示新增的特殊標記,0 表示常規序列標記(當 add_special_tokens=Truereturn_special_tokens_mask=True 時)。

  • length — 輸入的長度(當 return_length=True 時)。

對一個或多個序列或一對序列進行分詞並準備輸入模型的主要方法,其中包含詞級別的歸一化邊界框和可選標籤。

save_vocabulary

< >

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

LayoutLMv2TokenizerFast

class transformers.LayoutLMv2TokenizerFast

< >

( vocab_file = None tokenizer_file = None do_lower_case = True unk_token = '[UNK]' sep_token = '[SEP]' pad_token = '[PAD]' cls_token = '[CLS]' mask_token = '[MASK]' cls_token_box = [0, 0, 0, 0] sep_token_box = [1000, 1000, 1000, 1000] pad_token_box = [0, 0, 0, 0] pad_token_label = -100 only_label_first_subword = True tokenize_chinese_chars = True strip_accents = None **kwargs )

引數

  • vocab_file (str) — 包含詞彙表的檔案。
  • do_lower_case (bool, 可選, 預設為 True) — 分詞時是否將輸入轉換為小寫。
  • unk_token (str, 可選, 預設為 "[UNK]") — 未知標記。不在詞彙表中的標記無法轉換為 ID,並設定為此標記。
  • sep_token (str, 可選, 預設為 "[SEP]") — 分隔標記,用於從多個序列構建序列時,例如用於序列分類的兩個序列或用於問答的文字和問題。它也用作使用特殊標記構建的序列的最後一個標記。
  • pad_token (str, 可選, 預設為 "[PAD]") — 用於填充的標記,例如在批處理不同長度的序列時。
  • cls_token (str, 可選, 預設為 "[CLS]") — 分類器標記,用於序列分類(整個序列的分類,而不是每個標記的分類)。它是使用特殊標記構建的序列的第一個標記。
  • mask_token (str, 可選, 預設為 "[MASK]") — 用於遮蔽值的標記。這是在使用掩碼語言建模訓練此模型時使用的標記。這是模型將嘗試預測的標記。
  • cls_token_box (List[int], 可選, 預設為 [0, 0, 0, 0]) — 用於特殊 [CLS] 標記的邊界框。
  • 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) — 如果提供了單詞標籤,是否只標記第一個子詞。
  • tokenize_chinese_chars (bool, 可選, 預設為 True) — 是否對中文字元進行分詞。對於日文,這可能需要停用(請參閱此問題)。
  • strip_accents (bool, 可選) — 是否去除所有重音符號。如果未指定此選項,則將由 lowercase 的值決定(與原始 LayoutLMv2 中一樣)。

構建一個“快速”LayoutLMv2 分詞器(由 HuggingFace 的 tokenizers 庫支援)。基於 WordPiece。

此分詞器繼承自 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 ) 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等token分類任務)。
  • add_special_tokens (bool, 可選, 預設為 True) — 是否使用與模型相關的特殊標記來編碼序列。
  • padding (bool, strPaddingStrategy, 可選, 預設為 False) — 啟用並控制填充。接受以下值:

    • True'longest':填充到批處理中最長的序列(如果只提供單個序列則不填充)。
    • 'max_length':填充到由引數 max_length 指定的最大長度,如果未提供該引數,則填充到模型可接受的最大輸入長度。
    • False'do_not_pad' (預設):不填充(即,可以輸出具有不同長度序列的批處理)。
  • truncation (bool, strTruncationStrategy, 可選, 預設為 False) — 啟用並控制截斷。接受以下值:

    • True'longest_first':截斷到由引數 max_length 指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供了一對序列(或一批對),則此操作將逐個 token 截斷,從對中最長的序列中移除一個 token。
    • '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 時,返回的溢位 token 將包含截斷序列末尾的一些 token,以提供截斷序列和溢位序列之間的一些重疊。此引數的值定義重疊 token 的數量。
  • pad_to_multiple_of (int, 可選) — 如果設定,將把序列填充到提供值的倍數。這對於在計算能力 >= 7.5 (Volta) 的NVIDIA硬體上啟用Tensor Core特別有用。
  • return_tensors (strTensorType, 可選) — 如果設定,將返回張量而不是Python整數列表。可接受的值為:

    • 'tf':返回TensorFlow tf.constant 物件。
    • 'pt':返回PyTorch torch.Tensor 物件。
    • 'np':返回Numpy np.ndarray 物件。
  • return_token_type_ids (bool, 可選) — 是否返回 token 型別 ID。如果保留預設值,將根據特定分詞器的預設設定(由 return_outputs 屬性定義)返回 token 型別 ID。

    什麼是 token 型別 ID?

  • return_attention_mask (bool, 可選) — 是否返回注意力掩碼。如果保留預設值,將根據特定分詞器的預設設定(由 return_outputs 屬性定義)返回注意力掩碼。

    什麼是注意力掩碼?

  • return_overflowing_tokens (bool, 可選, 預設為 False) — 是否返回溢位 token 序列。如果提供了一對輸入 ID 序列(或一批對),並且 truncation_strategy = longest_firstTrue,則會引發錯誤,而不是返回溢位 token。
  • return_special_tokens_mask (bool, 可選, 預設為 False) — 是否返回特殊 token 掩碼資訊。
  • return_offsets_mapping (bool, 可選, 預設為 False) — 是否返回每個 token 的 (char_start, char_end)

    這僅適用於繼承自 PreTrainedTokenizerFast 的快速分詞器,如果使用 Python 的分詞器,此方法將引發 NotImplementedError

  • return_length (bool, 可選, 預設為 False) — 是否返回編碼輸入的長度。
  • verbose (bool, 可選, 預設為 True) — 是否列印更多資訊和警告。
  • **kwargs — 傳遞給 self.tokenize() 方法

返回

BatchEncoding

一個 BatchEncoding,包含以下欄位:

  • input_ids — 要輸入到模型中的標記 ID 列表。

    什麼是輸入 ID?

  • bbox — 待輸入模型的邊界框列表。

  • token_type_ids — 要輸入到模型中的標記型別 ID 列表(當 return_token_type_ids=True 或如果 *“token_type_ids”* 在 self.model_input_names 中時)。

    什麼是標記型別 ID?

  • attention_mask — 指定模型應關注哪些標記的索引列表(當 return_attention_mask=True 或如果 *“attention_mask”* 在 self.model_input_names 中時)。

    什麼是注意力掩碼?

  • labels — 待輸入模型的標籤列表。(當指定 word_labels 時)。

  • overflowing_tokens — 溢位標記序列列表(當指定 max_lengthreturn_overflowing_tokens=True 時)。

  • num_truncated_tokens — 截斷標記的數量(當指定 max_lengthreturn_overflowing_tokens=True 時)。

  • special_tokens_mask — 0 和 1 的列表,其中 1 表示新增的特殊標記,0 表示常規序列標記(當 add_special_tokens=Truereturn_special_tokens_mask=True 時)。

  • length — 輸入的長度(當 return_length=True 時)。

對一個或多個序列或一對序列進行分詞並準備輸入模型的主要方法,其中包含詞級別的歸一化邊界框和可選標籤。

LayoutLMv2Processor

class transformers.LayoutLMv2Processor

< >

( image_processor = None tokenizer = None **kwargs )

引數

構建一個 LayoutLMv2 處理器,它將 LayoutLMv2 影像處理器和 LayoutLMv2 分詞器組合成一個單一的處理器。

LayoutLMv2Processor 提供了準備模型所需的所有功能。

它首先使用 LayoutLMv2ImageProcessor 將文件影像調整為固定大小,並可選地應用 OCR 來獲取單詞和歸一化的邊界框。然後將這些資訊提供給 LayoutLMv2TokenizerLayoutLMv2TokenizerFast,後者將單詞和邊界框轉換為 token 級別的 input_idsattention_masktoken_type_idsbbox。可選地,可以提供整數 word_labels,它們被轉換為 token 級別的 labels,用於 token 分類任務(如 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] = False 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 )

此方法首先將 images 引數轉發給 call()。如果 LayoutLMv2ImageProcessor 使用 apply_ocr 設定為 True 進行初始化,它將把獲得的單詞和邊界框以及附加引數傳遞給 call() 並返回輸出以及調整大小的 images。如果 LayoutLMv2ImageProcessor 使用 apply_ocr 設定為 False 進行初始化,它將把使用者指定的單詞(text/text_pair)和 boxes 以及附加引數傳遞給 [__call__()](/docs/transformers/v4.53.3/en/model_doc/layoutlmv2#transformers.LayoutLMv2Tokenizer.__call__) 並返回輸出以及調整大小的 images

有關更多資訊,請參閱上述兩種方法的文件字串。

LayoutLMv2Model

class transformers.LayoutLMv2Model

< >

( config )

引數

  • config (LayoutLMv2Model) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法來載入模型權重。

裸的 Layoutlmv2 模型,輸出原始隱藏狀態,頂部沒有任何特定頭部。

此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的一般方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。

此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件中所有與一般用法和行為相關的內容。

前向

< >

( input_ids: typing.Optional[torch.LongTensor] = None bbox: typing.Optional[torch.LongTensor] = None image: typing.Optional[torch.FloatTensor] = 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 output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.BaseModelOutputWithPoolingtuple(torch.FloatTensor)

引數

  • input_ids (torch.LongTensor 形狀為 (batch_size, sequence_length), 可選) — 詞彙表中輸入序列 token 的索引。填充將預設被忽略。

    索引可以使用 AutoTokenizer 獲得。有關詳細資訊,請參閱 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是 input ID?

  • bbox (torch.LongTensor 形狀為 ((batch_size, sequence_length), 4), 可選) — 每個輸入序列 token 的邊界框。選擇範圍為 [0, config.max_2d_position_embeddings-1]。每個邊界框應為 (x0, y0, x1, y1) 格式的歸一化版本,其中 (x0, y0) 對應於邊界框左上角的位置,(x1, y1) 表示右下角的位置。
  • image (torch.FloatTensor 形狀為 (batch_size, num_channels, height, width)detectron.structures.ImageListtensors 形狀為 (batch_size, num_channels, height, width)) — 文件影像批次。
  • attention_mask (torch.FloatTensor 形狀為 (batch_size, sequence_length), 可選) — 避免在填充 token 索引上執行注意力的掩碼。掩碼值選擇範圍為 [0, 1]

    • 1 表示 token 未被掩碼
    • 0 表示 token 被掩碼

    什麼是注意力掩碼?

  • token_type_ids (torch.LongTensor 形狀為 (batch_size, sequence_length), 可選) — 分段 token 索引,用於指示輸入的第一個和第二個部分。索引選擇範圍為 [0, 1]

    • 0 對應於 句子 A token,
    • 1 對應於 句子 B token。

    什麼是 token 型別 ID?

  • position_ids (torch.LongTensor 形狀為 (batch_size, sequence_length), 可選) — 每個輸入序列 token 在位置嵌入中的位置索引。選擇範圍為 [0, config.n_positions - 1]

    什麼是位置 ID?

  • 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 索引轉換為相關向量有比模型內部嵌入查詢矩陣更多的控制,這將非常有用。
  • output_attentions (bool, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 attentions
  • output_hidden_states (bool, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 hidden_states
  • return_dict (bool, 可選) — 是否返回 ModelOutput 而不是純元組。

返回

transformers.modeling_outputs.BaseModelOutputWithPoolingtuple(torch.FloatTensor)

transformers.modeling_outputs.BaseModelOutputWithPoolingtorch.FloatTensor 元組(如果傳遞 return_dict=Falseconfig.return_dict=False),包含根據配置(LayoutLMv2Config)和輸入而變化的各種元素。

  • last_hidden_state (torch.FloatTensor, 形狀為 (batch_size, sequence_length, hidden_size)) — 模型最後一層輸出的隱藏狀態序列。

  • pooler_output (torch.FloatTensor 形狀為 (batch_size, hidden_size)) — 序列第一個 token(分類 token)的最後一層隱藏狀態,經過用於輔助預訓練任務的層進一步處理。例如,對於 BERT 家族的模型,這會在透過線性層和 tanh 啟用函式處理後返回分類 token。線性層權重在預訓練期間透過下一句預測(分類)目標進行訓練。

  • hidden_states (tuple(torch.FloatTensor), 可選, 當傳遞 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 元組(如果模型有嵌入層,則為嵌入輸出一個,每層輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor), 可選, 當傳遞 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 元組(每層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。

LayoutLMv2Model 前向方法,覆蓋了 __call__ 特殊方法。

儘管前向傳播的配方需要在該函式中定義,但此後應呼叫 Module 例項而不是該函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。

示例

>>> from transformers import AutoProcessor, LayoutLMv2Model, set_seed
>>> from PIL import Image
>>> import torch
>>> from datasets import load_dataset

>>> set_seed(0)

>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased")
>>> model = LayoutLMv2Model.from_pretrained("microsoft/layoutlmv2-base-uncased")


>>> dataset = load_dataset("hf-internal-testing/fixtures_docvqa")
>>> image = dataset["test"][0]["image"]

>>> encoding = processor(image, return_tensors="pt")

>>> outputs = model(**encoding)
>>> last_hidden_states = outputs.last_hidden_state

>>> last_hidden_states.shape
torch.Size([1, 342, 768])

LayoutLMv2ForSequenceClassification

class transformers.LayoutLMv2ForSequenceClassification

< >

( config )

引數

帶有序列分類頭部的 LayoutLMv2 模型(在 [CLS] token 的最終隱藏狀態、平均池化初始視覺嵌入和平均池化最終視覺嵌入的串聯之上新增一個線性層),例如用於文件影像分類任務,如 RVL-CDIP 資料集。

此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的一般方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。

此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件中所有與一般用法和行為相關的內容。

前向

< >

( input_ids: typing.Optional[torch.LongTensor] = None bbox: typing.Optional[torch.LongTensor] = None image: typing.Optional[torch.FloatTensor] = 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 ) transformers.modeling_outputs.SequenceClassifierOutput or tuple(torch.FloatTensor)

引數

  • input_ids (torch.LongTensor of shape batch_size, sequence_length) — 詞彙表中輸入序列標記的索引。

    可以使用AutoTokenizer獲取索引。有關詳細資訊,請參閱PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是輸入ID?

  • bbox (形狀為(batch_size, sequence_length, 4)torch.LongTensor可選) — 每個輸入序列標記的邊界框。選擇範圍為[0, config.max_2d_position_embeddings-1]。每個邊界框應為(x0, y0, x1, y1)格式的標準化版本,其中(x0, y0)對應於邊界框左上角的位置,(x1, y1)表示右下角的位置。
  • image (形狀為(batch_size, num_channels, height, width)torch.FloatTensor或其tensors形狀為(batch_size, num_channels, height, width)detectron.structures.ImageList) — 文件影像批次。
  • attention_mask (形狀為(batch_size, sequence_length)torch.FloatTensor可選) — 避免對填充標記索引執行注意力操作的掩碼。掩碼值選擇範圍為[0, 1]

    • 1表示未被掩蓋的標記,
    • 0表示被掩蓋的標記。

    什麼是注意力掩碼?

  • token_type_ids (形狀為batch_size, sequence_lengthtorch.LongTensor可選) — 段標記索引,用於指示輸入的第一個和第二個部分。索引選擇範圍為[0, 1]

    • 0對應於句子A標記,
    • 1對應於句子B標記。

    什麼是標記型別ID?

  • position_ids (形狀為batch_size, sequence_lengthtorch.LongTensor可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.max_position_embeddings - 1]

    什麼是位置ID?

  • head_mask (形狀為(num_heads,)(num_layers, num_heads)torch.FloatTensor可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇範圍為[0, 1]

    • 1表示頭部未被掩蓋
    • 0表示頭部被掩蓋
  • inputs_embeds (形狀為(batch_size, sequence_length, hidden_size)torch.FloatTensor可選) — 可選地,您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids。如果您想對如何將input_ids索引轉換為相關向量具有比模型內部嵌入查詢矩陣更多的控制權,這將很有用。
  • labels (形狀為(batch_size,)torch.LongTensor可選) — 用於計算序列分類/迴歸損失的標籤。索引應在[0, ..., config.num_labels - 1]之間。如果config.num_labels == 1,則計算迴歸損失(均方損失),如果config.num_labels > 1,則計算分類損失(交叉熵)。
  • output_attentions (bool可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
  • output_hidden_states (bool可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
  • return_dict (bool可選) — 是否返回ModelOutput而不是普通元組。

返回

transformers.modeling_outputs.SequenceClassifierOutputtuple(torch.FloatTensor)

一個transformers.modeling_outputs.SequenceClassifierOutputtorch.FloatTensor的元組(如果傳入return_dict=Falseconfig.return_dict=False),包含根據配置(LayoutLMv2Config)和輸入的不同元素。

  • 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=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 元組(如果模型有嵌入層,則為嵌入輸出一個,每層輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor), 可選, 當傳遞 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 元組(每層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。

LayoutLMv2ForSequenceClassification的forward方法覆蓋了__call__特殊方法。

儘管前向傳播的配方需要在該函式中定義,但此後應呼叫 Module 例項而不是該函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。

示例

>>> from transformers import AutoProcessor, LayoutLMv2ForSequenceClassification, set_seed
>>> from PIL import Image
>>> import torch
>>> from datasets import load_dataset

>>> set_seed(0)

>>> dataset = load_dataset("aharley/rvl_cdip", split="train", streaming=True)
>>> data = next(iter(dataset))
>>> image = data["image"].convert("RGB")

>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased")
>>> model = LayoutLMv2ForSequenceClassification.from_pretrained(
...     "microsoft/layoutlmv2-base-uncased", num_labels=dataset.info.features["label"].num_classes
... )

>>> encoding = processor(image, return_tensors="pt")
>>> sequence_label = torch.tensor([data["label"]])

>>> outputs = model(**encoding, labels=sequence_label)

>>> loss, logits = outputs.loss, outputs.logits
>>> predicted_idx = logits.argmax(dim=-1).item()
>>> predicted_answer = dataset.info.features["label"].names[4]
>>> predicted_idx, predicted_answer  # results are not good without further fine-tuning
(7, 'advertisement')

LayoutLMv2ForTokenClassification

class transformers.LayoutLMv2ForTokenClassification

< >

( config )

引數

LayoutLMv2模型,頂部帶有一個標記分類頭(隱藏狀態文字部分頂部的線性層),例如用於序列標註(資訊提取)任務,如FUNSDSROIECORDKleister-NDA

此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的一般方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。

此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件中所有與一般用法和行為相關的內容。

前向

< >

( input_ids: typing.Optional[torch.LongTensor] = None bbox: typing.Optional[torch.LongTensor] = None image: typing.Optional[torch.FloatTensor] = 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 ) transformers.modeling_outputs.TokenClassifierOutput or tuple(torch.FloatTensor)

引數

  • input_ids (形狀為batch_size, sequence_lengthtorch.LongTensor) — 詞彙表中輸入序列標記的索引。

    可以使用AutoTokenizer獲取索引。有關詳細資訊,請參閱PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是輸入ID?

  • bbox (形狀為(batch_size, sequence_length, 4)torch.LongTensor可選) — 每個輸入序列標記的邊界框。選擇範圍為[0, config.max_2d_position_embeddings-1]。每個邊界框應為(x0, y0, x1, y1)格式的標準化版本,其中(x0, y0)對應於邊界框左上角的位置,(x1, y1)表示右下角的位置。
  • image (形狀為(batch_size, num_channels, height, width)torch.FloatTensor或其tensors形狀為(batch_size, num_channels, height, width)detectron.structures.ImageList) — 文件影像批次。
  • attention_mask (形狀為(batch_size, sequence_length)torch.FloatTensor可選) — 避免對填充標記索引執行注意力操作的掩碼。掩碼值選擇範圍為[0, 1]

    • 1表示未被掩蓋的標記,
    • 0表示被掩蓋的標記。

    什麼是注意力掩碼?

  • token_type_ids (形狀為batch_size, sequence_lengthtorch.LongTensor可選) — 段標記索引,用於指示輸入的第一個和第二個部分。索引選擇範圍為[0, 1]

    • 0對應於句子A標記,
    • 1對應於句子B標記。

    什麼是標記型別ID?

  • position_ids (形狀為batch_size, sequence_lengthtorch.LongTensor可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.max_position_embeddings - 1]

    什麼是位置ID?

  • head_mask (形狀為(num_heads,)(num_layers, num_heads)torch.FloatTensor可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇範圍為[0, 1]

    • 1表示頭部未被掩蓋
    • 0表示頭部被掩蓋
  • inputs_embeds (形狀為(batch_size, sequence_length, hidden_size)torch.FloatTensor可選) — 可選地,您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids。如果您想對如何將input_ids索引轉換為相關向量具有比模型內部嵌入查詢矩陣更多的控制權,這將很有用。
  • labels (形狀為(batch_size, sequence_length)torch.LongTensor可選) — 用於計算標記分類損失的標籤。索引應在[0, ..., config.num_labels - 1]之間。
  • output_attentions (bool可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
  • output_hidden_states (bool可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
  • return_dict (bool可選) — 是否返回ModelOutput而不是普通元組。

返回

transformers.modeling_outputs.TokenClassifierOutputtuple(torch.FloatTensor)

一個transformers.modeling_outputs.TokenClassifierOutputtorch.FloatTensor的元組(如果傳入return_dict=Falseconfig.return_dict=False),包含根據配置(LayoutLMv2Config)和輸入的不同元素。

  • loss (形狀為 (1,)torch.FloatTensor可選,當提供 labels 時返回) — 分類損失。

  • logits (形狀為 (batch_size, sequence_length, config.num_labels)torch.FloatTensor) — 分類分數(SoftMax 之前)。

  • hidden_states (tuple(torch.FloatTensor), 可選, 當傳遞 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 元組(如果模型有嵌入層,則為嵌入輸出一個,每層輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor), 可選, 當傳遞 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 元組(每層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。

LayoutLMv2ForTokenClassification的forward方法覆蓋了__call__特殊方法。

儘管前向傳播的配方需要在該函式中定義,但此後應呼叫 Module 例項而不是該函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。

示例

>>> from transformers import AutoProcessor, LayoutLMv2ForTokenClassification, set_seed
>>> from PIL import Image
>>> from datasets import load_dataset

>>> set_seed(0)

>>> datasets = load_dataset("nielsr/funsd", split="test")
>>> labels = datasets.features["ner_tags"].feature.names
>>> id2label = {v: k for v, k in enumerate(labels)}

>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased", revision="no_ocr")
>>> model = LayoutLMv2ForTokenClassification.from_pretrained(
...     "microsoft/layoutlmv2-base-uncased", num_labels=len(labels)
... )

>>> data = datasets[0]
>>> image = Image.open(data["image_path"]).convert("RGB")
>>> words = data["words"]
>>> boxes = data["bboxes"]  # make sure to normalize your bounding boxes
>>> word_labels = data["ner_tags"]
>>> encoding = processor(
...     image,
...     words,
...     boxes=boxes,
...     word_labels=word_labels,
...     padding="max_length",
...     truncation=True,
...     return_tensors="pt",
... )

>>> outputs = model(**encoding)
>>> logits, loss = outputs.logits, outputs.loss

>>> predicted_token_class_ids = logits.argmax(-1)
>>> predicted_tokens_classes = [id2label[t.item()] for t in predicted_token_class_ids[0]]
>>> predicted_tokens_classes[:5]  # results are not good without further fine-tuning
['I-HEADER', 'I-HEADER', 'I-QUESTION', 'I-HEADER', 'I-QUESTION']

LayoutLMv2ForQuestionAnswering

class transformers.LayoutLMv2ForQuestionAnswering

< >

( config has_visual_segment_embedding = True )

引數

  • config (LayoutLMv2ForQuestionAnswering) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視from_pretrained()方法載入模型權重。
  • has_visual_segment_embedding (bool可選,預設為True) — 是否新增視覺段嵌入。

Layoutlmv2 Transformer,頂部帶有一個跨度分類頭,用於像SQuAD這樣的抽取式問答任務(隱藏狀態輸出頂部的一個線性層,用於計算span start logitsspan end logits)。

此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的一般方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。

此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件中所有與一般用法和行為相關的內容。

前向

< >

( input_ids: typing.Optional[torch.LongTensor] = None bbox: typing.Optional[torch.LongTensor] = None image: typing.Optional[torch.FloatTensor] = 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 ) transformers.modeling_outputs.QuestionAnsweringModelOutput or tuple(torch.FloatTensor)

引數

  • input_ids (形狀為batch_size, sequence_lengthtorch.LongTensor) — 詞彙表中輸入序列標記的索引。

    可以使用AutoTokenizer獲取索引。有關詳細資訊,請參閱PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是輸入ID?

  • bbox (形狀為(batch_size, sequence_length, 4)torch.LongTensor可選) — 每個輸入序列標記的邊界框。選擇範圍為[0, config.max_2d_position_embeddings-1]。每個邊界框應為(x0, y0, x1, y1)格式的標準化版本,其中(x0, y0)對應於邊界框左上角的位置,(x1, y1)表示右下角的位置。
  • image (形狀為(batch_size, num_channels, height, width)torch.FloatTensor或其tensors形狀為(batch_size, num_channels, height, width)detectron.structures.ImageList) — 文件影像批次。
  • attention_mask (形狀為(batch_size, sequence_length)torch.FloatTensor可選) — 避免對填充標記索引執行注意力操作的掩碼。掩碼值選擇範圍為[0, 1]

    • 1表示未被掩蓋的標記,
    • 0表示被掩蓋的標記。

    什麼是注意力掩碼?

  • token_type_ids (形狀為batch_size, sequence_lengthtorch.LongTensor可選) — 段標記索引,用於指示輸入的第一個和第二個部分。索引選擇範圍為[0, 1]

    • 0對應於句子A標記,
    • 1對應於句子B標記。

    什麼是標記型別ID?

  • position_ids (形狀為batch_size, sequence_lengthtorch.LongTensor可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.max_position_embeddings - 1]

    什麼是位置ID?

  • head_mask (形狀為(num_heads,)(num_layers, num_heads)torch.FloatTensor可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇範圍為[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 物件而不是普通元組。

返回

transformers.modeling_outputs.QuestionAnsweringModelOutputtuple(torch.FloatTensor)

transformers.modeling_outputs.QuestionAnsweringModelOutputtorch.FloatTensor 元組(如果傳遞了 return_dict=Falseconfig.return_dict=False),包含根據配置(LayoutLMv2Config)和輸入的不同元素。

  • 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=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 元組(如果模型有嵌入層,則為嵌入輸出一個,每層輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor), 可選, 當傳遞 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 元組(每層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。

LayoutLMv2ForQuestionAnswering 的 forward 方法,它覆蓋了 __call__ 特殊方法。

儘管前向傳播的配方需要在該函式中定義,但此後應呼叫 Module 例項而不是該函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。

示例

在下面的示例中,我們給 LayoutLMv2 模型一張圖片(包含文字)並向它提問。它會給出它認為的答案的預測(從圖片中解析出的文字中答案的跨度)。

>>> from transformers import AutoProcessor, LayoutLMv2ForQuestionAnswering, set_seed
>>> import torch
>>> from PIL import Image
>>> from datasets import load_dataset

>>> set_seed(0)
>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased")
>>> model = LayoutLMv2ForQuestionAnswering.from_pretrained("microsoft/layoutlmv2-base-uncased")

>>> dataset = load_dataset("hf-internal-testing/fixtures_docvqa")
>>> image = dataset["test"][0]["image"]
>>> question = "When is coffee break?"
>>> encoding = processor(image, question, return_tensors="pt")

>>> outputs = model(**encoding)
>>> predicted_start_idx = outputs.start_logits.argmax(-1).item()
>>> predicted_end_idx = outputs.end_logits.argmax(-1).item()
>>> predicted_start_idx, predicted_end_idx
(30, 191)

>>> predicted_answer_tokens = encoding.input_ids.squeeze()[predicted_start_idx : predicted_end_idx + 1]
>>> predicted_answer = processor.tokenizer.decode(predicted_answer_tokens)
>>> predicted_answer  # results are not good without further fine-tuning
'44 a. m. to 12 : 25 p. m. 12 : 25 to 12 : 58 p. m. 12 : 58 to 4 : 00 p. m. 2 : 00 to 5 : 00 p. m. coffee break coffee will be served for men and women in the lobby adjacent to exhibit area. please move into exhibit area. ( exhibits open ) trrf general session ( part | ) presiding : lee a. waller trrf vice president “ introductory remarks ” lee a. waller, trrf vice presi - dent individual interviews with trrf public board members and sci - entific advisory council mem - bers conducted by trrf treasurer philip g. kuehn to get answers which the public refrigerated warehousing industry is looking for. plus questions from'
>>> target_start_index = torch.tensor([7])
>>> target_end_index = torch.tensor([14])
>>> outputs = model(**encoding, start_positions=target_start_index, end_positions=target_end_index)
>>> predicted_answer_span_start = outputs.start_logits.argmax(-1).item()
>>> predicted_answer_span_end = outputs.end_logits.argmax(-1).item()
>>> predicted_answer_span_start, predicted_answer_span_end
(30, 191)
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.