Transformers documentation

RAG

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

이 모델은 2020-05-22에 HF papers에 게시되었으며, 2020-11-16에 Hugging Face Transformers에 기여되었습니다.

RAG

FlashAttention

Retrieval-Augmented Generation (RAG)은 사전 학습된 신경 검색기를 통해 사전 학습된 언어 모델(매개변수 기억)과 외부 데이터 소스(비매개변수 기억)에 대한 접근을 결합합니다. RAG는 추론 시 관련 패사지를 가져와 이를 기반으로 생성을 조건화합니다. 이를 통해 답변의 사실성이 높아지는 경우가 많으며, 모델을 전체적으로 재학습하는 대신 인덱스를 변경하여 지식을 업데이트할 수 있습니다.

모든 원본 RAG 체크포인트는 AI at Meta 조직에서 찾을 수 있습니다.

이 모델은 ola13에 의해 기여되었습니다.

오른쪽 사이드바의 RAG 모델에 클릭하여 RAG를 다양한 언어 작업에 적용하는 방법에 대한 추가 예시를 확인하세요.

아래 예제는 AutoModel을 사용하여 텍스트를 생성하는 방법을 보여줍니다.

AutoModel
from transformers import RagRetriever, RagSequenceForGeneration, RagTokenizer


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

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

Quantization은 가중치를 더 낮은 정밀도로 저장하여 메모리를 줄입니다. 지원되는 백엔드에 대한 Quantization 개요를 참조하세요. 아래 예제는 bitsandbytes를 사용하여 가중치를 4-bit로 양자화합니다.

import torch

from transformers import BitsAndBytesConfig, RagRetriever, RagSequenceForGeneration, RagTokenizer


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

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

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

RagConfig

class transformers.RagConfig

< >

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

매개변수

  • is_encoder_decoder (bool, 선택 사항, 기본값 True) — 모델이 인코더/디코더로 사용되는지 여부를 나타냅니다.
  • question_encoder (PreTrainedConfig | dict, 선택) — 질문 인코더 백본의 config 객체 또는 사전
  • generator (PreTrainedConfig | dict, 선택 사항) — 답변 생성기 백본의 config 객체 또는 사전
  • vocab_size (int, 선택 사항) — 모델의 어휘 크기입니다. input_ids로 표현할 수 있는 서로 다른 토큰의 수를 정의합니다.
  • prefix (str, 선택 사항) — 생성기 모델에 입력을 전달하기 전에 모든 입력 앞에 붙이는 문자열 접두사입니다.
  • bos_token_id (int, 선택 사항) — 어휘에서 스트림 시작에 사용되는 토큰 ID입니다.
  • pad_token_id (int, 선택 사항) — 어휘에서 패딩에 사용되는 토큰 ID입니다.
  • eos_token_id (Union[int, list[int]], 선택) — 어휘에서 스트림 종료에 사용되는 토큰 ID입니다.
  • decoder_start_token_id (int, 선택 사항) — 인코더-디코더 모델이 bos와 다른 토큰으로 디코딩을 시작하는 경우, 해당 토큰의 id입니다.
  • title_sep (str, 선택 사항, 기본값 " / ") — RagRetriever를 호출할 때 검색된 문서의 제목과 본문 사이에 삽입되는 구분자입니다.
  • doc_sep (str, 선택, 기본값 " // ") — RagRetriever를 호출할 때 검색된 문서의 텍스트와 원래 입력 사이에 삽입되는 구분자입니다.
  • n_docs (int, 선택 사항, 기본값 5) — 검색할 문서의 수.
  • max_combined_length (int, 선택, 기본값 300) — __call__()이 반환하는 컨텍스트화된 입력의 최대 길이.
  • retrieval_vector_size (int, 선택 사항, 기본값 768) — RagRetriever가 색인하는 문서 임베딩의 차원입니다.
  • retrieval_batch_size (int, 선택 사항, 기본값 8) — RagRetriever에 캡슐화된 faiss 인덱스에 동시에 발급되는 쿼리의 수로 정의되는 검색 배치 크기입니다.
  • dataset (str, 선택 사항, 기본값 "wiki_dpr") — HuggingFace Datasets에서 인덱싱된 데이터셋의 식별자입니다. datasets.list_datasets()를 사용하여 사용 가능한 모든 데이터셋과 id를 나열할 수 있습니다.
  • dataset_split (str, 선택 사항, 기본값 "train") — 로드할 dataset의 분할(split)을 지정합니다.
  • index_name (str, 선택 사항, 기본값 "compressed") — dataset에 연결된 인덱스의 이름입니다. "legacy", "exact", "compressed" 중 하나를 선택할 수 있습니다.
  • index_path (str, 선택 사항) — 디스크에 직렬화된 faiss 인덱스의 경로입니다.
  • passages_path (str, 선택) — faiss 인덱스와 호환되는 텍스트 패시지 경로입니다. LegacyIndex를 사용하는 경우 필수입니다.
  • use_dummy_dataset (bool, 선택 사항, 기본값 False) — dataset으로 지정된 데이터셋의 “dummy” 변형을 로드할지 여부.
  • reduce_loss (bool, 선택 사항, 기본값 False) — torch.Tensor.sum 연산을 사용하여 NLL 손실을 축소할지 여부.
  • label_smoothing (float, 선택 사항, 기본값 0.0) — return_loss가 True로 설정된 경우에만 관련이 있습니다. 손실 계산에서 레이블 스무딩의 epsilon 매개변수 값을 제어합니다. 0으로 설정하면 레이블 스무딩이 수행되지 않습니다.
  • do_deduplication (bool, 선택 사항, 기본값 True) — 주어진 입력에 대해 서로 다른 컨텍스트 문서에서 생성된 결과를 중복 제거할지 여부입니다. 분산 백엔드로 학습 중에 사용할 경우 False로 설정해야 합니다.
  • exclude_bos_score (bool, 선택 사항, 기본값 False) — 손실 계산 시 BOS 토큰을 무시할지 여부.
  • do_marginalize (bool, 선택 사항, 기본값 False) — True인 경우, torch.nn.functional.log_softmax를 사용하여 모든 문서에 대해 logits를 marginalize합니다.
  • output_retrieved (bool, 선택, 기본값 False) — True로 설정하면 retrieved_doc_embeds, retrieved_doc_ids, context_input_ids 및 context_attention_mask가 반환됩니다. 자세한 내용은 반환되는 텐서를 참조하세요.
  • use_cache (bool, 선택 사항, 기본값 True) — 모델이 마지막 key/values attention을 반환할지 여부입니다(모든 모델에서 사용되지 않음). config.is_decoder=True인 경우 또는 모델이 decoder-only 생성 모델인 경우에만 관련이 있습니다.
  • dataset_revision (str, 선택 사항,) — 검색에 사용되는 Hugging Face 데이터셋의 리비전(커밋 해시, 태그 또는 브랜치).

