Transformers documentation
RAG
Este modelo se publicó en HF papers el 22 de mayo de 2020 y se contribuyó a Hugging Face Transformers el 16 de noviembre de 2020.
RAG
Generación aumentada por recuperación (RAG) combina un modelo de lenguaje preentrenado (memoria paramétrica) con el acceso a una fuente de datos externa (memoria no paramétrica) mediante un recuperador neuronal preentrenado. RAG recupera pasajes relevantes y condiciona su generación en ellos durante la inferencia. Esto suele hacer que las respuestas sean más factuales y permite actualizar el conocimiento cambiando el índice en lugar de reentrenar todo el modelo.
Puedes encontrar todos los puntos de control originales de RAG bajo la organización AI at Meta.
Este modelo fue aportado por ola13.
Haz clic en los modelos de RAG en la barra lateral derecha para ver más ejemplos de cómo aplicar RAG a diferentes tareas de lenguaje.
Los ejemplos a continuación demuestran cómo generar texto con 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])La cuantización reduce la memoria almacenando los pesos en menor precisión. Consulte el resumen de Cuantización para ver los backends compatibles. El ejemplo siguiente utiliza bitsandbytes para cuantizar los pesos a 4 bits.
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
clase transformers.RagConfig
< source >( 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 )
Parámetros
- is_encoder_decoder (
bool, opcional, valor predeterminadoTrue) — Indica si el modelo se utiliza como codificador/decodificador o no. - question_encoder (
PreTrainedConfig | dict, opcional) — El objeto de configuración o el diccionario del backbone del codificador de preguntas - generator (
PreTrainedConfig | dict, opcional) — El objeto de configuración o el diccionario del backbone del generador de respuestas - vocab_size (
int, opcional) — Tamaño del vocabulario del modelo. Define el número de tokens diferentes que pueden representarse medianteinput_ids. - prefix (
str, opcional) — Un prefijo de cadena que se añade al principio de cada entrada antes de pasarla al modelo generador. - bos_token_id (
int, opcional) — Id del token utilizado para el inicio de la secuencia en el vocabulario. - pad_token_id (
int, opcional) — Id del token utilizado para el relleno en el vocabulario. - eos_token_id (
Union[int, list[int]], opcional) — Id del token utilizado para el fin de secuencia en el vocabulario. - decoder_start_token_id (
int, opcional) — Si un modelo encoder-decoder inicia la decodificación con un token diferente debos, el id de ese token. - title_sep (
str, opcional, valor predeterminado" / ") — Separador insertado entre el título y el texto del documento recuperado al llamar a RagRetriever. - doc_sep (
str, opcional, valor predeterminado" // ") — Separador insertado entre el texto del documento recuperado y la entrada original al llamar a RagRetriever. - n_docs (
int, opcional, valor predeterminado 5) — Número de documentos a recuperar. - max_combined_length (
int, opcional, valor predeterminado 300) — Longitud máxima de la entrada contextualizada devuelta por__call__(). - retrieval_vector_size (
int, opcional, valor predeterminado 768) — Dimensionalidad de las incrustaciones de documentos indexadas por RagRetriever. - retrieval_batch_size (
int, opcional, valor predeterminado 8) — Tamaño del lote de recuperación, definido como el número de consultas emitidas de forma concurrente al índice faiss encapsulado en RagRetriever. - dataset (
str, opcional, valor predeterminado"wiki_dpr") — Un identificador de conjunto de datos del conjunto de datos indexado en HuggingFace Datasets (lista todos los conjuntos de datos y ids disponibles usandodatasets.list_datasets()). - dataset_split (
str, opcional, por defecto"train") — Qué división deldatasetcargar. - index_name (
str, opcional, valor predeterminado"compressed") — El nombre del índice del índice asociado con eldataset. Se puede elegir entre"legacy","exact"y"compressed". - index_path (
str, opcional) — La ruta al índice faiss serializado en el disco. - passages_path (
str, opcional) — Una ruta a pasajes de texto compatibles con el índice faiss. Obligatorio si se usaLegacyIndex - use_dummy_dataset (
bool, opcional, valor predeterminadoFalse) — Si se debe cargar una variante “dummy” del conjunto de datos especificado pordataset. - reduce_loss (
bool, opcional, valor predeterminadoFalse) — Indica si se debe reducir la pérdida NLL mediante la operacióntorch.Tensor.sum. - label_smoothing (
float, opcional, valor predeterminado 0.0) — Solo es relevante sireturn_lossse establece enTrue. Controla el valor del parámetroepsilonpara el suavizado de etiquetas en el cálculo de la pérdida. Si se establece en 0, no se realiza suavizado de etiquetas. - do_deduplication (
bool, opcional, valor predeterminadoTrue) — Indica si se deben deduplicar las generaciones de diferentes documentos de contexto para una entrada dada. Debe establecerse enFalsesi se utiliza durante el entrenamiento con un backend distribuido. - exclude_bos_score (
bool, opcional, valor predeterminadoFalse) — Si se debe o no ignorar el token BOS al calcular la pérdida. - do_marginalize (
bool, opcional, valor predeterminadoFalse) — Si esTrue, los logits se marginalizan sobre todos los documentos mediante el uso detorch.nn.functional.log_softmax. - output_retrieved (
bool, opcional, valor predeterminadoFalse) — Si se establece enTrue, se devuelvenretrieved_doc_embeds,retrieved_doc_ids,context_input_idsycontext_attention_mask. Consulte los tensores devueltos para más detalles. - use_cache (
bool, opcional, valor predeterminadoTrue) — Indica si el modelo debe devolver las últimas claves/valores de atención (no utilizado por todos los modelos). Solo es relevante siconfig.is_decoder=Trueo cuando el modelo es un modelo generativo solo de decodificador. - dataset_revision (
str, opcional,) — La revisión (hash de commit, etiqueta o rama) del conjunto de datos de Hugging Face utilizado para la recuperación.
Esta es la clase de configuración para almacenar la configuración de un RagModel. Se utiliza para instanciar un modelo Rag según los argumentos especificados, definiendo la arquitectura del modelo. Instanciar una configuración con los valores predeterminados producirá una configuración similar a la de
Los objetos de configuración heredan de PreTrainedConfig y se pueden usar para controlar las salidas del modelo. Lea la documentación de PreTrainedConfig para obtener más información.
from_question_encoder_generator_configs
< source >( question_encoder_config: PreTrainedConfiggenerator_config: PreTrainedConfig**kwargs ) → EncoderDecoderConfig
Devuelve
Una instancia de un objeto de configuración
Instanciar un EncoderDecoderConfig (o una clase derivada) a partir de la configuración de un modelo codificador preentrenado y la configuración de un modelo decodificador.
RagTokenizer
Salidas específicas de Rag
clase transformers.models.rag.modeling_rag.RetrievAugLMMarginOutput
< source >( loss: typing.Optional[torch.FloatTensor] = Nonelogits: typing.Optional[torch.FloatTensor] = Nonedoc_scores: typing.Optional[torch.FloatTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneretrieved_doc_embeds: typing.Optional[torch.FloatTensor] = 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.FloatTensor] = Nonequestion_enc_hidden_states: tuple[torch.FloatTensor, ...] | None = Nonequestion_enc_attentions: tuple[torch.FloatTensor, ...] | None = Nonegenerator_enc_last_hidden_state: typing.Optional[torch.FloatTensor] = Nonegenerator_enc_hidden_states: tuple[torch.FloatTensor, ...] | None = Nonegenerator_enc_attentions: tuple[torch.FloatTensor, ...] | None = Nonegenerator_dec_hidden_states: tuple[torch.FloatTensor, ...] | None = Nonegenerator_dec_attentions: tuple[torch.FloatTensor, ...] | None = Nonegenerator_cross_attentions: tuple[torch.FloatTensor, ...] | None = None )
Parámetros
- loss (
torch.FloatTensorde forma(1,), opcional, se devuelve cuando se proporcionalabels) — Pérdida de modelado de lenguaje. - logits (
torch.FloatTensorde forma(batch_size, sequence_length, config.vocab_size)) — Puntuaciones de predicción de la cabeza de modelado de lenguaje. La puntuación puede estar marginalizada sobre todos los documentos para cada token del vocabulario. - doc_scores (
torch.FloatTensorde forma(batch_size, config.n_docs)) — Puntuación entre cada embedding de documento recuperado (verretrieved_doc_embeds) yquestion_encoder_last_hidden_state. - past_key_values (
Cache, opcional, se devuelve cuandouse_cache=Truese pasa o cuandoconfig.use_cache=True) — Es una Cache instancia. Para más detalles, consulta nuestra guía de caché kv.Contiene estados ocultos precalculados (claves y valores en los bloques de atención) del decodificador que se pueden utilizar (véase la entrada
past_key_values) para acelerar la decodificación secuencial. - retrieved_doc_embeds (
torch.FloatTensorde forma(batch_size, config.n_docs, hidden_size), opcional, devuelto cuando output_retrieved=True) — Documentos incrustados recuperados por el recuperador. Se utiliza junto conquestion_encoder_last_hidden_statepara calcular losdoc_scores. - retrieved_doc_ids (
torch.LongTensorde forma(batch_size, config.n_docs), opcional, se devuelve cuando output_retrieved=True) — Los índices de los documentos incrustados recuperados por el recuperador. - context_input_ids (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, devuelto cuando output_retrieved=True) — ids de entrada procesados a partir de los documentos recuperados y de los input_ids del codificador de la pregunta por el recuperador. - context_attention_mask (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, se devuelve cuando output_retrieved=True) — Máscara de atención procesada a partir de los documentos recuperados y losinput_idsdel codificador de la pregunta por el recuperador. - question_encoder_last_hidden_state (
torch.FloatTensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del codificador de la pregunta, salida agrupada del modelo. - question_enc_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_hidden_states=Truese pasa o cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de los embeddings y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del codificador de la pregunta en la salida de cada capa más las salidas de la incrustación inicial.
- question_enc_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_attentions=Truese pasa o cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(uno por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del codificador de la pregunta, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
- generator_enc_last_hidden_state (
torch.FloatTensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del codificador del generador del modelo. - generator_enc_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_hidden_states=Truese pasa o cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de los embeddings y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del codificador del generador en la salida de cada capa más las salidas de la incrustación inicial.
- generator_enc_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_attentions=Truese pasa o cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(uno por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del codificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
- generator_dec_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_hidden_states=Truese pasa o cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de los embeddings y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del decodificador del generador en la salida de cada capa más las salidas de la incrustación inicial.
- generator_dec_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_attentions=Truese pasa o cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(uno por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del decodificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
- generator_cross_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_attentions=Truese pasa o cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor((una por cada capa) con forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de las cross-attentions del decodificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de cross-attention.
Clase base para las salidas de modelos marginalizados aumentados con recuperadores.
clase transformers.models.rag.modeling_rag.RetrievAugLMOutput
< source >( logits: typing.Optional[torch.FloatTensor] = Nonedoc_scores: typing.Optional[torch.FloatTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneretrieved_doc_embeds: typing.Optional[torch.FloatTensor] = 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.FloatTensor] = Nonequestion_enc_hidden_states: tuple[torch.FloatTensor, ...] | None = Nonequestion_enc_attentions: tuple[torch.FloatTensor, ...] | None = Nonegenerator_enc_last_hidden_state: typing.Optional[torch.FloatTensor] = Nonegenerator_enc_hidden_states: tuple[torch.FloatTensor, ...] | None = Nonegenerator_enc_attentions: tuple[torch.FloatTensor, ...] | None = Nonegenerator_dec_hidden_states: tuple[torch.FloatTensor, ...] | None = Nonegenerator_dec_attentions: tuple[torch.FloatTensor, ...] | None = Nonegenerator_cross_attentions: tuple[torch.FloatTensor, ...] | None = None )
Parámetros
- logits (
torch.FloatTensorde forma(batch_size, sequence_length, config.vocab_size)) — Puntuaciones de predicción de la cabeza de modelado de lenguaje. La puntuación puede estar marginalizada sobre todos los documentos para cada token del vocabulario. - doc_scores (
torch.FloatTensorde forma(batch_size, config.n_docs)) — Puntuación entre cada embedding de documento recuperado (verretrieved_doc_embeds) yquestion_encoder_last_hidden_state. - past_key_values (
Cache, opcional, se devuelve cuandouse_cache=Truese pasa o cuandoconfig.use_cache=True) — Es una Cache instancia. Para más detalles, consulta nuestra guía de caché kv.Contiene estados ocultos precalculados (claves y valores en los bloques de atención) del decodificador que se pueden utilizar (véase la entrada
past_key_values) para acelerar la decodificación secuencial. - retrieved_doc_embeds (
torch.FloatTensorde forma(batch_size, config.n_docs, hidden_size), opcional, devuelto cuando output_retrieved=True) — Documentos incrustados recuperados por el recuperador. Se utiliza junto conquestion_encoder_last_hidden_statepara calcular losdoc_scores. - retrieved_doc_ids (
torch.LongTensorde forma(batch_size, config.n_docs), opcional, se devuelve cuando output_retrieved=True) — Los índices de los documentos incrustados recuperados por el recuperador. - context_input_ids (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, devuelto cuando output_retrieved=True) — ids de entrada procesados a partir de los documentos recuperados y de los input_ids del codificador de la pregunta por el recuperador. - context_attention_mask (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, se devuelve cuando output_retrieved=True) — Máscara de atención procesada a partir de los documentos recuperados y losinput_idsdel codificador de la pregunta por el recuperador. - question_encoder_last_hidden_state (
torch.FloatTensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del codificador de la pregunta, salida agrupada del modelo. - question_enc_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_hidden_states=Truese pasa o cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de los embeddings y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del codificador de la pregunta en la salida de cada capa más las salidas de la incrustación inicial.
- question_enc_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_attentions=Truese pasa o cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(uno por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del codificador de la pregunta, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
- generator_enc_last_hidden_state (
torch.FloatTensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del codificador del generador del modelo. - generator_enc_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_hidden_states=Truese pasa o cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de los embeddings y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del codificador del generador en la salida de cada capa más las salidas de la incrustación inicial.
- generator_enc_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_attentions=Truese pasa o cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(uno por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del codificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
- generator_dec_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_hidden_states=Truese pasa o cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de los embeddings y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del decodificador del generador en la salida de cada capa más las salidas de la incrustación inicial.
- generator_dec_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_attentions=Truese pasa o cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(uno por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del decodificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
- generator_cross_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuandooutput_attentions=Truese pasa o cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor((una por cada capa) con forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de las cross-attentions del decodificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de cross-attention.
RagRetriever
clase transformers.RagRetriever
< source >( configquestion_encoder_tokenizergenerator_tokenizerindex = Noneinit_retrieval = True )
Parámetros
- config (RagConfig) —
La configuración del modelo RAG con el que se utiliza este Retriever. Contiene parámetros que indican qué
Indexconstruir. Puedes cargar tu propio conjunto de datos personalizado conconfig.index_name="custom"o usar uno canónico (predeterminado) de la biblioteca datasets, por ejemplo conconfig.index_name="wiki_dpr". - question_encoder_tokenizer (PreTrainedTokenizer) — El tokenizador que se utilizó para tokenizar la pregunta. Se usa para decodificar la pregunta y luego usar el generator_tokenizer.
- generator_tokenizer (PreTrainedTokenizer) — El tokenizador utilizado para la parte generadora del RagModel.
- index (
Index, opcional, predeterminado al definido por la configuración) — Si se especifica, use este índice en lugar del construido usando la configuración
Recuperador utilizado para obtener documentos a partir de consultas vectoriales. Recupera los embeddings de los documentos, así como el contenido de los documentos, y los formatea para ser utilizados con un RagModel.
Ejemplos:
>>> # 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")Función de inicialización del recuperador. Carga el índice en memoria.
postprocess_docs
< source >( docsinput_stringsprefixn_docsreturn_tensors = None ) → tuple(tensors)
Parámetros
- docs (
dict) — Documentos recuperados. - input_strings (
str) — Cadenas de entrada decodificadas porpreprocess_query. - prefix (
str) — Prefijo que se añade al principio de cada entrada, utilizado típicamente con modelos basados en T5.
Devuelve
tuple(tensors)
una tupla que consiste en dos elementos: input_ids contextualizados y una attention_mask compatible.
Postprocesamiento de los docs recuperados y combinación con input_strings.
retrieve
< source >( question_hidden_states: ndarrayn_docs: int ) → tuple[np.ndarray, np.ndarray, list[dict]]
Parámetros
- question_hidden_states (
np.ndarrayde forma(batch_size, vector_size)) — Un lote de vectores de consulta para la recuperación. - n_docs (
int) — El número de documentos recuperados por consulta.
Devuelve
tuple[np.ndarray, np.ndarray, list[dict]]
Una tupla con los siguientes objetos:
- retrieved_doc_embeds (
np.ndarrayde forma(batch_size, n_docs, dim)) — Los embeddings de recuperación de los documentos recuperados por consulta. - doc_ids (
np.ndarrayde forma(batch_size, n_docs)) — Los ids de los documentos en el índice - doc_dicts (
list[dict]): Los ejemplos deretrieved_doc_embedspor consulta.
Recupera documentos para los question_hidden_states especificados.
RagModel
clase transformers.RagModel
< source >( 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 )
Parámetros
- config (PreTrainedConfig, opcional) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.
- question_encoder (
PreTrainedModel, opcional) — El modelo responsable de codificar la pregunta en estados ocultos para la recuperación. - generator (
PreTrainedModel, opcional) — El modelo responsable de generar texto a partir de los documentos recuperados. - retriever (
RagRetriever, opcional) — El componente responsable de recuperar documentos de una base de conocimientos a partir de la pregunta codificada.
El modelo Rag básico que emite estados ocultos sin ninguna cabeza específica en la parte superior.
Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).
Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneencoder_outputs: tuple[tuple[torch.FloatTensor]] | 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.FloatTensor] = 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.FloatTensor)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. RagConfig, utilizado para inicializar el modelo, especifica qué generador utilizar y también especifica un tokenizador de generador compatible. Utilice esa clase de tokenizador para obtener los índices. - attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar realizar atención en los índices de tokens de relleno. Valores de máscara seleccionados en[0, 1]:- 1 para los tokens que no están enmascarados,
- 0 para los tokens que están enmascarados.
- encoder_outputs (
tuple(tuple(torch.FloatTensor), opcional) — La tupla consiste en (generator_enc_last_hidden_state, opcional:generator_enc_hidden_states, opcional:generator_enc_attentions).generator_enc_last_hidden_statede forma(batch_size, n_docs * sequence_length, hidden_size)es una secuencia de estados ocultos en la salida de la última capa del codificador del generador.Utilizado por el modelo (RagModel) durante la decodificación.
- decoder_input_ids (
torch.LongTensorde forma(batch_size, target_sequence_length), opcional) — Proporcionar para tareas de generación.Nonepor defecto, constrúyase según las instrucciones del modelo generador que esté utilizando con su instancia de RAG. - decoder_input_ids (
torch.LongTensorde forma(batch_size, target_sequence_length), opcional) — Índices de los tokens de la secuencia de entrada del decodificador en el vocabulario. Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles. ¿Qué son los IDs de entrada del decodificador?Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles.
- decoder_attention_mask (
torch.BoolTensorde forma(batch_size, target_sequence_length), opcional) — Comportamiento predeterminado: genera un tensor que ignora los tokens de relleno endecoder_input_ids. También se usará una máscara causal de forma predeterminada. - past_key_values (
~cache_utils.Cache, opcional) — Estados ocultos precalculados (claves y valores en los bloques de autoatención y en los bloques de atención cruzada) que se pueden usar para acelerar la decodificación secuencial. Esto generalmente consiste en lapast_key_valuesdevuelta por el modelo en una etapa anterior de la decodificación, cuandouse_cache=Trueoconfig.use_cache=True.Solo se permite una instancia de Cache como entrada, consulte nuestra guía de caché kv. Si no se pasan
past_key_values, DynamicCache se inicializará de forma predeterminada.El modelo generará el mismo formato de caché que se proporciona como entrada.
Si se utilizan
past_key_values, se espera que el usuario introduzca únicamente losinput_idsno procesados (aquellos que no tienen sus estados de clave y valor pasados proporcionados a este modelo) con forma(batch_size, unprocessed_length)en lugar de todos losinput_idscon forma(batch_size, sequence_length). - doc_scores (
torch.FloatTensorde forma(batch_size, config.n_docs)) — Puntuación entre los embeddings de cada documento recuperado (verretrieved_doc_embeds) yquestion_encoder_last_hidden_state. Si el modelo no está inicializado con unretriever,doc_scoresdebe proporcionarse en la pasada hacia adelante.doc_scoresse puede calcular mediantequestion_encoder_last_hidden_stateyretrieved_doc_embeds, consulte los ejemplos para obtener más información. - context_input_ids (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, devuelto cuando output_retrieved=True) — IDs de entrada procesados a partir de los documentos recuperados y losinput_idsdel codificador de la pregunta por el recuperador. Si el modelo no se inicializó con unretriever, `context_input_ids` debe proporcionarse a la pasa hacia adelante.context_input_idsse devuelve mediante__call__(). - context_attention_mask (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length),opcional, se devuelve cuando output_retrieved=True) — Máscara de atención procesada a partir de los documentos recuperados y de losinput_idsdel codificador de la pregunta por el retriever. Si el modelo no está inicializado con unretriever,context_attention_maskdebe proporcionarse en la pasada hacia adelante.context_attention_maskse devuelve mediante__call__(). - use_cache (
bool, opcional) — Si se establece enTrue, se devuelven los estados de clave-valor depast_key_valuesy pueden usarse para acelerar la decodificación (verpast_key_values). - output_attentions (
bool, opcional) — Indica si se deben devolver los tensores de atención de todas las capas de atención. Consulteattentionsen los tensores devueltos para obtener más detalles. - output_hidden_states (
bool, opcional) — Indica si se deben devolver los estados ocultos de todas las capas. Consultehidden_statesen los tensores devueltos para obtener más detalles. - output_retrieved (
bool, opcional) — Indica si se deben devolverretrieved_doc_embeds,retrieved_doc_ids,context_input_idsycontext_attention_mask. Consulte los tensores devueltos para más detalles. - n_docs (
int, opcional) — El número de documentos a recuperar.
Devuelve
RetrievAugLMOutput o tuple(torch.FloatTensor)
Un RetrievAugLMOutput o una tupla de
torch.FloatTensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios
elementos según la configuración (RagConfig) y las entradas.
El método forward de RagModel sobrescribe el método especial __call__.
Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de
Moduledespués en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.
logits (
torch.FloatTensorde forma(batch_size, sequence_length, config.vocab_size)) — Puntuaciones de predicción de la cabeza de modelado de lenguaje. La puntuación puede estar marginalizada sobre todos los documentos para cada token del vocabulario.doc_scores (
torch.FloatTensorde forma(batch_size, config.n_docs)) — Puntuación entre cada embedding de documento recuperado (verretrieved_doc_embeds) yquestion_encoder_last_hidden_state.past_key_values (
Cache, opcional, se devuelve cuando se pasause_cache=Trueo cuandoconfig.use_cache=True) — Es una instancia de Cache. Para más detalles, consulta nuestra guía de caché kv.Contiene estados ocultos precalculados (claves y valores en los bloques de atención) del decodificador que se pueden utilizar (véase la entrada
past_key_values) para acelerar la decodificación secuencial.retrieved_doc_embeds (
torch.FloatTensorde forma(batch_size, config.n_docs, hidden_size), opcional, devuelto cuando output_retrieved=True) — Documentos incrustados recuperados por el recuperador. Se utiliza junto conquestion_encoder_last_hidden_statepara calcular losdoc_scores.retrieved_doc_ids (
torch.LongTensorde forma(batch_size, config.n_docs), opcional, se devuelve cuando output_retrieved=True) — Los índices de los documentos incrustados recuperados por el recuperador.context_input_ids (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, devuelto cuando output_retrieved=True) — ids de entrada procesados a partir de los documentos recuperados y de los input_ids del codificador de la pregunta por el recuperador.context_attention_mask (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, devuelto cuando output_retrieved=True) — Máscara de atención procesada a partir de los documentos recuperados y losinput_idsdel codificador de la pregunta por el recuperador.question_encoder_last_hidden_state (
torch.FloatTensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del codificador de preguntas, salida agrupada del modelo.question_enc_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de las incrustaciones y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del codificador de la pregunta en la salida de cada capa más las salidas de la incrustación inicial.
question_enc_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(una por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del codificador de la pregunta, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
generator_enc_last_hidden_state (
torch.FloatTensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del codificador del generador del modelo.generator_enc_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de los embeddings y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del codificador del generador en la salida de cada capa más las salidas de la incrustación inicial.
generator_enc_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(una por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del codificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
generator_dec_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de los embeddings y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del decodificador del generador en la salida de cada capa más las salidas de la incrustación inicial.
generator_dec_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(una por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del decodificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
generator_cross_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(una por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de las cross-attentions del decodificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de cross-attention.
Ejemplo:
>>> 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
clase transformers.RagSequenceForGeneration
< source >( 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 )
Parámetros
- config (PreTrainedConfig, opcional) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.
- question_encoder (
PreTrainedModel, opcional) — El modelo responsable de codificar la pregunta en estados ocultos para la recuperación. - generator (
PreTrainedModel, opcional) — El modelo responsable de generar texto a partir de los documentos recuperados. - retriever (
RagRetriever, opcional) — El componente responsable de recuperar documentos de una base de conocimientos a partir de la pregunta codificada.
Implementación de un modelo de secuencia RAG. Realiza la marginalización específica de RAG-sequence en la pasada hacia adelante.
Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).
Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.
forward
< source >( 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.FloatTensor] = 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.FloatTensor)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. RagConfig, utilizado para inicializar el modelo, especifica qué generador utilizar y también especifica un tokenizador de generador compatible. Utilice esa clase de tokenizador para obtener los índices. - attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar realizar atención en los índices de tokens de relleno. Valores de máscara seleccionados en[0, 1]:- 1 para los tokens que no están enmascarados,
- 0 para los tokens que están enmascarados.
- encoder_outputs (
tuple(tuple(torch.FloatTensor), opcional) — La tupla consiste en (generator_enc_last_hidden_state, opcional:generator_enc_hidden_states, opcional:generator_enc_attentions).generator_enc_last_hidden_statede forma(batch_size, n_docs * sequence_length, hidden_size)es una secuencia de estados ocultos en la salida de la última capa del codificador del generador.Utilizado por el modelo (RagModel) durante la decodificación.
- decoder_input_ids (
torch.LongTensorde forma(batch_size, target_sequence_length), opcional) — Proporcionar para tareas de generación.Nonepor defecto, constrúyase según las instrucciones del modelo generador que esté utilizando con su instancia de RAG. - decoder_input_ids (
torch.LongTensorde forma(batch_size, target_sequence_length), opcional) — Índices de los tokens de la secuencia de entrada del decodificador en el vocabulario. Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles. ¿Qué son los IDs de entrada del decodificador?Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles.
- decoder_attention_mask (
torch.BoolTensorde forma(batch_size, target_sequence_length), opcional) — Comportamiento predeterminado: genera un tensor que ignora los tokens de relleno endecoder_input_ids. También se usará una máscara causal de forma predeterminada. - past_key_values (
~cache_utils.Cache, opcional) — Estados ocultos precalculados (claves y valores en los bloques de autoatención y en los bloques de atención cruzada) que se pueden usar para acelerar la decodificación secuencial. Esto generalmente consiste en lapast_key_valuesdevuelta por el modelo en una etapa anterior de la decodificación, cuandouse_cache=Trueoconfig.use_cache=True.Solo se permite una instancia de Cache como entrada, consulte nuestra guía de caché kv. Si no se pasan
past_key_values, DynamicCache se inicializará de forma predeterminada.El modelo generará el mismo formato de caché que se proporciona como entrada.
Si se utilizan
past_key_values, se espera que el usuario introduzca únicamente losinput_idsno procesados (aquellos que no tienen sus estados de clave y valor pasados proporcionados a este modelo) con forma(batch_size, unprocessed_length)en lugar de todos losinput_idscon forma(batch_size, sequence_length). - context_input_ids (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, devuelto cuando output_retrieved=True) — IDs de entrada procesados a partir de los documentos recuperados y losinput_idsdel codificador de la pregunta por el recuperador. Si el modelo no se inicializó con unretriever, `context_input_ids` debe proporcionarse a la pasa hacia adelante.context_input_idsse devuelve mediante__call__(). - context_attention_mask (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length),opcional, se devuelve cuando output_retrieved=True) — Máscara de atención procesada a partir de los documentos recuperados y de losinput_idsdel codificador de la pregunta por el retriever. Si el modelo no está inicializado con unretriever,context_attention_maskdebe proporcionarse en la pasada hacia adelante.context_attention_maskse devuelve mediante__call__(). - doc_scores (
torch.FloatTensorde forma(batch_size, config.n_docs)) — Puntuación entre los embeddings de cada documento recuperado (verretrieved_doc_embeds) yquestion_encoder_last_hidden_state. Si el modelo no está inicializado con unretriever,doc_scoresdebe proporcionarse en la pasada hacia adelante.doc_scoresse puede calcular mediantequestion_encoder_last_hidden_stateyretrieved_doc_embeds, consulte los ejemplos para obtener más información. - use_cache (
bool, opcional) — Si se establece enTrue, se devuelven los estados de clave-valor depast_key_valuesy pueden usarse para acelerar la decodificación (verpast_key_values). - output_attentions (
bool, opcional) — Indica si se deben devolver los tensores de atención de todas las capas de atención. Consulteattentionsen los tensores devueltos para obtener más detalles. - output_hidden_states (
bool, opcional) — Indica si se deben devolver los estados ocultos de todas las capas. Consultehidden_statesen los tensores devueltos para obtener más detalles. - output_retrieved (
bool, opcional) — Indica si se deben devolverretrieved_doc_embeds,retrieved_doc_ids,context_input_idsycontext_attention_mask. Consulte los tensores devueltos para más detalles. - exclude_bos_score (
bool, opcional) — Solo es relevante si se pasalabels. SiTrue, la puntuación del token BOS se descarta al calcular la pérdida. - reduce_loss (
bool, opcional) — Solo es relevante si se pasalabels. SiTrue, la pérdida NLL se reduce usando la operacióntorch.Tensor.sum. - labels (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Etiquetas para calcular la pérdida de modelado de lenguaje enmascarado. Los índices deben estar en[0, ..., config.vocab_size]o ser -100 (ver la docstring deinput_ids). Los tokens con índices establecidos en-100se ignoran (enmascarados); la pérdida solo se calcula para los tokens con etiquetas en[0, ..., config.vocab_size]. - n_docs (
int, opcional) — El número de documentos a recuperar.
Devuelve
RetrievAugLMMarginOutput o tuple(torch.FloatTensor)
Un RetrievAugLMMarginOutput o una tupla de
torch.FloatTensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios
elementos según la configuración (RagConfig) y las entradas.
El método forward de RagSequenceForGeneration sobrescribe el método especial __call__.
Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de
Moduledespués en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.
loss (
torch.FloatTensorde forma(1,), opcional, devuelta cuando se proporcionalabels) — Pérdida de modelado de lenguaje.logits (
torch.FloatTensorde forma(batch_size, sequence_length, config.vocab_size)) — Puntuaciones de predicción de la cabeza de modelado de lenguaje. La puntuación puede estar marginalizada sobre todos los documentos para cada token del vocabulario.doc_scores (
torch.FloatTensorde forma(batch_size, config.n_docs)) — Puntuación entre cada embedding de documento recuperado (verretrieved_doc_embeds) yquestion_encoder_last_hidden_state.past_key_values (
Cache, opcional, se devuelve cuando se pasause_cache=Trueo cuandoconfig.use_cache=True) — Es una instancia de Cache. Para más detalles, consulta nuestra guía de caché kv.Contiene estados ocultos precalculados (claves y valores en los bloques de atención) del decodificador que se pueden utilizar (véase la entrada
past_key_values) para acelerar la decodificación secuencial.retrieved_doc_embeds (
torch.FloatTensorde forma(batch_size, config.n_docs, hidden_size), opcional, devuelto cuando output_retrieved=True) — Documentos incrustados recuperados por el recuperador. Se utiliza junto conquestion_encoder_last_hidden_statepara calcular losdoc_scores.retrieved_doc_ids (
torch.LongTensorde forma(batch_size, config.n_docs), opcional, se devuelve cuando output_retrieved=True) — Los índices de los documentos incrustados recuperados por el recuperador.context_input_ids (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, devuelto cuando output_retrieved=True) — ids de entrada procesados a partir de los documentos recuperados y de los input_ids del codificador de la pregunta por el recuperador.context_attention_mask (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, devuelto cuando output_retrieved=True) — Máscara de atención procesada a partir de los documentos recuperados y losinput_idsdel codificador de la pregunta por el recuperador.question_encoder_last_hidden_state (
torch.FloatTensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del codificador de preguntas, salida agrupada del modelo.question_enc_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de las incrustaciones y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del codificador de la pregunta en la salida de cada capa más las salidas de la incrustación inicial.
question_enc_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(una por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del codificador de la pregunta, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
generator_enc_last_hidden_state (
torch.FloatTensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del codificador del generador del modelo.generator_enc_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de los embeddings y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del codificador del generador en la salida de cada capa más las salidas de la incrustación inicial.
generator_enc_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(una por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del codificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
generator_dec_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de los embeddings y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del decodificador del generador en la salida de cada capa más las salidas de la incrustación inicial.
generator_dec_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(una por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del decodificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
generator_cross_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(una por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de las cross-attentions del decodificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de cross-attention.
Ejemplo:
>>> 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
< source >( 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.FloatTensor] = 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)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — La secuencia utilizada como indicación para la generación. Si no se pasainput_ids, entonces se debe proporcionarcontext_input_ids. - attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar realizar atención en los índices de tokens de relleno. Valores de máscara seleccionados en[0, 1]:- 1 para los tokens que no están enmascarados,
- 0 para los tokens que están enmascarados.
- context_input_ids (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, devuelto cuando output_retrieved=True) — IDs de entrada procesados a partir de los documentos recuperados y de los input_ids del codificador de la pregunta por el recuperador. - context_attention_mask (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, se devuelve cuando output_retrieved=True) — Máscara de atención procesada a partir de los documentos recuperados y el codificador de la preguntainput_idspor el recuperador.Si el modelo no se inicializa con un
retrievero no se proporcionainput_ids, se deben proporcionarcontext_input_idsycontext_attention_maska la pasada hacia adelante. Son devueltos por__call__(). - doc_scores (
torch.FloatTensorde forma(batch_size, config.n_docs)) — Puntuación entre cada embedding de documento recuperado (verretrieved_doc_embeds) yquestion_encoder_last_hidden_state.Si el modelo no se inicializa con un
retrievero no se proporcionainput_ids,doc_scoresdebe proporcionarse a la pasada hacia adelante.doc_scoresson devueltos por__call__(). - do_deduplication (
bool, opcional) — Indica si se deben deduplicar las generaciones de diferentes documentos de contexto para una entrada dada. Debe establecerse enFalsesi se utiliza durante el entrenamiento con un backend distribuido. - num_return_sequences(
int, opcional, valor predeterminado 1) — El número de secuencias devueltas calculadas de forma independiente para cada elemento del lote. Tenga en cuenta que este no es el valor que pasamos a la función[generate()](/docs/transformers/main/en/main_classes/text_generation#transformers.GenerationMixin.generate)delgenerator, donde establecemosnum_return_sequencesennum_beams. - num_beams (
int, opcional, valor predeterminado 1) — Número de haces para la búsqueda por haces. 1 significa que no se realiza búsqueda por haces. - n_docs (
int, opcional, valor predeterminadoconfig.n_docs) — Número de documentos a recuperar y/o número de documentos para los que generar una respuesta. - kwargs (
dict[str, Any], opcional) — Los kwargs adicionales se pasarán a generate().
Devuelve
torch.LongTensor de forma (batch_size * num_return_sequences, sequence_length)
Las secuencias generadas. La segunda dimensión (longitud de la secuencia) es igual a max_length o más corta si todos los lotes terminaron antes debido a eos_token_id.
Implementa la decodificación “thorough” de secuencias RAG. Lea la documentación de generate()` para obtener más información sobre cómo establecer otros parámetros de entrada de generate.
RagTokenForGeneration
clase transformers.RagTokenForGeneration
< source >( 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 )
Parámetros
- config (PreTrainedConfig, opcional) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.
- question_encoder (
PreTrainedModel, opcional) — El modelo responsable de codificar la pregunta en estados ocultos para la recuperación. - generator (
PreTrainedModel, opcional) — El modelo responsable de generar texto a partir de los documentos recuperados. - retriever (
RagRetriever, opcional) — El componente responsable de recuperar documentos de una base de conocimientos a partir de la pregunta codificada.
Implementación de un modelo RAG-token. Realiza la marginalización específica de RAG-token en la pasada hacia adelante.
Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).
Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.FloatTensor] = 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.FloatTensor] = 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.FloatTensor)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices de los tokens de la secuencia de entrada en el vocabulario. RagConfig, utilizado para inicializar el modelo, especifica qué generador utilizar y también especifica un tokenizador de generador compatible. Utilice esa clase de tokenizador para obtener los índices. - attention_mask (
torch.FloatTensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar realizar atención en los índices de tokens de relleno. Valores de máscara seleccionados en[0, 1]:- 1 para los tokens que no están enmascarados,
- 0 para los tokens que están enmascarados.
- encoder_outputs (
tuple(tuple(torch.FloatTensor), opcional) — La tupla consiste en (generator_enc_last_hidden_state, opcional:generator_enc_hidden_states, opcional:generator_enc_attentions).generator_enc_last_hidden_statede forma(batch_size, n_docs * sequence_length, hidden_size)es una secuencia de estados ocultos en la salida de la última capa del codificador del generador.Utilizado por el modelo (RagModel) durante la decodificación.
- decoder_input_ids (
torch.LongTensorde forma(batch_size, target_sequence_length), opcional) — Proporcionar para tareas de generación.Nonepor defecto, constrúyase según las instrucciones del modelo generador que esté utilizando con su instancia de RAG. - decoder_input_ids (
torch.LongTensorde forma(batch_size, target_sequence_length), opcional) — Índices de los tokens de la secuencia de entrada del decodificador en el vocabulario. Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles. ¿Qué son los IDs de entrada del decodificador?Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles.
- decoder_attention_mask (
torch.BoolTensorde forma(batch_size, target_sequence_length), opcional) — Comportamiento predeterminado: genera un tensor que ignora los tokens de relleno endecoder_input_ids. También se usará una máscara causal de forma predeterminada. - past_key_values (
~cache_utils.Cache, opcional) — Estados ocultos precalculados (claves y valores en los bloques de autoatención y en los bloques de atención cruzada) que se pueden usar para acelerar la decodificación secuencial. Esto generalmente consiste en lapast_key_valuesdevuelta por el modelo en una etapa anterior de la decodificación, cuandouse_cache=Trueoconfig.use_cache=True.Solo se permite una instancia de Cache como entrada, consulte nuestra guía de caché kv. Si no se pasan
past_key_values, DynamicCache se inicializará de forma predeterminada.El modelo generará el mismo formato de caché que se proporciona como entrada.
Si se utilizan
past_key_values, se espera que el usuario introduzca únicamente losinput_idsno procesados (aquellos que no tienen sus estados de clave y valor pasados proporcionados a este modelo) con forma(batch_size, unprocessed_length)en lugar de todos losinput_idscon forma(batch_size, sequence_length). - context_input_ids (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, devuelto cuando output_retrieved=True) — IDs de entrada procesados a partir de los documentos recuperados y losinput_idsdel codificador de la pregunta por el recuperador. Si el modelo no se inicializó con unretriever, `context_input_ids` debe proporcionarse a la pasa hacia adelante.context_input_idsse devuelve mediante__call__(). - context_attention_mask (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length),opcional, se devuelve cuando output_retrieved=True) — Máscara de atención procesada a partir de los documentos recuperados y de losinput_idsdel codificador de la pregunta por el retriever. Si el modelo no está inicializado con unretriever,context_attention_maskdebe proporcionarse en la pasada hacia adelante.context_attention_maskse devuelve mediante__call__(). - doc_scores (
torch.FloatTensorde forma(batch_size, config.n_docs)) — Puntuación entre los embeddings de cada documento recuperado (verretrieved_doc_embeds) yquestion_encoder_last_hidden_state. Si el modelo no está inicializado con unretriever,doc_scoresdebe proporcionarse en la pasada hacia adelante.doc_scoresse puede calcular mediantequestion_encoder_last_hidden_stateyretrieved_doc_embeds, consulte los ejemplos para obtener más información. - use_cache (
bool, opcional) — Si se establece enTrue, se devuelven los estados de clave-valor depast_key_valuesy pueden usarse para acelerar la decodificación (verpast_key_values). - output_attentions (
bool, opcional) — Indica si se deben devolver los tensores de atención de todas las capas de atención. Consulteattentionsen los tensores devueltos para obtener más detalles. - output_hidden_states (
bool, opcional) — Indica si se deben devolver los estados ocultos de todas las capas. Consultehidden_statesen los tensores devueltos para obtener más detalles. - output_retrieved (
bool, opcional) — Indica si se deben devolverretrieved_doc_embeds,retrieved_doc_ids,context_input_idsycontext_attention_mask. Consulte los tensores devueltos para más detalles. - do_marginalize (
bool, opcional) — SiTrue, los logits se marginalizan sobre todos los documentos mediante el uso detorch.nn.functional.log_softmax. - reduce_loss (
bool, opcional) — Solo es relevante si se pasalabels. SiTrue, la pérdida NLL se reduce usando la operacióntorch.Tensor.sum. - labels (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Etiquetas para calcular la pérdida de modelado de lenguaje enmascarado. Los índices deben estar en[0, ..., config.vocab_size]o ser -100 (ver la docstring deinput_ids). Los tokens con índices establecidos en-100se ignoran (enmascarados); la pérdida solo se calcula para los tokens con etiquetas en[0, ..., config.vocab_size]. - n_docs (
int, opcional) — El número de documentos a recuperar.
Devuelve
RetrievAugLMMarginOutput o tuple(torch.FloatTensor)
Un RetrievAugLMMarginOutput o una tupla de
torch.FloatTensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios
elementos según la configuración (RagConfig) y las entradas.
El método forward de RagTokenForGeneration sobrescribe el método especial __call__.
Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de
Moduledespués en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.
loss (
torch.FloatTensorde forma(1,), opcional, devuelta cuando se proporcionalabels) — Pérdida de modelado de lenguaje.logits (
torch.FloatTensorde forma(batch_size, sequence_length, config.vocab_size)) — Puntuaciones de predicción de la cabeza de modelado de lenguaje. La puntuación puede estar marginalizada sobre todos los documentos para cada token del vocabulario.doc_scores (
torch.FloatTensorde forma(batch_size, config.n_docs)) — Puntuación entre cada embedding de documento recuperado (verretrieved_doc_embeds) yquestion_encoder_last_hidden_state.past_key_values (
Cache, opcional, se devuelve cuando se pasause_cache=Trueo cuandoconfig.use_cache=True) — Es una instancia de Cache. Para más detalles, consulta nuestra guía de caché kv.Contiene estados ocultos precalculados (claves y valores en los bloques de atención) del decodificador que se pueden utilizar (véase la entrada
past_key_values) para acelerar la decodificación secuencial.retrieved_doc_embeds (
torch.FloatTensorde forma(batch_size, config.n_docs, hidden_size), opcional, devuelto cuando output_retrieved=True) — Documentos incrustados recuperados por el recuperador. Se utiliza junto conquestion_encoder_last_hidden_statepara calcular losdoc_scores.retrieved_doc_ids (
torch.LongTensorde forma(batch_size, config.n_docs), opcional, se devuelve cuando output_retrieved=True) — Los índices de los documentos incrustados recuperados por el recuperador.context_input_ids (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, devuelto cuando output_retrieved=True) — ids de entrada procesados a partir de los documentos recuperados y de los input_ids del codificador de la pregunta por el recuperador.context_attention_mask (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, devuelto cuando output_retrieved=True) — Máscara de atención procesada a partir de los documentos recuperados y losinput_idsdel codificador de la pregunta por el recuperador.question_encoder_last_hidden_state (
torch.FloatTensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del codificador de preguntas, salida agrupada del modelo.question_enc_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de las incrustaciones y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del codificador de la pregunta en la salida de cada capa más las salidas de la incrustación inicial.
question_enc_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(una por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del codificador de la pregunta, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
generator_enc_last_hidden_state (
torch.FloatTensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del codificador del generador del modelo.generator_enc_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de los embeddings y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del codificador del generador en la salida de cada capa más las salidas de la incrustación inicial.
generator_enc_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(una por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del codificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
generator_dec_hidden_states (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.FloatTensor(una para la salida de los embeddings y una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del decodificador del generador en la salida de cada capa más las salidas de la incrustación inicial.
generator_dec_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(una por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atención del decodificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
generator_cross_attentions (
tuple(torch.FloatTensor), opcional, se devuelve cuando se pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.FloatTensor(una por cada capa) de forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de las cross-attentions del decodificador del generador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de cross-attention.
Ejemplo:
>>> 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
< source >( 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.FloatTensor] = 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)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — La secuencia utilizada como indicación para la generación. Si no se pasainput_ids, entonces se debe proporcionarcontext_input_ids. - attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar realizar atención en los índices de tokens de relleno. Valores de máscara seleccionados en[0, 1]:- 1 para los tokens que no están enmascarados,
- 0 para los tokens que están enmascarados.
- context_input_ids (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, se devuelve cuando output_retrieved=True) — IDs de entrada procesados a partir de los documentos recuperados y del codificador de la preguntainput_idspor el recuperador.Si el modelo no se inicializa con un
retriever, se debe proporcionarcontext_input_idsa la paso hacia adelante.context_input_idsse devuelven mediante__call__(). - context_attention_mask (
torch.LongTensorde forma(batch_size * config.n_docs, config.max_combined_length), opcional, devuelto cuando output_retrieved=True) — Máscara de atención procesada a partir de los documentos recuperados y el codificador de la preguntainput_idspor el retriever.Si el modelo no se inicializa con un
retriever, se debe proporcionarcontext_input_idsa la paso hacia adelante.context_input_idsse devuelven mediante__call__(). - doc_scores (
torch.FloatTensorde forma(batch_size, config.n_docs)) — Puntuación entre cada embedding de documento recuperado (verretrieved_doc_embeds) yquestion_encoder_last_hidden_state.Si el modelo no se inicializa con un
retriever, se debe proporcionarcontext_input_idsa la paso hacia adelante.context_input_idsse devuelven mediante__call__(). - n_docs (
int, opcional, valor predeterminadoconfig.n_docs) — Número de documentos a recuperar y/o número de documentos para los que generar una respuesta. - generation_config (
~generation.GenerationConfig, opcional) — La configuración de generación que se utilizará como parametrización base para la llamada de generación. Los**kwargspasados a generate que coincidan con los atributos degeneration_configlos sobrescribirán. Si no se proporcionageneration_config, se utilizará la predeterminada, que tiene la siguiente prioridad de carga: 1) desde el archivo de modelogeneration_config.json, si existe; 2) desde la configuración del modelo. Tenga en cuenta que los parámetros no especificados heredarán los valores predeterminados de GenerationConfig, cuya documentación debe consultarse para parametrizar la generación. - prefix_allowed_tokens_fn (
Callable[[int, torch.Tensor], list[int]], opcional) — Si se proporciona, esta función restringe la búsqueda por haz a los tokens permitidos en cada paso. Si no se proporciona, no se aplica ninguna restricción. Esta función toma 2 argumentosinputs_idsy el ID del lotebatch_id. Debe devolver una lista con los tokens permitidos para el siguiente paso de generación condicionado a los tokens generados previamenteinputs_idsy al ID del lotebatch_id. Este argumento es útil para la generación condicionada al prefijo, tal como se describe en Autoregressive Entity Retrieval. - logits_processor (
LogitsProcessorList, opcional) — Procesadores de logits personalizados que complementan los procesadores de logits predeterminados creados a partir de los argumentos y la configuración de un modelo. Si se pasa un procesador de logits que ya ha sido creado con los argumentos o la configuración de un modelo, se lanza un error. - stopping_criteria (
StoppingCriteriaList, opcional) — Criterios de parada personalizados que complementan los criterios de parada predeterminados creados a partir de los argumentos y la configuración de un modelo. Si se pasa un criterio de parada que ya fue creado con los argumentos o la configuración de un modelo, se lanza un error. - kwargs (
dict[str, Any], opcional) — Parametrización ad hoc degenerate_configy/o kwargs adicionales específicos del modelo que se reenviarán a la funciónforwarddel modelo.
Devuelve
torch.LongTensor de forma (batch_size * num_return_sequences, sequence_length)
Las secuencias generadas. La segunda dimensión (sequence_length) es igual a max_length o más corta si todos los lotes terminaron antes debido a eos_token_id.
Implementa la decodificación de tokens de RAG.