Transformers 文件
DPR
並獲得增強的文件體驗
開始使用
DPR
概述
密集段落檢索(Dense Passage Retrieval, DPR)是一套用於最先進的開放領域問答研究的工具和模型。它由 Vladimir Karpukhin、Barlas Oğuz、Sewon Min、Patrick Lewis、Ledell Wu、Sergey Edunov、Danqi Chen 和 Wen-tau Yih 在論文《開放領域問答的密集段落檢索》中提出。
論文摘要如下:
開放領域問答依賴於高效的段落檢索來選擇候選上下文,其中傳統的稀疏向量空間模型,如 TF-IDF 或 BM25,是事實上的標準方法。在這項工作中,我們展示了僅使用密集表示就可以實際實現檢索,其中嵌入是透過一個簡單的雙編碼器框架從少量問題和段落中學習得到的。當在一系列廣泛的開放領域問答資料集上進行評估時,我們的密集檢索器在 top-20 段落檢索準確率方面,比強大的 Lucene-BM25 系統高出 9%-19% 的絕對百分比,並幫助我們的端到端問答系統在多個開放領域問答基準上建立了新的技術水平。
使用技巧
DPR 包含三個模型
- 問題編碼器:將問題編碼為向量
- 上下文編碼器:將上下文編碼為向量
- 閱讀器:在檢索到的上下文中提取問題的答案,並附帶一個相關性分數(如果推斷出的答案範圍確實回答了問題,則分數高)。
DPRConfig
class transformers.DPRConfig
< 源 >( 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 position_embedding_type = 'absolute' projection_dim: int = 0 **kwargs )
引數
- vocab_size (
int
, 可選, 預設為 30522) — DPR 模型的詞彙表大小。定義了可以由傳遞給 BertModel 的 forward 方法的 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
或function
, 可選, 預設為"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) — 傳入 BertModel 的 token_type_ids 的詞彙表大小。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - layer_norm_eps (
float
, 可選, 預設為 1e-12) — 層歸一化層使用的 epsilon 值。 - pad_token_id (
int
, 可選, 預設為 0) — 填充標記 ID。 - position_embedding_type (
str
, 可選, 預設為"absolute"
) — 位置嵌入的型別。從"absolute"
、"relative_key"
、"relative_key_query"
中選擇一個。對於位置嵌入,請使用"absolute"
。有關"relative_key"
的更多資訊,請參閱 《帶相對位置表示的自注意力》(Shaw 等人)。有關"relative_key_query"
的更多資訊,請參閱 《用更好的相對位置嵌入改進 Transformer 模型》(Huang 等人)中的 方法 4。 - projection_dim (
int
, 可選, 預設為 0) — 上下文和問題編碼器投影的維度。如果設定為零(預設值),則不進行投影。
DPRConfig 是用於儲存 DPRModel 配置的配置類。
這是用於儲存 DPRContextEncoder、DPRQuestionEncoder 或 DPRReader 配置的配置類。它用於根據指定的引數例項化 DPR 模型的元件,定義模型元件的架構。使用預設值例項化配置將產生與 DPRContextEncoder facebook/dpr-ctx_encoder-single-nq-base 架構類似的配置。
這個類是 BertConfig 的子類。請檢視超類以獲取所有 kwargs 的文件。
示例
>>> from transformers import DPRConfig, DPRContextEncoder
>>> # Initializing a DPR facebook/dpr-ctx_encoder-single-nq-base style configuration
>>> configuration = DPRConfig()
>>> # Initializing a model (with random weights) from the facebook/dpr-ctx_encoder-single-nq-base style configuration
>>> model = DPRContextEncoder(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
DPRContextEncoderTokenizer
class transformers.DPRContextEncoderTokenizer
< 源 >( vocab_file do_lower_case = True do_basic_tokenize = True never_split = None unk_token = '[UNK]' sep_token = '[SEP]' pad_token = '[PAD]' cls_token = '[CLS]' mask_token = '[MASK]' tokenize_chinese_chars = True strip_accents = None clean_up_tokenization_spaces = True **kwargs )
構造一個 DPRContextEncoder 分詞器。
DPRContextEncoderTokenizer 與 BertTokenizer 相同,並執行端到端的標記化:標點符號分割和詞片化。
有關引數的使用示例和文件,請參閱超類 BertTokenizer。
DPRContextEncoderTokenizerFast
class transformers.DPRContextEncoderTokenizerFast
< 源 >( vocab_file = None tokenizer_file = None do_lower_case = True unk_token = '[UNK]' sep_token = '[SEP]' pad_token = '[PAD]' cls_token = '[CLS]' mask_token = '[MASK]' tokenize_chinese_chars = True strip_accents = None **kwargs )
構造一個“快速”的 DPRContextEncoder 分詞器(由 HuggingFace 的 tokenizers 庫支援)。
DPRContextEncoderTokenizerFast 與 BertTokenizerFast 相同,並執行端到端的標記化:標點符號分割和詞片化。
有關引數的使用示例和文件,請參閱超類 BertTokenizerFast。
DPRQuestionEncoderTokenizer
class transformers.DPRQuestionEncoderTokenizer
< 源 >( vocab_file do_lower_case = True do_basic_tokenize = True never_split = None unk_token = '[UNK]' sep_token = '[SEP]' pad_token = '[PAD]' cls_token = '[CLS]' mask_token = '[MASK]' tokenize_chinese_chars = True strip_accents = None clean_up_tokenization_spaces = True **kwargs )
構造一個 DPRQuestionEncoder 分詞器。
DPRQuestionEncoderTokenizer 與 BertTokenizer 相同,並執行端到端的標記化:標點符號分割和詞片化。
有關引數的使用示例和文件,請參閱超類 BertTokenizer。
DPRQuestionEncoderTokenizerFast
class transformers.DPRQuestionEncoderTokenizerFast
< 原始碼 >( vocab_file = None tokenizer_file = None do_lower_case = True unk_token = '[UNK]' sep_token = '[SEP]' pad_token = '[PAD]' cls_token = '[CLS]' mask_token = '[MASK]' tokenize_chinese_chars = True strip_accents = None **kwargs )
構建一個“快速”的 DPRQuestionEncoder 分詞器(由 HuggingFace 的 tokenizers 庫支援)。
DPRQuestionEncoderTokenizerFast 與 BertTokenizerFast 相同,執行端到端的分詞:標點符號分割和 wordpiece。
有關引數的使用示例和文件,請參閱超類 BertTokenizerFast。
DPRReaderTokenizer
class transformers.DPRReaderTokenizer
< 原始碼 >( vocab_file do_lower_case = True do_basic_tokenize = True never_split = None unk_token = '[UNK]' sep_token = '[SEP]' pad_token = '[PAD]' cls_token = '[CLS]' mask_token = '[MASK]' tokenize_chinese_chars = True strip_accents = None clean_up_tokenization_spaces = True **kwargs ) → dict[str, list[list[int]]]
引數
- questions (
str
或list[str]
) — 待編碼的問題。您可以為許多段落指定一個問題。在這種情況下,問題將被複制,如[questions] * n_passages
。否則,您必須指定與titles
或texts
中一樣多的問題。 - titles (
str
或list[str]
) — 待編碼的段落標題。如果存在多個段落,這可以是一個字串或字串列表。 - texts (
str
或list[str]
) — 待編碼的段落文字。如果存在多個段落,這可以是一個字串或字串列表。 - padding (
bool
,str
或 PaddingStrategy, 可選, 預設為False
) — 啟用和控制填充。接受以下值:True
或'longest'
:填充到批次中最長的序列(如果只提供單個序列則不填充)。'max_length'
:填充到由max_length
引數指定的最大長度,如果未提供該引數,則填充到模型的最大可接受輸入長度。False
或'do_not_pad'
(預設):不進行填充(即,可以輸出具有不同長度序列的批次)。
- truncation (
bool
,str
或 TruncationStrategy, 可選, 預設為False
) — 啟用和控制截斷。接受以下值:True
或'longest_first'
:截斷到由max_length
引數指定的最大長度,如果未提供該引數,則截斷到模型的最大可接受輸入長度。如果提供了一對序列(或一批序列對),這將逐個標記進行截斷,從最長的序列中移除一個標記。'only_first'
:截斷到由max_length
引數指定的最大長度,如果未提供該引數,則截斷到模型的最大可接受輸入長度。如果提供了一對序列(或一批序列對),這將只截斷第一個序列。'only_second'
:截斷到由max_length
引數指定的最大長度,如果未提供該引數,則截斷到模型的最大可接受輸入長度。如果提供了一對序列(或一批序列對),這將只截斷第二個序列。False
或'do_not_truncate'
(預設):不進行截斷(即,可以輸出序列長度大於模型最大允許輸入大小的批次)。
- max_length (
int
, 可選) — 控制截斷/填充引數使用的最大長度。如果未設定或設定為
None
,並且截斷/填充引數之一需要最大長度,則將使用預定義的模型最大長度。如果模型沒有特定的最大輸入長度(如 XLNet),則將停用截斷/填充到最大長度的功能。 - return_tensors (
str
或 TensorType, 可選) — 如果設定,將返回張量而不是 Python 整數列表。可接受的值為:'tf'
:返回 TensorFlowtf.constant
物件。'pt'
:返回 PyTorchtorch.Tensor
物件。'np'
:返回 Numpynp.ndarray
物件。
- return_attention_mask (
bool
, 可選) — 是否返回注意力掩碼。如果未設定,將根據特定分詞器的預設設定返回注意力掩碼,該預設設定由return_outputs
屬性定義。
返回
dict[str, list[list[int]]]
一個包含以下鍵的字典:
input_ids
:要輸入到模型中的詞元 ID 列表。attention_mask
:用於指定模型應關注哪些詞元的索引列表。
構建一個 DPRReader 分詞器。
DPRReaderTokenizer 與 BertTokenizer 幾乎完全相同,並執行端到端的分詞:標點符號分割和 wordpiece。不同之處在於它有三個輸入字串:question、titles 和 texts,它們被組合起來輸入到 DPRReader 模型中。
有關引數的使用示例和文件,請參閱超類 BertTokenizer。
返回一個包含輸入字串詞元 ID 以及其他資訊以供 .decode_best_spans
使用的字典。它使用分詞器和詞彙表將問題字串和不同段落(標題和文字)轉換為 ID 序列(整數)。結果 input_ids
是一個大小為 (n_passages, sequence_length)
的矩陣。
DPRReaderTokenizerFast
class transformers.DPRReaderTokenizerFast
< 原始碼 >( vocab_file = None tokenizer_file = None do_lower_case = True unk_token = '[UNK]' sep_token = '[SEP]' pad_token = '[PAD]' cls_token = '[CLS]' mask_token = '[MASK]' tokenize_chinese_chars = True strip_accents = None **kwargs ) → dict[str, list[list[int]]]
引數
- questions (
str
或list[str]
) — 待編碼的問題。您可以為許多段落指定一個問題。在這種情況下,問題將被複制,如[questions] * n_passages
。否則,您必須指定與titles
或texts
中一樣多的問題。 - titles (
str
或list[str]
) — 待編碼的段落標題。如果存在多個段落,這可以是一個字串或字串列表。 - texts (
str
或list[str]
) — 待編碼的段落文字。如果存在多個段落,這可以是一個字串或字串列表。 - padding (
bool
,str
或 PaddingStrategy, 可選, 預設為False
) — 啟用和控制填充。接受以下值:True
或'longest'
:填充到批次中最長的序列(如果只提供單個序列則不填充)。'max_length'
:填充到由max_length
引數指定的最大長度,如果未提供該引數,則填充到模型的最大可接受輸入長度。False
或'do_not_pad'
(預設):不進行填充(即,可以輸出具有不同長度序列的批次)。
- truncation (
bool
,str
或 TruncationStrategy, 可選, 預設為False
) — 啟用和控制截斷。接受以下值:True
或'longest_first'
:截斷到由max_length
引數指定的最大長度,如果未提供該引數,則截斷到模型的最大可接受輸入長度。如果提供了一對序列(或一批序列對),這將逐個標記進行截斷,從最長的序列中移除一個標記。'only_first'
:截斷到由max_length
引數指定的最大長度,如果未提供該引數,則截斷到模型的最大可接受輸入長度。如果提供了一對序列(或一批序列對),這將只截斷第一個序列。'only_second'
:截斷到由max_length
引數指定的最大長度,如果未提供該引數,則截斷到模型的最大可接受輸入長度。如果提供了一對序列(或一批序列對),這將只截斷第二個序列。False
或'do_not_truncate'
(預設):不進行截斷(即,可以輸出序列長度大於模型最大允許輸入大小的批次)。
- max_length (
int
, 可選) — 控制截斷/填充引數使用的最大長度。如果未設定或設定為
None
,並且截斷/填充引數之一需要最大長度,則將使用預定義的模型最大長度。如果模型沒有特定的最大輸入長度(如 XLNet),則將停用截斷/填充到最大長度的功能。 - return_tensors (
str
或 TensorType, 可選) — 如果設定,將返回張量而不是 Python 整數列表。可接受的值為:'tf'
:返回 TensorFlowtf.constant
物件。'pt'
:返回 PyTorchtorch.Tensor
物件。'np'
:返回 Numpynp.ndarray
物件。
- return_attention_mask (
bool
, 可選) — 是否返回注意力掩碼。如果未設定,將根據特定分詞器的預設設定返回注意力掩碼,該預設設定由return_outputs
屬性定義。
返回
dict[str, list[list[int]]]
一個包含以下鍵的字典:
input_ids
:要輸入到模型中的詞元 ID 列表。attention_mask
:用於指定模型應關注哪些詞元的索引列表。
構建一個“快速”的 DPRReader 分詞器(由 HuggingFace 的 tokenizers 庫支援)。
DPRReaderTokenizerFast 與 BertTokenizerFast 幾乎完全相同,並執行端到端的分詞:標點符號分割和 wordpiece。不同之處在於它有三個輸入字串:question、titles 和 texts,它們被組合起來輸入到 DPRReader 模型中。
有關引數的使用示例和文件,請參閱超類 BertTokenizerFast。
返回一個包含輸入字串詞元 ID 以及其他資訊以供 .decode_best_spans
使用的字典。它使用分詞器和詞彙表將問題字串和不同段落(標題和文字)轉換為 ID 序列(整數)。結果 input_ids
是一個大小為 (n_passages, sequence_length)
的矩陣,格式如下:
[CLS] <問題詞元 ID> [SEP] <標題 ID> [SEP] <文字 ID>
DPR 特定輸出
class transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput
< 原始碼 >( pooler_output: FloatTensor hidden_states: typing.Optional[tuple[torch.FloatTensor, ...]] = None attentions: typing.Optional[tuple[torch.FloatTensor, ...]] = None )
引數
- pooler_output (
torch.FloatTensor
,形狀為(batch_size, embeddings_size)
) — DPR 編碼器輸出的 pooler_output,對應於上下文表示。序列的第一個詞元(分類詞元)的最後一層隱藏狀態經過線性層進一步處理。此輸出用於將上下文嵌入,以便與問題嵌入進行最近鄰查詢。 - 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 之後的注意力權重,用於計算自注意力頭中的加權平均值。
DPRQuestionEncoder 的輸出類。
class transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput
< 原始碼 >( pooler_output: FloatTensor hidden_states: typing.Optional[tuple[torch.FloatTensor, ...]] = None attentions: typing.Optional[tuple[torch.FloatTensor, ...]] = None )
引數
- pooler_output (
torch.FloatTensor
,形狀為(batch_size, embeddings_size)
) — DPR 編碼器輸出的 pooler_output,對應於問題表示。序列的第一個詞元(分類詞元)的最後一層隱藏狀態經過線性層進一步處理。此輸出用於將問題嵌入,以便與上下文嵌入進行最近鄰查詢。 - 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 之後的注意力權重,用於計算自注意力頭中的加權平均值。
DPRQuestionEncoder 的輸出類。
class transformers.DPRReaderOutput
< 原始碼 >( start_logits: FloatTensor end_logits: typing.Optional[torch.FloatTensor] = None relevance_logits: typing.Optional[torch.FloatTensor] = None hidden_states: typing.Optional[tuple[torch.FloatTensor, ...]] = None attentions: typing.Optional[tuple[torch.FloatTensor, ...]] = None )
引數
- start_logits (
torch.FloatTensor
,形狀為(n_passages, sequence_length)
) — 每個段落答案範圍起始索引的 logits。 - end_logits (
torch.FloatTensor
,形狀為(n_passages, sequence_length)
) — 每個段落答案範圍結束索引的 logits。 - relevance_logits (
torch.FloatTensor
,形狀為(n_passages, )
) — DPRReader 的問答分類器輸出,對應於每個段落回答問題的分數,與其他所有段落進行比較。 - 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 之後的注意力權重,用於計算自注意力頭中的加權平均值。
DPRQuestionEncoder 的輸出類。
DPRContextEncoder
class transformers.DPRContextEncoder
< 原始碼 >( config: DPRConfig )
引數
- config (DPRConfig) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法來載入模型權重。
裸的 DPRContextEncoder transformer,輸出池化輸出作為上下文表示。
該模型繼承自 PreTrainedModel。請檢視超類文件,瞭解該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< 原始碼 >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列詞元的索引。為匹配預訓練,DPR 輸入序列應使用 [CLS] 和 [SEP] 詞元進行格式化,如下所示:(a) 對於序列對(例如,一對 title+text):
返回
transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput 或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或當 config.return_dict=False
時),根據配置 (DPRConfig) 和輸入包含各種元素。
-
pooler_output (
torch.FloatTensor
,形狀為(batch_size, embeddings_size)
) — DPR 編碼器輸出的 pooler_output,對應於上下文表示。序列的第一個詞元(分類詞元)的最後一層隱藏狀態經過線性層進一步處理。此輸出用於將上下文嵌入,以便與問題嵌入進行最近鄰查詢。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
DPRContextEncoder 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的流程需要在此函式中定義,但之後應該呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import DPRContextEncoder, DPRContextEncoderTokenizer
>>> tokenizer = DPRContextEncoderTokenizer.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base")
>>> model = DPRContextEncoder.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base")
>>> input_ids = tokenizer("Hello, is my dog cute ?", return_tensors="pt")["input_ids"]
>>> embeddings = model(input_ids).pooler_output
DPRQuestionEncoder
class transformers.DPRQuestionEncoder
< 原始碼 >( config: DPRConfig )
引數
- config (DPRConfig) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
一個基本的 DPRQuestionEncoder transformer,將池化器輸出作為問題表示。
該模型繼承自 PreTrainedModel。請檢視超類文件,瞭解該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< 原始碼 >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列標記的索引。為了匹配預訓練,DPR 輸入序列應使用 [CLS] 和 [SEP] 標記格式化,如下所示:(a) 對於序列對(例如,標題+文字對):
返回
transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput 或一個 torch.FloatTensor
元組(如果傳遞 return_dict=False
或當 config.return_dict=False
時),根據配置(DPRConfig)和輸入,包含各種元素。
-
pooler_output (
torch.FloatTensor
,形狀為(batch_size, embeddings_size)
) — DPR 編碼器輸出的 pooler_output 對應於問題表示。它是序列第一個標記(分類標記)的最後一層隱藏狀態,再經過一個線性層處理。此輸出用於將問題嵌入,以便與上下文嵌入進行最近鄰查詢。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
DPRQuestionEncoder 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的流程需要在此函式中定義,但之後應該呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import DPRQuestionEncoder, DPRQuestionEncoderTokenizer
>>> tokenizer = DPRQuestionEncoderTokenizer.from_pretrained("facebook/dpr-question_encoder-single-nq-base")
>>> model = DPRQuestionEncoder.from_pretrained("facebook/dpr-question_encoder-single-nq-base")
>>> input_ids = tokenizer("Hello, is my dog cute ?", return_tensors="pt")["input_ids"]
>>> embeddings = model(input_ids).pooler_output
DPRReader
class transformers.DPRReader
< 原始碼 >( config: DPRConfig )
引數
- config (DPRConfig) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
一個基本的 DPRReader transformer,輸出跨度預測。
該模型繼承自 PreTrainedModel。請檢視超類文件,瞭解該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< 原始碼 >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.dpr.modeling_dpr.DPRReaderOutput 或 tuple(torch.FloatTensor)
引數
- input_ids (
tuple[torch.LongTensor]
,形狀為(n_passages, sequence_length)
) — 詞彙表中輸入序列標記的索引。它必須是一個序列三元組,包含 1) 問題,2) 段落標題和 3) 段落文字。為了匹配預訓練,DPRinput_ids
序列應使用 [CLS] 和 [SEP] 格式化,格式如下:[CLS] <question token ids> [SEP] <titles ids> [SEP] <texts ids>
DPR 是一個具有絕對位置嵌入的模型,因此通常建議在右側而不是左側填充輸入。
索引可以使用 DPRReaderTokenizer 獲得。更多詳細資訊請參閱此類文件。
- attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充標記索引執行注意力機制的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示標記未被遮蓋,
- 0 表示標記被遮蓋。
- inputs_embeds (
torch.FloatTensor
,形狀為(n_passages, sequence_length, hidden_size)
,可選) — 可以選擇直接傳遞嵌入式表示,而不是傳遞input_ids
。如果你想比模型內部的嵌入查詢矩陣更好地控制如何將input_ids
索引轉換為相關向量,這會很有用。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
,可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.models.dpr.modeling_dpr.DPRReaderOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.dpr.modeling_dpr.DPRReaderOutput 或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),根據配置 (DPRConfig) 和輸入,包含各種元素。
-
start_logits (
torch.FloatTensor
,形狀為(n_passages, sequence_length)
) — 每個段落中答案範圍起始索引的 logits。 -
end_logits (
torch.FloatTensor
,形狀為(n_passages, sequence_length)
) — 每個段落中答案範圍結束索引的 logits。 -
relevance_logits (
torch.FloatTensor
,形狀為(n_passages, )
) — DPRReader 的 QA 分類器的輸出,對應於每個段落回答問題的分數,與其他所有段落進行比較。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
DPRReader 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的流程需要在此函式中定義,但之後應該呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import DPRReader, DPRReaderTokenizer
>>> tokenizer = DPRReaderTokenizer.from_pretrained("facebook/dpr-reader-single-nq-base")
>>> model = DPRReader.from_pretrained("facebook/dpr-reader-single-nq-base")
>>> encoded_inputs = tokenizer(
... questions=["What is love ?"],
... titles=["Haddaway"],
... texts=["'What Is Love' is a song recorded by the artist Haddaway"],
... return_tensors="pt",
... )
>>> outputs = model(**encoded_inputs)
>>> start_logits = outputs.start_logits
>>> end_logits = outputs.end_logits
>>> relevance_logits = outputs.relevance_logits
TFDPRContextEncoder
class transformers.TFDPRContextEncoder
< 原始碼 >( config: DPRConfig *args **kwargs )
引數
- config (DPRConfig) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
裸的 DPRContextEncoder transformer,輸出池化輸出作為上下文表示。
此模型繼承自 TFPreTrainedModel。請檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是一個 Tensorflow keras.Model 子類。可以像常規的 TF 2.0 Keras 模型一樣使用它,並參考 TF 2.0 文件瞭解所有與一般用法和行為相關的事項。
transformers
中的 TensorFlow 模型和層接受兩種輸入格式
- 所有輸入作為關鍵字引數(如 PyTorch 模型),或
- 所有輸入作為第一個位置引數中的列表、元組或字典。
支援第二種格式的原因是,Keras 方法在向模型和層傳遞輸入時更喜歡這種格式。由於這種支援,當使用像 `model.fit()` 這樣的方法時,事情應該“自然而然”地為你工作——只需以 `model.fit()` 支援的任何格式傳遞你的輸入和標籤!但是,如果你想在 Keras 方法(如 `fit()` 和 `predict()`)之外使用第二種格式,例如在使用 Keras `Functional` API 建立自己的層或模型時,有三種可能性可以用來將所有輸入張量收集到第一個位置引數中。
- 只有一個
input_ids
的單個張量,沒有其他:model(input_ids)
- 長度可變的列表,包含一個或多個輸入張量,按文件字串中給出的順序:
model([input_ids, attention_mask])
或model([input_ids, attention_mask, token_type_ids])
- 一個字典,其中包含一個或多個與文件字串中給出的輸入名稱關聯的輸入張量:
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
請注意,當透過子類化建立模型和層時,您無需擔心任何這些,因為您可以像呼叫任何其他 Python 函式一樣傳遞輸入!
呼叫
< 原始碼 >( input_ids: TFModelInputType | None = None attention_mask: tf.Tensor | None = None token_type_ids: tf.Tensor | None = None inputs_embeds: tf.Tensor | None = None output_attentions: bool | None = None output_hidden_states: bool | None = None return_dict: bool | None = None training: bool = False ) → transformers.models.dpr.modeling_tf_dpr.TFDPRContextEncoderOutput
或 tuple(tf.Tensor)
引數
- input_ids (
Numpy 陣列
或tf.Tensor
,形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列標記的索引。為了匹配預訓練,DPR 輸入序列應使用 [CLS] 和 [SEP] 標記格式化,如下所示:(a) 對於序列對(例如,標題+文字對):
返回
transformers.models.dpr.modeling_tf_dpr.TFDPRContextEncoderOutput
或 tuple(tf.Tensor)
一個 transformers.models.dpr.modeling_tf_dpr.TFDPRContextEncoderOutput
或一個 tf.Tensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),根據配置 (DPRConfig) 和輸入,包含各種元素。
-
pooler_output (
tf.Tensor
,形狀為(batch_size, embeddings_size)
) — DPR 編碼器輸出的 pooler_output 對應於上下文表示。它是序列第一個標記(分類標記)的最後一層隱藏狀態,再經過一個線性層處理。此輸出用於將上下文嵌入,以便與問題嵌入進行最近鄰查詢。 -
hidden_states (
tuple(tf.Tensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —tf.Tensor
的元組(一個是嵌入的輸出 + 一個是每層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態加上初始嵌入輸出。
-
attentions (
tuple(tf.Tensor)
,可選,當傳遞output_attentions=True
或config.output_attentions=True
時返回) —tf.Tensor
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
TFDPRContextEncoder 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的流程需要在此函式中定義,但之後應該呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import TFDPRContextEncoder, DPRContextEncoderTokenizer
>>> tokenizer = DPRContextEncoderTokenizer.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base")
>>> model = TFDPRContextEncoder.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base", from_pt=True)
>>> input_ids = tokenizer("Hello, is my dog cute ?", return_tensors="tf")["input_ids"]
>>> embeddings = model(input_ids).pooler_output
TFDPRQuestionEncoder
class transformers.TFDPRQuestionEncoder
< 原始碼 >( config: DPRConfig *args **kwargs )
引數
- config (DPRConfig) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
一個基本的 DPRQuestionEncoder transformer,將池化器輸出作為問題表示。
此模型繼承自 TFPreTrainedModel。請檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是一個 Tensorflow keras.Model 子類。可以像常規的 TF 2.0 Keras 模型一樣使用它,並參考 TF 2.0 文件瞭解所有與一般用法和行為相關的事項。
transformers
中的 TensorFlow 模型和層接受兩種輸入格式
- 所有輸入作為關鍵字引數(如 PyTorch 模型),或
- 所有輸入作為第一個位置引數中的列表、元組或字典。
支援第二種格式的原因是,Keras 方法在向模型和層傳遞輸入時更喜歡這種格式。由於這種支援,當使用像 `model.fit()` 這樣的方法時,事情應該“自然而然”地為你工作——只需以 `model.fit()` 支援的任何格式傳遞你的輸入和標籤!但是,如果你想在 Keras 方法(如 `fit()` 和 `predict()`)之外使用第二種格式,例如在使用 Keras `Functional` API 建立自己的層或模型時,有三種可能性可以用來將所有輸入張量收集到第一個位置引數中。
- 只有一個
input_ids
的單個張量,沒有其他:model(input_ids)
- 長度可變的列表,包含一個或多個輸入張量,按文件字串中給出的順序:
model([input_ids, attention_mask])
或model([input_ids, attention_mask, token_type_ids])
- 一個字典,其中包含一個或多個與文件字串中給出的輸入名稱關聯的輸入張量:
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
請注意,當透過子類化建立模型和層時,您無需擔心任何這些,因為您可以像呼叫任何其他 Python 函式一樣傳遞輸入!
呼叫
< 原始碼 >( input_ids: TFModelInputType | None = None attention_mask: tf.Tensor | None = None token_type_ids: tf.Tensor | None = None inputs_embeds: tf.Tensor | None = None output_attentions: bool | None = None output_hidden_states: bool | None = None return_dict: bool | None = None training: bool = False ) → transformers.models.dpr.modeling_tf_dpr.TFDPRQuestionEncoderOutput
或 tuple(tf.Tensor)
引數
- input_ids (
Numpy 陣列
或tf.Tensor
,形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列標記的索引。為了匹配預訓練,DPR 輸入序列應使用 [CLS] 和 [SEP] 標記格式化,如下所示:(a) 對於序列對(例如,標題+文字對):
返回
transformers.models.dpr.modeling_tf_dpr.TFDPRQuestionEncoderOutput
或 tuple(tf.Tensor)
一個 transformers.models.dpr.modeling_tf_dpr.TFDPRQuestionEncoderOutput
或一個 tf.Tensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),根據配置 (DPRConfig) 和輸入,包含各種元素。
-
pooler_output (
tf.Tensor
,形狀為(batch_size, embeddings_size)
) — DPR 編碼器輸出的 pooler_output 對應於問題表示。它是序列第一個標記(分類標記)的最後一層隱藏狀態,再經過一個線性層處理。此輸出用於將問題嵌入,以便與上下文嵌入進行最近鄰查詢。 -
hidden_states (
tuple(tf.Tensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —tf.Tensor
的元組(一個是嵌入的輸出 + 一個是每層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態加上初始嵌入輸出。
-
attentions (
tuple(tf.Tensor)
,可選,當傳遞output_attentions=True
或config.output_attentions=True
時返回) —tf.Tensor
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
TFDPRQuestionEncoder 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的流程需要在此函式中定義,但之後應該呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import TFDPRQuestionEncoder, DPRQuestionEncoderTokenizer
>>> tokenizer = DPRQuestionEncoderTokenizer.from_pretrained("facebook/dpr-question_encoder-single-nq-base")
>>> model = TFDPRQuestionEncoder.from_pretrained("facebook/dpr-question_encoder-single-nq-base", from_pt=True)
>>> input_ids = tokenizer("Hello, is my dog cute ?", return_tensors="tf")["input_ids"]
>>> embeddings = model(input_ids).pooler_output
TFDPRReader
class transformers.TFDPRReader
< 原始碼 >( config: DPRConfig *args **kwargs )
引數
- config (DPRConfig) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
一個基本的 DPRReader transformer,輸出跨度預測。
此模型繼承自 TFPreTrainedModel。請檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是一個 Tensorflow keras.Model 子類。可以像常規的 TF 2.0 Keras 模型一樣使用它,並參考 TF 2.0 文件瞭解所有與一般用法和行為相關的事項。
transformers
中的 TensorFlow 模型和層接受兩種輸入格式
- 所有輸入作為關鍵字引數(如 PyTorch 模型),或
- 所有輸入作為第一個位置引數中的列表、元組或字典。
支援第二種格式的原因是,Keras 方法在向模型和層傳遞輸入時更喜歡這種格式。由於這種支援,當使用像 `model.fit()` 這樣的方法時,事情應該“自然而然”地為你工作——只需以 `model.fit()` 支援的任何格式傳遞你的輸入和標籤!但是,如果你想在 Keras 方法(如 `fit()` 和 `predict()`)之外使用第二種格式,例如在使用 Keras `Functional` API 建立自己的層或模型時,有三種可能性可以用來將所有輸入張量收集到第一個位置引數中。
- 只有一個
input_ids
的單個張量,沒有其他:model(input_ids)
- 長度可變的列表,包含一個或多個輸入張量,按文件字串中給出的順序:
model([input_ids, attention_mask])
或model([input_ids, attention_mask, token_type_ids])
- 一個字典,其中包含一個或多個與文件字串中給出的輸入名稱關聯的輸入張量:
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
請注意,當透過子類化建立模型和層時,您無需擔心任何這些,因為您可以像呼叫任何其他 Python 函式一樣傳遞輸入!
呼叫
< 原始碼 >( input_ids: TFModelInputType | None = None attention_mask: tf.Tensor | None = None inputs_embeds: tf.Tensor | None = None output_attentions: bool | None = None output_hidden_states: bool | None = None return_dict: bool | None = None training: bool = False ) → transformers.models.dpr.modeling_tf_dpr.TFDPRReaderOutput
或 tuple(tf.Tensor)
引數
- input_ids (
Numpy 陣列
或tf.Tensor
,形狀為(n_passages, sequence_length)
) — 詞彙表中輸入序列標記的索引。它必須是一個序列三元組,包含 1) 問題,2) 段落標題和 3) 段落文字。為了匹配預訓練,DPRinput_ids
序列應使用 [CLS] 和 [SEP] 格式化,格式如下:[CLS] <question token ids> [SEP] <titles ids> [SEP] <texts ids>
DPR 是一個具有絕對位置嵌入的模型,因此通常建議在右側而不是左側填充輸入。
索引可以使用 DPRReaderTokenizer 獲得。更多詳細資訊請參閱此類文件。
- attention_mask (
Numpy 陣列
或tf.Tensor
,形狀為(n_passages, sequence_length)
,可選) — 用於避免對填充標記索引執行注意力機制的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示標記未被遮蓋,
- 0 表示標記被遮蓋。
- inputs_embeds (
Numpy 陣列
或tf.Tensor
,形狀為(n_passages, sequence_length, hidden_size)
,可選) — 可以選擇直接傳遞嵌入式表示,而不是傳遞input_ids
。如果你想比模型內部的嵌入查詢矩陣更好地控制如何將input_ids
索引轉換為相關向量,這會很有用。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。此引數只能在 eager 模式下使用,在 graph 模式下將使用配置中的值。 - return_dict (
bool
,可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。此引數可以在 eager 模式下使用,在 graph 模式下該值將始終設定為 True。 - training (
bool
,可選,預設為False
) — 是否以訓練模式使用模型(某些模組如 dropout 模組在訓練和評估之間有不同的行為)。
返回
transformers.models.dpr.modeling_tf_dpr.TFDPRReaderOutput
或 tuple(tf.Tensor)
一個 transformers.models.dpr.modeling_tf_dpr.TFDPRReaderOutput
或一個 tf.Tensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),根據配置 (DPRConfig) 和輸入,包含各種元素。
-
start_logits (
tf.Tensor
,形狀為(n_passages, sequence_length)
) — 每個段落中答案範圍起始索引的 logits。 -
end_logits (
tf.Tensor
,形狀為(n_passages, sequence_length)
) — 每個段落中答案範圍結束索引的 logits。 -
relevance_logits (
tf.Tensor
,形狀為(n_passages, )
) — DPRReader 的 QA 分類器的輸出,對應於每個段落回答問題的分數,與其他所有段落進行比較。 -
hidden_states (
tuple(tf.Tensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —tf.Tensor
的元組(一個是嵌入的輸出 + 一個是每層的輸出),形狀為(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 後的注意力權重,用於計算自注意力頭中的加權平均值。
TFDPRReader 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的流程需要在此函式中定義,但之後應該呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import TFDPRReader, DPRReaderTokenizer
>>> tokenizer = DPRReaderTokenizer.from_pretrained("facebook/dpr-reader-single-nq-base")
>>> model = TFDPRReader.from_pretrained("facebook/dpr-reader-single-nq-base", from_pt=True)
>>> encoded_inputs = tokenizer(
... questions=["What is love ?"],
... titles=["Haddaway"],
... texts=["'What Is Love' is a song recorded by the artist Haddaway"],
... return_tensors="tf",
... )
>>> outputs = model(encoded_inputs)
>>> start_logits = outputs.start_logits
>>> end_logits = outputs.end_logits
>>> relevance_logits = outputs.relevance_logits