Transformers documentation
RAG
Эта модель была опубликована в HF papers 22.05.2020 и добавлена в Hugging Face Transformers 16.11.2020.
RAG
Retrieval-Augmented Generation (RAG) объединяет предобученную языковую модель (параметрическую память) с доступом к внешнему источнику данных (непараметрическую память) с помощью предобученного нейронного ретривера. RAG извлекает релевантные фрагменты текста и использует их как условие для генерации во время инференса. Это часто делает ответы более фактологичными и позволяет обновлять знания, изменяя индекс, вместо переобучения всей модели.
Все исходные контрольные точки RAG можно найти в организации AI at Meta.
Эта модель была предоставлена пользователем ola13.
Щёлкните по моделям RAG в боковой панели справа, чтобы увидеть больше примеров применения RAG к различным языковым задачам.
Приведённые ниже примеры демонстрируют, как генерировать текст с помощью 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])Квантование снижает потребление памяти за счёт хранения весов в пониженной точности. Список поддерживаемых бэкендов приведён в обзоре Quantization. В примере ниже используется 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
класс 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 )
Параметры
- is_encoder_decoder (
bool, необязательный, по умолчаниюTrue) — Указывает, используется ли модель в качестве энкодера/декодера. - question_encoder (
PreTrainedConfig | dict, необязательный) — Объект конфигурации или словарь конфигурации базовой модели кодировщика вопроса - generator (
PreTrainedConfig | dict, необязательный) — Объект конфигурации или словарь конфигурации базовой модели генератора ответов - vocab_size (
int, необязательный) — Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены вinput_ids. - prefix (
str, необязательный) — Строковый префикс, добавляемый к каждому вводу перед передачей в генераторную модель. - bos_token_id (
int, необязательный) — Идентификатор токена, используемого для обозначения начала потока в словаре. - pad_token_id (
int, необязательный) — Идентификатор токена, используемого для выравнивания в словаре. - eos_token_id (
Union[int, list[int]], необязательный) — Идентификатор токена, используемого для обозначения конца потока в словаре. - decoder_start_token_id (
int, необязательный) — Если модель encoder-decoder начинает декодирование с токена, отличного отbos, то идентификатор этого токена. - 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) — Размер батча для поиска, определяемый как количество запросов, одновременно отправляемых в индекс faiss, инкапсулированный в RagRetriever. - dataset (
str, необязательный, по умолчанию"wiki_dpr") — Идентификатор датасета, проиндексированного в HuggingFace Datasets (полный список доступных датасетов и их идентификаторов можно получить с помощьюdatasets.list_datasets()). - dataset_split (
str, необязательный, по умолчанию"train") — Какой сплитdatasetзагрузить. - index_name (
str, необязательный, по умолчанию"compressed") — Имя индекса, связанного сdataset. Можно выбрать одно из значений:"legacy","exact"или"compressed". - index_path (
str, необязательный) — Путь к сериализованному индексу faiss на диске. - passages_path (
str, необязательный) — Путь к текстовым фрагментам, совместимым с индексом faiss. Обязателен при использованииLegacyIndex - use_dummy_dataset (
bool, необязательный, по умолчаниюFalse) — Указывает, следует ли загрузить «dummy»-вариант набора данных, указанного вdataset. - reduce_loss (
bool, необязательный, по умолчаниюFalse) — Указывает, следует ли сводить потерю NLL с помощью операцииtorch.Tensor.sum. - 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. - 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, используемого для извлечения.
Это класс конфигурации для хранения настроек модели RagModel. Он используется для создания модели Rag в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
from_question_encoder_generator_configs
< source >( question_encoder_config: PreTrainedConfiggenerator_config: PreTrainedConfig**kwargs ) → EncoderDecoderConfig
Возвращает
Экземпляр объекта конфигурации
Создайте экземпляр EncoderDecoderConfig (или производного класса) на основе конфигурации предобученной модели-энкодера и конфигурации модели-декодера.
RagTokenizer
Выводы, специфичные для Rag
класс transformers.models.rag.modeling_rag.RetrievAugLMMarginOutput
< source >( 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 (
torch.Tensorформы(batch_size, config.n_docs)) — Оценка между эмбеддингами каждого извлечённого документа (см.retrieved_doc_embeds) иquestion_encoder_last_hidden_state. - past_key_values (
Cache, необязательный, возвращается, еслиuse_cache=Trueпередан или еслиconfig.use_cache=True) — это Cache экземпляр. Подробнее см. в нашем руководстве по кэшу KV.Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках внимания) декодера, которые можно использовать (см. вход
past_key_values) для ускорения последовательного декодирования. - retrieved_doc_embeds (
torch.Tensorформы(batch_size, config.n_docs, hidden_size), необязательный, возвращается при 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) — Входные идентификаторы, обработанные ретривером на основе извлеченных документов и входных идентификаторов энкодера вопроса. - context_attention_mask (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length), необязательный, возвращается, если 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 к значениям внимания, используемые для вычисления взвешенного среднего в головах кросс-внимания.
Базовый класс для выходов моделей с ретривером и маргинализацией.
класс transformers.models.rag.modeling_rag.RetrievAugLMOutput
< source >( 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 (
torch.Tensorформы(batch_size, config.n_docs)) — Оценка между эмбеддингами каждого извлечённого документа (см.retrieved_doc_embeds) иquestion_encoder_last_hidden_state. - past_key_values (
Cache, необязательный, возвращается, еслиuse_cache=Trueпередан или еслиconfig.use_cache=True) — это Cache экземпляр. Подробнее см. в нашем руководстве по кэшу KV.Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках внимания) декодера, которые можно использовать (см. вход
past_key_values) для ускорения последовательного декодирования. - retrieved_doc_embeds (
torch.Tensorформы(batch_size, config.n_docs, hidden_size), необязательный, возвращается при 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) — Входные идентификаторы, обработанные ретривером на основе извлеченных документов и входных идентификаторов энкодера вопроса. - context_attention_mask (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length), необязательный, возвращается, если 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
класс transformers.RagRetriever
< source >( configquestion_encoder_tokenizergenerator_tokenizerindex = Noneinit_retrieval = True )
Параметры
- config (RagConfig) —
Конфигурация RAG-модели, с которой используется данный Retriever. Содержит параметры, указывающие, какой
Indexследует построить. Вы можете загрузить собственный пользовательский набор данных с помощьюconfig.index_name="custom"или использовать стандартный (по умолчанию) из библиотеки datasets, например, с помощьюconfig.index_name="wiki_dpr". - question_encoder_tokenizer (PreTrainedTokenizer) — Токенайзер, который использовался для токенизации вопроса. Он применяется для декодирования вопроса, после чего используется generator_tokenizer.
- generator_tokenizer (PreTrainedTokenizer) — Токенизатор, используемый для генераторной части RagModel.
- index (
Index, необязательный, по умолчанию — тот, что определён в конфигурации) — Если указан, используется этот индекс вместо того, который строится на основе конфигурации
Retriever используется для получения документов по векторным запросам. Он извлекает эмбеддинги документов, а также их содержимое и форматирует их для использования с 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")Функция инициализации ретривера. Загружает индекс в память.
postprocess_docs
< source >( 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
< source >( question_hidden_states: ndarrayn_docs: int ) → tuple[np.ndarray, np.ndarray, list[dict]]
Параметры
- question_hidden_states (
np.ndarrayформы(batch_size, vector_size)) — Партия векторов запросов для использования при извлечении. - n_docs (
int) — Количество документов, извлекаемых на каждый запрос.
Возвращает
tuple[np.ndarray, np.ndarray, list[dict]]
Кортеж со следующими объектами:
- retrieved_doc_embeds (
np.ndarrayформы(batch_size, n_docs, dim)) — Векторы эмбеддингов извлечённых документов для каждого запроса. - doc_ids (
np.ndarrayформы(batch_size, n_docs)) — идентификаторы документов в индексе - doc_dicts (
list[dict]): примерыretrieved_doc_embedsдля каждого запроса.
Получает документы для указанных question_hidden_states.
RagModel
класс 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 )
Параметры
- config (PreTrainedConfig, optional) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
- question_encoder (
PreTrainedModel, необязательный) — Модель, отвечающая за кодирование вопроса в скрытые состояния для поиска. - generator (
PreTrainedModel, необязательный) — Модель, отвечающая за генерацию текста на основе извлечённых документов. - retriever (
RagRetriever, необязательный) — Компонент, отвечающий за извлечение документов из базы знаний по закодированному вопросу.
Модель Rag без дополнительных слоёв, выводящая «сырые» скрытые состояния.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
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 = 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)) — Индексы токенов входной последовательности в словаре. RagConfig, используемый для инициализации модели, определяет, какой генератор использовать, а также задаёт совместимый с ним токенизатор. Используйте этот класс токенизатора, чтобы получить индексы. - attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 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 (
torch.LongTensorформы(batch_size, target_sequence_length), необязательный) — Указывается для задач генерации. По умолчаниюNone; формируется в соответствии с инструкциями для модели генератора, используемой в вашем экземпляре RAG. - decoder_input_ids (
torch.LongTensorформы(batch_size, target_sequence_length), необязательный) — Индексы токенов входной последовательности декодера в словаре. Индексы можно получить с помощью AutoTokenizer. Подробности — в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call(). Что такое decoder input IDs?Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- decoder_attention_mask (
torch.BoolTensorформы(batch_size, target_sequence_length), необязательный) — Поведение по умолчанию: генерировать тензор, игнорирующий токены заполнения вdecoder_input_ids. По умолчанию также будет использоваться каузальная маска. - past_key_values (
~cache_utils.Cache, необязательный) — Предвычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно этоpast_key_values, возвращённые моделью на предыдущем этапе декодирования, когдаuse_cache=Trueилиconfig.use_cache=True.В качестве входного параметра допускается только экземпляр Cache, см. наше руководство по кэшу KV. Если
past_key_valuesне переданы, по умолчанию будет инициализирован DynamicCache.Модель будет выводить тот же формат кэша, который был передан на вход.
Если используются
past_key_values, ожидается, что пользователь передаст только необработанныеinput_ids(те, для которых в этой модели ещё не заданы состояния прошлых ключей и значений) формы(batch_size, unprocessed_length), а не всеinput_idsформы(batch_size, sequence_length). - doc_scores (
torch.Tensorформы(batch_size, config.n_docs)) — Оценка сходства между эмбеддингами каждого извлечённого документа (см.retrieved_doc_embeds) иquestion_encoder_last_hidden_state. Если модель не была инициализирована сretriever,doc_scoresдолжна быть передана в forward pass.doc_scoresможно вычислить поquestion_encoder_last_hidden_stateиretrieved_doc_embeds, см. примеры для получения дополнительной информации. - context_input_ids (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length), необязательный, возвращается при output_retrieved=True) — ID входных токенов, обработанные ретривером на основе извлеченных документов иinput_idsэнкодера вопроса. Если модель не была инициализирована сretriever, `context_input_ids` необходимо передать в forward-проход.context_input_idsвозвращаются методом__call__(). - context_attention_mask (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length),необязательный, возвращается, если output_retrieved=True) — Маска внимания, прошедшая постобработку из извлечённых документов иinput_idsэнкодера вопроса, выполненная retriever. Если модель не инициализирована сretriever,context_attention_maskнеобходимо передать в forward-проход.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 (
torch.Tensorформы(batch_size, config.n_docs)) — Оценки соответствия между эмбеддингами каждого извлечённого документа (см.retrieved_doc_embeds) иquestion_encoder_last_hidden_state.past_key_values (
Cache, необязательный, возвращается при передачеuse_cache=Trueили когдаconfig.use_cache=True) — это экземпляр Cache. Подробнее см. в нашем руководстве по кэшу kv.Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках внимания) декодера, которые можно использовать (см. вход
past_key_values) для ускорения последовательного декодирования.retrieved_doc_embeds (
torch.Tensorформы(batch_size, config.n_docs, hidden_size), необязательный, возвращается при 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) — входные идентификаторы, полученные из извлечённых документов и входных идентификаторов кодировщика вопроса после обработки ретривером.context_attention_mask (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length), необязательный, возвращается, если 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 к значениям внимания, используемые для вычисления взвешенного среднего в головах кросс-внимания.
Пример:
>>> 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
класс 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 )
Параметры
- config (PreTrainedConfig, optional) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
- question_encoder (
PreTrainedModel, необязательный) — Модель, отвечающая за кодирование вопроса в скрытые состояния для поиска. - generator (
PreTrainedModel, необязательный) — Модель, отвечающая за генерацию текста на основе извлечённых документов. - retriever (
RagRetriever, необязательный) — Компонент, отвечающий за извлечение документов из базы знаний по закодированному вопросу.
Реализация модели RAG-sequence. Выполняет маргинализацию, специфичную для RAG-sequence, в прямом проходе.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
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.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)) — Индексы токенов входной последовательности в словаре. RagConfig, используемый для инициализации модели, определяет, какой генератор использовать, а также задаёт совместимый с ним токенизатор. Используйте этот класс токенизатора, чтобы получить индексы. - attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 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 (
torch.LongTensorформы(batch_size, target_sequence_length), необязательный) — Указывается для задач генерации. По умолчаниюNone; формируется в соответствии с инструкциями для модели генератора, используемой в вашем экземпляре RAG. - decoder_input_ids (
torch.LongTensorформы(batch_size, target_sequence_length), необязательный) — Индексы токенов входной последовательности декодера в словаре. Индексы можно получить с помощью AutoTokenizer. Подробности — в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call(). Что такое decoder input IDs?Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- decoder_attention_mask (
torch.BoolTensorформы(batch_size, target_sequence_length), необязательный) — Поведение по умолчанию: генерировать тензор, игнорирующий токены заполнения вdecoder_input_ids. По умолчанию также будет использоваться каузальная маска. - past_key_values (
~cache_utils.Cache, необязательный) — Предвычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно этоpast_key_values, возвращённые моделью на предыдущем этапе декодирования, когдаuse_cache=Trueилиconfig.use_cache=True.В качестве входного параметра допускается только экземпляр Cache, см. наше руководство по кэшу KV. Если
past_key_valuesне переданы, по умолчанию будет инициализирован DynamicCache.Модель будет выводить тот же формат кэша, который был передан на вход.
Если используются
past_key_values, ожидается, что пользователь передаст только необработанныеinput_ids(те, для которых в этой модели ещё не заданы состояния прошлых ключей и значений) формы(batch_size, unprocessed_length), а не всеinput_idsформы(batch_size, sequence_length). - context_input_ids (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length), необязательный, возвращается при output_retrieved=True) — ID входных токенов, обработанные ретривером на основе извлеченных документов иinput_idsэнкодера вопроса. Если модель не была инициализирована сretriever, `context_input_ids` необходимо передать в forward-проход.context_input_idsвозвращаются методом__call__(). - context_attention_mask (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length),необязательный, возвращается, если output_retrieved=True) — Маска внимания, прошедшая постобработку из извлечённых документов иinput_idsэнкодера вопроса, выполненная retriever. Если модель не инициализирована сretriever,context_attention_maskнеобходимо передать в forward-проход.context_attention_maskвозвращаются методом__call__(). - doc_scores (
torch.Tensorформы(batch_size, config.n_docs)) — Оценка сходства между эмбеддингами каждого извлечённого документа (см.retrieved_doc_embeds) иquestion_encoder_last_hidden_state. Если модель не была инициализирована сretriever,doc_scoresдолжна быть передана в forward pass.doc_scoresможно вычислить поquestion_encoder_last_hidden_stateиretrieved_doc_embeds, см. примеры для получения дополнительной информации. - 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, потеря NLL сводится с помощью операцииtorch.Tensor.sum. - labels (
torch.LongTensorформы(batch_size, sequence_length), необязательный) — Метки для вычисления потерь маскированного языкового моделирования. Индексы должны находиться в диапазоне[0, ..., config.vocab_size]или быть равны -100 (см. docstringinput_ids). Токены с индексами, установленными в-100, игнорируются (маскируются); потери вычисляются только для токенов с метками в диапазоне[0, ..., config.vocab_size]. - n_docs (
int, необязательный) — Количество документов, которые нужно извлечь.
Возвращает
RetrievAugLMMarginOutput или tuple(torch.Tensor)
Объект RetrievAugLMMarginOutput или кортеж
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (RagConfig) и входных данных.
Метод forward класса RagSequenceForGeneration переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
loss (
torch.Tensorформы(1,), необязательный, возвращается, если заданlabels) — Потери языковой модели.logits (
torch.Tensorформы(batch_size, sequence_length, config.vocab_size)) — Оценки предсказаний языковой модели. Оценка может быть усреднена по всем документам для каждого токена словаря.doc_scores (
torch.Tensorформы(batch_size, config.n_docs)) — Оценки соответствия между эмбеддингами каждого извлечённого документа (см.retrieved_doc_embeds) иquestion_encoder_last_hidden_state.past_key_values (
Cache, необязательный, возвращается при передачеuse_cache=Trueили когдаconfig.use_cache=True) — это экземпляр Cache. Подробнее см. в нашем руководстве по кэшу kv.Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках внимания) декодера, которые можно использовать (см. вход
past_key_values) для ускорения последовательного декодирования.retrieved_doc_embeds (
torch.Tensorформы(batch_size, config.n_docs, hidden_size), необязательный, возвращается при 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) — входные идентификаторы, полученные из извлечённых документов и входных идентификаторов кодировщика вопроса после обработки ретривером.context_attention_mask (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length), необязательный, возвращается, если 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 к значениям внимания, используемые для вычисления взвешенного среднего в головах кросс-внимания.
Пример:
>>> 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.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 (
torch.LongTensorформы(batch_size, sequence_length), необязательный) — Последовательность, используемая в качестве промпта для генерации. Еслиinput_idsне передан, необходимо указатьcontext_input_ids. - attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- context_input_ids (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length), необязательный, возвращается, если output_retrieved=True) — ID входных токенов, полученные из извлеченных документов и входных ID кодировщика вопроса после обработки ретривером. - context_attention_mask (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length), необязательный, возвращается, если output_retrieved=True) — Маска внимания, обработанная на основе извлечённых документов иinput_idsизЕсли модель не инициализирована с
retrieverили не переданыinput_ids, то для forward-прохода необходимо предоставить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, optional, по умолчанию 1) — Количество независимо вычисленных возвращаемых последовательностей для каждого элемента в батче. Обратите внимание, что это не то значение, которое мы передаём в функцию[generate()](/docs/transformers/main/en/main_classes/text_generation#transformers.GenerationMixin.generate)объектаgenerator, где мы устанавливаемnum_return_sequencesравнымnum_beams. - num_beams (
int, необязательный, по умолчанию 1) — Количество лучей для beam search. Значение 1 означает, что beam search не используется. - n_docs (
int, необязательный, по умолчаниюconfig.n_docs) — Количество документов, которые нужно извлечь, и/или количество документов, для которых нужно сгенерировать ответ. - kwargs (
dict[str, Any], необязательный) — Дополнительные kwargs будут переданы в generate().
Возвращает
torch.LongTensor формы (batch_size * num_return_sequences, sequence_length)
Сгенерированные последовательности. Вторая размерность (длина последовательности) равна max_length или меньше, если все батчи завершились досрочно из-за eos_token_id.
Реализует «тщательное» декодирование последовательности RAG. Подробности о том, как задавать другие входные параметры generate, см. в документации generate().
RagTokenForGeneration
класс 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 )
Параметры
- config (PreTrainedConfig, optional) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
- question_encoder (
PreTrainedModel, необязательный) — Модель, отвечающая за кодирование вопроса в скрытые состояния для поиска. - generator (
PreTrainedModel, необязательный) — Модель, отвечающая за генерацию текста на основе извлечённых документов. - retriever (
RagRetriever, необязательный) — Компонент, отвечающий за извлечение документов из базы знаний по закодированному вопросу.
Реализация модели RAG-token. Выполняет маргинализацию, специфичную для RAG-token, в прямом проходе.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
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.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)) — Индексы токенов входной последовательности в словаре. RagConfig, используемый для инициализации модели, определяет, какой генератор использовать, а также задаёт совместимый с ним токенизатор. Используйте этот класс токенизатора, чтобы получить индексы. - attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 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 (
torch.LongTensorформы(batch_size, target_sequence_length), необязательный) — Указывается для задач генерации. По умолчаниюNone; формируется в соответствии с инструкциями для модели генератора, используемой в вашем экземпляре RAG. - decoder_input_ids (
torch.LongTensorформы(batch_size, target_sequence_length), необязательный) — Индексы токенов входной последовательности декодера в словаре. Индексы можно получить с помощью AutoTokenizer. Подробности — в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call(). Что такое decoder input IDs?Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- decoder_attention_mask (
torch.BoolTensorформы(batch_size, target_sequence_length), необязательный) — Поведение по умолчанию: генерировать тензор, игнорирующий токены заполнения вdecoder_input_ids. По умолчанию также будет использоваться каузальная маска. - past_key_values (
~cache_utils.Cache, необязательный) — Предвычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно этоpast_key_values, возвращённые моделью на предыдущем этапе декодирования, когдаuse_cache=Trueилиconfig.use_cache=True.В качестве входного параметра допускается только экземпляр Cache, см. наше руководство по кэшу KV. Если
past_key_valuesне переданы, по умолчанию будет инициализирован DynamicCache.Модель будет выводить тот же формат кэша, который был передан на вход.
Если используются
past_key_values, ожидается, что пользователь передаст только необработанныеinput_ids(те, для которых в этой модели ещё не заданы состояния прошлых ключей и значений) формы(batch_size, unprocessed_length), а не всеinput_idsформы(batch_size, sequence_length). - context_input_ids (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length), необязательный, возвращается при output_retrieved=True) — ID входных токенов, обработанные ретривером на основе извлеченных документов иinput_idsэнкодера вопроса. Если модель не была инициализирована сretriever, `context_input_ids` необходимо передать в forward-проход.context_input_idsвозвращаются методом__call__(). - context_attention_mask (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length),необязательный, возвращается, если output_retrieved=True) — Маска внимания, прошедшая постобработку из извлечённых документов иinput_idsэнкодера вопроса, выполненная retriever. Если модель не инициализирована сretriever,context_attention_maskнеобходимо передать в forward-проход.context_attention_maskвозвращаются методом__call__(). - doc_scores (
torch.Tensorформы(batch_size, config.n_docs)) — Оценка сходства между эмбеддингами каждого извлечённого документа (см.retrieved_doc_embeds) иquestion_encoder_last_hidden_state. Если модель не была инициализирована сretriever,doc_scoresдолжна быть передана в forward pass.doc_scoresможно вычислить поquestion_encoder_last_hidden_stateиretrieved_doc_embeds, см. примеры для получения дополнительной информации. - 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. - reduce_loss (
bool, необязательный) — Имеет значение только при передачеlabels. ЕслиTrue, потеря NLL сводится с помощью операцииtorch.Tensor.sum. - labels (
torch.LongTensorформы(batch_size, sequence_length), необязательный) — Метки для вычисления потерь маскированного языкового моделирования. Индексы должны находиться в диапазоне[0, ..., config.vocab_size]или быть равны -100 (см. docstringinput_ids). Токены с индексами, установленными в-100, игнорируются (маскируются); потери вычисляются только для токенов с метками в диапазоне[0, ..., config.vocab_size]. - n_docs (
int, необязательный) — Количество документов, которые нужно извлечь.
Возвращает
RetrievAugLMMarginOutput или tuple(torch.Tensor)
Объект RetrievAugLMMarginOutput или кортеж
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (RagConfig) и входных данных.
Метод forward класса RagTokenForGeneration переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
loss (
torch.Tensorформы(1,), необязательный, возвращается, если заданlabels) — Потери языковой модели.logits (
torch.Tensorформы(batch_size, sequence_length, config.vocab_size)) — Оценки предсказаний языковой модели. Оценка может быть усреднена по всем документам для каждого токена словаря.doc_scores (
torch.Tensorформы(batch_size, config.n_docs)) — Оценки соответствия между эмбеддингами каждого извлечённого документа (см.retrieved_doc_embeds) иquestion_encoder_last_hidden_state.past_key_values (
Cache, необязательный, возвращается при передачеuse_cache=Trueили когдаconfig.use_cache=True) — это экземпляр Cache. Подробнее см. в нашем руководстве по кэшу kv.Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках внимания) декодера, которые можно использовать (см. вход
past_key_values) для ускорения последовательного декодирования.retrieved_doc_embeds (
torch.Tensorформы(batch_size, config.n_docs, hidden_size), необязательный, возвращается при 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) — входные идентификаторы, полученные из извлечённых документов и входных идентификаторов кодировщика вопроса после обработки ретривером.context_attention_mask (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length), необязательный, возвращается, если 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 к значениям внимания, используемые для вычисления взвешенного среднего в головах кросс-внимания.
Пример:
>>> 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.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 (
torch.LongTensorформы(batch_size, sequence_length), необязательный) — Последовательность, используемая в качестве промпта для генерации. Еслиinput_idsне передан, необходимо указатьcontext_input_ids. - attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- context_input_ids (
torch.LongTensorформы(batch_size * config.n_docs, config.max_combined_length), необязательный, возвращается, если output_retrieved=True) — Входные ID, обработанные из извлечённых документов и кодировщика вопроса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, необязательный) — Конфигурация генерации, используемая в качестве базовой параметризации для вызова генерации.**kwargs, передаваемые в generate и совпадающие с атрибутамиgeneration_config, переопределяют их. Еслиgeneration_configне указан, будет использован вариант по умолчанию, который имеет следующий приоритет загрузки: 1) из файла моделиgeneration_config.json, если он существует; 2) из конфигурации модели. Обратите внимание, что не указанные параметры наследуют значения по умолчанию GenerationConfig, документация по которым должна быть проверена для параметризации генерации. - prefix_allowed_tokens_fn (
Callable[[int, torch.Tensor], list[int]], optional) — Если указано, эта функция ограничивает поиск лучами (beam search) только разрешёнными токенами на каждом шаге. Если не указано, ограничения не применяются. Функция принимает два аргумента:inputs_idsи идентификатор батчаbatch_id. Она должна возвращать список разрешённых токенов для следующего шага генерации, зависящий от ранее сгенерированных токеновinputs_idsи идентификатора батчаbatch_id. Этот аргумент полезен для ограниченной генерации, обусловленной префиксом, как описано в Autoregressive Entity Retrieval. - logits_processor (
LogitsProcessorList, необязательный) — Пользовательские обработчики logits, дополняющие стандартные обработчики logits, создаваемые на основе аргументов и конфигурации модели. Если передан обработчик logits, который уже был создан с использованием этих аргументов или конфигурации модели, возникает ошибка. - stopping_criteria (
StoppingCriteriaList, необязательный) — Пользовательские критерии остановки, дополняющие стандартные критерии, формируемые на основе аргументов и конфигурации модели. Если передан критерий остановки, который уже был создан на основе аргументов или конфигурации модели, возникает ошибка. - kwargs (
dict[str, Any], необязательный) — Служебная параметризацияgenerate_configи/или дополнительные специфичные для модели аргументы, которые будут переданы в функциюforwardмодели.
Возвращает
torch.LongTensor формы (batch_size * num_return_sequences, sequence_length)
Сгенерированные последовательности. Вторая размерность (sequence_length) равна max_length или меньше, если все батчи завершились досрочно из-за eos_token_id.
Реализует декодирование токенов RAG.