# DPR

## Обзор

Dense Passage Retrieval (DPR) — это набор инструментов и моделей для исследований в области открытого вопросно-ответного взаимодействия (open-domain Q&A) на уровне современного состояния техники (state-of-the-art). Он был представлен в работе [Dense Passage Retrieval for Open-Domain Question Answering](https://huggingface.co/papers/2004.04906) Владимиром Карпухиным, Барласом Огузом, Сьюоном Мин, Патриком Льюисом, Леделлом У, Сергеем Эдуновым, Данки Чен и Вен-тау И.

Аннотация из статьи следующая:

*Open-domain question answering relies on efficient passage retrieval to select candidate contexts, where traditional sparse vector space models, such as TF-IDF or BM25, are the de facto method. In this work, we show that retrieval can be practically implemented using dense representations alone, where embeddings are learned from a small number of questions and passages by a simple dual-encoder framework. When evaluated on a wide range of open-domain QA datasets, our dense retriever outperforms a strong Lucene-BM25 system largely by 9%-19% absolute in terms of top-20 passage retrieval accuracy, and helps our end-to-end QA system establish new state-of-the-art on multiple open-domain QA benchmarks.*

Эта модель была предоставлена [lhoestq](https://huggingface.co/lhoestq). Исходный код можно найти [здесь](https://github.com/facebookresearch/DPR).

## Советы по использованию

- DPR состоит из трёх моделей:

  * Кодер вопросов: кодирование вопросов в виде векторов
  * Контекстный энкодер: кодирование контекстов в виде векторов
  * Читатель: извлекает ответ на вопрос из найденных контекстов, а также оценку релевантности (высокая, если извлечённый фрагмент действительно отвечает на вопрос).

## 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/v5.23.0/src/transformers/models/dpr/configuration_dpr.py#L24)

**Параметры:**

vocab_size (`int`, *необязательный*, по умолчанию `30522`) : Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены в `input_ids`.

hidden_size (`int`, *optional*, по умолчанию `768`) : Размерность скрытых представлений.

num_hidden_layers (`int`, *необязательный*, по умолчанию `12`) : Количество скрытых слоев в декодере Transformer.

num_attention_heads (`int`, *необязательный*, по умолчанию `12`) : Количество головок внимания для каждого слоя внимания в декодере Transformer.

intermediate_size (`int`, *optional*, по умолчанию `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`) : Доля 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`) : Значение epsilon, используемое слоями нормализации.

pad_token_id (`int`, *необязательный*, по умолчанию `0`) : Идентификатор токена, используемый для выравнивания в словаре.

bos_token_id (`int`, *optional*) : Идентификатор токена, используемый для обозначения начала потока в словаре.

eos_token_id (`Union[int, list[int]]`, *необязательный*) : Идентификатор токена, используемый для обозначения конца потока в словаре.

projection_dim (`int`, *optional*, по умолчанию `0`) : Размерность проекционных слоёв для текста и изображений.

is_decoder (`bool`, *необязательный*, по умолчанию `False`) : Указывает, используется ли модель в качестве декодера. Если `False`, модель используется как энкодер.

add_cross_attention (`bool`, *необязательный*, по умолчанию `False`) : Следует ли добавлять слои кросс-внимания в модель.

Это класс конфигурации для хранения настроек DPRQuestionEncoder. Он используется для создания модели Dpr в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации [facebook/dpr-ctx_encoder-single-nq-base](https://huggingface.co/facebook/dpr-ctx_encoder-single-nq-base)

Объекты конфигурации наследуются от [PreTrainedConfig](/docs/transformers/v5.23.0/ru/main_classes/configuration#transformers.PreTrainedConfig) и могут использоваться для управления выводами модели. Подробнее см. в документации [PreTrainedConfig](/docs/transformers/v5.23.0/ru/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/v5.23.0/src/transformers/models/dpr/tokenization_dpr.py#L28)

Создайте токенизатор DPRContextEncoder.

[DPRContextEncoderTokenizer](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRContextEncoderTokenizer) идентичен [BertTokenizer](/docs/transformers/v5.23.0/ru/model_doc/lxmert#transformers.BertTokenizer) и выполняет токенизацию от начала до конца: разбиение по знакам препинания и wordpiece.

См. примеры использования и документацию по параметрам в суперклассе [BertTokenizer](/docs/transformers/v5.23.0/ru/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/v5.23.0/src/transformers/models/dpr/tokenization_dpr_fast.py#L29)

Создайте «быстрый» токенизатор DPRContextEncoder (на базе библиотеки *tokenizers* от HuggingFace).

[DPRContextEncoderTokenizerFast](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRContextEncoderTokenizerFast) идентичен [BertTokenizer](/docs/transformers/v5.23.0/ru/model_doc/lxmert#transformers.BertTokenizer) и выполняет токенизацию от начала до конца: разбиение по знакам препинания и wordpiece.

См. примеры использования и документацию по параметрам в суперклассе [BertTokenizer](/docs/transformers/v5.23.0/ru/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/v5.23.0/src/transformers/models/dpr/tokenization_dpr.py#L45)

Создаёт токенизатор DPRQuestionEncoder.

[DPRQuestionEncoderTokenizer](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRQuestionEncoderTokenizer) идентичен [BertTokenizer](/docs/transformers/v5.23.0/ru/model_doc/lxmert#transformers.BertTokenizer) и выполняет токенизацию от начала до конца: разбиение по знакам препинания и wordpiece.

См. примеры использования и документацию по параметрам в суперклассе [BertTokenizer](/docs/transformers/v5.23.0/ru/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/v5.23.0/src/transformers/models/dpr/tokenization_dpr_fast.py#L43)

Создаёт «быстрый» токенизатор DPRQuestionEncoder (на базе библиотеки *tokenizers* от HuggingFace).

[DPRQuestionEncoderTokenizerFast](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRQuestionEncoderTokenizerFast) идентичен [BertTokenizer](/docs/transformers/v5.23.0/ru/model_doc/lxmert#transformers.BertTokenizer) и выполняет токенизацию от начала до конца: разбиение по знакам препинания и wordpiece.

См. примеры использования и документацию по параметрам в суперклассе [BertTokenizer](/docs/transformers/v5.23.0/ru/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/v5.23.0/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/v5.23.0/ru/internal/file_utils#transformers.utils.PaddingStrategy), *необязательный*, по умолчанию `False`) : Включает и управляет выравниванием. Принимает следующие значения:  - `True` или `'longest'`: Выравнивание до самой длинной последовательности в батче (или без выравнивания, если предоставлена только одна последовательность). - `'max_length'`: Выравнивание до максимальной длины, указанной в аргументе `max_length`, или до максимально допустимой входной длины для модели, если этот аргумент не указан. - `False` или `'do_not_pad'` (по умолчанию): Без выравнивания (т. е. может выдать батч с последовательностями разной длины).

truncation (`bool`, `str` или [TruncationStrategy](/docs/transformers/v5.23.0/ru/internal/tokenization_utils#transformers.tokenization_utils_base.TruncationStrategy), *необязательный*, по умолчанию `False`) : Включает и управляет усечением. Принимает следующие значения:  - `True` или `'longest_first'`: Усечение до максимальной длины, указанной в аргументе `max_length`, или до максимально допустимой входной длины для модели, если этот аргумент не указан. Усечение выполняется посимвольно: если предоставлена пара последовательностей (или пакет пар), то символ удаляется из самой длинной последовательности в паре. - `'only_first'`: Усечение до максимальной длины, указанной в аргументе `max_length`, или до максимально допустимой входной длины для модели, если этот аргумент не указан. Если предоставлена пара последовательностей (или пакет пар), усечение выполняется только для первой последовательности в паре. - `'only_second'`: Усечение до максимальной длины, указанной в аргументе `max_length`, или до максимально допустимой входной длины для модели, если этот аргумент не указан. Если предоставлена пара последовательностей (или пакет пар), усечение выполняется только для второй последовательности в паре. - `False` или `'do_not_truncate'` (по умолчанию): Усечение не выполняется (т. е. на выходе может быть пакет с длинами последовательностей, превышающими максимально допустимый размер входных данных модели).

max_length (`int`, *optional*) : Управляет максимальной длиной, используемой одним из параметров усечения/дополнения. Если значение не задано или равно `None`, будет использована предопределённая максимальная длина модели, если один из параметров усечения/дополнения требует указания максимальной длины. Если у модели нет конкретной максимальной длины входных данных (как у XLNet), усечение/дополнение до максимальной длины будет отключено.

return_tensors (`str` или [TensorType](/docs/transformers/v5.23.0/ru/internal/file_utils#transformers.TensorType), *optional*) : Если задано, возвращает тензоры вместо списка целых чисел Python. Допустимые значения:  - `'pt'`: Возвращает объекты `torch.Tensor` PyTorch. - `'np'`: Возвращает объекты `np.ndarray` Numpy.

return_attention_mask (`bool`, *необязательный*) : Возвращать ли маску внимания. Если не задано, маска внимания будет возвращена в соответствии со значением по умолчанию для конкретного токенизатора, определяемым атрибутом `return_outputs`.  [Что такое маски внимания?](../glossary#attention-mask)

**Возвращает:** `dict[str, list[list[int]]]`

Словарь со следующими ключами:

- `input_ids`: список идентификаторов токенов, которые подаются в модель.
- `attention_mask`: список индексов, указывающих, на какие токены модель должна обращать внимание.

Создайте токенизатор DPRReader.

[DPRReaderTokenizer](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRReaderTokenizer) практически идентичен [BertTokenizer](/docs/transformers/v5.23.0/ru/model_doc/lxmert#transformers.BertTokenizer) и выполняет токенизацию от начала до конца: разбиение по знакам препинания и wordpiece. Отличие состоит в том, что у него три входные строки: question, titles и texts, которые объединяются для передачи в модель [DPRReader](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRReader).

См. примеры использования и документацию по параметрам в суперклассе [BertTokenizer](/docs/transformers/v5.23.0/ru/model_doc/lxmert#transformers.BertTokenizer).

Возвращает словарь с идентификаторами токенов входных строк и другой информацией, которую нужно передать в `.decode_best_spans`. Преобразует строки вопроса и различных фрагментов (заголовок и текст) в последовательность идентификаторов (целых чисел), используя токенизатор и словарь. Полученный `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/v5.23.0/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/v5.23.0/ru/internal/file_utils#transformers.utils.PaddingStrategy), *необязательный*, по умолчанию `False`) : Включает и управляет выравниванием. Принимает следующие значения:  - `True` или `'longest'`: Выравнивание до самой длинной последовательности в батче (или без выравнивания, если предоставлена только одна последовательность). - `'max_length'`: Выравнивание до максимальной длины, указанной в аргументе `max_length`, или до максимально допустимой входной длины для модели, если этот аргумент не указан. - `False` или `'do_not_pad'` (по умолчанию): Без выравнивания (т. е. может выдать батч с последовательностями разной длины).

truncation (`bool`, `str` или [TruncationStrategy](/docs/transformers/v5.23.0/ru/internal/tokenization_utils#transformers.tokenization_utils_base.TruncationStrategy), *необязательный*, по умолчанию `False`) : Включает и управляет усечением. Принимает следующие значения:  - `True` или `'longest_first'`: Усечение до максимальной длины, указанной в аргументе `max_length`, или до максимально допустимой входной длины для модели, если этот аргумент не указан. Усечение выполняется посимвольно: если предоставлена пара последовательностей (или пакет пар), то символ удаляется из самой длинной последовательности в паре. - `'only_first'`: Усечение до максимальной длины, указанной в аргументе `max_length`, или до максимально допустимой входной длины для модели, если этот аргумент не указан. Если предоставлена пара последовательностей (или пакет пар), усечение выполняется только для первой последовательности в паре. - `'only_second'`: Усечение до максимальной длины, указанной в аргументе `max_length`, или до максимально допустимой входной длины для модели, если этот аргумент не указан. Если предоставлена пара последовательностей (или пакет пар), усечение выполняется только для второй последовательности в паре. - `False` или `'do_not_truncate'` (по умолчанию): Усечение не выполняется (т. е. на выходе может быть пакет с длинами последовательностей, превышающими максимально допустимый размер входных данных модели).

max_length (`int`, *optional*) : Управляет максимальной длиной, используемой одним из параметров усечения/дополнения. Если значение не задано или равно `None`, будет использована предопределённая максимальная длина модели, если один из параметров усечения/дополнения требует указания максимальной длины. Если у модели нет конкретной максимальной длины входных данных (как у XLNet), усечение/дополнение до максимальной длины будет отключено.

return_tensors (`str` или [TensorType](/docs/transformers/v5.23.0/ru/internal/file_utils#transformers.TensorType), *optional*) : Если задано, возвращает тензоры вместо списка целых чисел Python. Допустимые значения:  - `'pt'`: Возвращает объекты `torch.Tensor` PyTorch. - `'np'`: Возвращает объекты `np.ndarray` Numpy.

return_attention_mask (`bool`, *необязательный*) : Возвращать ли маску внимания. Если не задано, маска внимания будет возвращена в соответствии со значением по умолчанию для конкретного токенизатора, определяемым атрибутом `return_outputs`.  [Что такое маски внимания?](../glossary#attention-mask)

**Возвращает:** `dict[str, list[list[int]]]`

Словарь со следующими ключами:

- `input_ids`: список идентификаторов токенов, которые подаются в модель.
- `attention_mask`: список индексов, указывающих, на какие токены модель должна обращать внимание.

Создаёт «быстрый» токенизатор DPRReader (на базе библиотеки *tokenizers* от HuggingFace).

[DPRReaderTokenizerFast](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRReaderTokenizerFast) практически идентичен [BertTokenizer](/docs/transformers/v5.23.0/ru/model_doc/lxmert#transformers.BertTokenizer) и выполняет токенизацию от начала до конца: разбиение по знакам препинания и wordpiece. Отличие состоит в том, что у него три входные строки: question, titles и texts, которые объединяются для передачи в модель [DPRReader](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRReader).

См. примеры использования и документацию по параметрам в суперклассе [BertTokenizer](/docs/transformers/v5.23.0/ru/model_doc/lxmert#transformers.BertTokenizer).

Возвращает словарь с идентификаторами токенов входных строк и другой информацией, которую нужно передать в `.decode_best_spans`. Преобразует строки вопроса и различных отрывков (заголовок и текст) в последовательность идентификаторов (целых чисел), используя токенизатор и словарь. Полученный `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/v5.23.0/src/transformers/models/dpr/modeling_dpr.py#L46)

**Параметры:**

pooler_output (`torch.Tensor` формы `(batch_size, embeddings_size)`) : Выходом кодировщика DPR является *pooler_output*, соответствующее представлению контекста. Скрытое состояние последнего слоя первого токена последовательности (токен классификации), дополнительно обработанное линейным слоем. Этот выход следует использовать для встраивания контекстов при запросах ближайших соседей с эмбеддингами вопросов.

hidden_states (`tuple[torch.Tensor, ...]`, *необязательный*, возвращается при передаче `output_hidden_states=True` или при `config.output_hidden_states=True`) : Кортеж из `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`. Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные данные начальных встраиваний.

attentions (`tuple[torch.Tensor, ...]`, *необязательный*, возвращается при передаче `output_attentions=True` или когда `config.output_attentions=True`) : Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, num_heads, sequence_length, sequence_length)`. Веса внимания после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Класс для результатов работы [DPRQuestionEncoder](/docs/transformers/v5.23.0/ru/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/v5.23.0/src/transformers/models/dpr/modeling_dpr.py#L65)

**Параметры:**

pooler_output (`torch.Tensor` формы `(batch_size, embeddings_size)`) : Выходом кодировщика DPR является *pooler_output*, соответствующее представлению вопроса. Скрытое состояние последнего слоя для первого токена последовательности (токен классификации), дополнительно обработанное линейным слоем. Этот выход следует использовать для встраивания вопросов при запросах ближайших соседей с встраиваниями контекста.

hidden_states (`tuple[torch.Tensor, ...]`, *необязательный*, возвращается при передаче `output_hidden_states=True` или при `config.output_hidden_states=True`) : Кортеж из `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`. Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные данные начальных встраиваний.

attentions (`tuple[torch.Tensor, ...]`, *необязательный*, возвращается при передаче `output_attentions=True` или когда `config.output_attentions=True`) : Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, num_heads, sequence_length, sequence_length)`. Веса внимания после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Класс для результатов работы [DPRQuestionEncoder](/docs/transformers/v5.23.0/ru/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/v5.23.0/src/transformers/models/dpr/modeling_dpr.py#L84)

**Параметры:**

start_logits (`torch.Tensor` формы `(n_passages, sequence_length)`) : Логиты начального индекса диапазона для каждого отрывка.

end_logits (`torch.Tensor` формы `(n_passages, sequence_length)`) : Логиты конечного индекса диапазона для каждого отрывка.

relevance_logits (`torch.Tensor` формы `(n_passages, )`) : Выходы классификатора вопросов и ответов DPRReader, соответствующие оценкам каждого отрывка для ответа на вопрос по сравнению со всеми остальными отрывками.

hidden_states (`tuple[torch.Tensor, ...]`, *необязательный*, возвращается при передаче `output_hidden_states=True` или при `config.output_hidden_states=True`) : Кортеж из `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`. Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные данные начальных встраиваний.

attentions (`tuple[torch.Tensor, ...]`, *необязательный*, возвращается при передаче `output_attentions=True` или когда `config.output_attentions=True`) : Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, num_heads, sequence_length, sequence_length)`. Веса внимания после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Класс для результатов работы [DPRQuestionEncoder](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRQuestionEncoder).

## DPRContextEncoder[[transformers.DPRContextEncoder]]

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

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

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/dpr/modeling_dpr.py#L265)

**Параметры:**

config ([DPRConfig](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRConfig)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/v5.23.0/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Базовый трансформер DPRContextEncoder, который в качестве представлений контекста выводит пулерные выходы.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/v5.23.0/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации 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/v5.23.0/src/transformers/models/dpr/modeling_dpr.py#L273)

**Параметры:**

input_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`) : Индексы токенов входной последовательности в словаре. Чтобы соответствовать предобучению, входная последовательность DPR должна быть отформатирована с токенами [CLS] и [SEP] следующим образом:  (a) Для пар последовательностей (например, для пары заголовок+текст):

attention_mask (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из `[0, 1]`:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

token_type_ids (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Индексы сегментных токенов для указания первой и второй частей входных данных. Индексы выбираются из `[0, 1]`:  - 0 соответствует токену *предложения A*, - 1 соответствует токену *предложения B*.  [Что такое идентификаторы типов токенов?](../glossary#token-type-ids)

inputs_embeds (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`, *необязательно*) : По желанию, вместо передачи `input_ids` можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы `input_ids` преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.

output_attentions (`bool`, *необязательный*) : Нужно ли возвращать тензоры внимания всех слоев внимания. Подробнее см. `attentions` в разделе возвращаемых тензоров.

output_hidden_states (`bool`, *необязательный*) : Нужно ли возвращать скрытые состояния всех слоёв. Подробнее о `hidden_states` в разделе возвращаемых тензоров.

return_dict (`bool`, *необязательный*) : Нужно ли возвращать [ModelOutput](/docs/transformers/v5.23.0/ru/main_classes/output#transformers.utils.ModelOutput) вместо обычного кортежа.

**Возвращает:** [DPRContextEncoderOutput](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput) или `tuple(torch.Tensor)`

Объект [DPRContextEncoderOutput](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput) или кортеж `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации ([DPRConfig](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRConfig)) и входных данных.

Метод forward класса [DPRContextEncoder](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRContextEncoder) переопределяет специальный метод `__call__`.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр `Module`, а не эту функцию, поскольку первый выполняет шаги предварительной и постобработки, тогда как второй молча их игнорирует.

- **pooler_output** (`torch.Tensor` формы `(batch_size, embeddings_size)`) -- Кодировщик DPR выводит *pooler_output*, соответствующий представлению контекста. Скрытое состояние последнего слоя первого токена последовательности (токен классификации), дополнительно обработанное линейным слоем. Этот вывод предназначен для встраивания контекстов для запросов ближайших соседей с использованием эмбеддингов вопросов.
- **hidden_states** (`tuple[torch.Tensor, ...]`, *необязательный*, возвращается, если передано `output_hidden_states=True` или если `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`.

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- **attentions** (`tuple[torch.Tensor, ...]`, *необязательный*, возвращается, если передано `output_attentions=True` или если `config.output_attentions=True`) -- Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, num_heads, sequence_length, sequence_length)`.

  Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

  ```
  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/v5.23.0/ru/model_doc/auto#transformers.AutoTokenizer). Подробности см. в [PreTrainedTokenizer.encode()](/docs/transformers/v5.23.0/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) и [PreTrainedTokenizer.__call__()](/docs/transformers/v5.23.0/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__).

  [Что такое входные идентификаторы?](../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/v5.23.0/src/transformers/models/dpr/modeling_dpr.py#L371)

**Параметры:**

config ([DPRConfig](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRConfig)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/v5.23.0/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Базовый трансформер DPRQuestionEncoder, который в качестве представлений вопросов выводит пулерные выходы.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/v5.23.0/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации 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/v5.23.0/src/transformers/models/dpr/modeling_dpr.py#L379)

**Параметры:**

input_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`) : Индексы токенов входной последовательности в словаре. Чтобы соответствовать предобучению, входная последовательность DPR должна быть отформатирована с токенами [CLS] и [SEP] следующим образом:  (a) Для пар последовательностей (например, для пары заголовок+текст):

attention_mask (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из `[0, 1]`:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

token_type_ids (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Индексы сегментных токенов для указания первой и второй частей входных данных. Индексы выбираются из `[0, 1]`:  - 0 соответствует токену *предложения A*, - 1 соответствует токену *предложения B*.  [Что такое идентификаторы типов токенов?](../glossary#token-type-ids)

inputs_embeds (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`, *необязательно*) : По желанию, вместо передачи `input_ids` можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы `input_ids` преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.

output_attentions (`bool`, *необязательный*) : Нужно ли возвращать тензоры внимания всех слоев внимания. Подробнее см. `attentions` в разделе возвращаемых тензоров.

output_hidden_states (`bool`, *необязательный*) : Нужно ли возвращать скрытые состояния всех слоёв. Подробнее о `hidden_states` в разделе возвращаемых тензоров.

return_dict (`bool`, *необязательный*) : Нужно ли возвращать [ModelOutput](/docs/transformers/v5.23.0/ru/main_classes/output#transformers.utils.ModelOutput) вместо обычного кортежа.

**Возвращает:** [DPRQuestionEncoderOutput](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput) или `tuple(torch.Tensor)`

Объект [DPRQuestionEncoderOutput](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput) или кортеж `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации ([DPRConfig](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRConfig)) и входных данных.

Метод forward класса [DPRQuestionEncoder](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRQuestionEncoder) переопределяет специальный метод `__call__`.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр `Module`, а не эту функцию, поскольку первый выполняет шаги предварительной и постобработки, тогда как второй молча их игнорирует.

- **pooler_output** (`torch.Tensor` формы `(batch_size, embeddings_size)`) -- Кодировщик DPR выводит *pooler_output*, соответствующий представлению вопроса. Скрытое состояние последнего слоя для первого токена последовательности (токен классификации), дополнительно обработанное линейным слоем. Этот вывод следует использовать для встраивания вопросов при запросах ближайших соседей с встраиваниями контекста.
- **hidden_states** (`tuple[torch.Tensor, ...]`, *необязательный*, возвращается, если передано `output_hidden_states=True` или если `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`.

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- **attentions** (`tuple[torch.Tensor, ...]`, *необязательный*, возвращается, если передано `output_attentions=True` или если `config.output_attentions=True`) -- Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, num_heads, sequence_length, sequence_length)`.

  Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

  ```
  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/v5.23.0/ru/model_doc/auto#transformers.AutoTokenizer). Подробности см. в [PreTrainedTokenizer.encode()](/docs/transformers/v5.23.0/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) и [PreTrainedTokenizer.__call__()](/docs/transformers/v5.23.0/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__).

  [Что такое входные идентификаторы?](../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/v5.23.0/src/transformers/models/dpr/modeling_dpr.py#L478)

**Параметры:**

config ([DPRConfig](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRConfig)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/v5.23.0/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Базовый трансформер DPRReader, выдающий предсказания для фрагментов текста.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/v5.23.0/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации 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/v5.23.0/src/transformers/models/dpr/modeling_dpr.py#L486)

**Параметры:**

input_ids (`tuple[torch.LongTensor]` с формами `(n_passages, sequence_length)`) : Индексы токенов входной последовательности в словаре. Это должна быть тройка последовательностей: 1) вопрос, 2) заголовки отрывков и 3) тексты отрывков. Чтобы соответствовать предобучению, последовательность `input_ids` для DPR должна быть сформирована с использованием [CLS] и [SEP] в следующем формате:  `[CLS] <question token ids> [SEP] <titles ids> [SEP] <texts ids>`  DPR — это модель с абсолютными позиционными эмбеддингами, поэтому обычно рекомендуется дополнять входные данные справа, а не слева.  Индексы можно получить с помощью [DPRReaderTokenizer](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRReaderTokenizer). Подробности смотрите в документации этого класса.  [Что такое входные идентификаторы?](../glossary#input-ids)

attention_mask (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из `[0, 1]`:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

inputs_embeds (`torch.Tensor` формы `(n_passages, sequence_length, hidden_size)`, *необязательно*) : По желанию, вместо передачи `input_ids` можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы `input_ids` преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.

output_attentions (`bool`, *необязательный*) : Нужно ли возвращать тензоры внимания всех слоев внимания. Подробнее см. `attentions` в разделе возвращаемых тензоров.

output_hidden_states (`bool`, *необязательный*) : Нужно ли возвращать скрытые состояния всех слоёв. Подробнее о `hidden_states` в разделе возвращаемых тензоров.

return_dict (`bool`, *необязательный*) : Нужно ли возвращать [ModelOutput](/docs/transformers/v5.23.0/ru/main_classes/output#transformers.utils.ModelOutput) вместо обычного кортежа.

**Возвращает:** [DPRReaderOutput](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRReaderOutput) или `tuple(torch.Tensor)`

Объект [DPRReaderOutput](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRReaderOutput) или кортеж из `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации ([DPRConfig](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRConfig)) и входных данных.

Метод [DPRReader](/docs/transformers/v5.23.0/ru/model_doc/dpr#transformers.DPRReader) forward переопределяет специальный метод `__call__`.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр `Module`, а не эту функцию, поскольку первый выполняет шаги предварительной и постобработки, тогда как второй молча их игнорирует.

- **start_logits** (`torch.Tensor` формы `(n_passages, sequence_length)`) -- Логиты начального индекса диапазона для каждого отрывка.
- **end_logits** (`torch.Tensor` формы `(n_passages, sequence_length)`) -- Логиты конечного индекса диапазона для каждого отрывка.
- **relevance_logits** (`torch.Tensor` формы `(n_passages, )`) -- Выходы классификатора QA модели DPRReader, соответствующие оценкам каждого отрывка для ответа на вопрос по сравнению со всеми остальными отрывками.
- **hidden_states** (`tuple[torch.Tensor, ...]`, *необязательный*, возвращается, если передано `output_hidden_states=True` или если `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`.

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- **attentions** (`tuple[torch.Tensor, ...]`, *необязательный*, возвращается, если передано `output_attentions=True` или если `config.output_attentions=True`) -- Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, num_heads, sequence_length, sequence_length)`.

  Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Примеры:

```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
```

