DPR
原文:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/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,是事实上的方法。在这项工作中,我们展示了检索可以仅使用密集表示来实现,其中通过简单的双编码器框架从少量问题和段落中学习嵌入。在广泛的开放域 QA 数据集上评估时,我们的密集检索器在前 20 个段落检索准确性方面大幅优于强大的 Lucene-BM25 系统,帮助我们的端到端 QA 系统在多个开放域 QA 基准上建立了新的最先进水平。
使用提示
- 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
, optional, defaults to 30522) — DPR 模型的词汇表大小。定义了传递给 BertModel 的inputs_ids的不同标记。hidden_size
(int
, optional, defaults to 768) — 编码器层和池化器层的维度。num_hidden_layers
(int
, optional, defaults to 12) — Transformer 编码器中的隐藏层数。num_attention_heads
(int
, optional, defaults to 12) — Transformer 编码器中每个注意力层的注意力头数。intermediate_size
(int
, optional, defaults to 3072) — Transformer 编码器中“中间”(即前馈)层的维度。hidden_act
(str
orfunction
, optional, defaults to"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"silu"
和"gelu_new"
。hidden_dropout_prob
(float
, optional, defaults to 0.1) — 嵌入、编码器和池化器中所有全连接层的丢弃概率。attention_probs_dropout_prob
(float
, optional, defaults to 0.1) — 注意力概率的丢弃比率。max_position_embeddings
(int
, optional, defaults to 512) — 此模型可能使用的最大序列长度。通常将其设置为较大的值以防万一(例如 512、1024 或 2048)。type_vocab_size
(int
, optional, defaults to 2) — 传递给 BertModel 的token_type_ids的词汇表大小。initializer_range
(float
, optional, defaults to 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。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"
的更多信息,请参考Self-Attention with Relative Position Representations (Shaw et al.)。有关"relative_key_query"
的更多信息,请参考Improve Transformer Models with Better Relative Position Embeddings (Huang et al.)中的Method 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 **kwargs )
构建一个 DPRContextEncoder 分词器。
DPRContextEncoderTokenizer 与 BertTokenizer 相同,进行端到端的标记化:标点符号拆分和 wordpiece。
参考超类 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 相同,进行端到端的标记化:标点符号拆分和 wordpiece。
参考超类 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 **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 相同,并且进行端到端的标记化:标点符号拆分和词片。
有关用法示例和有关参数的文档,请参考超类 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 **kwargs ) → export const metadata = 'undefined';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。不同之处在于它有三个输入字符串:问题、标题和文本,这些字符串被组合在一起供 DPRReader 模型使用。
有关用法示例和参数文档,请参考超类 BertTokenizer。
返回一个字典,其中包含输入字符串的标记 id 和其他信息,以提供给 .decode_best_spans
。它使用标记器和词汇将问题和不同段落(标题和文本)的字符串转换为 ID(整数)序列。生成的 input_ids
是大小为 (n_passages, sequence_length)
的矩阵。
格式如下:
[CLS] <question token ids> [SEP] <titles ids> [SEP] <texts ids>
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 ) → export const metadata = 'undefined';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 相同,并且运行端到端的分词:标点符号拆分和词片。不同之处在于它有三个输入字符串:问题、标题和文本,这些字符串被组合在一起馈送给 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: Optional = None attentions: Optional = 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
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(一个用于嵌入输出,一个用于每一层的输出)。
模型在每一层输出的隐藏状态以及初始嵌入输出。attentions
(tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每层一个)。
注意力权重在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
DPRQuestionEncoder 的输出类。
class transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput
( pooler_output: FloatTensor hidden_states: Optional = None attentions: Optional = 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
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(一个用于嵌入输出,一个用于每一层的输出)。
模型在每一层输出的隐藏状态以及初始嵌入输出。attentions
(tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每层一个)。
注意力权重在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
DPRQuestionEncoder 的输出类。
class transformers.DPRReaderOutput
( start_logits: FloatTensor end_logits: FloatTensor = None relevance_logits: FloatTensor = None hidden_states: Optional = None attentions: Optional = 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 的 QA 分类器的输出,对应于每个段落回答问题的分数,与所有其他段落进行比较。hidden_states
(tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(一个用于嵌入输出,一个用于每一层的输出)。
模型在每一层输出的隐藏状态以及初始嵌入输出。attentions
(tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回) - 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每个层一个)。
在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
用于 DPRQuestionEncoder 的输出类。
Pytorch 隐藏 Pytorch 内容
DPRContextEncoder
class transformers.DPRContextEncoder
( config: DPRConfig )
参数
config
(DPRConfig) - 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。
裸的 DPRContextEncoder 变压器输出池化器输出作为上下文表示。
该模型继承自 PreTrainedModel。查看超类文档以获取库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入、修剪头等)。
该模型还是一个 PyTorch torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取与一般用法和行为相关的所有内容。
forward
( input_ids: Optional = None attention_mask: Optional = None token_type_ids: Optional = None inputs_embeds: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput or tuple(torch.FloatTensor)
参数
input_ids
(形状为(batch_size, sequence_length)
的torch.LongTensor
) - 词汇表中输入序列标记的索引。为了匹配预训练,DPR 输入序列应按照以下格式进行格式化:[CLS]和[SEP]标记。
(a)对于序列对(例如标题+文本对):
返回
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
(形状为(batch_size, embeddings_size)
的torch.FloatTensor
) - DPR 编码器输出对应于上下文表示的pooler_output。序列的第一个标记(分类标记)的最后一层隐藏状态,进一步由线性层处理。此输出用于嵌入上下文以进行最近邻查询与问题嵌入。hidden_states
(tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) - 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(一个用于嵌入的输出 + 一个用于每个层的输出)。
模型在每个层的输出以及初始嵌入输出的隐藏状态。attentions
(tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回) - 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组。
在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
DPRContextEncoder 的前向方法,覆盖了__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 变压器输出池化器输出作为问题表示。
这个模型继承自 PreTrainedModel。查看超类文档以获取库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
这个模型也是一个 PyTorch torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取与一般用法和行为相关的所有内容。
forward
( input_ids: Optional = None attention_mask: Optional = None token_type_ids: Optional = None inputs_embeds: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput or 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
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(一个用于嵌入输出,一个用于每一层的输出)。
模型在每一层输出的隐藏状态加上初始嵌入输出。attentions
(tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每层一个)。
在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
DPRQuestionEncoder 的前向方法,覆盖了__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
Transformers 4.37 中文文档(三十)(2)https://developer.aliyun.com/article/1564673