Transformers documentation

RAG

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

该模型于 2020-05-22 在 HF papers 上发布,并于 2020-11-16 贡献给 Hugging Face Transformers。

RAG

FlashAttention

检索增强生成(RAG)通过预训练的神经检索器,将预训练语言模型(参数化记忆)与外部数据源(非参数化记忆)相结合。RAG 在推理阶段获取相关段落,并基于这些段落来条件化其生成过程。这通常能使答案更具事实性,并且允许通过更改索引来更新知识,而无需重新训练整个模型。

您可以在 AI at Meta 组织下找到所有原始的 RAG 检查点。

该模型由 ola13 贡献。

点击右侧边栏中的 RAG 模型,以查看将 RAG 应用于不同语言任务的更多示例。

以下示例演示了如何使用 AutoModel 生成文本。

AutoModel
from transformers import RagRetriever, RagSequenceForGeneration, RagTokenizer


tokenizer = RagTokenizer.from_pretrained("facebook/rag-sequence-nq")
retriever = RagRetriever.from_pretrained(
    "facebook/rag-sequence-nq", dataset="wiki_dpr", index_name="compressed"
)

model = RagSequenceForGeneration.from_pretrained(
    "facebook/rag-sequence-nq",
    retriever=retriever,
    attn_implementation="flash_attention_2",
    device_map="auto",
)
inputs = tokenizer("How many people live in Paris?", return_tensors="pt").to(model.device)
generated = model.generate(input_ids=inputs["input_ids"])
print(tokenizer.batch_decode(generated, skip_special_tokens=True)[0])

量化通过以较低精度存储权重来减少内存占用。有关支持的后端,请参阅量化概述。 以下示例使用bitsandbytes将权重量化为 4 位。

import torch

from transformers import BitsAndBytesConfig, RagRetriever, RagSequenceForGeneration, RagTokenizer


bnb = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dtype=torch.bfloat16)

tokenizer = RagTokenizer.from_pretrained("facebook/rag-sequence-nq")
retriever = RagRetriever.from_pretrained(
    "facebook/rag-sequence-nq", dataset="wiki_dpr", index_name="compressed"
)

model = RagSequenceForGeneration.from_pretrained(
    "facebook/rag-sequence-nq",
    retriever=retriever,
    quantization_config=bnb,
    device_map="auto",
)
inputs = tokenizer("How many people live in Paris?", return_tensors="pt").to(model.device)
generated = model.generate(input_ids=inputs["input_ids"])
print(tokenizer.batch_decode(generated, skip_special_tokens=True)[0])

RagConfig

class transformers.RagConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0id2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneis_encoder_decoder: bool = Truequestion_encoder: transformers.configuration_utils.PreTrainedConfig | dict | None = Nonegenerator: transformers.configuration_utils.PreTrainedConfig | dict | None = Nonevocab_size: int | None = Noneprefix: str | None = Nonebos_token_id: int | None = Nonepad_token_id: int | None = Noneeos_token_id: int | list[int] | None = Nonedecoder_start_token_id: int | None = Nonetitle_sep: str = ' / 'doc_sep: str = ' // 'n_docs: int = 5max_combined_length: int = 300retrieval_vector_size: int = 768retrieval_batch_size: int = 8dataset: str = 'wiki_dpr'dataset_split: str = 'train'index_name: str = 'compressed'index_path: str | None = Nonepassages_path: str | None = Noneuse_dummy_dataset: bool = Falsereduce_loss: bool = Falselabel_smoothing: float = 0.0do_deduplication: bool = Trueexclude_bos_score: bool = Falsedo_marginalize: bool = Falseoutput_retrieved: bool = Falseuse_cache: bool = Truedataset_revision: str | None = None )

参数

  • is_encoder_decoder (bool,可选,默认为 True) — 指示该模型是否用作编码器/解码器。
  • question_encoder (PreTrainedConfig | dict,可选) — 问题编码器骨干网络的配置对象或字典
  • generator (PreTrainedConfig | dict,可选) — 答案生成器骨干网络的配置对象或字典
  • vocab_size (int, 可选) — 模型的词汇表大小。定义了 input_ids 可以表示的不同 token 的数量。
  • prefix (str, 可选) — 在将输入传递给生成器模型之前,添加到每个输入开头的字符串前缀。
  • bos_token_id (int, 可选) — 词汇表中用于表示流起始的 Token id。
  • pad_token_id (int, 可选) — 词表中用于填充的 token id。
  • eos_token_id (Union[int, list[int]], 可选) — 词汇表中用于表示流结束(end-of-stream)的 token id。
  • decoder_start_token_id (int, 可选) — 如果编码器-解码器模型使用不同于 bos 的 token 开始解码,则指定该 token 的 id。
  • title_sep (str, 可选,默认为 " / ") — 在调用 RagRetriever 时,插入在检索文档的标题和正文之间的分隔符。
  • doc_sep (str, 可选,默认为 " // ") — 在调用 RagRetriever 时,插入在检索到的文档文本与原始输入之间的分隔符。
  • n_docs (int,可选,默认为 5) — 要检索的文档数量。
  • max_combined_length (int,可选,默认值为 300) — __call__() 返回的带上下文输入的最大长度。
  • retrieval_vector_size (int,可选,默认值为 768) — RagRetriever 所索引的文档嵌入的维度。
  • retrieval_batch_size (int,可选,默认为 8) — 检索批大小,定义为并发向 RagRetriever 封装的 faiss 索引发出的查询数量。
  • dataset (str, 可选,默认为 "wiki_dpr") — HuggingFace Datasets 中已索引数据集的数据集标识符(使用 datasets.list_datasets() 列出所有可用的数据集及其 id)。
  • dataset_split (str,可选,默认为 "train") — 要加载的 dataset 的哪个 split。
  • index_name (str, 可选,默认为 "compressed") — 与 dataset 关联的索引的名称。可以在 "legacy"、"exact" 和 "compressed" 之间进行选择。
  • index_path (str, 可选) — 磁盘上序列化 faiss 索引的路径。
  • passages_path (str, 可选) — 与 faiss 索引兼容的文本段落路径。如果使用 LegacyIndex,则此项为必填。
  • use_dummy_dataset (bool,可选,默认为 False) — 是否加载由 dataset 指定的数据集的“dummy”变体。
  • reduce_loss (bool,可选,默认为 False) — 是否使用 torch.Tensor.sum 操作对 NLL 损失进行归约。
  • label_smoothing(float,可选,默认值为 0.0)— 仅当 return_loss 设置为 True 时有效。控制损失计算中标签平滑的 epsilon 参数值。如果设置为 0,则不执行标签平滑。
  • do_deduplication (bool,可选,默认为 True) — 是否对给定输入来自不同上下文文档的生成结果进行去重。如果在使用分布式后端进行训练,则必须将其设置为 False。
  • exclude_bos_score (bool,可选,默认为 False) — 在计算损失时是否忽略 BOS 标记。
  • do_marginalize (bool,可选,默认为 False) — 如果为 True,则通过 torch.nn.functional.log_softmax 对所有文档的 logits 进行边缘化。
  • output_retrieved (bool,可选,默认为 False) — 如果设置为 True,则会返回 retrieved_doc_embeds、retrieved_doc_ids、context_input_ids 和 context_attention_mask。有关详细信息,请参阅返回的张量。
  • use_cache (bool,可选,默认为 True) — 模型是否应返回最后一次键/值注意力(并非所有模型都使用)。仅当 config.is_decoder=True 或模型为仅解码器生成式模型时相关。
  • dataset_revision (str, 可选,) — 用于检索的 Hugging Face 数据集的版本(commit hash、tag 或 branch)。

