Transformers 文件
BROS
並獲得增強的文件體驗
開始使用
BROS
概述
BROS 模型是由 Teakgyu Hong、Donghyun Kim、Mingi Ji、Wonseok Hwang、Daehyun Nam、Sungrae Park 在 BROS: A Pre-trained Language Model Focusing on Text and Layout for Better Key Information Extraction from Documents 中提出的。
BROS 代表 *BERT Relying On Spatiality*。它是一個僅編碼器Transformer模型,以令牌序列及其邊界框作為輸入,並輸出隱藏狀態序列。BROS 編碼相對空間資訊而不是使用絕對空間資訊。
它透過兩個目標進行預訓練:BERT 中使用的令牌掩碼語言建模目標(TMLM)和一種新穎的區域掩碼語言建模目標(AMLM)。在 TMLM 中,令牌被隨機掩碼,模型使用空間資訊和其他未掩碼的令牌來預測被掩碼的令牌。AMLM 是 TMLM 的 2D 版本。它隨機掩碼文字令牌並使用與 TMLM 相同的資訊進行預測,但它掩碼的是文字塊(區域)。
BrosForTokenClassification
在 BrosModel 之上有一個簡單的線性層。它預測每個令牌的標籤。BrosSpadeEEForTokenClassification
在 BrosModel 之上有一個 initial_token_classifier
和 subsequent_token_classifier
。initial_token_classifier
用於預測每個實體的第一個令牌,而 subsequent_token_classifier
用於預測實體內的下一個令牌。BrosSpadeELForTokenClassification
在 BrosModel 之上有一個 entity_linker
。entity_linker
用於預測兩個實體之間的關係。
BrosForTokenClassification
和 BrosSpadeEEForTokenClassification
本質上執行相同的工作。然而,BrosForTokenClassification
假設輸入令牌是完美序列化的(由於它們存在於 2D 空間中,這是一個非常具有挑戰性的任務),而 BrosSpadeEEForTokenClassification
允許在處理序列化錯誤方面具有更大的靈活性,因為它從一個令牌預測下一個連線令牌。
BrosSpadeELForTokenClassification
執行實體內連結任務。如果兩個實體之間存在某種關係,它會預測從一個令牌(屬於一個實體)到另一個令牌(屬於另一個實體)的關係。
BROS 在 FUNSD、SROIE、CORD 和 SciTSR 等關鍵資訊提取 (KIE) 基準測試中取得了可比或更好的結果,而無需依賴明確的視覺特徵。
論文摘要如下:
從文件影像中提取關鍵資訊 (KIE) 需要理解二維 (2D) 空間中文字的上下文和空間語義。許多最近的研究試圖透過開發預訓練語言模型來解決該任務,這些模型側重於將文件影像中的視覺特徵與文字及其佈局相結合。另一方面,本文透過迴歸基本:文字和佈局的有效組合來解決該問題。具體來說,我們提出了一種名為 BROS (BERT Relying On Spatiality) 的預訓練語言模型,該模型編碼 2D 空間中文字的相對位置,並透過區域掩碼策略從無標籤文件中學習。憑藉這種用於理解 2D 空間中文字的最佳化訓練方案,BROS 在四個 KIE 基準測試 (FUNSD、SROIE、CORD 和 SciTSR) 中顯示出與以前方法相當或更好的效能,而無需依賴視覺特徵。本文還揭示了 KIE 任務中的兩個真實世界挑戰——(1) 最小化不正確的文字排序導致的錯誤,以及 (2) 從更少的下游示例中高效學習——並證明了 BROS 相對於以前方法的優越性。*
此模型由 jinho8345 貢獻。原始程式碼可在 此處 找到。
使用技巧和示例
- forward() 需要
input_ids
和bbox
(邊界框)。每個邊界框應為 (x0, y0, x1, y1) 格式(左上角,右下角)。邊界框的獲取取決於外部 OCR 系統。x
座標應按文件影像寬度歸一化,y
座標應按文件影像高度歸一化。
def expand_and_normalize_bbox(bboxes, doc_width, doc_height):
# here, bboxes are numpy array
# Normalize bbox -> 0 ~ 1
bboxes[:, [0, 2]] = bboxes[:, [0, 2]] / width
bboxes[:, [1, 3]] = bboxes[:, [1, 3]] / height
- [
~transformers.BrosForTokenClassification.forward
,~transformers.BrosSpadeEEForTokenClassification.forward
,~transformers.BrosSpadeEEForTokenClassification.forward
] 不僅需要input_ids
和bbox
,還需要box_first_token_mask
用於損失計算。它是一個掩碼,用於過濾掉每個框的非第一個令牌。您可以透過在從單詞建立input_ids
時儲存邊界框的起始令牌索引來獲取此掩碼。您可以使用以下程式碼建立box_first_token_mask
,
def make_box_first_token_mask(bboxes, words, tokenizer, max_seq_length=512):
box_first_token_mask = np.zeros(max_seq_length, dtype=np.bool_)
# encode(tokenize) each word from words (list[str])
input_ids_list: list[list[int]] = [tokenizer.encode(e, add_special_tokens=False) for e in words]
# get the length of each box
tokens_length_list: list[int] = [len(l) for l in input_ids_list]
box_end_token_indices = np.array(list(itertools.accumulate(tokens_length_list)))
box_start_token_indices = box_end_token_indices - np.array(tokens_length_list)
# filter out the indices that are out of max_seq_length
box_end_token_indices = box_end_token_indices[box_end_token_indices < max_seq_length - 1]
if len(box_start_token_indices) > len(box_end_token_indices):
box_start_token_indices = box_start_token_indices[: len(box_end_token_indices)]
# set box_start_token_indices to True
box_first_token_mask[box_start_token_indices] = True
return box_first_token_mask
資源
- 演示指令碼可在 此處 找到。
BrosConfig
class transformers.BrosConfig
< 源 >( vocab_size = 30522 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-12 pad_token_id = 0 dim_bbox = 8 bbox_scale = 100.0 n_relations = 1 classifier_dropout_prob = 0.1 **kwargs )
引數
- vocab_size (
int
, 可選, 預設為 30522) — Bros 模型的詞彙表大小。定義了呼叫 BrosModel 或TFBrosModel
時可以由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 (
str
或Callable
, 可選, 預設為"gelu"
) — 編碼器和池化器中的非線性啟用函式(函式或字串)。如果是字串,則支援"gelu"
、"relu"
、"silu"
和"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) — 呼叫 BrosModel 或TFBrosModel
時傳遞的token_type_ids
的詞彙表大小。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的截斷正態初始化器的標準差。 - layer_norm_eps (
float
, 可選, 預設為 1e-12) — 層歸一化層使用的 epsilon 值。 - pad_token_id (
int
, 可選, 預設為 0) — 令牌詞彙表中填充令牌的索引。 - dim_bbox (
int
, 可選, 預設為 8) — 邊界框座標的維度。(x0, y1, x1, y0, x1, y1, x0, y1) - bbox_scale (
float
, 可選, 預設為 100.0) — 邊界框座標的比例因子。 - n_relations (
int
, 可選, 預設為 1) — SpadeEE(實體提取)、SpadeEL(實體連結)頭的關係數量。 - classifier_dropout_prob (
float
, 可選, 預設為 0.1) — 分類器頭的 dropout 比率。
這是配置類,用於儲存 BrosModel 或 TFBrosModel
的配置。它用於根據指定的引數例項化 Bros 模型,定義模型架構。使用預設值例項化配置將生成與 Bros jinho8345/bros-base-uncased 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import BrosConfig, BrosModel
>>> # Initializing a BROS jinho8345/bros-base-uncased style configuration
>>> configuration = BrosConfig()
>>> # Initializing a model from the jinho8345/bros-base-uncased style configuration
>>> model = BrosModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
BrosProcessor
class transformers.BrosProcessor
< 源 >( tokenizer = None **kwargs )
構造一個 Bros 處理器,它封裝了一個 BERT 分詞器。
BrosProcessor 提供了 BertTokenizerFast 的所有功能。有關更多資訊,請參閱 call() 和 decode()
的文件字串。
__call__
< 源 >( text: typing.Union[str, list[str], list[list[str]]] = 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 )
此方法使用 BertTokenizerFast.call() 來準備文字供模型使用。
有關更多資訊,請參閱上述兩種方法的文件字串。
BrosModel
class transformers.BrosModel
< 源 >( config add_pooling_layer = True )
引數
- config (BrosModel) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法以載入模型權重。
- add_pooling_layer (
bool
, 可選, 預設為True
) — 是否新增池化層
裸 Bros 模型,不帶任何特定頭部,直接輸出原始隱藏狀態。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 的子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = None bbox: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None encoder_hidden_states: typing.Optional[torch.Tensor] = None encoder_attention_mask: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[list[torch.FloatTensor]] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutputWithPoolingAndCrossAttentions 或 tuple(torch.FloatTensor)
引數
- input_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 詞彙表中輸入序列標記的索引。預設情況下會忽略填充。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參見 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- bbox (形狀為 ‘(batch_size, num_boxes, 4)’ 的
'torch.FloatTensor'
) — 輸入序列中每個標記的邊界框座標。每個邊界框是四個值(x1, y1, x2, y2)的列表,其中 (x1, y1) 是左上角,(x2, y2) 是邊界框的右下角。 - attention_mask (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 掩碼,用於避免對填充標記索引執行注意力。掩碼值選自[0, 1]
:- 1 表示未被遮蓋的標記,
- 0 表示被遮蓋的標記。
- token_type_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 分段標記索引,用於指示輸入的第一個和第二個部分。索引選自[0, 1]
:- 0 對應於句子 A 標記,
- 1 對應於句子 B 標記。
- position_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 位置嵌入中每個輸入序列標記位置的索引。選自範圍[0, config.n_positions - 1]
。 - head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.Tensor
,可選) — 掩碼,用於使自注意力模組的選定頭部無效。掩碼值選自[0, 1]
:- 1 表示頭部未被遮蓋,
- 0 表示頭部被遮蓋。
- inputs_embeds (形狀為
(batch_size, sequence_length, hidden_size)
的torch.Tensor
,可選) — (可選)您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果您希望對如何將input_ids
索引轉換為關聯向量擁有比模型內部嵌入查詢矩陣更多的控制權,則此功能很有用。 - encoder_hidden_states (形狀為
(batch_size, sequence_length, hidden_size)
的torch.Tensor
,可選) — 編碼器最後一層輸出的隱藏狀態序列。如果模型配置為解碼器,則在交叉注意力中使用。 - encoder_attention_mask (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 掩碼,用於避免對編碼器輸入中的填充標記索引執行注意力。如果模型配置為解碼器,則此掩碼在交叉注意力中使用。掩碼值選自[0, 1]
:- 1 表示未被遮蓋的標記,
- 0 表示被遮蓋的標記。
- past_key_values (
list[torch.FloatTensor]
,可選) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個 Cache 例項,請參閱我們的 kv 快取指南;
- 長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含兩個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量。這也稱為舊版快取格式。
模型將輸出與輸入相同的快取格式。如果未傳遞
past_key_values
,則將返回舊版快取格式。如果使用
past_key_values
,使用者可以選擇只輸入形狀為(batch_size, 1)
的最後一個input_ids
(那些沒有將其過去的鍵值狀態提供給此模型的),而不是所有形狀為(batch_size, sequence_length)
的input_ids
。 - use_cache (
bool
,可選) — 如果設定為True
,則返回past_key_values
鍵值狀態,並可用於加速解碼(參見past_key_values
)。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關詳細資訊,請參見返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關詳細資訊,請參見返回張量下的hidden_states
。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通元組。
返回
transformers.modeling_outputs.BaseModelOutputWithPoolingAndCrossAttentions 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutputWithPoolingAndCrossAttentions 或 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置 (BrosConfig) 和輸入的不同元素。
-
last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, hidden_size)
) — 模型最後一層輸出的隱藏狀態序列。 -
pooler_output (形狀為
(batch_size, hidden_size)
的torch.FloatTensor
) — 經過用於輔助預訓練任務的層進一步處理後,序列中第一個標記(分類標記)的最後一層隱藏狀態。例如,對於 BERT 家族模型,這會在經過線性層和 tanh 啟用函式處理後返回分類標記。線性層權重在預訓練期間根據下一個句子預測(分類)目標進行訓練。 -
hidden_states (
tuple(torch.FloatTensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組(如果模型有嵌入層,則一個用於嵌入輸出,加上每個層輸出一個),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
,可選,當傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
元組(每個層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple(torch.FloatTensor)
,可選,當傳遞output_attentions=True
和config.add_cross_attention=True
或config.output_attentions=True
時返回) —torch.FloatTensor
元組(每個層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
-
past_key_values (
Cache
,可選,當傳遞use_cache=True
或config.use_cache=True
時返回) — 這是一個 Cache 例項。有關詳細資訊,請參閱我們的 kv 快取指南。包含預計算的隱藏狀態(自注意力塊中的鍵和值,如果
config.is_encoder_decoder=True
,則可選地在交叉注意力塊中),可用於(參見past_key_values
輸入)加速順序解碼。
BrosModel 的前向方法,覆蓋了 __call__
特殊方法。
儘管前向傳遞的配方需要在此函式中定義,但此後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> import torch
>>> from transformers import BrosProcessor, BrosModel
>>> processor = BrosProcessor.from_pretrained("jinho8345/bros-base-uncased")
>>> model = BrosModel.from_pretrained("jinho8345/bros-base-uncased")
>>> encoding = processor("Hello, my dog is cute", add_special_tokens=False, return_tensors="pt")
>>> bbox = torch.tensor([[[0, 0, 1, 1]]]).repeat(1, encoding["input_ids"].shape[-1], 1)
>>> encoding["bbox"] = bbox
>>> outputs = model(**encoding)
>>> last_hidden_states = outputs.last_hidden_state
BrosForTokenClassification
class transformers.BrosForTokenClassification
< source >( config )
引數
- config (BrosForTokenClassification) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型關聯的權重,只會載入配置。檢視 from_pretrained() 方法以載入模型權重。
Bros Transformer,頂部帶有一個標記分類頭(隱藏狀態輸出頂部的線性層),例如用於命名實體識別(NER)任務。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 的子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = None bbox: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None bbox_first_token_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.TokenClassifierOutput 或 tuple(torch.FloatTensor)
引數
- input_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 詞彙表中輸入序列標記的索引。預設情況下會忽略填充。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參見 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- bbox (形狀為 ‘(batch_size, num_boxes, 4)’ 的
'torch.FloatTensor'
) — 輸入序列中每個標記的邊界框座標。每個邊界框是四個值(x1, y1, x2, y2)的列表,其中 (x1, y1) 是左上角,(x2, y2) 是邊界框的右下角。 - attention_mask (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 掩碼,用於避免對填充標記索引執行注意力。掩碼值選自[0, 1]
:- 1 表示未被遮蓋的標記,
- 0 表示被遮蓋的標記。
- bbox_first_token_mask (形狀為
(batch_size, sequence_length)
的torch.FloatTensor
,可選) — 掩碼,用於指示每個邊界框的第一個標記。掩碼值選自[0, 1]
:- 1 表示未被遮蓋的標記,
- 0 表示被遮蓋的標記。
- token_type_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 分段標記索引,用於指示輸入的第一個和第二個部分。索引選自[0, 1]
:- 0 對應於句子 A 標記,
- 1 對應於句子 B 標記。
- position_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 位置嵌入中每個輸入序列標記位置的索引。選自範圍[0, config.n_positions - 1]
。 - head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.Tensor
,可選) — 掩碼,用於使自注意力模組的選定頭部無效。掩碼值選自[0, 1]
:- 1 表示頭部未被遮蓋,
- 0 表示頭部被遮蓋。
- inputs_embeds (形狀為
(batch_size, sequence_length, hidden_size)
的torch.Tensor
,可選) — (可選)您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果您希望對如何將input_ids
索引轉換為關聯向量擁有比模型內部嵌入查詢矩陣更多的控制權,則此功能很有用。 - labels (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 用於計算掩碼語言建模損失的標籤。索引應在[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 而不是普通元組。
返回
transformers.modeling_outputs.TokenClassifierOutput 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.TokenClassifierOutput 或 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置 (BrosConfig) 和輸入的不同元素。
-
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
BrosForTokenClassification 的前向方法,覆蓋了 __call__
特殊方法。
儘管前向傳遞的配方需要在此函式中定義,但此後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> import torch
>>> from transformers import BrosProcessor, BrosForTokenClassification
>>> processor = BrosProcessor.from_pretrained("jinho8345/bros-base-uncased")
>>> model = BrosForTokenClassification.from_pretrained("jinho8345/bros-base-uncased")
>>> encoding = processor("Hello, my dog is cute", add_special_tokens=False, return_tensors="pt")
>>> bbox = torch.tensor([[[0, 0, 1, 1]]]).repeat(1, encoding["input_ids"].shape[-1], 1)
>>> encoding["bbox"] = bbox
>>> outputs = model(**encoding)
BrosSpadeEEForTokenClassification
class transformers.BrosSpadeEEForTokenClassification
< source >( config )
引數
- config (BrosSpadeEEForTokenClassification) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型關聯的權重,只會載入配置。檢視 from_pretrained() 方法以載入模型權重。
Bros 模型頂部帶有一個標記分類頭(隱藏狀態輸出頂部的 initial_token_layers 和 subsequent_token_layer),例如用於命名實體識別(NER)任務。initial_token_classifier 用於預測每個實體的第一個標記,而 subsequent_token_classifier 用於預測實體內的後續標記。與 BrosForTokenClassification 相比,該模型對序列化錯誤更健壯,因為它從一個標記預測下一個標記。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 的子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = None bbox: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None bbox_first_token_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None initial_token_labels: typing.Optional[torch.Tensor] = None subsequent_token_labels: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.bros.modeling_bros.BrosSpadeOutput
或 tuple(torch.FloatTensor)
引數
- input_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 詞彙表中輸入序列標記的索引。預設情況下會忽略填充。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參見 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- bbox (形狀為 ‘(batch_size, num_boxes, 4)’ 的
'torch.FloatTensor'
) — 輸入序列中每個標記的邊界框座標。每個邊界框是四個值(x1, y1, x2, y2)的列表,其中 (x1, y1) 是左上角,(x2, y2) 是邊界框的右下角。 - attention_mask (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 掩碼,用於避免對填充標記索引執行注意力。掩碼值選自[0, 1]
:- 1 表示未被遮蓋的標記,
- 0 表示被遮蓋的標記。
- bbox_first_token_mask (形狀為
(batch_size, sequence_length)
的torch.FloatTensor
,可選) — 掩碼,用於指示每個邊界框的第一個標記。掩碼值選自[0, 1]
:- 1 表示未被遮蓋的標記,
- 0 表示被遮蓋的標記。
- token_type_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 分段標記索引,用於指示輸入的第一個和第二個部分。索引選自[0, 1]
:- 0 對應於句子 A 標記,
- 1 對應於句子 B 標記。
- position_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 位置嵌入中每個輸入序列標記位置的索引。選自範圍[0, config.n_positions - 1]
。 - head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.Tensor
,可選) — 掩碼,用於使自注意力模組的選定頭部無效。掩碼值選自[0, 1]
:- 1 表示頭部未被遮蓋,
- 0 表示頭部被遮蓋。
- inputs_embeds (形狀為
(batch_size, sequence_length, hidden_size)
的torch.Tensor
,可選) — (可選)您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果您希望對如何將input_ids
索引轉換為關聯向量擁有比模型內部嵌入查詢矩陣更多的控制權,則此功能很有用。 - initial_token_labels (形狀為
(batch_size, sequence_length)
的torch.LongTensor
,可選) — 初始標記分類的標籤。 - subsequent_token_labels (形狀為
(batch_size, sequence_length)
的torch.LongTensor
,可選) — 後續標記分類的標籤。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關詳細資訊,請參見返回張量下的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有層的隱藏狀態。有關詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, optional) — 是否返回 ModelOutput 而不是普通元組。
返回
transformers.models.bros.modeling_bros.BrosSpadeOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.bros.modeling_bros.BrosSpadeOutput
或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置(BrosConfig)和輸入的不同元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失。 -
initial_token_logits (形狀為
(batch_size, sequence_length, config.num_labels)
的torch.FloatTensor
) — 實體初始令牌的分類分數(SoftMax 之前)。 -
subsequent_token_logits (形狀為
(batch_size, sequence_length, sequence_length+1)
的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 後的注意力權重,用於計算自注意力頭中的加權平均值。
BrosSpadeEEForTokenClassification 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳遞的配方需要在此函式中定義,但此後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> import torch
>>> from transformers import BrosProcessor, BrosSpadeEEForTokenClassification
>>> processor = BrosProcessor.from_pretrained("jinho8345/bros-base-uncased")
>>> model = BrosSpadeEEForTokenClassification.from_pretrained("jinho8345/bros-base-uncased")
>>> encoding = processor("Hello, my dog is cute", add_special_tokens=False, return_tensors="pt")
>>> bbox = torch.tensor([[[0, 0, 1, 1]]]).repeat(1, encoding["input_ids"].shape[-1], 1)
>>> encoding["bbox"] = bbox
>>> outputs = model(**encoding)
BrosSpadeELForTokenClassification
class transformers.BrosSpadeELForTokenClassification
< source >( config )
引數
- config (BrosSpadeELForTokenClassification) — 具有模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請查閱 from_pretrained() 方法以載入模型權重。
Bros 模型,頂部帶有一個令牌分類頭(在隱藏狀態輸出之上有一個 entity_linker 層),例如用於實體連結。entity_linker 用於預測實體內部連結(一個實體到另一個實體)。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 的子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = None bbox: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None bbox_first_token_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.TokenClassifierOutput 或 tuple(torch.FloatTensor)
引數
- input_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
, 可選) — 詞彙表中輸入序列令牌的索引。預設情況下會忽略填充。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- bbox (形狀為 ‘(batch_size, num_boxes, 4)’ 的 ‘torch.FloatTensor’) — 輸入序列中每個令牌的邊界框座標。每個邊界框是一個包含四個值 (x1, y1, x2, y2) 的列表,其中 (x1, y1) 是邊界框的左上角,(x2, y2) 是邊界框的右下角。
- attention_mask (形狀為
(batch_size, sequence_length)
的torch.Tensor
, 可選) — 用於避免對填充令牌索引執行注意力的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示未被掩碼的令牌,
- 0 表示被掩碼的令牌。
- bbox_first_token_mask (形狀為
(batch_size, sequence_length)
的torch.FloatTensor
, 可選) — 用於指示每個邊界框的第一個令牌的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示未被掩碼的令牌,
- 0 表示被掩碼的令牌。
- token_type_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
, 可選) — 分段令牌索引,用於指示輸入的第一個和第二個部分。索引在[0, 1]
中選擇:- 0 對應於 句子 A 令牌,
- 1 對應於 句子 B 令牌。
- position_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
, 可選) — 每個輸入序列令牌在位置嵌入中的位置索引。在[0, config.n_positions - 1]
範圍內選擇。 - head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.Tensor
, 可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示頭部未被掩碼,
- 0 表示頭部被掩碼。
- inputs_embeds (形狀為
(batch_size, sequence_length, hidden_size)
的torch.Tensor
, 可選) — 可選地,你可以直接傳遞嵌入表示,而不是傳遞input_ids
。如果你想更精細地控制如何將input_ids
索引轉換為關聯向量,而不是使用模型內部的嵌入查詢矩陣,這會很有用。 - labels (形狀為
(batch_size, sequence_length)
的torch.Tensor
, 可選) — 用於計算掩碼語言建模損失的標籤。索引應在[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 而不是普通元組。
返回
transformers.modeling_outputs.TokenClassifierOutput 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.TokenClassifierOutput 或 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置 (BrosConfig) 和輸入的不同元素。
-
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
BrosSpadeELForTokenClassification 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳遞的配方需要在此函式中定義,但此後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> import torch
>>> from transformers import BrosProcessor, BrosSpadeELForTokenClassification
>>> processor = BrosProcessor.from_pretrained("jinho8345/bros-base-uncased")
>>> model = BrosSpadeELForTokenClassification.from_pretrained("jinho8345/bros-base-uncased")
>>> encoding = processor("Hello, my dog is cute", add_special_tokens=False, return_tensors="pt")
>>> bbox = torch.tensor([[[0, 0, 1, 1]]]).repeat(1, encoding["input_ids"].shape[-1], 1)
>>> encoding["bbox"] = bbox
>>> outputs = model(**encoding)