Transformers 文件
LUKE
並獲得增強的文件體驗
開始使用
LUKE
概述
LUKE 模型由 Ikuya Yamada、Akari Asai、Hiroyuki Shindo、Hideaki Takeda 和 Yuji Matsumoto 在論文 《LUKE: Deep Contextualized Entity Representations with Entity-aware Self-attention》 中提出。它基於 RoBERTa,並增加了實體嵌入以及實體感知自注意力機制,這有助於提高在各種涉及實體推理的下游任務(如命名實體識別、抽取式和完形填空式問答、實體型別化和關係分類)上的效能。
論文摘要如下:
實體表示在涉及實體的自然語言任務中很有用。在本文中,我們提出了基於雙向 Transformer 的新的預訓練詞和實體的上下文表示。該模型將給定文字中的詞和實體視為獨立的 token,並輸出它們的上下文表示。我們的模型使用一種基於 BERT 的掩碼語言模型的新預訓練任務進行訓練。該任務涉及預測從維基百科中檢索的大型實體標註語料庫中隨機掩碼的詞和實體。我們還提出了一種實體感知自注意力機制,它是 Transformer 自注意力機制的擴充套件,在計算注意力分數時會考慮 token 的型別(詞或實體)。該模型在廣泛的實體相關任務上取得了令人印象深刻的經驗效能。特別地,它在五個著名的資料集上獲得了最先進的結果:Open Entity (實體型別化)、TACRED (關係分類)、CoNLL-2003 (命名實體識別)、ReCoRD (完形填空式問答) 和 SQuAD 1.1 (抽取式問答)。
此模型由 ikuyamada 和 nielsr 貢獻。原始程式碼可以在 此處 找到。
使用技巧
此實現與 RobertaModel 相同,但增加了實體嵌入以及實體感知自注意力機制,從而提高了在涉及實體推理任務上的效能。
LUKE 將實體作為輸入 token;因此,它需要額外的輸入
entity_ids
、entity_attention_mask
、entity_token_type_ids
和entity_position_ids
。你可以使用 LukeTokenizer 獲取這些輸入。LukeTokenizer 需要額外的輸入
entities
和entity_spans
(實體在輸入文字中基於字元的起始和結束位置)。entities
通常由 [MASK] 實體或維基百科實體組成。輸入這些實體時的簡要說明如下:- 輸入 [MASK] 實體以計算實體表示:[MASK] 實體用於在預訓練期間掩碼要預測的實體。當 LUKE 接收到 [MASK] 實體時,它會嘗試透過從輸入文字中收集實體資訊來預測原始實體。因此,[MASK] 實體可用於處理需要文字中實體資訊的下游任務,如實體型別化、關係分類和命名實體識別。
- 輸入維基百科實體以計算知識增強的 token 表示:LUKE 在預訓練期間學習了關於維基百科實體的豐富資訊(或知識),並將這些資訊儲存在其實體嵌入中。透過使用維基百科實體作為輸入 token,LUKE 輸出的 token 表示會因這些實體嵌入中儲存的資訊而得到增強。這對於需要現實世界知識的任務(如問答)特別有效。
針對前一種用例,有三種頭模型:
- LukeForEntityClassification,用於對輸入文字中的單個實體進行分類的任務,例如實體型別化,如 Open Entity 資料集。此模型在輸出的實體表示之上放置一個線性頭。
- LukeForEntityPairClassification,用於對兩個實體之間的關係進行分類的任務,例如關係分類,如 TACRED 資料集。此模型在給定實體對的拼接輸出表示之上放置一個線性頭。
- LukeForEntitySpanClassification,用於對實體跨度序列進行分類的任務,例如命名實體識別(NER)。此模型在輸出的實體表示之上放置一個線性頭。你可以透過將文字中所有可能的實體跨度輸入到模型中來解決 NER 問題。
LukeTokenizer 有一個 `task` 引數,透過指定 `task="entity_classification"`、`task="entity_pair_classification"` 或 `task="entity_span_classification"`,你可以輕鬆地為這些頭模型建立輸入。請參考每種頭模型的示例程式碼。
用法示例
>>> from transformers import LukeTokenizer, LukeModel, LukeForEntityPairClassification
>>> model = LukeModel.from_pretrained("studio-ousia/luke-base")
>>> tokenizer = LukeTokenizer.from_pretrained("studio-ousia/luke-base")
# Example 1: Computing the contextualized entity representation corresponding to the entity mention "Beyoncé"
>>> text = "Beyoncé lives in Los Angeles."
>>> entity_spans = [(0, 7)] # character-based entity span corresponding to "Beyoncé"
>>> inputs = tokenizer(text, entity_spans=entity_spans, add_prefix_space=True, return_tensors="pt")
>>> outputs = model(**inputs)
>>> word_last_hidden_state = outputs.last_hidden_state
>>> entity_last_hidden_state = outputs.entity_last_hidden_state
# Example 2: Inputting Wikipedia entities to obtain enriched contextualized representations
>>> entities = [
... "Beyoncé",
... "Los Angeles",
... ] # Wikipedia entity titles corresponding to the entity mentions "Beyoncé" and "Los Angeles"
>>> entity_spans = [(0, 7), (17, 28)] # character-based entity spans corresponding to "Beyoncé" and "Los Angeles"
>>> inputs = tokenizer(text, entities=entities, entity_spans=entity_spans, add_prefix_space=True, return_tensors="pt")
>>> outputs = model(**inputs)
>>> word_last_hidden_state = outputs.last_hidden_state
>>> entity_last_hidden_state = outputs.entity_last_hidden_state
# Example 3: Classifying the relationship between two entities using LukeForEntityPairClassification head model
>>> model = LukeForEntityPairClassification.from_pretrained("studio-ousia/luke-large-finetuned-tacred")
>>> tokenizer = LukeTokenizer.from_pretrained("studio-ousia/luke-large-finetuned-tacred")
>>> entity_spans = [(0, 7), (17, 28)] # character-based entity spans corresponding to "Beyoncé" and "Los Angeles"
>>> inputs = tokenizer(text, entity_spans=entity_spans, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> predicted_class_idx = int(logits[0].argmax())
>>> print("Predicted class:", model.config.id2label[predicted_class_idx])
資源
- 關於如何微調 [LukeForEntityPairClassification](/docs/transformers/v4.53.3/en/model_doc/luke#transformers.LukeForEntityPairClassification) 進行關係分類的演示筆記本
- 展示如何使用 HuggingFace 實現的 LUKE 復現論文中報告結果的筆記本
- 文字分類任務指南
- Token分類任務指南
- 問答任務指南
- 掩碼語言建模任務指南
- 多項選擇任務指南
LukeConfig
class transformers.LukeConfig
< 源 >( vocab_size = 50267 entity_vocab_size = 500000 hidden_size = 768 entity_emb_size = 256 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 use_entity_aware_attention = True classifier_dropout = None pad_token_id = 1 bos_token_id = 0 eos_token_id = 2 **kwargs )
引數
- vocab_size (
int
, 可選, 預設為 50267) — LUKE 模型的詞彙表大小。定義了在呼叫 LukeModel 時傳遞的 `inputs_ids` 可以表示的不同 token 的數量。 - entity_vocab_size (
int
, 可選, 預設為 500000) — LUKE 模型的實體詞彙表大小。定義了在呼叫 LukeModel 時傳遞的 `entity_ids` 可以表示的不同實體的數量。 - hidden_size (
int
, 可選, 預設為 768) — 編碼器層和池化層的維度。 - entity_emb_size (
int
, 可選, 預設為 256) — 實體嵌入的維度。 - 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) — 嵌入、編碼器和池化器中所有全連線層的丟棄機率。 - attention_probs_dropout_prob (
float
, 可選, 預設為 0.1) — 注意力機率的丟棄率。 - max_position_embeddings (
int
, 可選, 預設為 512) — 該模型可能使用的最大序列長度。通常將其設定為較大的值以備不時之需(例如,512、1024 或 2048)。 - type_vocab_size (
int
, 可選, 預設為 2) — 呼叫 LukeModel 時傳遞的 `token_type_ids` 的詞彙表大小。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - layer_norm_eps (
float
, 可選, 預設為 1e-12) — 層歸一化層使用的 epsilon 值。 - use_entity_aware_attention (
bool
, 可選, 預設為True
) — 模型是否應使用 《LUKE: Deep Contextualized Entity Representations with Entity-aware Self-attention (Yamada et al.)》 中提出的實體感知自注意力機制。 - classifier_dropout (
float
, 可選) — 分類頭的丟棄率。 - pad_token_id (
int
, 可選, 預設為 1) — 填充 token 的 ID。 - bos_token_id (
int
, 可選, 預設為 0) — 序列開始 token 的 ID。 - eos_token_id (
int
, 可選, 預設為 2) — 序列結束 token 的 ID。
這是一個用於儲存 LukeModel 配置的配置類。它用於根據指定的引數例項化一個 LUKE 模型,定義模型架構。使用預設值例項化配置將產生與 LUKE studio-ousia/luke-base 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
LukeTokenizer
class transformers.LukeTokenizer
< 原始碼 >( vocab_file merges_file entity_vocab_file task = None max_entity_length = 32 max_mention_length = 30 entity_token_1 = '<ent>' entity_token_2 = '<ent2>' entity_unk_token = '[UNK]' entity_pad_token = '[PAD]' entity_mask_token = '[MASK]' entity_mask2_token = '[MASK2]' 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 = False **kwargs )
引數
- vocab_file (
str
) — 詞彙表文件的路徑。 - merges_file (
str
) — merges 檔案的路徑。 - entity_vocab_file (
str
) — 實體詞彙表文件的路徑。 - task (
str
, optional) — 你想要準備序列的任務。可以是"entity_classification"
、"entity_pair_classification"
或"entity_span_classification"
之一。如果指定此引數,實體序列會根據給定的實體範圍自動建立。 - max_entity_length (
int
, optional, 預設為 32) —entity_ids
的最大長度。 - max_mention_length (
int
, optional, 預設為 30) — 實體範圍內詞元(token)的最大數量。 - entity_token_1 (
str
, optional, 預設為<ent>
) — 用於在詞元序列中表示實體範圍的特殊詞元。僅當task
設定為"entity_classification"
或"entity_pair_classification"
時使用此詞元。 - entity_token_2 (
str
, optional, 預設為<ent2>
) — 用於在詞元序列中表示實體範圍的特殊詞元。僅當task
設定為"entity_pair_classification"
時使用此詞元。 - 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, 預設為False
) — 是否在輸入前新增一個初始空格。這允許將開頭的詞像其他詞一樣處理。(LUKE 分詞器透過前面的空格來檢測詞的開始)。
構建一個 LUKE 分詞器,它源自 GPT-2 分詞器,使用位元組級位元組對編碼(Byte-Pair-Encoding)。
這個分詞器經過訓練,將空格視為詞元的一部分(有點像 sentencepiece),所以一個詞會
無論是否在句子開頭(無空格),編碼方式都會不同
>>> from transformers import LukeTokenizer
>>> tokenizer = LukeTokenizer.from_pretrained("studio-ousia/luke-base")
>>> tokenizer("Hello world")["input_ids"]
[0, 31414, 232, 2]
>>> tokenizer(" Hello world")["input_ids"]
[0, 20920, 232, 2]
您可以透過在例項化此分詞器時或在對某些文字呼叫它時傳遞 add_prefix_space=True
來繞過此行為,但由於模型並非以這種方式進行預訓練,這可能會導致效能下降。
當與 is_split_into_words=True
一起使用時,此分詞器會在每個詞(甚至是第一個詞)之前新增一個空格。
此分詞器繼承自 PreTrainedTokenizer,其中包含了大部分主要方法。使用者應參考此超類以獲取有關這些方法的更多資訊。它還會建立實體序列,即 entity_ids
、entity_attention_mask
、entity_token_type_ids
和 entity_position_ids
,供 LUKE 模型使用。
__call__
< 原始碼 >( text: typing.Union[str, list[str]] text_pair: typing.Union[str, list[str], NoneType] = None entity_spans: typing.Union[list[tuple[int, int]], list[list[tuple[int, int]]], NoneType] = None entity_spans_pair: typing.Union[list[tuple[int, int]], list[list[tuple[int, int]]], NoneType] = None entities: typing.Union[list[str], list[list[str]], NoneType] = None entities_pair: typing.Union[list[str], list[list[str]], 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 max_entity_length: typing.Optional[int] = None stride: int = 0 is_split_into_words: typing.Optional[bool] = False pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_token_type_ids: typing.Optional[bool] = None return_attention_mask: typing.Optional[bool] = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True **kwargs ) → BatchEncoding
引數
- text (
str
,list[str]
,list[list[str]]
) — 待編碼的序列或序列批次。每個序列必須是字串。請注意,此分詞器不支援基於預分詞字串的分詞。 - text_pair (
str
,list[str]
,list[list[str]]
) — 待編碼的序列或序列批次。每個序列必須是字串。請注意,此分詞器不支援基於預分詞字串的分詞。 - entity_spans (
list[tuple[int, int]]
,list[list[tuple[int, int]]]
, optional) — 待編碼的實體範圍序列或序列批次。每個序列由元組組成,每個元組包含兩個整數,表示實體的基於字元的起始和結束位置。如果在建構函式中將task
引數指定為"entity_classification"
或"entity_pair_classification"
,則每個序列的長度必須分別為 1 或 2。如果指定了entities
,則每個序列的長度必須等於entities
中每個序列的長度。 - entity_spans_pair (
list[tuple[int, int]]
,list[list[tuple[int, int]]]
, optional) — 待編碼的實體範圍序列或序列批次。每個序列由元組組成,每個元組包含兩個整數,表示實體的基於字元的起始和結束位置。如果在建構函式中指定了task
引數,則忽略此引數。如果指定了entities_pair
,則每個序列的長度必須等於entities_pair
中每個序列的長度。 - entities (
list[str]
,list[list[str]]
, optional) — 待編碼的實體序列或序列批次。每個序列由表示實體的字串組成,即特殊實體(例如 [MASK])或維基百科的實體標題(例如 Los Angeles)。如果在建構函式中指定了task
引數,則忽略此引數。每個序列的長度必須等於entity_spans
中每個序列的長度。如果指定了entity_spans
但未指定此引數,則會自動構建實體序列或實體序列批次,並用 [MASK] 實體填充。 - entities_pair (
list[str]
,list[list[str]]
, optional) — 待編碼的實體序列或序列批次。每個序列由表示實體的字串組成,即特殊實體(例如 [MASK])或維基百科的實體標題(例如 Los Angeles)。如果在建構函式中指定了task
引數,則忽略此引數。每個序列的長度必須等於entity_spans_pair
中每個序列的長度。如果指定了entity_spans_pair
但未指定此引數,則會自動構建實體序列或實體序列批次,並用 [MASK] 實體填充。 - max_entity_length (
int
, optional) —entity_ids
的最大長度。 - add_special_tokens (
bool
, optional, 預設為True
) — 在編碼序列時是否新增特殊詞元。這將使用底層的PretrainedTokenizerBase.build_inputs_with_special_tokens
函式,該函式定義了哪些詞元會自動新增到輸入 ID 中。如果你想自動新增bos
或eos
詞元,這會很有用。 - 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
時返回的溢位詞元將包含一些來自返回的截斷序列末尾的詞元,以便在截斷和溢位序列之間提供一些重疊。此引數的值定義了重疊詞元的數量。 - is_split_into_words (
bool
, optional, 預設為False
) — 輸入是否已經預分詞(例如,拆分成單詞)。如果設定為True
,分詞器會假定輸入已經拆分成單詞(例如,透過空格拆分),然後對其進行分詞。這對於 NER 或詞元分類很有用。 - pad_to_multiple_of (
int
, optional) — 如果設定,將把序列填充到所提供值的倍數。需要啟用padding
。這對於在計算能力>= 7.5
(Volta) 的 NVIDIA 硬體上啟用 Tensor Cores 特別有用。 - padding_side (
str
, optional) — 模型應應用填充的一側。應在 [‘right’, ‘left’] 中選擇。預設值從同名的類屬性中選取。 - return_tensors (
str
or TensorType, optional) — 如果設定,將返回張量而不是 Python 整數列表。可接受的值有:'tf'
:返回 TensorFlowtf.constant
物件。'pt'
:返回 PyTorchtorch.Tensor
物件。'np'
:返回 Numpynp.ndarray
物件。
- return_token_type_ids (
bool
, optional) — 是否返回詞元型別 ID。如果保留預設值,將根據特定分詞器的預設設定返回詞元型別 ID,該設定由return_outputs
屬性定義。 - return_attention_mask (
bool
, optional) — 是否返回注意力掩碼。如果保留預設值,將根據特定分詞器的預設設定返回注意力掩碼,該設定由return_outputs
屬性定義。 - return_overflowing_tokens (
bool
, optional, 預設為False
) — 是否返回溢位的詞元序列。如果提供了一對輸入 ID 序列(或一批序列對),且truncation_strategy = longest_first
或True
,則會引發錯誤,而不是返回溢位的詞元。 - return_special_tokens_mask (
bool
, optional, 預設為False
) — 是否返回特殊詞元掩碼資訊。 - return_offsets_mapping (
bool
, optional, 預設為False
) — 是否為每個詞元返回(char_start, char_end)
。這僅在繼承自 PreTrainedTokenizerFast 的快速分詞器上可用,如果使用 Python 的分詞器,此方法將引發
NotImplementedError
。 - return_length (
bool
, optional, 預設為False
) — 是否返回編碼輸入的長度。 - verbose (
bool
, optional, 預設為True
) — 是否列印更多資訊和警告。 - **kwargs — 傳遞給
self.tokenize()
方法
一個 BatchEncoding,包含以下欄位:
-
input_ids — 要輸入到模型中的標記 ID 列表。
-
token_type_ids — 要輸入到模型中的標記型別 ID 列表(當
return_token_type_ids=True
或如果 *“token_type_ids”* 在self.model_input_names
中時)。 -
attention_mask — 指定模型應關注哪些標記的索引列表(當
return_attention_mask=True
或如果 *“attention_mask”* 在self.model_input_names
中時)。 -
entity_ids — 要饋送給模型的實體 ID 列表。
-
entity_position_ids — 要饋送給模型的輸入序列中實體位置的列表。
-
entity_token_type_ids — 要饋送給模型的實體詞元型別 ID 列表(當
return_token_type_ids=True
或如果 “entity_token_type_ids” 在self.model_input_names
中)。 -
entity_attention_mask — 指定模型應關注哪些實體的索引列表(當
return_attention_mask=True
或如果 “entity_attention_mask” 在self.model_input_names
中)。 -
entity_start_positions — 詞元序列中實體起始位置的列表(當
task="entity_span_classification"
)。 -
entity_end_positions — 詞元序列中實體結束位置的列表(當
task="entity_span_classification"
)。 -
overflowing_tokens — 溢位標記序列列表(當指定
max_length
且return_overflowing_tokens=True
時)。 -
num_truncated_tokens — 截斷標記的數量(當指定
max_length
且return_overflowing_tokens=True
時)。 -
special_tokens_mask — 0 和 1 的列表,其中 1 表示新增的特殊標記,0 表示常規序列標記(當
add_special_tokens=True
且return_special_tokens_mask=True
時)。 -
length — 輸入的長度(當
return_length=True
時)
用於分詞併為模型準備一個或多個序列,或一個或多個序列對的主要方法,具體取決於你想要為之準備的任務。
LukeModel
class transformers.LukeModel
< 原始碼 >( config: LukeConfig add_pooling_layer: bool = True )
引數
- config (LukeConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法來載入模型權重。
- add_pooling_layer (
bool
, optional, 預設為True
) — 是否新增池化層
基礎的 LUKE 模型 Transformer,輸出詞元和實體的原始隱藏狀態,不帶任何特定任務的頭部。
此模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch 的 torch.nn.Module 子類。可以像常規 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< source >( 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 entity_ids: typing.Optional[torch.LongTensor] = None entity_attention_mask: typing.Optional[torch.FloatTensor] = None entity_token_type_ids: typing.Optional[torch.LongTensor] = None entity_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.models.luke.modeling_luke.BaseLukeModelOutputWithPooling
或 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]
。 - entity_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
) — 實體詞彙表中實體標記的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (
torch.FloatTensor
,形狀為(batch_size, entity_length)
,可選) — 用於避免在填充實體標記索引上執行注意力的掩碼。掩碼值選自[0, 1]
:- 1 表示實體標記未被掩碼,
- 0 表示實體標記已被掩碼。
- entity_token_type_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
,可選) — 片段標記索引,用於指示實體標記輸入的第一和第二部分。索引選自[0, 1]
:- 0 對應於 *A 部分* 的實體標記,
- 1 對應於 *B 部分* 的實體標記。
- entity_position_ids (
torch.LongTensor
,形狀為(batch_size, entity_length, max_mention_length)
,可選) — 位置嵌入中每個輸入實體的位置索引。選自範圍[0, config.max_position_embeddings - 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
索引轉換為相關向量,這會很有用。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通元組。
返回
transformers.models.luke.modeling_luke.BaseLukeModelOutputWithPooling
或 tuple(torch.FloatTensor)
一個 transformers.models.luke.modeling_luke.BaseLukeModelOutputWithPooling
或一個 torch.FloatTensor
的元組 (如果傳遞了 return_dict=False
或 config.return_dict=False
),根據配置 (LukeConfig) 和輸入包含各種元素。
-
last_hidden_state (形狀為
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
, 可選) — 模型最後一層輸出的隱藏狀態序列。 -
pooler_output (
torch.FloatTensor
,形狀為(batch_size, hidden_size)
) — 如果 *config.use_mean_pooling* 設定為 True,則為塊標記(不包括 *[CLS]* 標記)的最後一層隱藏狀態的平均值。如果設定為 False,則返回 *[CLS]* 標記的最終隱藏狀態。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
entity_last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, entity_length, hidden_size)
) — 模型最後一層輸出的實體隱藏狀態序列。 -
entity_hidden_states (
tuple(torch.FloatTensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出 + 一個用於每層的輸出),形狀為(batch_size, entity_length, hidden_size)
。模型每層輸出的實體隱藏狀態加上初始實體嵌入輸出。
LukeModel 的 forward 方法會覆蓋 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoTokenizer, LukeModel
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-base")
>>> model = LukeModel.from_pretrained("studio-ousia/luke-base")
# Compute the contextualized entity representation corresponding to the entity mention "Beyoncé"
>>> text = "Beyoncé lives in Los Angeles."
>>> entity_spans = [(0, 7)] # character-based entity span corresponding to "Beyoncé"
>>> encoding = tokenizer(text, entity_spans=entity_spans, add_prefix_space=True, return_tensors="pt")
>>> outputs = model(**encoding)
>>> word_last_hidden_state = outputs.last_hidden_state
>>> entity_last_hidden_state = outputs.entity_last_hidden_state
# Input Wikipedia entities to obtain enriched contextualized representations of word tokens
>>> text = "Beyoncé lives in Los Angeles."
>>> entities = [
... "Beyoncé",
... "Los Angeles",
... ] # Wikipedia entity titles corresponding to the entity mentions "Beyoncé" and "Los Angeles"
>>> entity_spans = [
... (0, 7),
... (17, 28),
... ] # character-based entity spans corresponding to "Beyoncé" and "Los Angeles"
>>> encoding = tokenizer(
... text, entities=entities, entity_spans=entity_spans, add_prefix_space=True, return_tensors="pt"
... )
>>> outputs = model(**encoding)
>>> word_last_hidden_state = outputs.last_hidden_state
>>> entity_last_hidden_state = outputs.entity_last_hidden_state
LukeForMaskedLM
class transformers.LukeForMaskedLM
< source >( config )
引數
- config (LukeForMaskedLM) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
帶有語言建模頭和實體預測頭的 LUKE 模型,用於掩碼語言建模和掩碼實體預測。
此模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch 的 torch.nn.Module 子類。可以像常規 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< source >( 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 entity_ids: typing.Optional[torch.LongTensor] = None entity_attention_mask: typing.Optional[torch.LongTensor] = None entity_token_type_ids: typing.Optional[torch.LongTensor] = None entity_position_ids: typing.Optional[torch.LongTensor] = None labels: typing.Optional[torch.LongTensor] = None entity_labels: 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.models.luke.modeling_luke.LukeMaskedLMOutput
或 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]
。 - entity_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
) — 實體詞彙表中實體標記的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (
torch.FloatTensor
,形狀為(batch_size, entity_length)
,可選) — 用於避免在填充實體標記索引上執行注意力的掩碼。掩碼值選自[0, 1]
:- 1 表示實體標記未被掩碼,
- 0 表示實體標記已被掩碼。
- entity_token_type_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
,可選) — 片段標記索引,用於指示實體標記輸入的第一和第二部分。索引選自[0, 1]
:- 0 對應於 *A 部分* 的實體標記,
- 1 對應於 *B 部分* 的實體標記。
- entity_position_ids (
torch.LongTensor
,形狀為(batch_size, entity_length, max_mention_length)
,可選) — 位置嵌入中每個輸入實體的位置索引。選自範圍[0, config.max_position_embeddings - 1]
。 - labels (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於計算掩碼語言建模損失的標籤。索引應在[-100, 0, ..., config.vocab_size]
中(參見input_ids
文件字串)。索引設定為-100
的標記將被忽略(掩碼),損失僅對標籤在[0, ..., config.vocab_size]
中的標記計算。 - entity_labels (
torch.LongTensor
,形狀為(batch_size, entity_length)
,可選) — 用於計算掩碼語言建模損失的標籤。索引應在[-100, 0, ..., config.vocab_size]
中(參見input_ids
文件字串)。索引設定為-100
的標記將被忽略(掩碼),損失僅對標籤在[0, ..., config.vocab_size]
中的標記計算。 - 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.models.luke.modeling_luke.LukeMaskedLMOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.luke.modeling_luke.LukeMaskedLMOutput
或一個 torch.FloatTensor
的元組 (如果傳遞了 return_dict=False
或 config.return_dict=False
),根據配置 (LukeConfig) 和輸入包含各種元素。
-
loss (
torch.FloatTensor
,形狀為(1,)
,可選,當提供labels
時返回) — 掩碼語言建模 (MLM) 損失和實體預測損失的總和。 -
mlm_loss (
torch.FloatTensor
,形狀為(1,)
,可選,當提供labels
時返回) — 掩碼語言建模 (MLM) 損失。 -
mep_loss (
torch.FloatTensor
,形狀為(1,)
,可選,當提供labels
時返回) — 掩碼實體預測 (MEP) 損失。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
entity_logits (
torch.FloatTensor
,形狀為(batch_size, sequence_length, config.vocab_size)
) — 實體預測頭的預測分數(SoftMax 前每個實體詞彙標記的分數)。 -
hidden_states (
tuple[torch.FloatTensor]
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 一個用於每層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
entity_hidden_states (
tuple(torch.FloatTensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出 + 一個用於每層的輸出),形狀為(batch_size, entity_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 後的注意力權重,用於計算自注意力頭中的加權平均值。
LukeForMaskedLM 的 forward 方法會覆蓋 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoTokenizer, LukeForMaskedLM
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-base")
>>> model = LukeForMaskedLM.from_pretrained("studio-ousia/luke-base")
>>> inputs = tokenizer("The capital of France is <mask>.", return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> # retrieve index of <mask>
>>> mask_token_index = (inputs.input_ids == tokenizer.mask_token_id)[0].nonzero(as_tuple=True)[0]
>>> predicted_token_id = logits[0, mask_token_index].argmax(axis=-1)
>>> tokenizer.decode(predicted_token_id)
...
>>> labels = tokenizer("The capital of France is Paris.", return_tensors="pt")["input_ids"]
>>> # mask labels of non-<mask> tokens
>>> labels = torch.where(inputs.input_ids == tokenizer.mask_token_id, labels, -100)
>>> outputs = model(**inputs, labels=labels)
>>> round(outputs.loss.item(), 2)
...
LukeForEntityClassification
class transformers.LukeForEntityClassification
< source >( config )
引數
- config (LukeForEntityClassification) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
帶有分類頭的 LUKE 模型(在第一個實體標記的隱藏狀態之上加一個線性層),用於實體分類任務,例如 Open Entity。
此模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch 的 torch.nn.Module 子類。可以像常規 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< source >( 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 entity_ids: typing.Optional[torch.LongTensor] = None entity_attention_mask: typing.Optional[torch.FloatTensor] = None entity_token_type_ids: typing.Optional[torch.LongTensor] = None entity_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.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.luke.modeling_luke.EntityClassificationOutput
或 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]
。 - entity_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
) — 實體詞彙表中實體標記的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (
torch.FloatTensor
,形狀為(batch_size, entity_length)
, 可選) — 用於避免對填充的實體詞元索引執行注意力操作的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示實體詞元未被掩碼,
- 0 表示實體詞元被掩碼。
- entity_token_type_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
, 可選) — 段詞元索引,用於指示實體詞元輸入的第一部分和第二部分。索引在[0, 1]
中選擇:- 0 對應於 A 部分 的實體詞元,
- 1 對應於 B 部分 的實體詞元。
- entity_position_ids (
torch.LongTensor
,形狀為(batch_size, entity_length, max_mention_length)
, 可選) — 每個輸入實體在位置嵌入中的位置索引。在[0, config.max_position_embeddings - 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,)
或(batch_size, num_labels)
, 可選) — 用於計算分類損失的標籤。如果形狀是(batch_size,)
,則使用交叉熵損失進行單標籤分類。在這種情況下,標籤應包含在[0, ..., config.num_labels - 1]
範圍內的索引。如果形狀是(batch_size, num_labels)
,則使用二元交叉熵損失進行多標籤分類。在這種情況下,標籤應只包含[0, 1]
,其中 0 和 1 分別表示假和真。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.models.luke.modeling_luke.EntityClassificationOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.luke.modeling_luke.EntityClassificationOutput
或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),根據配置 (LukeConfig) 和輸入,包含不同的元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失。 -
logits (
torch.FloatTensor
,形狀為(batch_size, config.num_labels)
) — 分類分數(在 SoftMax 之前)。 -
hidden_states (
tuple[torch.FloatTensor, ...]
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 一個用於每層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
entity_hidden_states (
tuple(torch.FloatTensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出 + 一個用於每層的輸出),形狀為(batch_size, entity_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 後的注意力權重,用於計算自注意力頭中的加權平均值。
LukeForEntityClassification 的前向方法重寫了 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoTokenizer, LukeForEntityClassification
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-large-finetuned-open-entity")
>>> model = LukeForEntityClassification.from_pretrained("studio-ousia/luke-large-finetuned-open-entity")
>>> text = "Beyoncé lives in Los Angeles."
>>> entity_spans = [(0, 7)] # character-based entity span corresponding to "Beyoncé"
>>> inputs = tokenizer(text, entity_spans=entity_spans, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> predicted_class_idx = logits.argmax(-1).item()
>>> print("Predicted class:", model.config.id2label[predicted_class_idx])
Predicted class: person
LukeForEntityPairClassification
class transformers.LukeForEntityPairClassification
< 來源 >( config )
引數
- config (LukeForEntityPairClassification) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
帶有分類頭的 LUKE 模型(在兩個實體詞元的隱藏狀態之上有一個線性層),用於實體對分類任務,例如 TACRED。
此模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch 的 torch.nn.Module 子類。可以像常規 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< 來源 >( 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 entity_ids: typing.Optional[torch.LongTensor] = None entity_attention_mask: typing.Optional[torch.FloatTensor] = None entity_token_type_ids: typing.Optional[torch.LongTensor] = None entity_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.models.luke.modeling_luke.EntityPairClassificationOutput
或 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]
範圍內選擇。 - entity_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
) — 實體詞彙表中實體詞元的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (
torch.FloatTensor
,形狀為(batch_size, entity_length)
, 可選) — 用於避免對填充的實體詞元索引執行注意力操作的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示實體詞元未被掩碼,
- 0 表示實體詞元被掩碼。
- entity_token_type_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
, 可選) — 段詞元索引,用於指示實體詞元輸入的第一部分和第二部分。索引在[0, 1]
中選擇:- 0 對應於 A 部分 的實體詞元,
- 1 對應於 B 部分 的實體詞元。
- entity_position_ids (
torch.LongTensor
,形狀為(batch_size, entity_length, max_mention_length)
, 可選) — 每個輸入實體在位置嵌入中的位置索引。在[0, config.max_position_embeddings - 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,)
或(batch_size, num_labels)
, 可選) — 用於計算分類損失的標籤。如果形狀是(batch_size,)
,則使用交叉熵損失進行單標籤分類。在這種情況下,標籤應包含在[0, ..., config.num_labels - 1]
範圍內的索引。如果形狀是(batch_size, num_labels)
,則使用二元交叉熵損失進行多標籤分類。在這種情況下,標籤應只包含[0, 1]
,其中 0 和 1 分別表示假和真。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.models.luke.modeling_luke.EntityPairClassificationOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.luke.modeling_luke.EntityPairClassificationOutput
或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),根據配置 (LukeConfig) 和輸入,包含不同的元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失。 -
logits (
torch.FloatTensor
,形狀為(batch_size, config.num_labels)
) — 分類分數(在 SoftMax 之前)。 -
hidden_states (
tuple[torch.FloatTensor, ...]
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 一個用於每層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
entity_hidden_states (
tuple(torch.FloatTensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出 + 一個用於每層的輸出),形狀為(batch_size, entity_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 後的注意力權重,用於計算自注意力頭中的加權平均值。
LukeForEntityPairClassification 的前向方法重寫了 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoTokenizer, LukeForEntityPairClassification
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-large-finetuned-tacred")
>>> model = LukeForEntityPairClassification.from_pretrained("studio-ousia/luke-large-finetuned-tacred")
>>> text = "Beyoncé lives in Los Angeles."
>>> entity_spans = [
... (0, 7),
... (17, 28),
... ] # character-based entity spans corresponding to "Beyoncé" and "Los Angeles"
>>> inputs = tokenizer(text, entity_spans=entity_spans, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> predicted_class_idx = logits.argmax(-1).item()
>>> print("Predicted class:", model.config.id2label[predicted_class_idx])
Predicted class: per:cities_of_residence
LukeForEntitySpanClassification
class transformers.LukeForEntitySpanClassification
< 來源 >( config )
引數
- config (LukeForEntitySpanClassification) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
帶有跨度分類頭的 LUKE 模型(在隱藏狀態輸出之上有一個線性層),用於命名實體識別等任務。
此模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch 的 torch.nn.Module 子類。可以像常規 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< 來源 >( 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 entity_ids: typing.Optional[torch.LongTensor] = None entity_attention_mask: typing.Optional[torch.LongTensor] = None entity_token_type_ids: typing.Optional[torch.LongTensor] = None entity_position_ids: typing.Optional[torch.LongTensor] = None entity_start_positions: typing.Optional[torch.LongTensor] = None entity_end_positions: 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.models.luke.modeling_luke.EntitySpanClassificationOutput
或 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]
範圍內選擇。 - entity_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
) — 實體詞彙表中實體詞元的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (
torch.FloatTensor
,形狀為(batch_size, entity_length)
, 可選) — 用於避免對填充的實體詞元索引執行注意力操作的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示實體詞元未被掩碼,
- 0 表示實體詞元被掩碼。
- entity_token_type_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
, 可選) — 段詞元索引,用於指示實體詞元輸入的第一部分和第二部分。索引在[0, 1]
中選擇:- 0 對應於 A 部分 的實體詞元,
- 1 對應於 B 部分 的實體詞元。
- entity_position_ids (
torch.LongTensor
,形狀為(batch_size, entity_length, max_mention_length)
, 可選) — 每個輸入實體在位置嵌入中的位置索引。在[0, config.max_position_embeddings - 1]
範圍內選擇。 - entity_start_positions (
torch.LongTensor
, 可選) — 詞元序列中實體的起始位置。 - entity_end_positions (
torch.LongTensor
, 可選) — 詞元序列中實體的結束位置。 - 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, entity_length)
或(batch_size, entity_length, num_labels)
, 可選) — 用於計算分類損失的標籤。如果形狀是(batch_size, entity_length)
,則使用交叉熵損失進行單標籤分類。在這種情況下,標籤應包含在[0, ..., config.num_labels - 1]
範圍內的索引。如果形狀是(batch_size, entity_length, num_labels)
,則使用二元交叉熵損失進行多標籤分類。在這種情況下,標籤應只包含[0, 1]
,其中 0 和 1 分別表示假和真。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.models.luke.modeling_luke.EntitySpanClassificationOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.luke.modeling_luke.EntitySpanClassificationOutput
或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),根據配置 (LukeConfig) 和輸入,包含不同的元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失。 -
logits (
torch.FloatTensor
,形狀為(batch_size, entity_length, config.num_labels)
) — 分類分數(在 SoftMax 之前)。 -
hidden_states (
tuple[torch.FloatTensor, ...]
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 一個用於每層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
entity_hidden_states (
tuple(torch.FloatTensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出 + 一個用於每層的輸出),形狀為(batch_size, entity_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 後的注意力權重,用於計算自注意力頭中的加權平均值。
LukeForEntitySpanClassification 的前向方法重寫了 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoTokenizer, LukeForEntitySpanClassification
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-large-finetuned-conll-2003")
>>> model = LukeForEntitySpanClassification.from_pretrained("studio-ousia/luke-large-finetuned-conll-2003")
>>> text = "Beyoncé lives in Los Angeles"
# List all possible entity spans in the text
>>> word_start_positions = [0, 8, 14, 17, 21] # character-based start positions of word tokens
>>> word_end_positions = [7, 13, 16, 20, 28] # character-based end positions of word tokens
>>> entity_spans = []
>>> for i, start_pos in enumerate(word_start_positions):
... for end_pos in word_end_positions[i:]:
... entity_spans.append((start_pos, end_pos))
>>> inputs = tokenizer(text, entity_spans=entity_spans, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> predicted_class_indices = logits.argmax(-1).squeeze().tolist()
>>> for span, predicted_class_idx in zip(entity_spans, predicted_class_indices):
... if predicted_class_idx != 0:
... print(text[span[0] : span[1]], model.config.id2label[predicted_class_idx])
Beyoncé PER
Los Angeles LOC
LukeForSequenceClassification
class transformers.LukeForSequenceClassification
< 來源 >( config )
引數
- config (LukeForSequenceClassification) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
帶有序列分類/迴歸頭的 LUKE 模型轉換器(在池化輸出之上有一個線性層),例如用於 GLUE 任務。
此模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch 的 torch.nn.Module 子類。可以像常規 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< source >( 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 entity_ids: typing.Optional[torch.LongTensor] = None entity_attention_mask: typing.Optional[torch.FloatTensor] = None entity_token_type_ids: typing.Optional[torch.LongTensor] = None entity_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.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.luke.modeling_luke.LukeSequenceClassifierOutput
或 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]
。 - entity_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
) — 實體詞彙表中實體標記的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (
torch.FloatTensor
,形狀為(batch_size, entity_length)
, 可選) — 用於避免對填充實體標記索引執行注意力的掩碼。掩碼值選自[0, 1]
:- 1 表示實體標記未被遮蓋,
- 0 表示實體標記被遮蓋。
- entity_token_type_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
, 可選) — 用於指示實體標記輸入的第一和第二部分的段標記索引。索引選自[0, 1]
:- 0 對應於 A 部分 的實體標記,
- 1 對應於 B 部分 的實體標記。
- entity_position_ids (
torch.LongTensor
,形狀為(batch_size, entity_length, max_mention_length)
, 可選) — 每個輸入實體在位置嵌入中的位置索引。選自範圍[0, config.max_position_embeddings - 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,)
, 可選) — 用於計算序列分類/迴歸損失的標籤。索引應在[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.models.luke.modeling_luke.LukeSequenceClassifierOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.luke.modeling_luke.LukeSequenceClassifierOutput
或一個 torch.FloatTensor
元組(如果傳遞 return_dict=False
或 config.return_dict=False
),包含各種元素,具體取決於配置(LukeConfig)和輸入。
-
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)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
entity_hidden_states (
tuple(torch.FloatTensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出 + 一個用於每層的輸出),形狀為(batch_size, entity_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 後的注意力權重,用於計算自注意力頭中的加權平均值。
LukeForSequenceClassification 的前向方法會覆蓋 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
單標籤分類示例
>>> import torch
>>> from transformers import AutoTokenizer, LukeForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-base")
>>> model = LukeForSequenceClassification.from_pretrained("studio-ousia/luke-base")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_id = logits.argmax().item()
>>> model.config.id2label[predicted_class_id]
...
>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = LukeForSequenceClassification.from_pretrained("studio-ousia/luke-base", num_labels=num_labels)
>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...
多標籤分類示例
>>> import torch
>>> from transformers import AutoTokenizer, LukeForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-base")
>>> model = LukeForSequenceClassification.from_pretrained("studio-ousia/luke-base", problem_type="multi_label_classification")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_ids = torch.arange(0, logits.shape[-1])[torch.sigmoid(logits).squeeze(dim=0) > 0.5]
>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = LukeForSequenceClassification.from_pretrained(
... "studio-ousia/luke-base", num_labels=num_labels, problem_type="multi_label_classification"
... )
>>> labels = torch.sum(
... torch.nn.functional.one_hot(predicted_class_ids[None, :].clone(), num_classes=num_labels), dim=1
... ).to(torch.float)
>>> loss = model(**inputs, labels=labels).loss
LukeForMultipleChoice
class transformers.LukeForMultipleChoice
< source >( config )
引數
- config (LukeForMultipleChoice) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型相關的權重,只會載入配置。要載入模型權重,請檢視 from_pretrained() 方法。
帶有選擇題分類頭的 Luke 模型(在池化輸出之上有一個線性層和一個 softmax),例如用於 RocStories/SWAG 任務。
此模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch 的 torch.nn.Module 子類。可以像常規 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< source >( 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 entity_ids: typing.Optional[torch.LongTensor] = None entity_attention_mask: typing.Optional[torch.FloatTensor] = None entity_token_type_ids: typing.Optional[torch.LongTensor] = None entity_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.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.luke.modeling_luke.LukeMultipleChoiceModelOutput
或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, num_choices, 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, num_choices, sequence_length)
, 可選) — 用於指示輸入的第一和第二部分的段標記索引。索引選自[0, 1]
:- 0 對應於 句子 A 的標記,
- 1 對應於 句子 B 的標記。
- position_ids (
torch.LongTensor
,形狀為(batch_size, num_choices, sequence_length)
, 可選) — 每個輸入序列標記在位置嵌入中的位置索引。選自範圍[0, config.max_position_embeddings - 1]
。 - entity_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
) — 實體詞彙表中實體標記的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (
torch.FloatTensor
,形狀為(batch_size, entity_length)
, 可選) — 用於避免對填充實體標記索引執行注意力的掩碼。掩碼值選自[0, 1]
:- 1 表示實體標記未被遮蓋,
- 0 表示實體標記被遮蓋。
- entity_token_type_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
, 可選) — 用於指示實體標記輸入的第一和第二部分的段標記索引。索引選自[0, 1]
:- 0 對應於 A 部分 的實體標記,
- 1 對應於 B 部分 的實體標記。
- entity_position_ids (
torch.LongTensor
,形狀為(batch_size, entity_length, max_mention_length)
, 可選) — 每個輸入實體在位置嵌入中的位置索引。選自範圍[0, config.max_position_embeddings - 1]
。 - head_mask (
torch.FloatTensor
,形狀為(num_heads,)
或(num_layers, num_heads)
, 可選) — 用於使自注意力模組的選定頭無效的掩碼。掩碼值選自[0, 1]
:- 1 表示頭未被遮蓋,
- 0 表示頭被遮蓋。
- inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, num_choices, sequence_length, hidden_size)
, 可選) — 可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果你想比模型內部的嵌入查詢矩陣更好地控制如何將input_ids
索引轉換為關聯向量,這會很有用。 - labels (
torch.LongTensor
,形狀為(batch_size,)
, 可選) — 用於計算選擇題分類損失的標籤。索引應在[0, ..., num_choices-1]
範圍內,其中num_choices
是輸入張量第二維的大小。(見上面的input_ids
) - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是普通的元組。
返回
transformers.models.luke.modeling_luke.LukeMultipleChoiceModelOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.luke.modeling_luke.LukeMultipleChoiceModelOutput
或一個 torch.FloatTensor
元組(如果傳遞 return_dict=False
或 config.return_dict=False
),包含各種元素,具體取決於配置(LukeConfig)和輸入。
-
loss (形狀為 (1,) 的
torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失。 -
logits (形狀為
(batch_size, num_choices)
的torch.FloatTensor
) — num_choices 是輸入張量的第二維大小。(請參閱上面的 input_ids)。分類分數(SoftMax 之前)。
-
hidden_states (
tuple[torch.FloatTensor, ...]
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 一個用於每層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
entity_hidden_states (
tuple(torch.FloatTensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出 + 一個用於每層的輸出),形狀為(batch_size, entity_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 後的注意力權重,用於計算自注意力頭中的加權平均值。
LukeForMultipleChoice 的前向方法會覆蓋 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoTokenizer, LukeForMultipleChoice
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-base")
>>> model = LukeForMultipleChoice.from_pretrained("studio-ousia/luke-base")
>>> prompt = "In Italy, pizza served in formal settings, such as at a restaurant, is presented unsliced."
>>> choice0 = "It is eaten with a fork and a knife."
>>> choice1 = "It is eaten while held in the hand."
>>> labels = torch.tensor(0).unsqueeze(0) # choice0 is correct (according to Wikipedia ;)), batch size 1
>>> encoding = tokenizer([prompt, prompt], [choice0, choice1], return_tensors="pt", padding=True)
>>> outputs = model(**{k: v.unsqueeze(0) for k, v in encoding.items()}, labels=labels) # batch size is 1
>>> # the linear classifier still needs to be trained
>>> loss = outputs.loss
>>> logits = outputs.logits
LukeForTokenClassification
class transformers.LukeForTokenClassification
< source >( config )
引數
- config (LukeForTokenClassification) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型相關的權重,只會載入配置。要載入模型權重,請檢視 from_pretrained() 方法。
帶有標記分類頭的 LUKE 模型(在隱藏狀態輸出之上有一個線性層)。要使用 LUKE 解決命名實體識別(NER)任務,`LukeForEntitySpanClassification` 比這個類更合適。
此模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch 的 torch.nn.Module 子類。可以像常規 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< source >( 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 entity_ids: typing.Optional[torch.LongTensor] = None entity_attention_mask: typing.Optional[torch.FloatTensor] = None entity_token_type_ids: typing.Optional[torch.LongTensor] = None entity_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.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.luke.modeling_luke.LukeTokenClassifierOutput
或 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]
。 - entity_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
) — 實體詞彙表中實體標記的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (
torch.FloatTensor
,形狀為(batch_size, entity_length)
, 可選) — 用於避免對填充實體標記索引執行注意力的掩碼。掩碼值選自[0, 1]
:- 1 表示實體標記未被遮蓋,
- 0 表示實體標記被遮蓋。
- entity_token_type_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
,可選) — 用於指示實體詞元輸入第一部分和第二部分的片段詞元索引。索引在[0, 1]
中選擇:- 0 對應於 A 部分 實體詞元,
- 1 對應於 B 部分 實體詞元。
- entity_position_ids (
torch.LongTensor
,形狀為(batch_size, entity_length, max_mention_length)
,可選) — 每個輸入實體在位置嵌入中的位置索引。在[0, config.max_position_embeddings - 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,)
,可選) — 用於計算多項選擇分類損失的標籤。索引應在[0, ..., num_choices-1]
範圍內,其中num_choices
是輸入張量第二維的大小。(參見上面的input_ids
) - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
,可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.models.luke.modeling_luke.LukeTokenClassifierOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.luke.modeling_luke.LukeTokenClassifierOutput
或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或當 config.return_dict=False
時),根據配置(LukeConfig)和輸入,包含各種元素。
-
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)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
entity_hidden_states (
tuple(torch.FloatTensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出 + 一個用於每層的輸出),形狀為(batch_size, entity_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 後的注意力權重,用於計算自注意力頭中的加權平均值。
LukeForTokenClassification 的 forward 方法會覆蓋 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoTokenizer, LukeForTokenClassification
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-base")
>>> model = LukeForTokenClassification.from_pretrained("studio-ousia/luke-base")
>>> inputs = tokenizer(
... "HuggingFace is a company based in Paris and New York", add_special_tokens=False, return_tensors="pt"
... )
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_token_class_ids = logits.argmax(-1)
>>> # Note that tokens are classified rather then input words which means that
>>> # there might be more predicted token classes than words.
>>> # Multiple token classes might account for the same word
>>> predicted_tokens_classes = [model.config.id2label[t.item()] for t in predicted_token_class_ids[0]]
>>> predicted_tokens_classes
...
>>> labels = predicted_token_class_ids
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...
LukeForQuestionAnswering
class transformers.LukeForQuestionAnswering
< 來源 >( config )
引數
- config (LukeForQuestionAnswering) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型關聯的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
Luke transformer,其頂部帶有一個跨度分類頭,用於處理如 SQuAD 這類抽取式問答任務(在隱藏狀態輸出之上是一個線性層,用於計算 span start logits
和 span end logits
)。
此模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch 的 torch.nn.Module 子類。可以像常規 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< 來源 >( 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.FloatTensor] = None entity_ids: typing.Optional[torch.LongTensor] = None entity_attention_mask: typing.Optional[torch.FloatTensor] = None entity_token_type_ids: typing.Optional[torch.LongTensor] = None entity_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.models.luke.modeling_luke.LukeQuestionAnsweringModelOutput
或 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.FloatTensor
,形狀為(batch_size, sequence_length)
,可選) — 每個輸入序列詞元在位置嵌入中的位置索引。在[0, config.n_positions - 1]
範圍內選擇。 - entity_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
) — 實體詞彙表中實體詞元的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (
torch.FloatTensor
,形狀為(batch_size, entity_length)
,可選) — 用於避免對填充實體詞元索引執行注意力的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示實體詞元未被掩碼,
- 0 表示實體詞元被掩碼。
- entity_token_type_ids (
torch.LongTensor
,形狀為(batch_size, entity_length)
,可選) — 用於指示實體詞元輸入第一部分和第二部分的片段詞元索引。索引在[0, 1]
中選擇:- 0 對應於 A 部分 實體詞元,
- 1 對應於 B 部分 實體詞元。
- entity_position_ids (
torch.LongTensor
,形狀為(batch_size, entity_length, max_mention_length)
,可選) — 每個輸入實體在位置嵌入中的位置索引。在[0, config.max_position_embeddings - 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 而不是一個普通的元組。
返回
transformers.models.luke.modeling_luke.LukeQuestionAnsweringModelOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.luke.modeling_luke.LukeQuestionAnsweringModelOutput
或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或當 config.return_dict=False
時),根據配置(LukeConfig)和輸入,包含各種元素。
-
loss (
torch.FloatTensor
of shape(1,)
, 可選, 當提供labels
時返回) — 總範圍提取損失是起始位置和結束位置的交叉熵之和。 -
start_logits (
torch.FloatTensor
,形狀為(batch_size, sequence_length)
,可選,預設為None
) — 跨度開始分數(SoftMax 之前)。 -
end_logits (
torch.FloatTensor
,形狀為(batch_size, sequence_length)
,可選,預設為None
) — 跨度結束分數(SoftMax 之前)。 -
hidden_states (
tuple[torch.FloatTensor, ...]
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 一個用於每層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
entity_hidden_states (
tuple(torch.FloatTensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出 + 一個用於每層的輸出),形狀為(batch_size, entity_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 後的注意力權重,用於計算自注意力頭中的加權平均值。
LukeForQuestionAnswering 的 forward 方法會覆蓋 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoTokenizer, LukeForQuestionAnswering
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-base")
>>> model = LukeForQuestionAnswering.from_pretrained("studio-ousia/luke-base")
>>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"
>>> inputs = tokenizer(question, text, return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> answer_start_index = outputs.start_logits.argmax()
>>> answer_end_index = outputs.end_logits.argmax()
>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
>>> tokenizer.decode(predict_answer_tokens, skip_special_tokens=True)
...
>>> # target is "nice puppet"
>>> target_start_index = torch.tensor([14])
>>> target_end_index = torch.tensor([15])
>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = outputs.loss
>>> round(loss.item(), 2)
...