RetriBERT
该模型目前处于维护模式,因此我们不会接受任何更改其代码的新PR。
如果您在运行此模型时遇到任何问题,请重新安装支持此模型的最后一个版本:v4.30.0。
您可以通过运行以下命令来执行此操作:pip install -U transformers==4.30.0
。
概述
RetriBERT模型是在博客文章Explain Anything Like I’m Five: A Model for Open Domain Long Form Question Answering中提出的。RetriBERT是一个小型模型,它使用一个或一对BERT编码器,并通过低维投影进行文本的密集语义索引。
该模型由yjernite贡献。训练和使用该模型的代码可以在这里找到。
RetriBertConfig
类 transformers.RetriBertConfig
< source >( vocab_size = 30522 hidden_size = 768 num_hidden_layers = 8 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 share_encoders = True projection_dim = 128 pad_token_id = 0 **kwargs )
参数
- vocab_size (
int
, 可选, 默认为 30522) — RetriBERT 模型的词汇表大小。定义了可以通过调用 RetriBertModel 时传递的inputs_ids
表示的不同标记的数量 - hidden_size (
int
, optional, 默认为 768) — 编码器层和池化层的维度。 - num_hidden_layers (
int
, optional, 默认为 12) — Transformer 编码器中的隐藏层数量。 - num_attention_heads (
int
, optional, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数。 - intermediate_size (
int
, optional, 默认为 3072) — Transformer 编码器中“中间”(通常称为前馈)层的维度。 - hidden_act (
str
或function
, 可选, 默认为"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
,"relu"
,"silu"
和"gelu_new"
. - hidden_dropout_prob (
float
, optional, 默认为 0.1) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。 - attention_probs_dropout_prob (
float
, optional, defaults to 0.1) — 注意力概率的丢弃比例。 - max_position_embeddings (
int
, optional, 默认为 512) — 此模型可能使用的最大序列长度。通常将其设置为较大的值以防万一(例如,512 或 1024 或 2048)。 - type_vocab_size (
int
, 可选, 默认为 2) — 传递给BertModel的token_type_ids的词汇表大小。 - initializer_range (
float
, optional, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - layer_norm_eps (
float
, optional, defaults to 1e-12) — 层归一化层使用的epsilon值。 - share_encoders (
bool
, 可选, 默认为True
) — 是否对查询和文档使用相同的Bert类型编码器 - projection_dim (
int
, optional, defaults to 128) — 投影后查询和文档表示的最终维度
这是用于存储RetriBertModel配置的配置类。它用于根据指定的参数实例化一个RetriBertModel模型,定义模型架构。使用默认值实例化配置将产生与RetriBERT yjernite/retribert-base-uncased架构类似的配置。
配置对象继承自PretrainedConfig,可用于控制模型输出。阅读PretrainedConfig的文档以获取更多信息。
RetriBertTokenizer
类 transformers.RetriBertTokenizer
< source >( 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 )
参数
- vocab_file (
str
) — 包含词汇表的文件。 - do_lower_case (
bool
, 可选, 默认为True
) — 是否在分词时将输入转换为小写。 - do_basic_tokenize (
bool
, optional, defaults toTrue
) — 是否在WordPiece之前进行基本的分词。 - never_split (
Iterable
, 可选) — 在分词过程中永远不会被分割的标记集合。仅在do_basic_tokenize=True
- unk_token (
str
, optional, defaults to"[UNK]"
) — 未知标记。不在词汇表中的标记无法转换为ID,而是设置为这个标记。 - sep_token (
str
, optional, defaults to"[SEP]"
) — 分隔符标记,用于从多个序列构建序列时,例如用于序列分类的两个序列或用于问答的文本和问题。它也用作使用特殊标记构建的序列的最后一个标记。 - pad_token (
str
, optional, 默认为"[PAD]"
) — 用于填充的标记,例如在批处理不同长度的序列时使用。 - cls_token (
str
, 可选, 默认为"[CLS]"
) — 用于序列分类的分类器标记(对整个序列进行分类而不是对每个标记进行分类)。当使用特殊标记构建时,它是序列的第一个标记。 - mask_token (
str
, 可选, 默认为"[MASK]"
) — 用于屏蔽值的标记。这是在训练此模型时用于屏蔽语言建模的标记。这是模型将尝试预测的标记。 - tokenize_chinese_chars (
bool
, 可选, 默认为True
) — 是否对中文字符进行分词。对于日语,这可能需要停用(参见此 issue)。 - strip_accents (
bool
, optional) — 是否去除所有重音符号。如果未指定此选项,则将由lowercase
的值决定(如原始BERT中所示)。
构建一个RetriBERT分词器。
RetriBertTokenizer 与 BertTokenizer 相同,并执行端到端的分词:标点符号分割和词片段。
此分词器继承自PreTrainedTokenizer,其中包含了大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。
build_inputs_with_special_tokens
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None ) → List[int]
通过连接和添加特殊标记,从序列或序列对构建序列分类任务的模型输入。BERT序列的格式如下:
- 单一序列:
[CLS] X [SEP]
- 序列对:
[CLS] A [SEP] B [SEP]
将一系列标记(字符串)转换为单个字符串。
create_token_type_ids_from_sequences
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None ) → List[int]
从传递给序列对分类任务的两个序列中创建一个掩码。一个BERT序列
如果 token_ids_1
是 None
,此方法仅返回掩码的第一部分(0s)。
get_special_tokens_mask
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None already_has_special_tokens: bool = False ) → List[int]
从没有添加特殊标记的标记列表中检索序列ID。当使用标记器的prepare_for_model
方法添加特殊标记时,会调用此方法。
RetriBertTokenizerFast
类 transformers.RetriBertTokenizerFast
< source >( 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 )
参数
- vocab_file (
str
) — 包含词汇表的文件。 - do_lower_case (
bool
, optional, defaults toTrue
) — 是否在分词时将输入转换为小写。 - unk_token (
str
, optional, defaults to"[UNK]"
) — 未知标记。不在词汇表中的标记无法转换为ID,而是设置为这个标记。 - sep_token (
str
, optional, defaults to"[SEP]"
) — 分隔符标记,用于从多个序列构建序列时,例如用于序列分类的两个序列或用于问答的文本和问题。它也用作使用特殊标记构建的序列的最后一个标记。 - pad_token (
str
, optional, defaults to"[PAD]"
) — 用于填充的标记,例如在对不同长度的序列进行批处理时使用。 - cls_token (
str
, 可选, 默认为"[CLS]"
) — 用于序列分类的分类器标记(对整个序列进行分类,而不是对每个标记进行分类)。当使用特殊标记构建时,它是序列的第一个标记。 - mask_token (
str
, optional, defaults to"[MASK]"
) — 用于屏蔽值的令牌。这是在训练此模型时使用的令牌,用于屏蔽语言建模。这是模型将尝试预测的令牌。 - clean_text (
bool
, optional, 默认为True
) — 是否在分词前通过移除任何控制字符并用经典空格替换所有空格来清理文本。 - tokenize_chinese_chars (
bool
, 可选, 默认为True
) — 是否对中文字符进行分词。对于日语,可能需要停用此功能(参见 此问题)。 - strip_accents (
bool
, optional) — 是否去除所有重音符号。如果未指定此选项,则将由lowercase
的值决定(如原始BERT中所示)。 - wordpieces_prefix (
str
, optional, defaults to"##"
) — 子词的前缀。
构建一个“快速”的RetriBERT分词器(由HuggingFace的tokenizers库支持)。
RetriBertTokenizerFast 与 BertTokenizerFast 相同,并运行端到端的分词:标点符号分割和词片段。
这个分词器继承自PreTrainedTokenizerFast,其中包含了大部分主要方法。用户应参考这个超类以获取有关这些方法的更多信息。
build_inputs_with_special_tokens
< source >( token_ids_0 token_ids_1 = 无 ) → List[int]
通过连接和添加特殊标记,从序列或序列对构建序列分类任务的模型输入。BERT序列的格式如下:
- 单一序列:
[CLS] X [SEP]
- 序列对:
[CLS] A [SEP] B [SEP]
create_token_type_ids_from_sequences
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None ) → List[int]
从传递给序列对分类任务的两个序列中创建一个掩码。一个BERT序列
如果 token_ids_1
是 None
,此方法仅返回掩码的第一部分(0s)。
RetriBertModel
类 transformers.RetriBertModel
< source >( config: RetriBertConfig )
参数
- config (RetriBertConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
基于Bert的模型,用于嵌入查询或文档以进行文档检索。
该模型继承自PreTrainedModel。请查看超类文档以了解库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入的大小、修剪头部等)。
该模型也是一个PyTorch torch.nn.Module 子类。 将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。
前进
< source >( input_ids_query: LongTensor attention_mask_query: typing.Optional[torch.FloatTensor] input_ids_doc: LongTensor attention_mask_doc: typing.Optional[torch.FloatTensor] checkpoint_batch_size: int = -1 ) → `torch.FloatTensor“
参数
- input_ids_query (
torch.LongTensor
of shape(batch_size, sequence_length)
) — Indices of input sequence tokens in the vocabulary for the queries in a batch.可以使用AutoTokenizer获取索引。详情请参见PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
- attention_mask_query (
torch.FloatTensor
of shape(batch_size, sequence_length)
, optional) — Mask to avoid performing attention on padding token indices. Mask values selected in[0, 1]
:- 1 for tokens that are not masked,
- 0 for tokens that are masked.
- input_ids_doc (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 批次中文档的词汇表中输入序列标记的索引。 - attention_mask_doc (
torch.FloatTensor
of shape(batch_size, sequence_length)
, optional) — 用于避免在文档填充标记索引上执行注意力操作的掩码。 - checkpoint_batch_size (
int
, 可选, 默认为-1
) — 如果大于0,则使用梯度检查点技术,仅在GPU上一次计算checkpoint_batch_size
个样本的序列表示。批次中的所有查询表示仍然与所有文档表示进行比较。
返回
`torch.FloatTensor`
在尝试将每个查询与其对应的文档匹配以及将每个文档与其对应的查询匹配时获得的双向交叉熵损失