이것은 RagModel의 설정을 저장하기 위한 설정 클래스입니다. 지정된 인자에 따라 Rag 모델을 인스턴스화하고 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 설정을 인스턴스화하면 와 유사한 설정이 생성됩니다.

Configuration 객체는 PreTrainedConfig를 상속하며 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 PreTrainedConfig의 문서를 참고하세요.

from_question_encoder_generator_configs

< >

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

설정 객체의 인스턴스

사전 학습된 인코더 모델 설정과 디코더 모델 설정에서 EncoderDecoderConfig(또는 파생 클래스)를 생성합니다.

RagTokenizer

class transformers.RagTokenizer

< >

( question_encodergenerator )

Rag 전용 출력

class transformers.models.rag.modeling_rag.RetrievAugLMMarginOutput

< >

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

매개변수

  • loss (torch.Tensor, shape (1,), 선택 사항, labels가 제공될 때 반환됨) — 언어 모델링 손실.
  • logits (torch.Tensor, shape (batch_size, sequence_length, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. 각 어휘 토큰에 대해 모든 문서에 걸쳐 마진화(marginalized)된 점수일 수 있습니다.
  • doc_scores (torch.Tensor, shape (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 cache 가이드.

    디코더의 사전 계산된 hidden-states(attention 블록의 key와 value)를 포함하며, 순차적 디코딩을 가속화하는 데 사용할 수 있습니다(past_key_values 입력 참조).

  • retrieved_doc_embeds (torch.Tensor, shape (batch_size, config.n_docs, hidden_size), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색한 임베딩된 문서입니다. question_encoder_last_hidden_state와 함께 doc_scores를 계산하는 데 사용됩니다.
  • retrieved_doc_ids (torch.LongTensor, shape (batch_size, config.n_docs), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색한 임베딩된 문서의 인덱스입니다.
  • context_input_ids (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length), 선택 사항, output_retrieved=True일 때 반환됨) — Retriever에 의해 검색된 문서와 질문 인코더의 input_ids에서 후처리된 입력 id입니다.
  • context_attention_mask (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색된 문서와 질문 인코더의 input_ids로부터 후처리한 attention mask입니다.
  • question_encoder_last_hidden_state (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 question encoder 마지막 레이어 출력에서 풀링된 hidden states 시퀀스입니다.
  • question_enc_hidden_states (tuple(torch.Tensor), 선택 사항, 다음 조건을 만족할 때 반환됩니다: output_hidden_states=True 이 전달되었거나 config.output_hidden_states=True) — 다음의 튜플입니다: torch.Tensor (임베딩 출력과 각 레이어 출력을 위한 각각 하나의 텐서)이며, 형태는 (batch_size, sequence_length, hidden_size).

    각 레이어의 출력에서 질문 인코더의 숨겨진 상태(hidden states)와 초기 임베딩 출력을 더한 값.

  • question_enc_attentions (tuple(torch.Tensor), 선택 사항, 다음 중 하나를 사용할 때 반환됩니다: output_attentions=True 또는 config.output_attentions=True) — 다음 형태의 튜플입니다: torch.Tensor (각 레이어마다 하나씩, 모양은 (batch_size, num_heads, sequence_length, sequence_length).

    attention_weights는 self-attention 헤드에서 가중 평균을 계산하기 위해 attention softmax 이후에 사용되는 question encoder의 attention 가중치입니다.

  • generator_enc_last_hidden_state (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 generator encoder 마지막 레이어 출력의 hidden-state 시퀀스입니다.
  • 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).

    generator 인코더의 어텐션 가중치로, 어텐션 softmax 이후에 self-attention 헤드에서 가중 평균을 계산하는 데 사용됩니다.

  • generator_dec_hidden_states (tuple(torch.Tensor), 선택 사항, 다음 조건에서 반환됩니다: output_hidden_states=True 이 전달되었거나 config.output_hidden_states=True) — 다음의 튜플입니다: torch.Tensor (임베딩 출력과 각 레이어 출력을 위한 각각 하나의 (batch_size, sequence_length, hidden_size).

    각 레이어의 출력에서 생성기(decoder)의 숨겨진 상태(hidden states)와 초기 임베딩 출력을 더한 값.

  • generator_dec_attentions (tuple(torch.Tensor), 선택 사항, 다음 중 하나를 전달할 때 반환됩니다: output_attentions=True 또는 config.output_attentions=True) — 다음 형태의 튜플: torch.Tensor (각 레이어당 하나, 형태는 (batch_size, num_heads, sequence_length, sequence_length).

    generator decoder의 attention 가중치로, attention softmax 이후 self-attention head에서 가중 평균을 계산하는 데 사용됩니다.

  • generator_cross_attentions (tuple(torch.Tensor), 선택 사항, 다음 조건을 만족할 때 반환됩니다: output_attentions=True 이 전달되었거나 config.output_attentions=True) — 다음 형태의 튜플: torch.Tensor (각 레이어당 하나씩, 형태는 (batch_size, num_heads, sequence_length, sequence_length).

    generator decoder의 cross-attention 가중치로, attention softmax 이후 cross-attention head에서 가중 평균을 계산하는 데 사용됩니다.

리트리버 증강 마지널라이즈드 모델의 출력에 대한 베이스 클래스입니다.

클래스 transformers.models.rag.modeling_rag.RetrievAugLMOutput

< >

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

매개변수

  • logits (torch.Tensor, shape (batch_size, sequence_length, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. 각 어휘 토큰에 대해 모든 문서에 걸쳐 마진화(marginalized)된 점수일 수 있습니다.
  • doc_scores (torch.Tensor, shape (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 cache 가이드.

    디코더의 사전 계산된 hidden-states(attention 블록의 key와 value)를 포함하며, 순차적 디코딩을 가속화하는 데 사용할 수 있습니다(past_key_values 입력 참조).

  • retrieved_doc_embeds (torch.Tensor, shape (batch_size, config.n_docs, hidden_size), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색한 임베딩된 문서입니다. question_encoder_last_hidden_state와 함께 doc_scores를 계산하는 데 사용됩니다.
  • retrieved_doc_ids (torch.LongTensor, shape (batch_size, config.n_docs), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색한 임베딩된 문서의 인덱스입니다.
  • context_input_ids (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length), 선택 사항, output_retrieved=True일 때 반환됨) — Retriever에 의해 검색된 문서와 질문 인코더의 input_ids에서 후처리된 입력 id입니다.
  • context_attention_mask (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색된 문서와 질문 인코더의 input_ids로부터 후처리한 attention mask입니다.
  • question_encoder_last_hidden_state (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 question encoder 마지막 레이어 출력에서 풀링된 hidden states 시퀀스입니다.
  • question_enc_hidden_states (tuple(torch.Tensor), 선택 사항, 다음 조건을 만족할 때 반환됩니다: output_hidden_states=True 이 전달되었거나 config.output_hidden_states=True) — 다음의 튜플입니다: torch.Tensor (임베딩 출력과 각 레이어 출력을 위한 각각 하나의 텐서)이며, 형태는 (batch_size, sequence_length, hidden_size).

    각 레이어의 출력에서 질문 인코더의 숨겨진 상태(hidden states)와 초기 임베딩 출력을 더한 값.

  • question_enc_attentions (tuple(torch.Tensor), 선택 사항, 다음 중 하나를 사용할 때 반환됩니다: output_attentions=True 또는 config.output_attentions=True) — 다음 형태의 튜플입니다: torch.Tensor (각 레이어마다 하나씩, 모양은 (batch_size, num_heads, sequence_length, sequence_length).

    attention_weights는 self-attention 헤드에서 가중 평균을 계산하기 위해 attention softmax 이후에 사용되는 question encoder의 attention 가중치입니다.

  • generator_enc_last_hidden_state (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 generator encoder 마지막 레이어 출력의 hidden-state 시퀀스입니다.
  • 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).

    generator 인코더의 어텐션 가중치로, 어텐션 softmax 이후에 self-attention 헤드에서 가중 평균을 계산하는 데 사용됩니다.

  • generator_dec_hidden_states (tuple(torch.Tensor), 선택 사항, 다음 조건에서 반환됩니다: output_hidden_states=True 이 전달되었거나 config.output_hidden_states=True) — 다음의 튜플입니다: torch.Tensor (임베딩 출력과 각 레이어 출력을 위한 각각 하나의 (batch_size, sequence_length, hidden_size).

    각 레이어의 출력에서 생성기(decoder)의 숨겨진 상태(hidden states)와 초기 임베딩 출력을 더한 값.

  • generator_dec_attentions (tuple(torch.Tensor), 선택 사항, 다음 중 하나를 전달할 때 반환됩니다: output_attentions=True 또는 config.output_attentions=True) — 다음 형태의 튜플: torch.Tensor (각 레이어당 하나, 형태는 (batch_size, num_heads, sequence_length, sequence_length).

    generator decoder의 attention 가중치로, attention softmax 이후 self-attention head에서 가중 평균을 계산하는 데 사용됩니다.

  • generator_cross_attentions (tuple(torch.Tensor), 선택 사항, 다음 조건을 만족할 때 반환됩니다: output_attentions=True 이 전달되었거나 config.output_attentions=True) — 다음 형태의 튜플: torch.Tensor (각 레이어당 하나씩, 형태는 (batch_size, num_heads, sequence_length, sequence_length).

    generator decoder의 cross-attention 가중치로, attention softmax 이후 cross-attention head에서 가중 평균을 계산하는 데 사용됩니다.

RagRetriever

클래스 transformers.RagRetriever

< >

( configquestion_encoder_tokenizergenerator_tokenizerindex = Noneinit_retrieval = True )

매개변수

  • config (RagConfig) — 이 Retriever와 함께 사용되는 RAG 모델의 설정입니다. 어떤 Index를 빌드할지를 나타내는 매개변수를 포함합니다. config.index_name="custom"을 사용하여 사용자 정의 데이터셋을 로드하거나, config.index_name="wiki_dpr"와 같이 datasets 라이브러리의 표준 데이터셋(기본값)을 사용할 수 있습니다.
  • question_encoder_tokenizer (PreTrainedTokenizer) — 질문을 토큰화할 때 사용된 토크나이저입니다. 질문을 디코딩한 후 generator_tokenizer를 사용하는 데 활용됩니다.
  • generator_tokenizer (PreTrainedTokenizer) — RagModel의 generator 부분에 사용되는 토크나이저입니다.
  • 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")

init_retrieval

< >

( )

Retriever 초기화 함수입니다. 인덱스를 메모리에 로드합니다.

postprocess_docs

< >

( docsinput_stringsprefixn_docsreturn_tensors = None ) → tuple(tensors)

매개변수

  • docs (dict) — 검색된 문서.
  • input_strings (str) — preprocess_query에 의해 디코딩된 입력 문자열.
  • prefix (str) — 각 입력의 시작 부분에 추가되는 접두사입니다. 주로 T5 기반 모델과 함께 사용됩니다.

반환값

tuple(tensors)

두 요소로 구성된 튜플: 컨텍스트화된 input_ids와 호환되는 attention_mask.

검색된 docs를 후처리하고 input_strings와 결합합니다.

검색

< >

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

매개변수

  • question_hidden_states (np.ndarray, shape (batch_size, vector_size)) — 검색에 사용할 쿼리 벡터 배치입니다.
  • n_docs (int) — 쿼리당 검색할 문서의 수.

반환값

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

다음 객체를 포함하는 튜플:

  • retrieved_doc_embeds (np.ndarray, shape (batch_size, n_docs, dim)) — 각 쿼리에 대해 검색된 문서들의 검색 임베딩
  • doc_ids (np.ndarray, shape (batch_size, n_docs)) — 인덱스에 있는 문서의 ID
  • doc_dicts (list[dict]): 쿼리당 retrieved_doc_embeds 예시.

지정된 question_hidden_states에 대한 문서를 검색합니다.

RagModel

class transformers.RagModel

< >

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

매개변수

  • config (PreTrainedConfig, 선택) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하면 모델에 연결된 가중치는 로드되지 않으며 구성만 로드됩니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
  • question_encoder (PreTrainedModel, 선택 사항) — 질문을 검색을 위한 hidden states로 인코딩하는 모델입니다.
  • generator (PreTrainedModel, 선택 사항) — 검색된 문서에 기반하여 텍스트를 생성하는 모델입니다.
  • retriever (RagRetriever, 선택) — 인코딩된 질문을 기반으로 지식 베이스에서 문서를 검색하는 역할을 담당하는 컴포넌트입니다.

특정 헤드가 위에 없는 상태에서 원시 hidden-states를 출력하는 기본 Rag Model입니다.

이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.

이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.

forward

< >

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

매개변수

  • input_ids (torch.LongTensor 형상 (batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. RagConfig, 모델 초기화에 사용되며, 사용할 생성기를 지정합니다. 또한 호환되는 생성기 토크나이저를 지정합니다. 해당 토크나이저 클래스를 사용하여 인덱스를 가져옵니다.

    입력 ID란 무엇인가요?

  • attention_mask (torch.Tensor 형상이 (batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요? [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) 를 가진 generator_enc_last_hidden_state는 generator 인코더의 마지막 레이어 출력에서 생성된 hidden-states 시퀀스입니다.

    (RagModel) 모델이 디코딩 중에 사용합니다.

  • decoder_input_ids (torch.LongTensor, shape (batch_size, target_sequence_length), 선택) — 생성 작업에 사용할 때 지정합니다. 기본값은 None이며, RAG 인스턴스에서 사용하는 생성기 모델의 지침에 따라 구성합니다.
  • decoder_input_ids (torch.LongTensor 형상 (batch_size, target_sequence_length), 선택 사항) — 어휘에서 디코더 입력 시퀀스 토큰의 인덱스입니다. AutoTokenizer를 사용하여 인덱스를 가져올 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()을 참조하세요. 디코더 입력 ID란 무엇인가요?

    AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.

    디코더 입력 ID란 무엇인가요?

  • decoder_attention_mask (torch.BoolTensor, shape (batch_size, target_sequence_length), 선택) — 기본 동작: decoder_input_ids의 pad 토큰을 무시하는 텐서를 생성합니다. 기본적으로 causal mask도 사용됩니다.
  • past_key_values (~cache_utils.Cache, 선택 사항) — 순차적 디코딩을 가속화할 수 있는 사전 계산된 hidden-states(self-attention 블록과 cross-attention 블록의 key 및 value). 일반적으로 이는 past_key_values 디코딩의 이전 단계에서 모델이 반환한 use_cache=True 또는 config.use_cache=True.

    입력으로 Cache 인스턴스만 허용되며, kv cache 가이드를 참고하세요. past_key_values가 전달되지 않으면 기본적으로 DynamicCache가 초기화됩니다.

    모델은 입력으로 제공된 것과 동일한 캐시 형식을 출력합니다.

    past_key_values를 사용하는 경우, 이 모델에 과거 키 값 상태가 제공되지 않은 input_ids만 입력해야 하며, 이때의 shape은 (batch_size, unprocessed_length)입니다. shape이 (batch_size, sequence_length)인 전체 input_ids를 입력하지 않습니다.

  • doc_scores (torch.Tensor, shape (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, shape (batch_size * config.n_docs, config.max_combined_length), 선택, output_retrieved=True일 때 반환됨) — retriever에 의해 검색된 문서와 질문 인코더의 input_ids에서 후처리된 입력 ID입니다. 모델이 retriever로 초기화되지 않은 경우, forward pass에 `context_input_ids`를 제공해야 합니다. context_input_ids는 __call__()에 의해 반환됩니다.
  • context_attention_mask (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length),선택, output_retrieved=True일 때 반환됨) — retriever가 검색된 문서와 질문 인코더의 input_ids에서 후처리한 attention mask입니다. 모델이 retriever로 초기화되지 않은 경우, forward pass에 context_attention_mask를 제공해야 합니다. context_attention_mask는 __call__()에서 반환됩니다.
  • use_cache (bool, 선택 사항) — True로 설정하면 past_key_values 키 값 상태가 반환되며, 디코딩 속도를 높이는 데 사용할 수 있습니다( past_key_values 참조).
  • output_attentions (bool, 선택 사항) — 모든 attention 레이어의 attentions 텐서를 반환할지 여부. 자세한 내용은 반환 텐서 섹션의 attentions 항목을 참조하세요.
  • output_hidden_states (bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중 hidden_states 항목을 참고하세요.
  • output_retrieved (bool, 선택 사항) — retrieved_doc_embeds, retrieved_doc_ids, context_input_ids 및 context_attention_mask를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서를 참조하세요.
  • n_docs (int, 선택 사항) — 검색할 문서의 수입니다.

반환값

RetrievAugLMOutput 또는 tuple(torch.Tensor)

torch.Tensor의 튜플 또는 RetrievAugLMOutput입니다. return_dict=False가 전달되거나 config.return_dict=False인 경우, 구성(RagConfig)과 입력에 따라 다양한 요소로 구성됩니다.

RagModel의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.

이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신 Module 인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.

  • logits (torch.Tensor, shape (batch_size, sequence_length, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. 각 어휘 토큰에 대해 모든 문서에 걸쳐 마진화(marginalized)된 점수일 수 있습니다.

  • doc_scores (torch.Tensor, shape (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 cache 가이드를 참고하세요.

    디코더의 사전 계산된 hidden-states(attention 블록의 key와 value)를 포함하며, 순차적 디코딩을 가속화하는 데 사용할 수 있습니다(past_key_values 입력 참조).

  • retrieved_doc_embeds (torch.Tensor, shape (batch_size, config.n_docs, hidden_size), 선택, output_retrieved=True일 때 반환됨) — 리트리버가 검색한 임베딩된 문서입니다. question_encoder_last_hidden_state와 함께 doc_scores를 계산하는 데 사용됩니다.

  • retrieved_doc_ids (torch.LongTensor, shape (batch_size, config.n_docs), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색한 임베딩된 문서의 인덱스입니다.

  • context_input_ids (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색된 문서와 질문 인코더의 input_ids를 후처리하여 생성한 입력 id입니다.

  • context_attention_mask (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색된 문서와 질문 인코더의 input_ids로부터 후처리한 attention mask입니다.

  • question_encoder_last_hidden_state (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 question encoder 마지막 레이어 출력에서 pooling된 hidden state 시퀀스입니다.

  • question_enc_hidden_states (tuple(torch.Tensor), 선택 사항, output_hidden_states=True가 전달되었거나 config.output_hidden_states=True인 경우 반환됨) — 임베딩의 출력과 각 레이어의 출력을 위한 torch.Tensor의 튜플로, shape는 (batch_size, sequence_length, hidden_size)입니다.

    각 레이어의 출력에서 질문 인코더의 숨겨진 상태(hidden states)와 초기 임베딩 출력을 더한 값.

  • question_enc_attentions (tuple(torch.Tensor), 선택 사항, output_attentions=True가 전달되었거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    attention_weights는 self-attention 헤드에서 가중 평균을 계산하기 위해 attention softmax 이후에 사용되는 question encoder의 attention 가중치입니다.

  • generator_enc_last_hidden_state (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 generator encoder 마지막 레이어 출력의 hidden-state 시퀀스입니다.

  • generator_enc_hidden_states (tuple(torch.Tensor), 선택, output_hidden_states=True가 전달되었거나 config.output_hidden_states=True인 경우 반환됨) — 임베딩 출력과 각 레이어 출력을 위한 torch.Tensor 튜플(각 1개)로, shape은 (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)입니다.

    generator 인코더의 어텐션 가중치로, 어텐션 softmax 이후에 self-attention 헤드에서 가중 평균을 계산하는 데 사용됩니다.

  • generator_dec_hidden_states (tuple(torch.Tensor), 선택 사항, output_hidden_states=True가 전달되었거나 config.output_hidden_states=True인 경우 반환됨) — 임베딩 출력과 각 레이어 출력을 위한 torch.Tensor의 튜플로, shape는 (batch_size, sequence_length, hidden_size)입니다.

    각 레이어의 출력에서 생성기(decoder)의 숨겨진 상태(hidden states)와 초기 임베딩 출력을 더한 값.

  • generator_dec_attentions (tuple(torch.Tensor), 선택 사항, output_attentions=True가 전달되었거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    generator decoder의 attention 가중치로, attention softmax 이후 self-attention head에서 가중 평균을 계산하는 데 사용됩니다.

  • generator_cross_attentions (tuple(torch.Tensor), 선택 사항, output_attentions=True가 전달되었거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    generator decoder의 cross-attention 가중치로, attention softmax 이후 cross-attention head에서 가중 평균을 계산하는 데 사용됩니다.

예:

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

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

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

RagSequenceForGeneration

class transformers.RagSequenceForGeneration

< >

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

매개변수

  • config (PreTrainedConfig, 선택) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하면 모델에 연결된 가중치는 로드되지 않으며 구성만 로드됩니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
  • question_encoder (PreTrainedModel, 선택 사항) — 질문을 검색을 위한 hidden states로 인코딩하는 모델입니다.
  • generator (PreTrainedModel, 선택 사항) — 검색된 문서에 기반하여 텍스트를 생성하는 모델입니다.
  • retriever (RagRetriever, 선택) — 인코딩된 질문을 기반으로 지식 베이스에서 문서를 검색하는 역할을 담당하는 컴포넌트입니다.

RAG-sequence 모델 구현입니다. forward pass에서 RAG-sequence에 특화된 marginalization을 수행합니다.

이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.

이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.

forward

< >

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

매개변수

  • input_ids (torch.LongTensor 형상 (batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. RagConfig, 모델 초기화에 사용되며, 사용할 생성기를 지정합니다. 또한 호환되는 생성기 토크나이저를 지정합니다. 해당 토크나이저 클래스를 사용하여 인덱스를 가져옵니다.

    입력 ID란 무엇인가요?

  • attention_mask (torch.Tensor 형상이 (batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요? [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) 를 가진 generator_enc_last_hidden_state는 generator 인코더의 마지막 레이어 출력에서 생성된 hidden-states 시퀀스입니다.

    (RagModel) 모델이 디코딩 중에 사용합니다.

  • decoder_input_ids (torch.LongTensor, shape (batch_size, target_sequence_length), 선택) — 생성 작업에 사용할 때 지정합니다. 기본값은 None이며, RAG 인스턴스에서 사용하는 생성기 모델의 지침에 따라 구성합니다.
  • decoder_input_ids (torch.LongTensor 형상 (batch_size, target_sequence_length), 선택 사항) — 어휘에서 디코더 입력 시퀀스 토큰의 인덱스입니다. AutoTokenizer를 사용하여 인덱스를 가져올 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()을 참조하세요. 디코더 입력 ID란 무엇인가요?

    AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.

    디코더 입력 ID란 무엇인가요?

  • decoder_attention_mask (torch.BoolTensor, shape (batch_size, target_sequence_length), 선택) — 기본 동작: decoder_input_ids의 pad 토큰을 무시하는 텐서를 생성합니다. 기본적으로 causal mask도 사용됩니다.
  • past_key_values (~cache_utils.Cache, 선택 사항) — 순차적 디코딩을 가속화할 수 있는 사전 계산된 hidden-states(self-attention 블록과 cross-attention 블록의 key 및 value). 일반적으로 이는 past_key_values 디코딩의 이전 단계에서 모델이 반환한 use_cache=True 또는 config.use_cache=True.

    입력으로 Cache 인스턴스만 허용되며, kv cache 가이드를 참고하세요. past_key_values가 전달되지 않으면 기본적으로 DynamicCache가 초기화됩니다.

    모델은 입력으로 제공된 것과 동일한 캐시 형식을 출력합니다.

    past_key_values를 사용하는 경우, 이 모델에 과거 키 값 상태가 제공되지 않은 input_ids만 입력해야 하며, 이때의 shape은 (batch_size, unprocessed_length)입니다. shape이 (batch_size, sequence_length)인 전체 input_ids를 입력하지 않습니다.

  • context_input_ids (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length), 선택, output_retrieved=True일 때 반환됨) — retriever에 의해 검색된 문서와 질문 인코더의 input_ids에서 후처리된 입력 ID입니다. 모델이 retriever로 초기화되지 않은 경우, forward pass에 `context_input_ids`를 제공해야 합니다. context_input_ids는 __call__()에 의해 반환됩니다.
  • context_attention_mask (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length),선택, output_retrieved=True일 때 반환됨) — retriever가 검색된 문서와 질문 인코더의 input_ids에서 후처리한 attention mask입니다. 모델이 retriever로 초기화되지 않은 경우, forward pass에 context_attention_mask를 제공해야 합니다. context_attention_mask는 __call__()에서 반환됩니다.
  • doc_scores (torch.Tensor, shape (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, 선택 사항) — 모든 attention 레이어의 attentions 텐서를 반환할지 여부. 자세한 내용은 반환 텐서 섹션의 attentions 항목을 참조하세요.
  • output_hidden_states (bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중 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, shape (batch_size, sequence_length), 선택 사항) — 마스크 언어 모델링 손실을 계산하는 데 사용되는 라벨입니다. 인덱스는 [0, ..., config.vocab_size] 범위 내의 값이거나 -100이어야 합니다(input_ids docstring 참조). 인덱스가 -100으로 설정된 토큰은 무시(마스크)되며, 손실은 [0, ..., config.vocab_size] 범위의 라벨을 가진 토큰에 대해서만 계산됩니다.
  • n_docs (int, 선택 사항) — 검색할 문서의 수입니다.

반환값

RetrievAugLMMarginOutput 또는 tuple(torch.Tensor)

torch.Tensor의 튜플 또는 RetrievAugLMMarginOutput입니다. return_dict=False가 전달되거나 config.return_dict=False인 경우, 구성(RagConfig)과 입력에 따라 다양한 요소로 구성됩니다.

RagSequenceForGeneration의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.

이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신 Module 인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.

  • loss (torch.Tensor, shape (1,), 선택 사항, labels이 제공될 때 반환됨) — 언어 모델링 손실.

  • logits (torch.Tensor, shape (batch_size, sequence_length, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. 각 어휘 토큰에 대해 모든 문서에 걸쳐 마진화(marginalized)된 점수일 수 있습니다.

  • doc_scores (torch.Tensor, shape (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 cache 가이드를 참고하세요.

    디코더의 사전 계산된 hidden-states(attention 블록의 key와 value)를 포함하며, 순차적 디코딩을 가속화하는 데 사용할 수 있습니다(past_key_values 입력 참조).

  • retrieved_doc_embeds (torch.Tensor, shape (batch_size, config.n_docs, hidden_size), 선택, output_retrieved=True일 때 반환됨) — 리트리버가 검색한 임베딩된 문서입니다. question_encoder_last_hidden_state와 함께 doc_scores를 계산하는 데 사용됩니다.

  • retrieved_doc_ids (torch.LongTensor, shape (batch_size, config.n_docs), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색한 임베딩된 문서의 인덱스입니다.

  • context_input_ids (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색된 문서와 질문 인코더의 input_ids를 후처리하여 생성한 입력 id입니다.

  • context_attention_mask (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색된 문서와 질문 인코더의 input_ids로부터 후처리한 attention mask입니다.

  • question_encoder_last_hidden_state (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 question encoder 마지막 레이어 출력에서 pooling된 hidden state 시퀀스입니다.

  • question_enc_hidden_states (tuple(torch.Tensor), 선택 사항, output_hidden_states=True가 전달되었거나 config.output_hidden_states=True인 경우 반환됨) — 임베딩의 출력과 각 레이어의 출력을 위한 torch.Tensor의 튜플로, shape는 (batch_size, sequence_length, hidden_size)입니다.

    각 레이어의 출력에서 질문 인코더의 숨겨진 상태(hidden states)와 초기 임베딩 출력을 더한 값.

  • question_enc_attentions (tuple(torch.Tensor), 선택 사항, output_attentions=True가 전달되었거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    attention_weights는 self-attention 헤드에서 가중 평균을 계산하기 위해 attention softmax 이후에 사용되는 question encoder의 attention 가중치입니다.

  • generator_enc_last_hidden_state (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 generator encoder 마지막 레이어 출력의 hidden-state 시퀀스입니다.

  • generator_enc_hidden_states (tuple(torch.Tensor), 선택, output_hidden_states=True가 전달되었거나 config.output_hidden_states=True인 경우 반환됨) — 임베딩 출력과 각 레이어 출력을 위한 torch.Tensor 튜플(각 1개)로, shape은 (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)입니다.

    generator 인코더의 어텐션 가중치로, 어텐션 softmax 이후에 self-attention 헤드에서 가중 평균을 계산하는 데 사용됩니다.

  • generator_dec_hidden_states (tuple(torch.Tensor), 선택 사항, output_hidden_states=True가 전달되었거나 config.output_hidden_states=True인 경우 반환됨) — 임베딩 출력과 각 레이어 출력을 위한 torch.Tensor의 튜플로, shape는 (batch_size, sequence_length, hidden_size)입니다.

    각 레이어의 출력에서 생성기(decoder)의 숨겨진 상태(hidden states)와 초기 임베딩 출력을 더한 값.

  • generator_dec_attentions (tuple(torch.Tensor), 선택 사항, output_attentions=True가 전달되었거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    generator decoder의 attention 가중치로, attention softmax 이후 self-attention head에서 가중 평균을 계산하는 데 사용됩니다.

  • generator_cross_attentions (tuple(torch.Tensor), 선택 사항, output_attentions=True가 전달되었거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    generator decoder의 cross-attention 가중치로, attention softmax 이후 cross-attention head에서 가중 평균을 계산하는 데 사용됩니다.

예:

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

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

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

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

generate

< >

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

매개변수

  • input_ids (torch.LongTensor, shape (batch_size, sequence_length), 선택 사항) — 생성을 위한 프롬프트로 사용되는 시퀀스입니다. input_ids가 전달되지 않은 경우, context_input_ids를 제공해야 합니다.
  • attention_mask (torch.Tensor 형상이 (batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요? [0, 1]:
    • 마스크되지 않은 토큰에 대해 1
    • 마스크된 토큰에 대해 0

    어텐션 마스크란 무엇인가요?

  • context_input_ids (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length), 선택, output_retrieved=True일 때 반환됨) — retriever에 의해 검색된 문서와 질문 인코더의 input_ids에서 후처리된 입력 ID입니다.
  • context_attention_mask (torch.LongTensor 형태 (batch_size * config.n_docs, config.max_combined_length), 선택 사항, 인 경우 반환됩니다 output_retrieved=True) — 검색된 문서와 질문 인코더의 input_ids 에 대해 검색기(retriever)가 후처리한 어텐션 마스크입니다.

    모델이 retriever로 초기화되지 않았거나 input_ids가 제공되지 않은 경우, context_input_ids와 context_attention_mask를 forward pass에 제공해야 합니다. 이 값들은 __call__()에서 반환됩니다.

  • doc_scores (torch.Tensor shape (batch_size, config.n_docs)) — 각 검색된 문서 임베딩(참고 retrieved_doc_embeds) 및 question_encoder_last_hidden_state.

    모델이 retriever로 초기화되지 않았거나 input_ids가 제공되지 않은 경우, forward pass에 doc_scores를 제공해야 합니다. doc_scores는 __call__()에서 반환됩니다.

  • do_deduplication (bool, 선택 사항) — 주어진 입력에 대해 다른 컨텍스트 문서에서 생성된 결과를 중복 제거할지 여부입니다. 분산 백엔드를 사용하여 학습 중에 사용하는 경우 False로 설정해야 합니다.
  • num_return_sequences(int, 선택 사항, 기본값 1) — 배치의 각 요소에 대해 독립적으로 계산되어 반환되는 시퀀스의 수입니다. 참고로 이 값은 generator의 [generate()](/docs/transformers/v5.23.0/en/main_classes/text_generation#transformers.GenerationMixin.generate) 함수에 전달하는 값이 아니며, 해당 함수에서는 num_return_sequences를 num_beams로 설정합니다.
  • num_beams (int, 선택 사항, 기본값 1) — beam search에 사용할 beam의 수입니다. 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 시퀀스의 “thorough” 디코딩을 구현합니다. 다른 generate 입력 매개변수를 설정하는 방법에 대한 자세한 내용은 generate()` 문서를 참조하세요.

RagTokenForGeneration

class transformers.RagTokenForGeneration

< >

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

매개변수

  • config (PreTrainedConfig, 선택) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하면 모델에 연결된 가중치는 로드되지 않으며 구성만 로드됩니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
  • question_encoder (PreTrainedModel, 선택 사항) — 질문을 검색을 위한 hidden states로 인코딩하는 모델입니다.
  • generator (PreTrainedModel, 선택 사항) — 검색된 문서에 기반하여 텍스트를 생성하는 모델입니다.
  • retriever (RagRetriever, 선택) — 인코딩된 질문을 기반으로 지식 베이스에서 문서를 검색하는 역할을 담당하는 컴포넌트입니다.

RAG-token 모델 구현입니다. forward pass에서 RAG-token에 특화된 marginalization을 수행합니다.

이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.

이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.

forward

< >

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

매개변수

  • input_ids (torch.LongTensor 형상 (batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. RagConfig, 모델 초기화에 사용되며, 사용할 생성기를 지정합니다. 또한 호환되는 생성기 토크나이저를 지정합니다. 해당 토크나이저 클래스를 사용하여 인덱스를 가져옵니다.

    입력 ID란 무엇인가요?

  • attention_mask (torch.Tensor 형상이 (batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요? [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) 를 가진 generator_enc_last_hidden_state는 generator 인코더의 마지막 레이어 출력에서 생성된 hidden-states 시퀀스입니다.

    (RagModel) 모델이 디코딩 중에 사용합니다.

  • decoder_input_ids (torch.LongTensor, shape (batch_size, target_sequence_length), 선택) — 생성 작업에 사용할 때 지정합니다. 기본값은 None이며, RAG 인스턴스에서 사용하는 생성기 모델의 지침에 따라 구성합니다.
  • decoder_input_ids (torch.LongTensor 형상 (batch_size, target_sequence_length), 선택 사항) — 어휘에서 디코더 입력 시퀀스 토큰의 인덱스입니다. AutoTokenizer를 사용하여 인덱스를 가져올 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()을 참조하세요. 디코더 입력 ID란 무엇인가요?

    AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.

    디코더 입력 ID란 무엇인가요?

  • decoder_attention_mask (torch.BoolTensor, shape (batch_size, target_sequence_length), 선택) — 기본 동작: decoder_input_ids의 pad 토큰을 무시하는 텐서를 생성합니다. 기본적으로 causal mask도 사용됩니다.
  • past_key_values (~cache_utils.Cache, 선택 사항) — 순차적 디코딩을 가속화할 수 있는 사전 계산된 hidden-states(self-attention 블록과 cross-attention 블록의 key 및 value). 일반적으로 이는 past_key_values 디코딩의 이전 단계에서 모델이 반환한 use_cache=True 또는 config.use_cache=True.

    입력으로 Cache 인스턴스만 허용되며, kv cache 가이드를 참고하세요. past_key_values가 전달되지 않으면 기본적으로 DynamicCache가 초기화됩니다.

    모델은 입력으로 제공된 것과 동일한 캐시 형식을 출력합니다.

    past_key_values를 사용하는 경우, 이 모델에 과거 키 값 상태가 제공되지 않은 input_ids만 입력해야 하며, 이때의 shape은 (batch_size, unprocessed_length)입니다. shape이 (batch_size, sequence_length)인 전체 input_ids를 입력하지 않습니다.

  • context_input_ids (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length), 선택, output_retrieved=True일 때 반환됨) — retriever에 의해 검색된 문서와 질문 인코더의 input_ids에서 후처리된 입력 ID입니다. 모델이 retriever로 초기화되지 않은 경우, forward pass에 `context_input_ids`를 제공해야 합니다. context_input_ids는 __call__()에 의해 반환됩니다.
  • context_attention_mask (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length),선택, output_retrieved=True일 때 반환됨) — retriever가 검색된 문서와 질문 인코더의 input_ids에서 후처리한 attention mask입니다. 모델이 retriever로 초기화되지 않은 경우, forward pass에 context_attention_mask를 제공해야 합니다. context_attention_mask는 __call__()에서 반환됩니다.
  • doc_scores (torch.Tensor, shape (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, 선택 사항) — 모든 attention 레이어의 attentions 텐서를 반환할지 여부. 자세한 내용은 반환 텐서 섹션의 attentions 항목을 참조하세요.
  • output_hidden_states (bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중 hidden_states 항목을 참고하세요.
  • output_retrieved (bool, 선택 사항) — retrieved_doc_embeds, retrieved_doc_ids, context_input_ids 및 context_attention_mask를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서를 참조하세요.
  • do_marginalize (bool, 선택 사항) — True인 경우, torch.nn.functional.log_softmax를 사용하여 모든 문서에 대해 logits를 marginalize합니다.
  • reduce_loss (bool, 선택 사항) — labels가 전달된 경우에만 관련이 있습니다. True인 경우, NLL 손실이 torch.Tensor.sum 연산을 사용하여 축소됩니다.
  • labels (torch.LongTensor, shape (batch_size, sequence_length), 선택 사항) — 마스크 언어 모델링 손실을 계산하는 데 사용되는 라벨입니다. 인덱스는 [0, ..., config.vocab_size] 범위 내의 값이거나 -100이어야 합니다(input_ids docstring 참조). 인덱스가 -100으로 설정된 토큰은 무시(마스크)되며, 손실은 [0, ..., config.vocab_size] 범위의 라벨을 가진 토큰에 대해서만 계산됩니다.
  • n_docs (int, 선택 사항) — 검색할 문서의 수입니다.

반환값

RetrievAugLMMarginOutput 또는 tuple(torch.Tensor)

torch.Tensor의 튜플 또는 RetrievAugLMMarginOutput입니다. return_dict=False가 전달되거나 config.return_dict=False인 경우, 구성(RagConfig)과 입력에 따라 다양한 요소로 구성됩니다.

RagTokenForGeneration의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.

이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신 Module 인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.

  • loss (torch.Tensor, shape (1,), 선택 사항, labels이 제공될 때 반환됨) — 언어 모델링 손실.

  • logits (torch.Tensor, shape (batch_size, sequence_length, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. 각 어휘 토큰에 대해 모든 문서에 걸쳐 마진화(marginalized)된 점수일 수 있습니다.

  • doc_scores (torch.Tensor, shape (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 cache 가이드를 참고하세요.

    디코더의 사전 계산된 hidden-states(attention 블록의 key와 value)를 포함하며, 순차적 디코딩을 가속화하는 데 사용할 수 있습니다(past_key_values 입력 참조).

  • retrieved_doc_embeds (torch.Tensor, shape (batch_size, config.n_docs, hidden_size), 선택, output_retrieved=True일 때 반환됨) — 리트리버가 검색한 임베딩된 문서입니다. question_encoder_last_hidden_state와 함께 doc_scores를 계산하는 데 사용됩니다.

  • retrieved_doc_ids (torch.LongTensor, shape (batch_size, config.n_docs), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색한 임베딩된 문서의 인덱스입니다.

  • context_input_ids (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색된 문서와 질문 인코더의 input_ids를 후처리하여 생성한 입력 id입니다.

  • context_attention_mask (torch.LongTensor, shape (batch_size * config.n_docs, config.max_combined_length), 선택, output_retrieved=True일 때 반환됨) — retriever가 검색된 문서와 질문 인코더의 input_ids로부터 후처리한 attention mask입니다.

  • question_encoder_last_hidden_state (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 question encoder 마지막 레이어 출력에서 pooling된 hidden state 시퀀스입니다.

  • question_enc_hidden_states (tuple(torch.Tensor), 선택 사항, output_hidden_states=True가 전달되었거나 config.output_hidden_states=True인 경우 반환됨) — 임베딩의 출력과 각 레이어의 출력을 위한 torch.Tensor의 튜플로, shape는 (batch_size, sequence_length, hidden_size)입니다.

    각 레이어의 출력에서 질문 인코더의 숨겨진 상태(hidden states)와 초기 임베딩 출력을 더한 값.

  • question_enc_attentions (tuple(torch.Tensor), 선택 사항, output_attentions=True가 전달되었거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    attention_weights는 self-attention 헤드에서 가중 평균을 계산하기 위해 attention softmax 이후에 사용되는 question encoder의 attention 가중치입니다.

  • generator_enc_last_hidden_state (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 generator encoder 마지막 레이어 출력의 hidden-state 시퀀스입니다.

  • generator_enc_hidden_states (tuple(torch.Tensor), 선택, output_hidden_states=True가 전달되었거나 config.output_hidden_states=True인 경우 반환됨) — 임베딩 출력과 각 레이어 출력을 위한 torch.Tensor 튜플(각 1개)로, shape은 (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)입니다.

    generator 인코더의 어텐션 가중치로, 어텐션 softmax 이후에 self-attention 헤드에서 가중 평균을 계산하는 데 사용됩니다.

  • generator_dec_hidden_states (tuple(torch.Tensor), 선택 사항, output_hidden_states=True가 전달되었거나 config.output_hidden_states=True인 경우 반환됨) — 임베딩 출력과 각 레이어 출력을 위한 torch.Tensor의 튜플로, shape는 (batch_size, sequence_length, hidden_size)입니다.

    각 레이어의 출력에서 생성기(decoder)의 숨겨진 상태(hidden states)와 초기 임베딩 출력을 더한 값.

  • generator_dec_attentions (tuple(torch.Tensor), 선택 사항, output_attentions=True가 전달되었거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    generator decoder의 attention 가중치로, attention softmax 이후 self-attention head에서 가중 평균을 계산하는 데 사용됩니다.

  • generator_cross_attentions (tuple(torch.Tensor), 선택 사항, output_attentions=True가 전달되었거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    generator decoder의 cross-attention 가중치로, attention softmax 이후 cross-attention head에서 가중 평균을 계산하는 데 사용됩니다.

예:

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

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

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

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

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

generate

< >

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

매개변수

  • input_ids (torch.LongTensor, shape (batch_size, sequence_length), 선택 사항) — 생성을 위한 프롬프트로 사용되는 시퀀스입니다. input_ids가 전달되지 않은 경우, context_input_ids를 제공해야 합니다.
  • attention_mask (torch.Tensor 형상이 (batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요? [0, 1]:
    • 마스크되지 않은 토큰에 대해 1
    • 마스크된 토큰에 대해 0

    어텐션 마스크란 무엇인가요?

  • context_input_ids (torch.LongTensor 형태가 (batch_size * config.n_docs, config.max_combined_length), 선택 사항, 인 경우 반환됩니다 output_retrieved=True) — 검색된 문서와 질문 인코더의 input_ids 을 리트리버가 후처리한 입력 ID입니다.

    모델이 retriever로 초기화되지 않은 경우, forward pass에 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)가 후처리한 어텐션 마스크입니다.

    모델이 retriever로 초기화되지 않은 경우, forward pass에 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로 초기화되지 않은 경우, forward pass에 context_input_ids를 제공해야 합니다. context_input_ids는 __call__()에서 반환됩니다.

  • n_docs (int, 선택 사항, 기본값 config.n_docs) — 검색할 문서의 수 및/또는 답변을 생성할 문서의 수.
  • generation_config (~generation.GenerationConfig, 선택) — 생성 호출의 기본 파라미터화로 사용할 생성 구성입니다. **kwargs로 전달된 값 중 generation_config의 속성과 일치하는 값은 해당 속성을 덮어씁니다. generation_config가 제공되지 않으면 기본값이 사용되며, 이 기본값은 다음 로딩 우선순위를 따릅니다: 1) generation_config.json 모델 파일이 존재하는 경우 해당 파일에서; 2) 모델 구성에서. 명시되지 않은 파라미터는 GenerationConfig의 기본값을 상속받으므로, 생성을 파라미터화하려면 해당 문서에서 기본값을 확인해야 합니다.
  • prefix_allowed_tokens_fn (Callable[[int, torch.Tensor], list[int]], 선택) — 지정된 경우, 이 함수는 각 단계에서 beam search를 허용된 토큰으로만 제한합니다. 지정되지 않으면 제약이 적용되지 않습니다. 이 함수는 inputs_ids와 배치 ID batch_id라는 두 개의 인수를 받습니다. 이전에 생성된 토큰 inputs_ids와 배치 ID batch_id에 조건부인 다음 생성 단계에 대한 허용된 토큰 목록을 반환해야 합니다. 이 인수는 Autoregressive Entity Retrieval에 설명된 바와 같이, 접두사에 조건부인 제약 생성에 유용합니다.
  • logits_processor (LogitsProcessorList, 선택) — 인자와 모델의 config에서 기본으로 생성되는 logits processor를 보완하는 사용자 정의 logits processor입니다. 인자나 모델의 config로 이미 생성된 logit processor가 전달되면 오류가 발생합니다.
  • stopping_criteria (StoppingCriteriaList, 선택 사항) — 인자와 모델의 config에서 기본으로 생성되는 종료 조건을 보완하는 사용자 정의 종료 조건입니다. 인자 또는 모델의 config로 이미 생성된 종료 조건이 전달되면 오류가 발생합니다.
  • kwargs (dict[str, Any], 선택) — generate_config의 즉석 파라미터화 및/또는 모델의 forward 함수로 전달되는 모델 특정 추가 kwargs입니다.

반환값

torch.LongTensor의 형태는 (batch_size * num_return_sequences, sequence_length)입니다

생성된 시퀀스입니다. 두 번째 차원(sequence_length)은 max_length와 같거나, 모든 배치에서 eos_token_id로 인해 조기에 종료된 경우보다 짧을 수 있습니다.

RAG 토큰 디코딩을 구현합니다.

Update on GitHub