这是用于存储 RagModel 配置的类。它根据指定的参数实例化 Rag 模型,并定义模型架构。使用默认值实例化配置将生成与 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。

from_question_encoder_generator_configs

< >

( question_encoder_config: PreTrainedConfiggenerator_config: PreTrainedConfig**kwargs ) → EncoderDecoderConfig

配置对象的实例

从预训练的编码器模型配置和 解码器模型配置实例化一个 EncoderDecoderConfig(或其派生类)。

RagTokenizer

class transformers.RagTokenizer

< >

( question_encodergenerator )

Rag 特定输出

class transformers.models.rag.modeling_rag.RetrievAugLMMarginOutput

< >

( loss: typing.Optional[torch.Tensor] = Nonelogits: typing.Optional[torch.Tensor] = Nonedoc_scores: typing.Optional[torch.Tensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneretrieved_doc_embeds: typing.Optional[torch.Tensor] = Noneretrieved_doc_ids: typing.Optional[torch.LongTensor] = Nonecontext_input_ids: typing.Optional[torch.LongTensor] = Nonecontext_attention_mask: typing.Optional[torch.LongTensor] = Nonequestion_encoder_last_hidden_state: typing.Optional[torch.Tensor] = Nonequestion_enc_hidden_states: tuple[torch.Tensor, ...] | None = Nonequestion_enc_attentions: tuple[torch.Tensor, ...] | None = Nonegenerator_enc_last_hidden_state: typing.Optional[torch.Tensor] = Nonegenerator_enc_hidden_states: tuple[torch.Tensor, ...] | None = Nonegenerator_enc_attentions: tuple[torch.Tensor, ...] | None = Nonegenerator_dec_hidden_states: tuple[torch.Tensor, ...] | None = Nonegenerator_dec_attentions: tuple[torch.Tensor, ...] | None = Nonegenerator_cross_attentions: tuple[torch.Tensor, ...] | None = None )

参数

  • loss (torch.Tensor,形状为 (1,),可选,在提供 labels 时返回) — 语言建模损失。
  • logits (torch.Tensor,形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数。该分数可能是针对每个词汇表标记,在所有文档上边缘化后的结果。
  • doc_scores(形状为 (batch_size, config.n_docs) 的 torch.Tensor)— 每个检索到的文档嵌入(参见 retrieved_doc_embeds)与 question_encoder_last_hidden_state 之间的分数。
  • past_key_values (Cache, 可选, 在以下情况下返回 use_cache=True 被传入或 config.use_cache=True) — 它是一个 Cache 实例。有关更多详细信息,请参阅我们的 kv cache 指南.

    包含解码器中预计算的隐藏状态(注意力块中的键和值),可用于加速顺序解码(参见 past_key_values 输入)。

  • retrieved_doc_embeds(形状为 (batch_size, config.n_docs, hidden_size) 的 torch.Tensor,可选,当 output_retrieved=True 时返回) — 检索器检索到的文档嵌入。与 question_encoder_last_hidden_state 一起用于计算 doc_scores。
  • retrieved_doc_ids (torch.LongTensor,形状为 (batch_size, config.n_docs),可选,当 output_retrieved=True 时返回) — 检索器检索到的嵌入文档的索引。
  • context_input_ids (torch.LongTensor,形状为 (batch_size * config.n_docs, config.max_combined_length),可选,当 output_retrieved=True 时返回) — 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的输入 id。
  • context_attention_mask(形状为 (batch_size * config.n_docs, config.max_combined_length) 的 torch.LongTensor,可选,当 output_retrieved=True 时返回) — 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的注意力掩码。
  • question_encoder_last_hidden_state (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size),可选) — 问题编码器最后一层输出的隐藏状态序列,即模型的池化输出。
  • question_enc_hidden_states (tuple(torch.Tensor), 可选, 在传入 output_hidden_states=True 或 config.output_hidden_states=True) — 的元组 torch.Tensor ((一个对应嵌入层的输出,一个对应每一层的输出),形状为 (batch_size, sequence_length, hidden_size).

    问题编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • question_enc_attentions (tuple(torch.Tensor), 可选, 在传入 output_attentions=True 或 config.output_attentions=True) — 的元组 torch.Tensor ((每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length).

    问题编码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。

  • generator_enc_last_hidden_state (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size),可选) — 模型生成器编码器最后一层输出的隐藏状态序列。
  • generator_enc_hidden_states (tuple(torch.Tensor), 可选, 在传入 output_hidden_states=True 或 config.output_hidden_states=True) — 的元组 torch.Tensor ((一个对应嵌入层的输出,一个对应每一层的输出),形状为 (batch_size, sequence_length, hidden_size).

    生成器编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • generator_enc_attentions (tuple(torch.Tensor), 可选, 在传入 output_attentions=True 或 config.output_attentions=True) — 的元组 torch.Tensor ((每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length).

    生成器编码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。

  • generator_dec_hidden_states (tuple(torch.Tensor), 可选, 在传入 output_hidden_states=True 或 config.output_hidden_states=True) — 的元组 torch.Tensor ((一个用于嵌入的输出,一个用于每一层的输出),形状为 (batch_size, sequence_length, hidden_size).

    生成器解码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • generator_dec_attentions (tuple(torch.Tensor), 可选, 在传入 output_attentions=True 或 config.output_attentions=True) — 的元组 torch.Tensor ((每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length).

    生成器解码器的注意力权重,经过注意力 softmax 之后,用于在自注意力头中计算加权平均值。

  • generator_cross_attentions (tuple(torch.Tensor), 可选, 在传入 output_attentions=True 或 config.output_attentions=True) — 的元组 torch.Tensor ((每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length).

    生成器解码器中交叉注意力的权重,在注意力 softmax 之后,用于在交叉注意力头中计算加权平均值。

检索器增强边际化模型输出的基类。

class transformers.models.rag.modeling_rag.RetrievAugLMOutput

< >

( logits: typing.Optional[torch.Tensor] = Nonedoc_scores: typing.Optional[torch.Tensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneretrieved_doc_embeds: typing.Optional[torch.Tensor] = Noneretrieved_doc_ids: typing.Optional[torch.LongTensor] = Nonecontext_input_ids: typing.Optional[torch.LongTensor] = Nonecontext_attention_mask: typing.Optional[torch.LongTensor] = Nonequestion_encoder_last_hidden_state: typing.Optional[torch.Tensor] = Nonequestion_enc_hidden_states: tuple[torch.Tensor, ...] | None = Nonequestion_enc_attentions: tuple[torch.Tensor, ...] | None = Nonegenerator_enc_last_hidden_state: typing.Optional[torch.Tensor] = Nonegenerator_enc_hidden_states: tuple[torch.Tensor, ...] | None = Nonegenerator_enc_attentions: tuple[torch.Tensor, ...] | None = Nonegenerator_dec_hidden_states: tuple[torch.Tensor, ...] | None = Nonegenerator_dec_attentions: tuple[torch.Tensor, ...] | None = Nonegenerator_cross_attentions: tuple[torch.Tensor, ...] | None = None )

参数

  • logits (torch.Tensor,形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数。该分数可能是针对每个词汇表标记,在所有文档上边缘化后的结果。
  • doc_scores(形状为 (batch_size, config.n_docs) 的 torch.Tensor)— 每个检索到的文档嵌入(参见 retrieved_doc_embeds)与 question_encoder_last_hidden_state 之间的分数。
  • past_key_values (Cache, 可选, 在以下情况下返回 use_cache=True 被传入或 config.use_cache=True) — 它是一个 Cache 实例。有关更多详细信息,请参阅我们的 kv cache 指南.

    包含解码器中预计算的隐藏状态(注意力块中的键和值),可用于加速顺序解码(参见 past_key_values 输入)。

  • retrieved_doc_embeds(形状为 (batch_size, config.n_docs, hidden_size) 的 torch.Tensor,可选,当 output_retrieved=True 时返回) — 检索器检索到的文档嵌入。与 question_encoder_last_hidden_state 一起用于计算 doc_scores。
  • retrieved_doc_ids (torch.LongTensor,形状为 (batch_size, config.n_docs),可选,当 output_retrieved=True 时返回) — 检索器检索到的嵌入文档的索引。
  • context_input_ids (torch.LongTensor,形状为 (batch_size * config.n_docs, config.max_combined_length),可选,当 output_retrieved=True 时返回) — 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的输入 id。
  • context_attention_mask(形状为 (batch_size * config.n_docs, config.max_combined_length) 的 torch.LongTensor,可选,当 output_retrieved=True 时返回) — 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的注意力掩码。
  • question_encoder_last_hidden_state (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size),可选) — 问题编码器最后一层输出的隐藏状态序列,即模型的池化输出。
  • question_enc_hidden_states (tuple(torch.Tensor), 可选, 在传入 output_hidden_states=True 或 config.output_hidden_states=True) — 的元组 torch.Tensor ((一个对应嵌入层的输出,一个对应每一层的输出),形状为 (batch_size, sequence_length, hidden_size).

    问题编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • question_enc_attentions (tuple(torch.Tensor), 可选, 在传入 output_attentions=True 或 config.output_attentions=True) — 的元组 torch.Tensor ((每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length).

    问题编码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。

  • generator_enc_last_hidden_state (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size),可选) — 模型生成器编码器最后一层输出的隐藏状态序列。
  • generator_enc_hidden_states (tuple(torch.Tensor), 可选, 在传入 output_hidden_states=True 或 config.output_hidden_states=True) — 的元组 torch.Tensor ((一个对应嵌入层的输出,一个对应每一层的输出),形状为 (batch_size, sequence_length, hidden_size).

    生成器编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • generator_enc_attentions (tuple(torch.Tensor), 可选, 在传入 output_attentions=True 或 config.output_attentions=True) — 的元组 torch.Tensor ((每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length).

    生成器编码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。

  • generator_dec_hidden_states (tuple(torch.Tensor), 可选, 在传入 output_hidden_states=True 或 config.output_hidden_states=True) — 的元组 torch.Tensor ((一个用于嵌入的输出,一个用于每一层的输出),形状为 (batch_size, sequence_length, hidden_size).

    生成器解码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • generator_dec_attentions (tuple(torch.Tensor), 可选, 在传入 output_attentions=True 或 config.output_attentions=True) — 的元组 torch.Tensor ((每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length).

    生成器解码器的注意力权重,经过注意力 softmax 之后,用于在自注意力头中计算加权平均值。

  • generator_cross_attentions (tuple(torch.Tensor), 可选, 在传入 output_attentions=True 或 config.output_attentions=True) — 的元组 torch.Tensor ((每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length).

    生成器解码器中交叉注意力的权重,在注意力 softmax 之后,用于在交叉注意力头中计算加权平均值。

RagRetriever

class transformers.RagRetriever

< >

( configquestion_encoder_tokenizergenerator_tokenizerindex = Noneinit_retrieval = True )

参数

  • config (RagConfig) — 此 Retriever 所配合使用的 RAG 模型的配置。包含指示要构建哪个 Index 的参数。您可以使用 config.index_name="custom" 加载自己的自定义数据集,或者例如使用 config.index_name="wiki_dpr" 从 datasets 库中加载一个标准数据集(默认)。
  • question_encoder_tokenizer (PreTrainedTokenizer) — 用于对问题进行分词的 tokenizer。它用于解码问题,然后使用 generator_tokenizer。
  • generator_tokenizer (PreTrainedTokenizer) — 用于 RagModel 生成器部分的分词器。
  • index(Index,可选,默认为配置中定义的索引)— 如果指定,则使用此索引,而不是使用配置构建的索引

用于从向量查询中获取文档的检索器。它会检索文档的嵌入以及文档内容,并将其格式化为可供 RagModel 使用的形式。

示例:

>>> # To load the default "wiki_dpr" dataset with 21M passages from wikipedia (index name is 'compressed' or 'exact')
>>> from transformers import RagRetriever

>>> retriever = RagRetriever.from_pretrained(
...     "facebook/rag-sequence-nq", dataset="wiki_dpr", index_name="compressed"
... )

>>> # To load your own indexed dataset built with the datasets library.
>>> from transformers import RagRetriever

>>> dataset = (
...     ...
... )  # dataset must be a datasets.Datasets object with columns "title", "text" and "embeddings", and it must have a supported index (e.g., Faiss or other index types depending on your setup)
>>> retriever = RagRetriever.from_pretrained("facebook/rag-sequence-nq", indexed_dataset=dataset)

>>> # To load your own indexed dataset built with the datasets library that was saved on disk.
>>> from transformers import RagRetriever

>>> dataset_path = "path/to/my/dataset"  # dataset saved via *dataset.save_to_disk(...)*
>>> index_path = "path/to/my/index"  # index saved via *dataset.get_index("embeddings").save(...)*
>>> retriever = RagRetriever.from_pretrained(
...     "facebook/rag-sequence-nq",
...     index_name="custom",
...     passages_path=dataset_path,
...     index_path=index_path,
... )

>>> # To load the legacy index built originally for Rag's paper
>>> from transformers import RagRetriever

>>> retriever = RagRetriever.from_pretrained("facebook/rag-sequence-nq", index_name="legacy")

init_retrieval

< >

( )

检索器初始化函数。它将索引加载到内存中。

postprocess_docs

< >

( docsinput_stringsprefixn_docsreturn_tensors = None ) → tuple(tensors)

参数

  • docs (dict) — 检索到的文档。
  • input_strings (str) — 由 preprocess_query 解码的输入字符串。
  • prefix (str) — 添加在每个输入开头的字符串,通常与基于 T5 的模型一起使用。

返回值

tuple(tensors)

一个由两个元素组成的元组:上下文化的 input_ids 和与之兼容的 attention_mask。

对检索到的 docs 进行后处理,并将其与 input_strings 进行组合。

retrieve

< >

( question_hidden_states: ndarrayn_docs: int ) → tuple[np.ndarray, np.ndarray, list[dict]]

参数

  • question_hidden_states(形状为 (batch_size, vector_size) 的 np.ndarray)— 用于检索的一批查询向量。
  • n_docs (int) — 每个查询检索的文档数量。

返回值

tuple[np.ndarray, np.ndarray, list[dict]]

一个包含以下对象的元组:

  • retrieved_doc_embeds(形状为 (batch_size, n_docs, dim) 的 np.ndarray)— 每个查询所检索文档的检索嵌入。
  • doc_ids(形状为 (batch_size, n_docs) 的 np.ndarray)— 索引中文档的 ID
  • doc_dicts (list[dict]):每个查询对应的 retrieved_doc_embeds 示例。

获取指定 question_hidden_states 的文档。

RagModel

class transformers.RagModel

< >

( config: transformers.configuration_utils.PreTrainedConfig | None = Nonequestion_encoder: transformers.modeling_utils.PreTrainedModel | None = Nonegenerator: transformers.modeling_utils.PreTrainedModel | None = Noneretriever: transformers.models.rag.retrieval_rag.RagRetriever | None = None**kwargs )

参数

  • config (PreTrainedConfig, 可选) — 包含模型所有参数的模型配置类。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
  • question_encoder (PreTrainedModel,可选) — 负责将问题编码为用于检索的隐藏状态的模型。
  • generator (PreTrainedModel,可选) — 负责基于检索到的文档生成文本的模型。
  • retriever (RagRetriever,可选) — 负责根据编码后的问题从知识库中检索文档的组件。

未添加任何特定头部的裸 Rag 模型,直接输出原始隐藏状态。

该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneencoder_outputs: tuple[tuple[torch.Tensor]] | None = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.BoolTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Nonedoc_scores: typing.Optional[torch.Tensor] = Nonecontext_input_ids: typing.Optional[torch.LongTensor] = Nonecontext_attention_mask: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Noneoutput_retrieved: bool | None = Nonen_docs: int | None = None**kwargs ) → RetrievAugLMOutput or tuple(torch.Tensor)

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length)) — 输入序列中各 token 在词表中的索引。 RagConfig, 用于初始化模型,指定要使用的生成器,同时指定与之兼容的生成器分词器。请使用该分词器类来获取索引。

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • encoder_outputs (tuple(tuple(torch.Tensor), 可选) — 元组由 (generator_enc_last_hidden_state, 可选: generator_enc_hidden_states, 可选: generator_enc_attentions). generator_enc_last_hidden_state 的形状为 (batch_size, n_docs * sequence_length, hidden_size) 是生成器编码器最后一层输出的隐藏状态序列。

    在解码过程中由 (RagModel) 模型使用。

  • decoder_input_ids(形状为 (batch_size, target_sequence_length) 的 torch.LongTensor,可选) — 用于生成任务。默认为 None,请按照您使用的 RAG 实例中生成器模型的说明进行构造。
  • decoder_input_ids (torch.LongTensor 形状为 (batch_size, target_sequence_length), ,可选) — 解码器输入序列中各 token 在词汇表中的索引。可通过 AutoTokenizer 获取索引。详情请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。什么是解码器输入 ID?

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。

    什么是解码器输入 ID?

  • decoder_attention_mask(形状为 (batch_size, target_sequence_length) 的 torch.BoolTensor,可选) — 默认行为:生成一个忽略 decoder_input_ids 中填充标记的张量。默认情况下也会使用因果掩码。
  • past_key_values (~cache_utils.Cache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由 past_key_values 在解码的先前阶段返回,当 use_cache=True 或 config.use_cache=True.

    仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入 past_key_values,则默认会初始化 DynamicCache。

    模型将输出与输入相同的缓存格式。

    如果使用了 past_key_values,用户应仅输入未处理的 input_ids(即未向该模型提供其过去键值状态的那些),其形状为 (batch_size, unprocessed_length),而不是形状为 (batch_size, sequence_length) 的全部 input_ids。

  • doc_scores(形状为 (batch_size, config.n_docs) 的 torch.Tensor)— 每个检索到的文档嵌入(参见 retrieved_doc_embeds)与 question_encoder_last_hidden_state 之间的分数。如果模型未使用 retriever 进行初始化,则必须为前向传播提供 doc_scores。 可以通过 question_encoder_last_hidden_state 和 retrieved_doc_embeds 计算 doc_scores,更多信息请参见示例。
  • context_input_ids (torch.LongTensor,形状为 (batch_size * config.n_docs, config.max_combined_length),可选,当 output_retrieved=True 时返回) — 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的输入 ID。如果模型初始化时未配置 retriever,则必须在 forward 过程中提供 context_input_ids。context_input_ids 由 __call__() 返回。
  • context_attention_mask (torch.LongTensor,形状为 (batch_size * config.n_docs, config.max_combined_length),可选,当 output_retrieved=True 时返回) — 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的注意力掩码。如果模型未初始化 retriever,则必须在 forward 过程中提供 context_attention_mask。context_attention_mask 由 __call__() 返回。
  • use_cache (bool,可选) — 如果设置为 True,则会返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量中的 attentions。
  • output_hidden_states (bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的 hidden_states。
  • output_retrieved (bool, 可选) — 是否返回 retrieved_doc_embeds、retrieved_doc_ids、context_input_ids 和 context_attention_mask。有关详细信息,请参阅返回的张量。
  • n_docs (int, 可选) — 要检索的文档数量。

返回值

RetrievAugLMOutput 或 tuple(torch.Tensor)

一个 RetrievAugLMOutput 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(RagConfig)和输入。

RagModel 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

  • logits (torch.Tensor,形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数。该分数可能是对每个词汇表标记在所有文档上求边际化后得到的。

  • doc_scores(形状为 (batch_size, config.n_docs) 的 torch.Tensor)— 每个检索到的文档嵌入(参见 retrieved_doc_embeds)与 question_encoder_last_hidden_state 之间的分数。

  • past_key_values(Cache,可选,在传入 use_cache=True 或 config.use_cache=True 时返回)—— 它是一个 Cache 实例。更多详情,请参阅我们的 kv cache 指南。

    包含解码器中预计算的隐藏状态(注意力块中的键和值),可用于加速顺序解码(参见 past_key_values 输入)。

  • retrieved_doc_embeds(形状为 (batch_size, config.n_docs, hidden_size) 的 torch.Tensor,可选,当 output_retrieved=True 时返回) — 检索器检索到的文档嵌入。与 question_encoder_last_hidden_state 一起用于计算 doc_scores。

  • retrieved_doc_ids(形状为 (batch_size, config.n_docs) 的 torch.LongTensor,可选,当 output_retrieved=True 时返回) — 检索器检索到的嵌入文档的索引。

  • context_input_ids(形状为 (batch_size * config.n_docs, config.max_combined_length) 的 torch.LongTensor,可选,当 output_retrieved=True 时返回)— 检索器对检索到的文档和问题编码器输入 input_ids 进行后处理得到的输入 ID。

  • context_attention_mask(形状为 (batch_size * config.n_docs, config.max_combined_length) 的 torch.LongTensor,可选,当 output_retrieved=True 时返回)—— 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的注意力掩码。

  • question_encoder_last_hidden_state (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size),可选) — 问题编码器最后一层输出的隐藏状态序列,即模型的池化输出。

  • question_enc_hidden_states (tuple(torch.Tensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(包含嵌入层的输出以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    问题编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • question_enc_attentions (tuple(torch.Tensor),可选,在传入 output_attentions=True 或 config.output_attentions=True 时返回) — 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    问题编码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。

  • generator_enc_last_hidden_state(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor,可选)— 模型生成器编码器最后一层输出的隐藏状态序列。

  • generator_enc_hidden_states (tuple(torch.Tensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(包含嵌入层的输出以及每个层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    生成器编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • generator_enc_attentions(tuple(torch.Tensor),可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回)—— 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    生成器编码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。

  • generator_dec_hidden_states (tuple(torch.Tensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(包含嵌入层的输出以及每个层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    生成器解码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • generator_dec_attentions(tuple(torch.Tensor),可选,在传入 output_attentions=True 或 config.output_attentions=True 时返回)—— 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    生成器解码器的注意力权重,经过注意力 softmax 之后,用于在自注意力头中计算加权平均值。

  • generator_cross_attentions (tuple(torch.Tensor),可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回) — 由 torch.Tensor 组成的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    生成器解码器中交叉注意力的权重,在注意力 softmax 之后,用于在交叉注意力头中计算加权平均值。

示例:

>>> from transformers import AutoTokenizer, RagRetriever, RagModel
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("facebook/rag-token-base")
>>> retriever = RagRetriever.from_pretrained(
...     "facebook/rag-token-base", index_name="exact", use_dummy_dataset=True
... )
>>> # initialize with RagRetriever to do everything in one forward call
>>> model = RagModel.from_pretrained("facebook/rag-token-base", retriever=retriever)

>>> inputs = tokenizer("How many people live in Paris?", return_tensors="pt")
>>> outputs = model(input_ids=inputs["input_ids"])

RagSequenceForGeneration

class transformers.RagSequenceForGeneration

< >

( config: transformers.configuration_utils.PreTrainedConfig | None = Nonequestion_encoder: transformers.modeling_utils.PreTrainedModel | None = Nonegenerator: transformers.modeling_utils.PreTrainedModel | None = Noneretriever: transformers.models.rag.retrieval_rag.RagRetriever | None = None**kwargs )

参数

  • config (PreTrainedConfig, 可选) — 包含模型所有参数的模型配置类。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
  • question_encoder (PreTrainedModel,可选) — 负责将问题编码为用于检索的隐藏状态的模型。
  • generator (PreTrainedModel,可选) — 负责基于检索到的文档生成文本的模型。
  • retriever (RagRetriever,可选) — 负责根据编码后的问题从知识库中检索文档的组件。

RAG-sequence 模型的实现。它在前向传播过程中执行 RAG-sequence 特有的边缘化操作。

该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneencoder_outputs: tuple[tuple[torch.Tensor]] | None = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.BoolTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Nonecontext_input_ids: typing.Optional[torch.LongTensor] = Nonecontext_attention_mask: typing.Optional[torch.LongTensor] = Nonedoc_scores: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Noneoutput_retrieved: bool | None = Noneexclude_bos_score: bool | None = Nonereduce_loss: bool | None = Nonelabels: typing.Optional[torch.LongTensor] = Nonen_docs: int | None = None**kwargs ) → RetrievAugLMMarginOutput or tuple(torch.Tensor)

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length)) — 输入序列中各 token 在词表中的索引。 RagConfig, 用于初始化模型,指定要使用的生成器,同时指定与之兼容的生成器分词器。请使用该分词器类来获取索引。

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • encoder_outputs (tuple(tuple(torch.Tensor), 可选) — 元组由 (generator_enc_last_hidden_state, 可选: generator_enc_hidden_states, 可选: generator_enc_attentions). generator_enc_last_hidden_state 的形状为 (batch_size, n_docs * sequence_length, hidden_size) 是生成器编码器最后一层输出的隐藏状态序列。

    在解码过程中由 (RagModel) 模型使用。

  • decoder_input_ids(形状为 (batch_size, target_sequence_length) 的 torch.LongTensor,可选) — 用于生成任务。默认为 None,请按照您使用的 RAG 实例中生成器模型的说明进行构造。
  • decoder_input_ids (torch.LongTensor 形状为 (batch_size, target_sequence_length), ,可选) — 解码器输入序列中各 token 在词汇表中的索引。可通过 AutoTokenizer 获取索引。详情请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。什么是解码器输入 ID?

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。

    什么是解码器输入 ID?

  • decoder_attention_mask(形状为 (batch_size, target_sequence_length) 的 torch.BoolTensor,可选) — 默认行为:生成一个忽略 decoder_input_ids 中填充标记的张量。默认情况下也会使用因果掩码。
  • past_key_values (~cache_utils.Cache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由 past_key_values 在解码的先前阶段返回,当 use_cache=True 或 config.use_cache=True.

    仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入 past_key_values,则默认会初始化 DynamicCache。

    模型将输出与输入相同的缓存格式。

    如果使用了 past_key_values,用户应仅输入未处理的 input_ids(即未向该模型提供其过去键值状态的那些),其形状为 (batch_size, unprocessed_length),而不是形状为 (batch_size, sequence_length) 的全部 input_ids。

  • context_input_ids (torch.LongTensor,形状为 (batch_size * config.n_docs, config.max_combined_length),可选,当 output_retrieved=True 时返回) — 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的输入 ID。如果模型初始化时未配置 retriever,则必须在 forward 过程中提供 context_input_ids。context_input_ids 由 __call__() 返回。
  • context_attention_mask (torch.LongTensor,形状为 (batch_size * config.n_docs, config.max_combined_length),可选,当 output_retrieved=True 时返回) — 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的注意力掩码。如果模型未初始化 retriever,则必须在 forward 过程中提供 context_attention_mask。context_attention_mask 由 __call__() 返回。
  • doc_scores(形状为 (batch_size, config.n_docs) 的 torch.Tensor)— 每个检索到的文档嵌入(参见 retrieved_doc_embeds)与 question_encoder_last_hidden_state 之间的分数。如果模型未使用 retriever 进行初始化,则必须为前向传播提供 doc_scores。 可以通过 question_encoder_last_hidden_state 和 retrieved_doc_embeds 计算 doc_scores,更多信息请参见示例。
  • use_cache (bool,可选) — 如果设置为 True,则会返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量中的 attentions。
  • output_hidden_states (bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的 hidden_states。
  • output_retrieved (bool, 可选) — 是否返回 retrieved_doc_embeds、retrieved_doc_ids、context_input_ids 和 context_attention_mask。有关详细信息,请参阅返回的张量。
  • exclude_bos_score (bool, 可选) — 仅在传入 labels 时相关。如果 True,在计算损失时会忽略 BOS 标记的分数。
  • reduce_loss (bool, 可选) — 仅在传入 labels 时相关。如果为 True,则使用 torch.Tensor.sum 操作对 NLL 损失进行归约。
  • labels (torch.LongTensor,形状为 (batch_size, sequence_length),可选) — 用于计算掩码语言建模损失的标签。索引值应在 [0, ..., config.vocab_size] 范围内,或为 -100(参见 input_ids 的文档字符串)。索引值设为 -100 的 token 将被忽略(即被掩码),损失仅针对标签位于 [0, ..., config.vocab_size] 范围内的 token 进行计算。
  • n_docs (int, 可选) — 要检索的文档数量。

返回值

RetrievAugLMMarginOutput 或 tuple(torch.Tensor)

一个 RetrievAugLMMarginOutput 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(RagConfig)和输入。

RagSequenceForGeneration 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

  • loss(形状为 (1,) 的 torch.Tensor,可选,在提供 labels 时返回)— 语言建模损失。

  • logits (torch.Tensor,形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数。该分数可能是对每个词汇表标记在所有文档上求边际化后得到的。

  • doc_scores(形状为 (batch_size, config.n_docs) 的 torch.Tensor)— 每个检索到的文档嵌入(参见 retrieved_doc_embeds)与 question_encoder_last_hidden_state 之间的分数。

  • past_key_values(Cache,可选,在传入 use_cache=True 或 config.use_cache=True 时返回)—— 它是一个 Cache 实例。更多详情,请参阅我们的 kv cache 指南。

    包含解码器中预计算的隐藏状态(注意力块中的键和值),可用于加速顺序解码(参见 past_key_values 输入)。

  • retrieved_doc_embeds(形状为 (batch_size, config.n_docs, hidden_size) 的 torch.Tensor,可选,当 output_retrieved=True 时返回) — 检索器检索到的文档嵌入。与 question_encoder_last_hidden_state 一起用于计算 doc_scores。

  • retrieved_doc_ids(形状为 (batch_size, config.n_docs) 的 torch.LongTensor,可选,当 output_retrieved=True 时返回) — 检索器检索到的嵌入文档的索引。

  • context_input_ids(形状为 (batch_size * config.n_docs, config.max_combined_length) 的 torch.LongTensor,可选,当 output_retrieved=True 时返回)— 检索器对检索到的文档和问题编码器输入 input_ids 进行后处理得到的输入 ID。

  • context_attention_mask(形状为 (batch_size * config.n_docs, config.max_combined_length) 的 torch.LongTensor,可选,当 output_retrieved=True 时返回)—— 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的注意力掩码。

  • question_encoder_last_hidden_state (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size),可选) — 问题编码器最后一层输出的隐藏状态序列,即模型的池化输出。

  • question_enc_hidden_states (tuple(torch.Tensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(包含嵌入层的输出以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    问题编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • question_enc_attentions (tuple(torch.Tensor),可选,在传入 output_attentions=True 或 config.output_attentions=True 时返回) — 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    问题编码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。

  • generator_enc_last_hidden_state(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor,可选)— 模型生成器编码器最后一层输出的隐藏状态序列。

  • generator_enc_hidden_states (tuple(torch.Tensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(包含嵌入层的输出以及每个层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    生成器编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • generator_enc_attentions(tuple(torch.Tensor),可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回)—— 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    生成器编码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。

  • generator_dec_hidden_states (tuple(torch.Tensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(包含嵌入层的输出以及每个层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    生成器解码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • generator_dec_attentions(tuple(torch.Tensor),可选,在传入 output_attentions=True 或 config.output_attentions=True 时返回)—— 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    生成器解码器的注意力权重,经过注意力 softmax 之后,用于在自注意力头中计算加权平均值。

  • generator_cross_attentions (tuple(torch.Tensor),可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回) — 由 torch.Tensor 组成的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    生成器解码器中交叉注意力的权重,在注意力 softmax 之后,用于在交叉注意力头中计算加权平均值。

示例:

>>> from transformers import AutoTokenizer, RagRetriever, RagSequenceForGeneration
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("facebook/rag-sequence-nq")
>>> retriever = RagRetriever.from_pretrained(
...     "facebook/rag-sequence-nq", index_name="exact", use_dummy_dataset=True
... )
>>> # initialize with RagRetriever to do everything in one forward call
>>> model = RagSequenceForGeneration.from_pretrained("facebook/rag-token-nq", retriever=retriever)

>>> inputs = tokenizer("How many people live in Paris?", return_tensors="pt")
>>> targets = tokenizer(text_target="In Paris, there are 10 million people.", return_tensors="pt")
>>> input_ids = inputs["input_ids"]
>>> labels = targets["input_ids"]
>>> outputs = model(input_ids=input_ids, labels=labels)

>>> # or use retriever separately
>>> model = RagSequenceForGeneration.from_pretrained("facebook/rag-sequence-nq", use_dummy_dataset=True)
>>> # 1. Encode
>>> question_hidden_states = model.question_encoder(input_ids)[0]
>>> # 2. Retrieve
>>> docs_dict = retriever(input_ids.numpy(), question_hidden_states.detach().numpy(), return_tensors="pt")
>>> doc_scores = torch.bmm(
...     question_hidden_states.unsqueeze(1), docs_dict["retrieved_doc_embeds"].float().transpose(1, 2)
... ).squeeze(1)
>>> # 3. Forward to generator
>>> outputs = model(
...     context_input_ids=docs_dict["context_input_ids"],
...     context_attention_mask=docs_dict["context_attention_mask"],
...     doc_scores=doc_scores,
...     decoder_input_ids=labels,
... )

generate

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.LongTensor] = Nonecontext_input_ids: typing.Optional[torch.LongTensor] = Nonecontext_attention_mask: typing.Optional[torch.LongTensor] = Nonedoc_scores: typing.Optional[torch.Tensor] = Nonedo_deduplication: bool | None = Nonenum_return_sequences: int | None = Nonenum_beams: int | None = Nonen_docs: int | None = None**model_kwargs ) → torch.LongTensor of shape (batch_size * num_return_sequences, sequence_length)

参数

  • input_ids(形状为 (batch_size, sequence_length) 的 torch.LongTensor,可选) — 用作生成提示的序列。如果未传入 input_ids,则必须提供 context_input_ids。
  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • context_input_ids(形状为 (batch_size * config.n_docs, config.max_combined_length) 的 torch.LongTensor,可选,当 output_retrieved=True 时返回) — 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的输入 ID。
  • context_attention_mask (torch.LongTensor 形状为 (batch_size * config.n_docs, config.max_combined_length), 可选, 当 output_retrieved=True) — 从检索到的文档和问题编码器 input_ids 中由检索器后处理得到的注意力掩码。

    如果模型未使用 retriever 进行初始化,或者未提供 input_ids,则必须为前向传播提供 context_input_ids 和 context_attention_mask。它们由 __call__() 返回。

  • doc_scores (torch.Tensor 形状为 (batch_size, config.n_docs)) — 每个检索文档嵌入(参见 retrieved_doc_embeds) )与 question_encoder_last_hidden_state.

    如果模型未使用 retriever 进行初始化,或者未提供 input_ids,则必须为前向传播提供 doc_scores。doc_scores 由 __call__() 返回。

  • do_deduplication (bool, 可选) — 是否对给定输入来自不同上下文文档的生成结果进行去重。在使用分布式后端进行训练时,必须将其设置为 False。
  • num_return_sequences(int, 可选,默认为 1) — 批次中每个元素独立计算并返回的序列数量。请注意,这不是我们传递给 generator 的 [generate()](/docs/transformers/main/en/main_classes/text_generation#transformers.GenerationMixin.generate) 函数的值,在该函数中我们将 num_return_sequences 设置为 num_beams。
  • num_beams (int,可选,默认为 1) — 束搜索的束数量。1 表示不使用束搜索。
  • n_docs (int,可选,默认为 config.n_docs) — 要检索的文档数量,和/或要生成答案的文档数量。
  • kwargs (dict[str, Any], 可选) — 额外的 kwargs 将传递给 generate()。

返回值

形状为 (batch_size * num_return_sequences, sequence_length) 的 torch.LongTensor

生成的序列。第二个维度(序列长度)要么等于 max_length,要么更短,如果所有批次都因 eos_token_id 而提前结束。

实现 RAG 序列的“thorough”解码。有关如何设置其他 generate 输入参数的更多信息,请参阅 generate()` 文档。

RagTokenForGeneration

class transformers.RagTokenForGeneration

< >

( config: transformers.configuration_utils.PreTrainedConfig | None = Nonequestion_encoder: transformers.modeling_utils.PreTrainedModel | None = Nonegenerator: transformers.modeling_utils.PreTrainedModel | None = Noneretriever: transformers.models.rag.retrieval_rag.RagRetriever | None = None**kwargs )

参数

  • config (PreTrainedConfig, 可选) — 包含模型所有参数的模型配置类。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
  • question_encoder (PreTrainedModel,可选) — 负责将问题编码为用于检索的隐藏状态的模型。
  • generator (PreTrainedModel,可选) — 负责基于检索到的文档生成文本的模型。
  • retriever (RagRetriever,可选) — 负责根据编码后的问题从知识库中检索文档的组件。

RAG-token 模型的实现。它在前向传播过程中执行 RAG-token 特有的边缘化操作。

该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneencoder_outputs: tuple[tuple[torch.Tensor]] | None = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.BoolTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Nonecontext_input_ids: typing.Optional[torch.LongTensor] = Nonecontext_attention_mask: typing.Optional[torch.LongTensor] = Nonedoc_scores: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Noneoutput_retrieved: bool | None = Nonedo_marginalize: bool | None = Nonereduce_loss: bool | None = Nonelabels: typing.Optional[torch.LongTensor] = Nonen_docs: int | None = None**kwargs ) → RetrievAugLMMarginOutput or tuple(torch.Tensor)

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length)) — 输入序列中各 token 在词表中的索引。 RagConfig, 用于初始化模型,指定要使用的生成器,同时指定与之兼容的生成器分词器。请使用该分词器类来获取索引。

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • encoder_outputs (tuple(tuple(torch.Tensor), 可选) — 元组由 (generator_enc_last_hidden_state, 可选: generator_enc_hidden_states, 可选: generator_enc_attentions). generator_enc_last_hidden_state 的形状为 (batch_size, n_docs * sequence_length, hidden_size) 是生成器编码器最后一层输出的隐藏状态序列。

    在解码过程中由 (RagModel) 模型使用。

  • decoder_input_ids(形状为 (batch_size, target_sequence_length) 的 torch.LongTensor,可选) — 用于生成任务。默认为 None,请按照您使用的 RAG 实例中生成器模型的说明进行构造。
  • decoder_input_ids (torch.LongTensor 形状为 (batch_size, target_sequence_length), ,可选) — 解码器输入序列中各 token 在词汇表中的索引。可通过 AutoTokenizer 获取索引。详情请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。什么是解码器输入 ID?

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。

    什么是解码器输入 ID?

  • decoder_attention_mask(形状为 (batch_size, target_sequence_length) 的 torch.BoolTensor,可选) — 默认行为:生成一个忽略 decoder_input_ids 中填充标记的张量。默认情况下也会使用因果掩码。
  • past_key_values (~cache_utils.Cache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由 past_key_values 在解码的先前阶段返回,当 use_cache=True 或 config.use_cache=True.

    仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入 past_key_values,则默认会初始化 DynamicCache。

    模型将输出与输入相同的缓存格式。

    如果使用了 past_key_values,用户应仅输入未处理的 input_ids(即未向该模型提供其过去键值状态的那些),其形状为 (batch_size, unprocessed_length),而不是形状为 (batch_size, sequence_length) 的全部 input_ids。

  • context_input_ids (torch.LongTensor,形状为 (batch_size * config.n_docs, config.max_combined_length),可选,当 output_retrieved=True 时返回) — 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的输入 ID。如果模型初始化时未配置 retriever,则必须在 forward 过程中提供 context_input_ids。context_input_ids 由 __call__() 返回。
  • context_attention_mask (torch.LongTensor,形状为 (batch_size * config.n_docs, config.max_combined_length),可选,当 output_retrieved=True 时返回) — 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的注意力掩码。如果模型未初始化 retriever,则必须在 forward 过程中提供 context_attention_mask。context_attention_mask 由 __call__() 返回。
  • doc_scores(形状为 (batch_size, config.n_docs) 的 torch.Tensor)— 每个检索到的文档嵌入(参见 retrieved_doc_embeds)与 question_encoder_last_hidden_state 之间的分数。如果模型未使用 retriever 进行初始化,则必须为前向传播提供 doc_scores。 可以通过 question_encoder_last_hidden_state 和 retrieved_doc_embeds 计算 doc_scores,更多信息请参见示例。
  • use_cache (bool,可选) — 如果设置为 True,则会返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量中的 attentions。
  • output_hidden_states (bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的 hidden_states。
  • output_retrieved (bool, 可选) — 是否返回 retrieved_doc_embeds、retrieved_doc_ids、context_input_ids 和 context_attention_mask。有关详细信息,请参阅返回的张量。
  • do_marginalize (bool, 可选) — 如果为 True,则通过 torch.nn.functional.log_softmax 对所有文档的 logits 进行边缘化。
  • reduce_loss (bool, 可选) — 仅在传入 labels 时相关。如果为 True,则使用 torch.Tensor.sum 操作对 NLL 损失进行归约。
  • labels (torch.LongTensor,形状为 (batch_size, sequence_length),可选) — 用于计算掩码语言建模损失的标签。索引值应在 [0, ..., config.vocab_size] 范围内,或为 -100(参见 input_ids 的文档字符串)。索引值设为 -100 的 token 将被忽略(即被掩码),损失仅针对标签位于 [0, ..., config.vocab_size] 范围内的 token 进行计算。
  • n_docs (int, 可选) — 要检索的文档数量。

返回值

RetrievAugLMMarginOutput 或 tuple(torch.Tensor)

一个 RetrievAugLMMarginOutput 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(RagConfig)和输入。

RagTokenForGeneration 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

  • loss(形状为 (1,) 的 torch.Tensor,可选,在提供 labels 时返回)— 语言建模损失。

  • logits (torch.Tensor,形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数。该分数可能是对每个词汇表标记在所有文档上求边际化后得到的。

  • doc_scores(形状为 (batch_size, config.n_docs) 的 torch.Tensor)— 每个检索到的文档嵌入(参见 retrieved_doc_embeds)与 question_encoder_last_hidden_state 之间的分数。

  • past_key_values(Cache,可选,在传入 use_cache=True 或 config.use_cache=True 时返回)—— 它是一个 Cache 实例。更多详情,请参阅我们的 kv cache 指南。

    包含解码器中预计算的隐藏状态(注意力块中的键和值),可用于加速顺序解码(参见 past_key_values 输入)。

  • retrieved_doc_embeds(形状为 (batch_size, config.n_docs, hidden_size) 的 torch.Tensor,可选,当 output_retrieved=True 时返回) — 检索器检索到的文档嵌入。与 question_encoder_last_hidden_state 一起用于计算 doc_scores。

  • retrieved_doc_ids(形状为 (batch_size, config.n_docs) 的 torch.LongTensor,可选,当 output_retrieved=True 时返回) — 检索器检索到的嵌入文档的索引。

  • context_input_ids(形状为 (batch_size * config.n_docs, config.max_combined_length) 的 torch.LongTensor,可选,当 output_retrieved=True 时返回)— 检索器对检索到的文档和问题编码器输入 input_ids 进行后处理得到的输入 ID。

  • context_attention_mask(形状为 (batch_size * config.n_docs, config.max_combined_length) 的 torch.LongTensor,可选,当 output_retrieved=True 时返回)—— 由检索器对检索到的文档和问题编码器的 input_ids 进行后处理得到的注意力掩码。

  • question_encoder_last_hidden_state (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size),可选) — 问题编码器最后一层输出的隐藏状态序列,即模型的池化输出。

  • question_enc_hidden_states (tuple(torch.Tensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(包含嵌入层的输出以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    问题编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • question_enc_attentions (tuple(torch.Tensor),可选,在传入 output_attentions=True 或 config.output_attentions=True 时返回) — 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    问题编码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。

  • generator_enc_last_hidden_state(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor,可选)— 模型生成器编码器最后一层输出的隐藏状态序列。

  • generator_enc_hidden_states (tuple(torch.Tensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(包含嵌入层的输出以及每个层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    生成器编码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • generator_enc_attentions(tuple(torch.Tensor),可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回)—— 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    生成器编码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。

  • generator_dec_hidden_states (tuple(torch.Tensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(包含嵌入层的输出以及每个层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    生成器解码器在每一层输出处的隐藏状态,以及初始嵌入输出。

  • generator_dec_attentions(tuple(torch.Tensor),可选,在传入 output_attentions=True 或 config.output_attentions=True 时返回)—— 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    生成器解码器的注意力权重,经过注意力 softmax 之后,用于在自注意力头中计算加权平均值。

  • generator_cross_attentions (tuple(torch.Tensor),可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回) — 由 torch.Tensor 组成的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    生成器解码器中交叉注意力的权重,在注意力 softmax 之后,用于在交叉注意力头中计算加权平均值。

示例:

>>> from transformers import AutoTokenizer, RagRetriever, RagTokenForGeneration
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("facebook/rag-token-nq")
>>> retriever = RagRetriever.from_pretrained(
...     "facebook/rag-token-nq", index_name="exact", use_dummy_dataset=True
... )
>>> # initialize with RagRetriever to do everything in one forward call
>>> model = RagTokenForGeneration.from_pretrained("facebook/rag-token-nq", retriever=retriever)

>>> inputs = tokenizer("How many people live in Paris?", return_tensors="pt")
>>> targets = tokenizer(text_target="In Paris, there are 10 million people.", return_tensors="pt")
>>> input_ids = inputs["input_ids"]
>>> labels = targets["input_ids"]
>>> outputs = model(input_ids=input_ids, labels=labels)

>>> # or use retriever separately
>>> model = RagTokenForGeneration.from_pretrained("facebook/rag-token-nq", use_dummy_dataset=True)
>>> # 1. Encode
>>> question_hidden_states = model.question_encoder(input_ids)[0]
>>> # 2. Retrieve
>>> docs_dict = retriever(input_ids.numpy(), question_hidden_states.detach().numpy(), return_tensors="pt")
>>> doc_scores = torch.bmm(
...     question_hidden_states.unsqueeze(1), docs_dict["retrieved_doc_embeds"].float().transpose(1, 2)
... ).squeeze(1)
>>> # 3. Forward to generator
>>> outputs = model(
...     context_input_ids=docs_dict["context_input_ids"],
...     context_attention_mask=docs_dict["context_attention_mask"],
...     doc_scores=doc_scores,
...     decoder_input_ids=labels,
... )

>>> # or directly generate
>>> generated = model.generate(
...     context_input_ids=docs_dict["context_input_ids"],
...     context_attention_mask=docs_dict["context_attention_mask"],
...     doc_scores=doc_scores,
... )
>>> generated_string = tokenizer.batch_decode(generated, skip_special_tokens=True)

generate

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.LongTensor] = Nonecontext_input_ids: typing.Optional[torch.LongTensor] = Nonecontext_attention_mask: typing.Optional[torch.LongTensor] = Nonedoc_scores: typing.Optional[torch.Tensor] = Nonen_docs: int | None = Nonegeneration_config: transformers.generation.configuration_utils.GenerationConfig | None = Noneprefix_allowed_tokens_fn: collections.abc.Callable[[int, torch.Tensor], list[int]] | None = Nonelogits_processor: transformers.generation.logits_process.LogitsProcessorList | None = []stopping_criteria: transformers.generation.stopping_criteria.StoppingCriteriaList | None = []**kwargs ) → torch.LongTensor of shape (batch_size * num_return_sequences, sequence_length)

参数

  • input_ids(形状为 (batch_size, sequence_length) 的 torch.LongTensor,可选) — 用作生成提示的序列。如果未传入 input_ids,则必须提供 context_input_ids。
  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • context_input_ids (torch.LongTensor 形状为 (batch_size * config.n_docs, config.max_combined_length), 可选, 当 output_retrieved=True) — 时返回 — 经过检索器对检索到的文档和 input_ids 问题编码器的

    如果模型未使用 retriever 进行初始化,则必须为前向传播提供 context_input_ids。context_input_ids 由 __call__() 返回。

  • context_attention_mask (torch.LongTensor 形状为 (batch_size * config.n_docs, config.max_combined_length), 可选, 当 output_retrieved=True) — 从检索到的文档和问题编码器 input_ids 中经过检索器后处理的注意力掩码。

    如果模型未使用 retriever 进行初始化,则必须为前向传播提供 context_input_ids。context_input_ids 由 __call__() 返回。

  • doc_scores (torch.Tensor 形状为 (batch_size, config.n_docs)) — 每个检索文档嵌入(参见 retrieved_doc_embeds) )与 question_encoder_last_hidden_state.

    如果模型未使用 retriever 进行初始化,则必须为前向传播提供 context_input_ids。context_input_ids 由 __call__() 返回。

  • n_docs (int,可选,默认为 config.n_docs) — 要检索的文档数量,和/或要生成答案的文档数量。
  • generation_config (~generation.GenerationConfig, 可选) — 用作生成调用基础参数化的生成配置。传递给 generate 且与 generation_config 属性匹配的 **kwargs 将覆盖这些属性。如果未提供 generation_config,则使用默认值,其加载优先级如下:1) 如果存在,则从 generation_config.json 模型文件加载;2) 从模型配置加载。请注意,未指定的参数将继承 GenerationConfig 的默认值,应查阅其文档以参数化生成过程。
  • prefix_allowed_tokens_fn (Callable[[int, torch.Tensor], list[int]], 可选) — 如果提供,此函数会在每一步将束搜索限制为仅使用允许的 token。如果未提供,则不施加任何约束。此函数接受两个参数 inputs_ids 和批次 ID batch_id。它必须返回一个列表,其中包含下一步生成所允许的 token,该列表基于先前生成的 token inputs_ids 和批次 ID batch_id 进行条件约束。此参数对于基于前缀的约束生成非常有用,如 Autoregressive Entity Retrieval 中所述。
  • logits_processor (LogitsProcessorList, 可选) — 自定义的 logits 处理器,用于补充由参数和模型配置构建的默认 logits 处理器。如果传入的 logit 处理器已经由参数或模型配置创建,则会抛出错误。
  • stopping_criteria (StoppingCriteriaList,可选) — 自定义停止条件,用于补充由参数和模型配置构建的默认停止条件。如果传入的停止条件已经由参数或模型配置创建,则会抛出错误。
  • kwargs (dict[str, Any], 可选) — generate_config 的临时参数设置,和/或将被转发到模型 forward 函数的额外模型特定 kwargs。

返回值

形状为 (batch_size * num_return_sequences, sequence_length) 的 torch.LongTensor

生成的序列。第二个维度(sequence_length)要么等于 max_length,要么更短,如果所有批次都因 eos_token_id 而提前结束。

实现 RAG 令牌解码。

Update on GitHub