# DPR

## 개요

Dense Passage Retrieval(DPR)은 최첨단 오픈 도메인 Q&A 연구를 위한 도구 및 모델의 집합입니다. Vladimir Karpukhin, Barlas Oğuz, Sewon Min, Patrick Lewis, Ledell Wu, Sergey Edunov, Danqi Chen, Wen-tau Yih가 [Dense Passage Retrieval for Open-Domain Question Answering](https://huggingface.co/papers/2004.04906)에서 소개했습니다.

해당 논문의 초록은 다음과 같습니다:

*오픈 도메인 질의응답은 후보 컨텍스트를 선택하기 위해 효율적인 패스리지 검색에 의존하며, TF-IDF나 BM25와 같은 전통적인 희소 벡터 공간 모델이 사실상 표준 기법입니다. 본 연구에서는 dense representation만으로도 검색을 실용적으로 구현할 수 있음을 보여주며, 여기서 embedding은 간단한 dual-encoder 프레임워크를 통해 소수의 질문과 패스리지로부터 학습됩니다. 다양한 오픈 도메인 QA 데이터셋에서 평가한 결과, 우리의 dense retriever는 top-20 패스리지 검색 정확도 기준 Lucene-BM25 시스템보다 9%~19% 절대적으로 높은 성능을 보였으며, end-to-end QA 시스템이 여러 오픈 도메인 QA 벤치마크에서 새로운 state-of-the-art를 달성하는 데 기여했습니다.*

이 모델은 [lhoestq](https://huggingface.co/lhoestq)에 의해 기여되었습니다. 원본 코드는 [여기](https://github.com/facebookresearch/DPR)에서 찾을 수 있습니다.

## 사용 팁

- DPR은 세 가지 모델로 구성됩니다:

  * 질문 인코더: 질문을 벡터로 인코딩
  * 컨텍스트 인코더: 컨텍스트를 벡터로 인코딩
  * Reader: 검색된 컨텍스트 내 질문의 답변을 추출하고, 관련성 점수를 함께 반환합니다(추론된 스팬이 실제로 질문을 답변하는 경우 점수가 높음).

## DPRConfig[[transformers.DPRConfig]]

#### transformers.DPRConfig[[transformers.DPRConfig]]

```python
transformers.DPRConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, vocab_size: int = 30522, hidden_size: int = 768, num_hidden_layers: int = 12, num_attention_heads: int = 12, intermediate_size: int = 3072, hidden_act: str = 'gelu', hidden_dropout_prob: float | int = 0.1, attention_probs_dropout_prob: float | int = 0.1, max_position_embeddings: int = 512, type_vocab_size: int = 2, initializer_range: float = 0.02, layer_norm_eps: float = 1e-12, pad_token_id: int | None = 0, bos_token_id: int | None = None, eos_token_id: int | list[int] | None = None, projection_dim: int = 0, is_decoder: bool = False, add_cross_attention: bool = False)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/configuration_dpr.py#L24)

**매개변수:**

vocab_size (`int`, *선택 사항*, 기본값 `30522`) : 모델의 어휘 크기입니다. `input_ids`로 표현할 수 있는 서로 다른 토큰의 수를 정의합니다.

hidden_size (`int`, *선택 사항*, 기본값 `768`) : 숨겨진 표현의 차원.

num_hidden_layers (`int`, *선택 사항*, 기본값 `12`) : Transformer decoder의 숨겨진 레이어 수입니다.

num_attention_heads (`int`, *선택 사항*, 기본값 `12`) : Transformer decoder의 각 attention layer에 사용되는 attention head의 수입니다.

intermediate_size (`int`, *선택 사항*, 기본값 `3072`) : MLP 표현의 차원.

hidden_act (`str`, *선택 사항*, 기본값 `gelu`) : 디코더에서 사용되는 비선형 활성화 함수(함수 또는 문자열). 예를 들어, `"gelu"`, `"relu"`, `"silu"` 등이 있습니다.

hidden_dropout_prob (`Union[float, int]`, *선택 사항*, 기본값 `0.1`) : 임베딩, 인코더, 풀러의 모든 완전 연결 계층에 적용되는 dropout 확률입니다.

attention_probs_dropout_prob (`Union[float, int]`, *선택 사항*, 기본값 `0.1`) : attention 확률에 적용할 dropout 비율입니다.

max_position_embeddings (`int`, *선택 사항*, 기본값 `512`) : 이 모델이 사용될 수 있는 최대 시퀀스 길이입니다.

type_vocab_size (`int`, *선택 사항*, 기본값 `2`) : `token_type_ids`의 어휘 크기입니다.

initializer_range (`float`, *선택 사항*, 기본값 `0.02`) : 모든 가중치 행렬을 초기화하는 truncated_normal_initializer의 표준 편차입니다.

layer_norm_eps (`float`, *선택 사항*, 기본값 `1e-12`) : layer normalization 레이어에서 사용되는 epsilon 값입니다.

pad_token_id (`int`, *선택 사항*, 기본값 `0`) : 어휘에서 패딩에 사용되는 토큰 ID입니다.

bos_token_id (`int`, *선택 사항*) : 어휘에서 스트림 시작에 사용되는 토큰 ID입니다.

eos_token_id (`Union[int, list[int]]`, *선택*) : 어휘에서 스트림 종료에 사용되는 토큰 ID입니다.

projection_dim (`int`, *선택 사항*, 기본값 `0`) : 텍스트 및 비전 투영 레이어의 차원.

is_decoder (`bool`, *선택 사항*, 기본값 `False`) : 모델이 디코더로 사용되는지 여부를 나타냅니다. `False`인 경우 모델은 인코더로 사용됩니다.

add_cross_attention (`bool`, *선택 사항*, 기본값 `False`) : 모델에 cross-attention 레이어를 추가할지 여부.

이것은 DPRQuestionEncoder의 설정을 저장하기 위한 설정 클래스입니다. 지정된 인자에 따라 Dpr 모델을 초기화하여 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 설정을 초기화하면 [facebook/dpr-ctx_encoder-single-nq-base](https://huggingface.co/facebook/dpr-ctx_encoder-single-nq-base)와 유사한 설정이 생성됩니다.

Configuration 객체는 [PreTrainedConfig](/docs/transformers/main/ko/main_classes/configuration#transformers.PreTrainedConfig)를 상속하며, 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 [PreTrainedConfig](/docs/transformers/main/ko/main_classes/configuration#transformers.PreTrainedConfig)의 문서를 참고하세요.

예:

```python
>>> from transformers import DPRConfig, DPRContextEncoder

>>> # Initializing a DPR facebook/dpr-ctx_encoder-single-nq-base style configuration
>>> configuration = DPRConfig()

>>> # Initializing a model (with random weights) from the facebook/dpr-ctx_encoder-single-nq-base style configuration
>>> model = DPRContextEncoder(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

## DPRContextEncoderTokenizer[[transformers.DPRContextEncoderTokenizer]]

#### transformers.DPRContextEncoderTokenizer[[transformers.DPRContextEncoderTokenizer]]

```python
transformers.DPRContextEncoderTokenizer(*args, do_lower_case = False, **kwargs)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/tokenization_dpr.py#L28)

DPRContextEncoder 토크나이저를 구성합니다.

[DPRContextEncoderTokenizer](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRContextEncoderTokenizer)는 [BertTokenizer](/docs/transformers/main/ko/model_doc/lxmert#transformers.BertTokenizer)와 동일하며, 구두점 분할과 wordpiece를 포함하여 끝에서 끝까지 토큰화를 수행합니다.

사용 예시 및 매개변수에 대한 문서에 대해서는 상위 클래스 [BertTokenizer](/docs/transformers/main/ko/model_doc/lxmert#transformers.BertTokenizer)를 참조하세요.

## DPRContextEncoderTokenizerFast[[transformers.DPRContextEncoderTokenizerFast]]

#### transformers.DPRContextEncoderTokenizerFast[[transformers.DPRContextEncoderTokenizerFast]]

```python
transformers.DPRContextEncoderTokenizerFast(vocab: str | dict[str, int] | None = None, do_lower_case: bool = True, unk_token: str = '[UNK]', sep_token: str = '[SEP]', pad_token: str = '[PAD]', cls_token: str = '[CLS]', mask_token: str = '[MASK]', tokenize_chinese_chars: bool = True, strip_accents: bool | None = None, **kwargs)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/tokenization_dpr_fast.py#L29)

HuggingFace의 *tokenizers* 라이브러리를 기반으로 하는 "fast" DPRContextEncoder 토크나이저를 구성합니다.

[DPRContextEncoderTokenizerFast](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRContextEncoderTokenizerFast)는 [BertTokenizer](/docs/transformers/main/ko/model_doc/lxmert#transformers.BertTokenizer)와 동일하며, 구두점 분할과 wordpiece를 포함하여 끝에서 끝까지의 토큰화를 실행합니다.

사용 예시 및 매개변수에 대한 문서에 대해서는 상위 클래스 [BertTokenizer](/docs/transformers/main/ko/model_doc/lxmert#transformers.BertTokenizer)를 참조하세요.

## DPRQuestionEncoderTokenizer[[transformers.DPRQuestionEncoderTokenizer]]

#### transformers.DPRQuestionEncoderTokenizer[[transformers.DPRQuestionEncoderTokenizer]]

```python
transformers.DPRQuestionEncoderTokenizer(*args, do_lower_case = False, **kwargs)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/tokenization_dpr.py#L45)

DPRQuestionEncoder 토크나이저를 생성합니다.

[DPRQuestionEncoderTokenizer](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRQuestionEncoderTokenizer)는 [BertTokenizer](/docs/transformers/main/ko/model_doc/lxmert#transformers.BertTokenizer)와 동일하며, 구두점 분할과 wordpiece를 포함하는 끝에서 끝으로 토큰화를 수행합니다.

사용 예시 및 매개변수에 대한 문서에 대해서는 상위 클래스 [BertTokenizer](/docs/transformers/main/ko/model_doc/lxmert#transformers.BertTokenizer)를 참조하세요.

## DPRQuestionEncoderTokenizerFast[[transformers.DPRQuestionEncoderTokenizerFast]]

#### transformers.DPRQuestionEncoderTokenizerFast[[transformers.DPRQuestionEncoderTokenizerFast]]

```python
transformers.DPRQuestionEncoderTokenizerFast(vocab: str | dict[str, int] | None = None, do_lower_case: bool = True, unk_token: str = '[UNK]', sep_token: str = '[SEP]', pad_token: str = '[PAD]', cls_token: str = '[CLS]', mask_token: str = '[MASK]', tokenize_chinese_chars: bool = True, strip_accents: bool | None = None, **kwargs)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/tokenization_dpr_fast.py#L43)

HuggingFace의 *tokenizers* 라이브러리를 기반으로 하는 "fast" DPRQuestionEncoder 토크나이저를 생성합니다.

[DPRQuestionEncoderTokenizerFast](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRQuestionEncoderTokenizerFast)은 [BertTokenizer](/docs/transformers/main/ko/model_doc/lxmert#transformers.BertTokenizer)와 동일하며, 구두점 분할과 wordpiece를 포함한 종단 간 토큰화를 수행합니다.

사용 예시 및 매개변수에 대한 문서에 대해서는 상위 클래스 [BertTokenizer](/docs/transformers/main/ko/model_doc/lxmert#transformers.BertTokenizer)를 참조하세요.

## DPRReaderTokenizer[[transformers.DPRReaderTokenizer]]

#### transformers.DPRReaderTokenizer[[transformers.DPRReaderTokenizer]]

```python
transformers.DPRReaderTokenizer(*args, do_lower_case = False, **kwargs)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/tokenization_dpr.py#L311)

**매개변수:**

questions (`str` 또는 `list[str]`) : 인코딩할 질문입니다. 여러 패시지에 대해 하나의 질문을 지정할 수 있습니다. 이 경우 질문은 `[questions] * n_passages`처럼 중복됩니다. 그렇지 않으면 `titles` 또는 `texts`의 개수와 동일한 수의 질문을 지정해야 합니다.

titles (`str` 또는 `list[str]`) : 인코딩할 패사지 제목입니다. 패사지가 여러 개인 경우 문자열 또는 문자열 목록을 사용할 수 있습니다.

texts (`str` 또는 `list[str]`) : 인코딩할 패사지 텍스트입니다. 패사지가 여러 개인 경우 문자열 또는 문자열 목록일 수 있습니다.

padding (`bool`, `str` 또는 [PaddingStrategy](/docs/transformers/main/ko/internal/file_utils#transformers.utils.PaddingStrategy), *optional*, 기본값 `False`) : 패딩을 활성화하고 제어합니다. 다음 값을 허용합니다: - `True` 또는 `'longest'`: 배치 내 가장 긴 시퀀스 길이로 패딩합니다(단일 시퀀스만 제공된 경우 패딩하지 않음). - `'max_length'`: `max_length` 인수로 지정된 최대 길이로 패딩하거나, 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 패딩합니다. - `False` 또는 `'do_not_pad'` (기본값): 패딩하지 않음(즉, 서로 다른 길이의 시퀀스를 가진 배치를 출력할 수 있음).

truncation (`bool`, `str` 또는 [TruncationStrategy](/docs/transformers/main/ko/internal/tokenization_utils#transformers.tokenization_utils_base.TruncationStrategy), *optional*, 기본값 `False`) : 잘림(truncation)을 활성화하고 제어합니다. 다음 값을 허용합니다:  - `True` 또는 `'longest_first'`: `max_length` 인수로 지정된 최대 길이로 잘거나, 해당 인수가 제공되지 않으면 모델이 허용하는 최대 입력 길이로 잘릅니다. 이 경우 토큰 단위로 잘리며, 시퀀스 쌍(또는 쌍의 배치)이 제공되면 쌍에서 가장 긴 시퀀스에서 토큰을 하나씩 제거합니다. - `'only_first'`: `max_length` 인수로 지정된 최대 길이로 잘거나, 해당 인수가 제공되지 않으면 모델이 허용하는 최대 입력 길이로 잘릅니다. 이 경우 시퀀스 쌍(또는 쌍의 배치)이 제공되면 쌍의 첫 번째 시퀀스만 잘릅니다. - `'only_second'`: `max_length` 인수로 지정된 최대 길이로 잘거나, 해당 인수가 제공되지 않으면 모델이 허용하는 최대 입력 길이로 잘릅니다. 이 경우 시퀀스 쌍(또는 쌍의 배치)이 제공되면 쌍의 두 번째 시퀀스만 잘릅니다. - `False` 또는 `'do_not_truncate'` (기본값): 잘리지 않습니다(즉, 모델이 허용하는 최대 입력 크기보다 긴 시퀀스 길이를 가진 배치를 출력할 수 있습니다).

max_length (`int`, *선택 사항*) : truncation/padding 매개변수 중 하나가 사용할 최대 길이를 제어합니다. 설정하지 않거나 `None`으로 설정한 경우, truncation/padding 매개변수 중 하나가 최대 길이를 요구하면 미리 정의된 모델 최대 길이를 사용합니다. 모델에 특정 최대 입력 길이가 없는 경우(XLNet 등) 최대 길이로 truncation/padding하는 기능이 비활성화됩니다.

return_tensors (`str` 또는 [TensorType](/docs/transformers/main/ko/internal/file_utils#transformers.TensorType), *optional*) : 설정된 경우, python 정수 목록 대신 텐서를 반환합니다. 허용되는 값은 다음과 같습니다:  - `'pt'`: PyTorch `torch.Tensor` 객체를 반환합니다. - `'np'`: Numpy `np.ndarray` 객체를 반환합니다.

return_attention_mask (`bool`, *선택 사항*) : attention mask를 반환할지 여부입니다. 설정되지 않은 경우, `return_outputs` 속성으로 정의된 해당 tokenizer의 기본값에 따라 attention mask를 반환합니다. [attention mask란 무엇인가요?](../glossary#attention-mask)

**반환값:** `dict[str, list[list[int]]]`

다음 키를 가진 사전:

- `input_ids`: 모델에 입력할 토큰 ID 목록.
- `attention_mask`: 모델이 어떤 토큰에 주의를 기울여야 하는지 지정하는 인덱스 목록.

DPRReader 토크나이저를 구성합니다.

[DPRReaderTokenizer](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRReaderTokenizer)은 [BertTokenizer](/docs/transformers/main/ko/model_doc/lxmert#transformers.BertTokenizer)와 거의 동일하며, 구두점 분할과 wordpiece를 포함하는 end-to-end 토큰화를 수행합니다. 차이점은 question, titles, texts라는 세 개의 입력 문자열을 결합하여 [DPRReader](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRReader) 모델에 전달한다는 것입니다.

사용 예시 및 매개변수에 대한 문서에 대해서는 상위 클래스 [BertTokenizer](/docs/transformers/main/ko/model_doc/lxmert#transformers.BertTokenizer)를 참조하세요.

입력 문자열의 토큰 ID와 `.decode_best_spans`에 전달할 기타 정보를 딕셔너리로 반환합니다. 토크나이저와 어휘를 사용하여 질문과 여러 패시지(제목 및 본문)의 문자열을 ID(정수) 시퀀스로 변환합니다. 생성된 `input_ids`는 `(n_passages, sequence_length)` 크기의 행렬입니다.

다음 형식으로:

```
[CLS] <question token ids> [SEP] <titles ids> [SEP] <texts ids>
```

## DPRReaderTokenizerFast[[transformers.DPRReaderTokenizerFast]]

#### transformers.DPRReaderTokenizerFast[[transformers.DPRReaderTokenizerFast]]

```python
transformers.DPRReaderTokenizerFast(vocab: str | dict[str, int] | None = None, do_lower_case: bool = True, unk_token: str = '[UNK]', sep_token: str = '[SEP]', pad_token: str = '[PAD]', cls_token: str = '[CLS]', mask_token: str = '[MASK]', tokenize_chinese_chars: bool = True, strip_accents: bool | None = None, **kwargs)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/tokenization_dpr_fast.py#L301)

**매개변수:**

questions (`str` 또는 `list[str]`) : 인코딩할 질문입니다. 여러 패시지에 대해 하나의 질문을 지정할 수 있습니다. 이 경우 질문은 `[questions] * n_passages`처럼 중복됩니다. 그렇지 않으면 `titles` 또는 `texts`의 개수와 동일한 수의 질문을 지정해야 합니다.

titles (`str` 또는 `list[str]`) : 인코딩할 패사지 제목입니다. 패사지가 여러 개인 경우 문자열 또는 문자열 목록을 사용할 수 있습니다.

texts (`str` 또는 `list[str]`) : 인코딩할 패사지 텍스트입니다. 패사지가 여러 개인 경우 문자열 또는 문자열 목록일 수 있습니다.

padding (`bool`, `str` 또는 [PaddingStrategy](/docs/transformers/main/ko/internal/file_utils#transformers.utils.PaddingStrategy), *optional*, 기본값 `False`) : 패딩을 활성화하고 제어합니다. 다음 값을 허용합니다: - `True` 또는 `'longest'`: 배치 내 가장 긴 시퀀스 길이로 패딩합니다(단일 시퀀스만 제공된 경우 패딩하지 않음). - `'max_length'`: `max_length` 인수로 지정된 최대 길이로 패딩하거나, 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 패딩합니다. - `False` 또는 `'do_not_pad'` (기본값): 패딩하지 않음(즉, 서로 다른 길이의 시퀀스를 가진 배치를 출력할 수 있음).

truncation (`bool`, `str` 또는 [TruncationStrategy](/docs/transformers/main/ko/internal/tokenization_utils#transformers.tokenization_utils_base.TruncationStrategy), *optional*, 기본값 `False`) : 잘림(truncation)을 활성화하고 제어합니다. 다음 값을 허용합니다:  - `True` 또는 `'longest_first'`: `max_length` 인수로 지정된 최대 길이로 잘거나, 해당 인수가 제공되지 않으면 모델이 허용하는 최대 입력 길이로 잘릅니다. 이 경우 토큰 단위로 잘리며, 시퀀스 쌍(또는 쌍의 배치)이 제공되면 쌍에서 가장 긴 시퀀스에서 토큰을 하나씩 제거합니다. - `'only_first'`: `max_length` 인수로 지정된 최대 길이로 잘거나, 해당 인수가 제공되지 않으면 모델이 허용하는 최대 입력 길이로 잘릅니다. 이 경우 시퀀스 쌍(또는 쌍의 배치)이 제공되면 쌍의 첫 번째 시퀀스만 잘릅니다. - `'only_second'`: `max_length` 인수로 지정된 최대 길이로 잘거나, 해당 인수가 제공되지 않으면 모델이 허용하는 최대 입력 길이로 잘릅니다. 이 경우 시퀀스 쌍(또는 쌍의 배치)이 제공되면 쌍의 두 번째 시퀀스만 잘릅니다. - `False` 또는 `'do_not_truncate'` (기본값): 잘리지 않습니다(즉, 모델이 허용하는 최대 입력 크기보다 긴 시퀀스 길이를 가진 배치를 출력할 수 있습니다).

max_length (`int`, *선택 사항*) : truncation/padding 매개변수 중 하나가 사용할 최대 길이를 제어합니다. 설정하지 않거나 `None`으로 설정한 경우, truncation/padding 매개변수 중 하나가 최대 길이를 요구하면 미리 정의된 모델 최대 길이를 사용합니다. 모델에 특정 최대 입력 길이가 없는 경우(XLNet 등) 최대 길이로 truncation/padding하는 기능이 비활성화됩니다.

return_tensors (`str` 또는 [TensorType](/docs/transformers/main/ko/internal/file_utils#transformers.TensorType), *optional*) : 설정된 경우, python 정수 목록 대신 텐서를 반환합니다. 허용되는 값은 다음과 같습니다:  - `'pt'`: PyTorch `torch.Tensor` 객체를 반환합니다. - `'np'`: Numpy `np.ndarray` 객체를 반환합니다.

return_attention_mask (`bool`, *선택 사항*) : attention mask를 반환할지 여부입니다. 설정되지 않은 경우, `return_outputs` 속성으로 정의된 해당 tokenizer의 기본값에 따라 attention mask를 반환합니다. [attention mask란 무엇인가요?](../glossary#attention-mask)

**반환값:** `dict[str, list[list[int]]]`

다음 키를 가진 사전:

- `input_ids`: 모델에 입력할 토큰 ID 목록.
- `attention_mask`: 모델이 어떤 토큰에 주의를 기울여야 하는지 지정하는 인덱스 목록.

HuggingFace의 *tokenizers* 라이브러리를 기반으로 하는 "fast" DPRReader 토크나이저를 생성합니다.

[DPRReaderTokenizerFast](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRReaderTokenizerFast)는 [BertTokenizer](/docs/transformers/main/ko/model_doc/lxmert#transformers.BertTokenizer)와 거의 동일하며, 구두점 분할과 wordpiece를 포함하는 end-to-end 토큰화를 수행합니다. 차이점은 question, titles, texts라는 세 개의 입력 문자열을 가지고 있으며, 이 문자열들을 결합하여 [DPRReader](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRReader) 모델에 전달한다는 것입니다.

사용 예시 및 매개변수에 대한 문서에 대해서는 상위 클래스 [BertTokenizer](/docs/transformers/main/ko/model_doc/lxmert#transformers.BertTokenizer)를 참조하세요.

입력 문자열의 토큰 ID와 `.decode_best_spans`에 전달할 기타 정보를 딕셔너리로 반환합니다. 토크나이저와 어휘를 사용하여 질문과 여러 패시지(제목 및 본문)의 문자열을 ID(정수) 시퀀스로 변환합니다. 생성된 `input_ids`는 `(n_passages, sequence_length)` 크기의 행렬이며 형식은 다음과 같습니다:

[CLS]  [SEP]  [SEP]

## DPR에 특화된 출력[[transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput]]

#### transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput[[transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput]]

```python
transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput(pooler_output: Tensor, hidden_states: tuple[torch.Tensor, ...] | None = None, attentions: tuple[torch.Tensor, ...] | None = None)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/modeling_dpr.py#L46)

**매개변수:**

pooler_output (`torch.Tensor`, shape `(batch_size, embeddings_size)`) : DPR 인코더는 컨텍스트 표현에 해당하는 *pooler_output*을 출력합니다. 시퀀스의 첫 번째 토큰(분류 토큰)의 마지막 레이어 hidden-state를 Linear 레이어로 추가 처리한 값입니다. 이 출력은 질문 embedding을 이용해 nearest neighbors 쿼리에 컨텍스트를 임베드하는 데 사용됩니다.

hidden_states (`tuple[torch.Tensor, ...]`, *선택*, `output_hidden_states=True`가 전달되었거나 `config.output_hidden_states=True`인 경우 반환) : `(batch_size, sequence_length, hidden_size)` 형태의 `torch.Tensor` 튜플 (모델에 임베딩 레이어가 있는 경우 임베딩 출력 1개 + 각 레이어의 출력 1개). 각 레이어 출력 시점의 모델 hidden-states와 선택적인 초기 임베딩 출력입니다.

attentions (`tuple[torch.Tensor, ...]`, *optional*, `output_attentions=True`가 전달되었거나 `config.output_attentions=True`인 경우 반환) : 각 레이어마다 하나씩 포함된 `torch.Tensor`의 튜플로, shape이 `(batch_size, num_heads, sequence_length, sequence_length)`입니다. attention softmax 이후의 attention 가중치로, self-attention heads에서 가중 평균을 계산하는 데 사용됩니다.

[DPRQuestionEncoder](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRQuestionEncoder)의 출력 클래스입니다.

#### transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput[[transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput]]

```python
transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput(pooler_output: Tensor, hidden_states: tuple[torch.Tensor, ...] | None = None, attentions: tuple[torch.Tensor, ...] | None = None)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/modeling_dpr.py#L65)

**매개변수:**

pooler_output (`torch.Tensor`, shape `(batch_size, embeddings_size)`) : DPR 인코더는 질문 표현에 해당하는 *pooler_output*을 출력합니다. 시퀀스의 첫 번째 토큰(분류 토큰)의 마지막 레이어 hidden-state를 Linear 레이어로 추가 처리한 값입니다. 이 출력은 컨텍스트 임베딩을 사용하여 nearest neighbors 쿼리에 질문을 임베딩하는 데 사용됩니다.

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와 선택적 초기 임베딩 출력.

attentions (`tuple[torch.Tensor, ...]`, *optional*, `output_attentions=True`가 전달되었거나 `config.output_attentions=True`인 경우 반환) : 각 레이어마다 하나씩 포함된 `torch.Tensor`의 튜플로, shape이 `(batch_size, num_heads, sequence_length, sequence_length)`입니다. attention softmax 이후의 attention 가중치로, self-attention heads에서 가중 평균을 계산하는 데 사용됩니다.

[DPRQuestionEncoder](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRQuestionEncoder)의 출력 클래스입니다.

#### transformers.DPRReaderOutput[[transformers.DPRReaderOutput]]

```python
transformers.DPRReaderOutput(start_logits: Tensor, end_logits: typing.Optional[torch.Tensor] = None, relevance_logits: typing.Optional[torch.Tensor] = None, hidden_states: tuple[torch.Tensor, ...] | None = None, attentions: tuple[torch.Tensor, ...] | None = None)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/modeling_dpr.py#L84)

**매개변수:**

start_logits (`torch.Tensor`, shape `(n_passages, sequence_length)`) : 각 passage에 대한 span의 시작 인덱스에 대한 logits.

end_logits (`torch.Tensor`, shape `(n_passages, sequence_length)`) : 각 passage에 대한 span의 끝 인덱스에 대한 logits.

relevance_logits (`torch.Tensor`, shape `(n_passages, )`) : DPRReader의 QA 분류기 출력으로, 각 passage가 질문에 답할 수 있는 점수를 다른 모든 passage와 비교한 값입니다.

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와 선택적 초기 임베딩 출력.

attentions (`tuple[torch.Tensor, ...]`, *optional*, `output_attentions=True`가 전달되었거나 `config.output_attentions=True`인 경우 반환) : 각 레이어마다 하나씩 포함된 `torch.Tensor`의 튜플로, shape이 `(batch_size, num_heads, sequence_length, sequence_length)`입니다. attention softmax 이후의 attention 가중치로, self-attention heads에서 가중 평균을 계산하는 데 사용됩니다.

[DPRQuestionEncoder](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRQuestionEncoder)의 출력 클래스입니다.

## DPRContextEncoder[[transformers.DPRContextEncoder]]

#### transformers.DPRContextEncoder[[transformers.DPRContextEncoder]]

```python
transformers.DPRContextEncoder(config: DPRConfig)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/modeling_dpr.py#L265)

**매개변수:**

config ([DPRConfig](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRConfig)) : 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 관련된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 [from_pretrained()](/docs/transformers/main/ko/main_classes/model#transformers.PreTrainedModel.from_pretrained) 메서드를 확인하세요.

pooler 출력을 컨텍스트 표현으로 출력하는 기본 DPRContextEncoder transformer.

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

이 모델은 또한 PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법과 동작에 관한 모든 사항은 PyTorch 문서를 참조하세요.

#### forward[[transformers.DPRContextEncoder.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, token_type_ids: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, output_attentions: bool | None = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/modeling_dpr.py#L273)

**매개변수:**

input_ids (`torch.LongTensor`, shape `(batch_size, sequence_length)`) : 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 사전 학습과 일치시키기 위해 DPR 입력 시퀀스는 다음과 같이 [CLS] 및 [SEP] 토큰으로 포맷팅되어야 합니다: (a) 시퀀스 쌍의 경우(예: 제목+텍스트 쌍):

attention_mask (`torch.Tensor`, shape `(batch_size, sequence_length)`, *선택 사항*) : 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크입니다. `[0, 1]`에서 선택된 마스크 값: - **마스크되지 않은** 토큰은 1, - **마스크된** 토큰은 0. [attention 마스크란?](../glossary#attention-mask)

token_type_ids (`torch.Tensor`, shape `(batch_size, sequence_length)`, *선택 사항*) : 입력의 첫 번째 및 두 번째 부분을 나타내는 세그먼트 토큰 인덱스입니다. 인덱스는 `[0, 1]`에서 선택됩니다:  - 0은 *sentence A* 토큰에 해당하고, - 1은 *sentence B* 토큰에 해당합니다.  [토큰 타입 ID란 무엇인가요?](../glossary#token-type-ids)

inputs_embeds (`torch.Tensor`, shape `(batch_size, sequence_length, hidden_size)`, *선택 사항*) : `input_ids`를 전달하는 대신 임베디드 표현을 직접 전달할 수 있습니다. 이는 모델의 내부 임베딩 조회 행렬보다 `input_ids` 인덱스를 관련 벡터로 변환하는 방식에 대해 더 많은 제어가 필요한 경우 유용합니다.

output_attentions (`bool`, *선택 사항*) : 모든 어텐션 레이어의 어텐션 텐서를 반환할지 여부. 자세한 내용은 반환 텐서 섹션의 `attentions`를 참조하세요.

output_hidden_states (`bool`, *선택 사항*) : 모든 레이어의 hidden states를 반환할지 여부. 자세한 내용은 반환되는 텐서 중 `hidden_states` 항목을 참조하세요.

return_dict (`bool`, *선택 사항*) : 일반 튜플 대신 [ModelOutput](/docs/transformers/main/ko/main_classes/output#transformers.utils.ModelOutput)를 반환할지 여부.

**반환값:** [DPRContextEncoderOutput](/docs/transformers/main/ko/model_doc/dpr#transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput) 또는 `tuple(torch.Tensor)`

[DPRContextEncoderOutput](/docs/transformers/main/ko/model_doc/dpr#transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput) 또는 `torch.Tensor` 튜플(`return_dict=False`이 전달되었거나 `config.return_dict=False`인 경우)로, 구성([DPRConfig](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRConfig)) 및 입력에 따라 다양한 요소를 포함합니다.

[DPRContextEncoder](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRContextEncoder)의 forward 메서드는 `__call__` 특수 메서드를 오버라이드합니다.

`Module` 인스턴스는 전처리 및 후처리 단계를 실행하는 것을 처리하지만, 이 함수는 해당 단계를 조용히 무시하므로, 순전파(forward pass) 레시피를 이 함수 내에서 정의해야 하더라도 이후에는 이 함수 대신 `Module` 인스턴스를 호출해야 합니다.

- **pooler_output** (`torch.Tensor`, shape `(batch_size, embeddings_size)`) -- DPR 인코더는 컨텍스트 표현에 해당하는 *pooler_output*을 출력합니다. 시퀀스의 첫 번째 토큰(분류 토큰)의 마지막 레이어 hidden-state를 Linear 레이어로 추가 처리한 값입니다. 이 출력은 질문 임베딩을 사용하여 최근접 이웃(nearest neighbors) 쿼리에 컨텍스트를 임베딩하는 데 사용됩니다.
- **hidden_states** (`tuple[torch.Tensor, ...]`, *선택*, `output_hidden_states=True`가 전달되거나 `config.output_hidden_states=True`인 경우 반환) -- shape가 `(batch_size, sequence_length, hidden_size)`인 `torch.Tensor`의 튜플 (모델에 임베딩 레이어가 있는 경우 임베딩 출력 1개 + 각 레이어의 출력 1개).

  각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.
- **attentions** (`tuple[torch.Tensor, ...]`, *선택*, `output_attentions=True`가 전달되었거나 `config.output_attentions=True`인 경우 반환) -- 각 레이어마다 하나씩 포함된 `torch.Tensor` 튜플로, shape는 `(batch_size, num_heads, sequence_length, sequence_length)`입니다.

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

```
tokens:         [CLS] is this jack ##son ##ville ? [SEP] no it is not . [SEP]
token_type_ids:   0   0  0    0    0     0       0   0   1  1  1  1   1   1
```

  (b) 단일 시퀀스의 경우(예: 질문):

```
tokens:         [CLS] the dog is hairy . [SEP]
token_type_ids:   0   0   0   0  0     0   0
```

  DPR은 절대 위치 임베딩을 사용하는 모델이므로, 일반적으로 왼쪽이 아닌 오른쪽으로 입력을 패딩하는 것이 권장됩니다.

  [AutoTokenizer](/docs/transformers/main/ko/model_doc/auto#transformers.AutoTokenizer)를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 [PreTrainedTokenizer.encode()](/docs/transformers/main/ko/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) 및 [PreTrainedTokenizer.__call__()](/docs/transformers/main/ko/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__)를 참조하세요.

  [입력 ID란 무엇인가요?](../glossary#input-ids)

예:

```python
>>> from transformers import DPRContextEncoder, DPRContextEncoderTokenizer

>>> tokenizer = DPRContextEncoderTokenizer.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base")
>>> model = DPRContextEncoder.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base")
>>> input_ids = tokenizer("Hello, is my dog cute ?", return_tensors="pt")["input_ids"]
>>> embeddings = model(input_ids).pooler_output
```

## DPRQuestionEncoder[[transformers.DPRQuestionEncoder]]

#### transformers.DPRQuestionEncoder[[transformers.DPRQuestionEncoder]]

```python
transformers.DPRQuestionEncoder(config: DPRConfig)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/modeling_dpr.py#L371)

**매개변수:**

config ([DPRConfig](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRConfig)) : 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 관련된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 [from_pretrained()](/docs/transformers/main/ko/main_classes/model#transformers.PreTrainedModel.from_pretrained) 메서드를 확인하세요.

pooler 출력을 질문 표현으로 출력하는 기본 DPRQuestionEncoder transformer.

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

이 모델은 또한 PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법과 동작에 관한 모든 사항은 PyTorch 문서를 참조하세요.

#### forward[[transformers.DPRQuestionEncoder.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, token_type_ids: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, output_attentions: bool | None = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/modeling_dpr.py#L379)

**매개변수:**

input_ids (`torch.LongTensor`, shape `(batch_size, sequence_length)`) : 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 사전 학습과 일치시키기 위해 DPR 입력 시퀀스는 다음과 같이 [CLS] 및 [SEP] 토큰으로 포맷팅되어야 합니다: (a) 시퀀스 쌍의 경우(예: 제목+텍스트 쌍):

attention_mask (`torch.Tensor`, shape `(batch_size, sequence_length)`, *선택 사항*) : 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크입니다. `[0, 1]`에서 선택된 마스크 값: - **마스크되지 않은** 토큰은 1, - **마스크된** 토큰은 0. [attention 마스크란?](../glossary#attention-mask)

token_type_ids (`torch.Tensor`, shape `(batch_size, sequence_length)`, *선택 사항*) : 입력의 첫 번째 및 두 번째 부분을 나타내는 세그먼트 토큰 인덱스입니다. 인덱스는 `[0, 1]`에서 선택됩니다:  - 0은 *sentence A* 토큰에 해당하고, - 1은 *sentence B* 토큰에 해당합니다.  [토큰 타입 ID란 무엇인가요?](../glossary#token-type-ids)

inputs_embeds (`torch.Tensor`, shape `(batch_size, sequence_length, hidden_size)`, *선택 사항*) : `input_ids`를 전달하는 대신 임베디드 표현을 직접 전달할 수 있습니다. 이는 모델의 내부 임베딩 조회 행렬보다 `input_ids` 인덱스를 관련 벡터로 변환하는 방식에 대해 더 많은 제어가 필요한 경우 유용합니다.

output_attentions (`bool`, *선택 사항*) : 모든 어텐션 레이어의 어텐션 텐서를 반환할지 여부. 자세한 내용은 반환 텐서 섹션의 `attentions`를 참조하세요.

output_hidden_states (`bool`, *선택 사항*) : 모든 레이어의 hidden states를 반환할지 여부. 자세한 내용은 반환되는 텐서 중 `hidden_states` 항목을 참조하세요.

return_dict (`bool`, *선택 사항*) : 일반 튜플 대신 [ModelOutput](/docs/transformers/main/ko/main_classes/output#transformers.utils.ModelOutput)를 반환할지 여부.

**반환값:** [DPRQuestionEncoderOutput](/docs/transformers/main/ko/model_doc/dpr#transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput) 또는 `tuple(torch.Tensor)`

[DPRQuestionEncoderOutput](/docs/transformers/main/ko/model_doc/dpr#transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput) 또는 `torch.Tensor`의 튜플(`return_dict=False`가 전달되었거나 `config.return_dict=False`인 경우)로, 구성([DPRConfig](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRConfig))과 입력에 따라 다양한 요소를 포함합니다.

[DPRQuestionEncoder](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRQuestionEncoder)의 forward 메서드는 `__call__` 특수 메서드를 오버라이드합니다.

`Module` 인스턴스는 전처리 및 후처리 단계를 실행하는 것을 처리하지만, 이 함수는 해당 단계를 조용히 무시하므로, 순전파(forward pass) 레시피를 이 함수 내에서 정의해야 하더라도 이후에는 이 함수 대신 `Module` 인스턴스를 호출해야 합니다.

- **pooler_output** (`torch.Tensor`, shape `(batch_size, embeddings_size)`) -- DPR 인코더는 질문 표현에 해당하는 *pooler_output*를 출력합니다. 시퀀스의 첫 번째 토큰(분류 토큰)의 마지막 레이어 hidden-state를 Linear 레이어로 추가 처리한 값입니다. 이 출력은 context embeddings와 함께 nearest neighbors 쿼리에 질문을 임베딩하는 데 사용됩니다.
- **hidden_states** (`tuple[torch.Tensor, ...]`, *선택*, `output_hidden_states=True`가 전달되거나 `config.output_hidden_states=True`인 경우 반환) -- shape가 `(batch_size, sequence_length, hidden_size)`인 `torch.Tensor`의 튜플 (모델에 임베딩 레이어가 있는 경우 임베딩 출력 1개 + 각 레이어의 출력 1개).

  각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.
- **attentions** (`tuple[torch.Tensor, ...]`, *선택*, `output_attentions=True`가 전달되었거나 `config.output_attentions=True`인 경우 반환) -- 각 레이어마다 하나씩 포함된 `torch.Tensor` 튜플로, shape는 `(batch_size, num_heads, sequence_length, sequence_length)`입니다.

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

```
tokens:         [CLS] is this jack ##son ##ville ? [SEP] no it is not . [SEP]
token_type_ids:   0   0  0    0    0     0       0   0   1  1  1  1   1   1
```

  (b) 단일 시퀀스의 경우(예: 질문):

```
tokens:         [CLS] the dog is hairy . [SEP]
token_type_ids:   0   0   0   0  0     0   0
```

  DPR은 절대 위치 임베딩을 사용하는 모델이므로, 일반적으로 왼쪽이 아닌 오른쪽으로 입력을 패딩하는 것이 권장됩니다.

  [AutoTokenizer](/docs/transformers/main/ko/model_doc/auto#transformers.AutoTokenizer)를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 [PreTrainedTokenizer.encode()](/docs/transformers/main/ko/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) 및 [PreTrainedTokenizer.__call__()](/docs/transformers/main/ko/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__)를 참조하세요.

  [입력 ID란 무엇인가요?](../glossary#input-ids)

예:

```python
>>> from transformers import DPRQuestionEncoder, DPRQuestionEncoderTokenizer

>>> tokenizer = DPRQuestionEncoderTokenizer.from_pretrained("facebook/dpr-question_encoder-single-nq-base")
>>> model = DPRQuestionEncoder.from_pretrained("facebook/dpr-question_encoder-single-nq-base")
>>> input_ids = tokenizer("Hello, is my dog cute ?", return_tensors="pt")["input_ids"]
>>> embeddings = model(input_ids).pooler_output
```

## DPRReader[[transformers.DPRReader]]

#### transformers.DPRReader[[transformers.DPRReader]]

```python
transformers.DPRReader(config: DPRConfig)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/modeling_dpr.py#L478)

**매개변수:**

config ([DPRConfig](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRConfig)) : 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 관련된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 [from_pretrained()](/docs/transformers/main/ko/main_classes/model#transformers.PreTrainedModel.from_pretrained) 메서드를 확인하세요.

스팬 예측을 출력하는 기본 DPRReader transformer.

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

이 모델은 또한 PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법과 동작에 관한 모든 사항은 PyTorch 문서를 참조하세요.

#### forward[[transformers.DPRReader.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, output_attentions: bool | None = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[소스](https://github.com/huggingface/transformers/blob/main/src/transformers/models/dpr/modeling_dpr.py#L486)

**매개변수:**

input_ids (`tuple[torch.LongTensor]` of shapes `(n_passages, sequence_length)`) : 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 1) 질문, 2) 패스지 제목, 3) 패스지 본문으로 구성된 시퀀스 3중 구성이어야 합니다. 사전 학습과 일치시키기 위해 DPR `input_ids` 시퀀스는 [CLS]와 [SEP]를 사용하여 다음과 같은 형식으로 포맷팅되어야 합니다: `[CLS] <question token ids> [SEP] <titles ids> [SEP] <texts ids>` DPR은 절대 위치 임베딩을 사용하는 모델이므로, 왼쪽이 아닌 오른쪽으로 입력을 패딩하는 것이 일반적으로 권장됩니다. 인덱스는 [DPRReaderTokenizer](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRReaderTokenizer)를 사용하여 얻을 수 있습니다. 자세한 내용은 이 클래스의 문서를 참조하세요. [입력 ID란 무엇인가요?](../glossary#input-ids)

attention_mask (`torch.Tensor`, shape `(batch_size, sequence_length)`, *선택 사항*) : 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크입니다. `[0, 1]`에서 선택된 마스크 값: - **마스크되지 않은** 토큰은 1, - **마스크된** 토큰은 0. [attention 마스크란?](../glossary#attention-mask)

inputs_embeds (`torch.Tensor`, shape `(n_passages, sequence_length, hidden_size)`, *선택 사항*) : `input_ids`를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. `input_ids` 인덱스를 관련 벡터로 변환하는 방식에 대해, 모델 내부의 임베딩 조회 행렬보다 더 세밀한 제어가 필요할 때 유용합니다.

output_attentions (`bool`, *선택 사항*) : 모든 어텐션 레이어의 어텐션 텐서를 반환할지 여부. 자세한 내용은 반환 텐서 섹션의 `attentions`를 참조하세요.

output_hidden_states (`bool`, *선택 사항*) : 모든 레이어의 hidden states를 반환할지 여부. 자세한 내용은 반환되는 텐서 중 `hidden_states` 항목을 참조하세요.

return_dict (`bool`, *선택 사항*) : 일반 튜플 대신 [ModelOutput](/docs/transformers/main/ko/main_classes/output#transformers.utils.ModelOutput)를 반환할지 여부.

**반환값:** [DPRReaderOutput](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRReaderOutput) 또는 `tuple(torch.Tensor)`

[DPRReaderOutput](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRReaderOutput) 또는 `torch.Tensor`의 튜플(`return_dict=False`이 전달되었거나 `config.return_dict=False`인 경우)로, 구성([DPRConfig](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRConfig))과 입력에 따라 다양한 요소를 포함합니다.

[DPRReader](/docs/transformers/main/ko/model_doc/dpr#transformers.DPRReader)의 forward 메서드는 `__call__` 특수 메서드를 오버라이드합니다.

`Module` 인스턴스는 전처리 및 후처리 단계를 실행하는 것을 처리하지만, 이 함수는 해당 단계를 조용히 무시하므로, 순전파(forward pass) 레시피를 이 함수 내에서 정의해야 하더라도 이후에는 이 함수 대신 `Module` 인스턴스를 호출해야 합니다.

- **start_logits** (`torch.Tensor`, shape `(n_passages, sequence_length)`) -- 각 passage의 span 시작 인덱스에 대한 logits.
- **end_logits** (`torch.Tensor`, shape `(n_passages, sequence_length)`) -- 각 passage의 span 끝 인덱스에 대한 logits.
- **relevance_logits** (`torch.Tensor`, shape `(n_passages, )`) -- DPRReader의 QA 분류기 출력으로, 각 passage가 질문을 답변하는 데 대한 점수를 다른 모든 passage와 비교한 값입니다.
- **hidden_states** (`tuple[torch.Tensor, ...]`, *선택*, `output_hidden_states=True`가 전달되거나 `config.output_hidden_states=True`인 경우 반환) -- shape가 `(batch_size, sequence_length, hidden_size)`인 `torch.Tensor`의 튜플 (모델에 임베딩 레이어가 있는 경우 임베딩 출력 1개 + 각 레이어의 출력 1개).

  각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.
- **attentions** (`tuple[torch.Tensor, ...]`, *선택*, `output_attentions=True`가 전달되었거나 `config.output_attentions=True`인 경우 반환) -- 각 레이어마다 하나씩 포함된 `torch.Tensor` 튜플로, shape는 `(batch_size, num_heads, sequence_length, sequence_length)`입니다.

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

예:

```python
>>> from transformers import DPRReader, DPRReaderTokenizer

>>> tokenizer = DPRReaderTokenizer.from_pretrained("facebook/dpr-reader-single-nq-base")
>>> model = DPRReader.from_pretrained("facebook/dpr-reader-single-nq-base")
>>> encoded_inputs = tokenizer(
...     questions=["What is love ?"],
...     titles=["Haddaway"],
...     texts=["'What Is Love' is a song recorded by the artist Haddaway"],
...     return_tensors="pt",
... )
>>> outputs = model(**encoded_inputs)
>>> start_logits = outputs.start_logits
>>> end_logits = outputs.end_logits
>>> relevance_logits = outputs.relevance_logits
```

