# 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などの従来のスパースベクトル空間モデルが事実上の標準手法となっています。本研究では、単純なデュアルエンコーダーフレームワークにより、少数の質問とパッセージから埋め込みを学習させることで、高密度表現のみを用いて検索を実用的に実装できることを示します。幅広いオープンドメインQAデータセットで評価した結果、本手法の高密度検索器は、トップ20パッセージ検索精度において、強力なLucene-BM25システムを大きく上回り、9%〜19%の絶対的な向上を達成しました。また、エンドツーエンドのQAシステムが、複数のオープンドメインQAベンチマークで新たな最良性能を達成するのを助けています。*

このモデルは [lhoestq](https://huggingface.co/lhoestq) によって提供されました。元のコードは [こちら](https://github.com/facebookresearch/DPR) で確認できます。

## 使用のコツ

- DPRは3つのモデルで構成されています:

  * Question encoder: 質問をベクトルとしてエンコード
  * コンテキストエンコーダー: コンテキストをベクトルとしてエンコード
  * 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 デコーダーの隠れ層の数。

num_attention_heads (`int`、*任意*、デフォルトは `12`) : Transformer デコーダーの各アテンション層におけるアテンションヘッドの数。

intermediate_size (`int`、*任意*、デフォルトは `3072`) : MLP 表現の次元数。

hidden_act (`str`、*任意*、デフォルトは`gelu`) : デコーダーで使用する非線形活性化関数（関数または文字列）。例えば、`"gelu"`、`"relu"`、`"silu"`など。

hidden_dropout_prob (`Union[float, int]`、*任意*、デフォルト値は`0.1`) : embeddings、encoder、pooler 内のすべての全結合層における dropout 確率。

attention_probs_dropout_prob (`Union[float, int]`、*任意*、デフォルトは`0.1`) : 注意確率のドロップアウト率。

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`) : モデルにクロスアテンション層を追加するかどうか。

これはDPRQuestionEncoderの設定を保存するための設定クラスです。指定された引数に従ってDprモデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、[facebook/dpr-ctx_encoder-single-nq-base](https://huggingface.co/facebook/dpr-ctx_encoder-single-nq-base) と同様の設定が得られます。

設定オブジェクトは [PreTrainedConfig](/docs/transformers/main/ja/main_classes/configuration#transformers.PreTrainedConfig) を継承し、モデルの出力を制御するために使用できます。詳細については、[PreTrainedConfig](/docs/transformers/main/ja/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/ja/model_doc/dpr#transformers.DPRContextEncoderTokenizer) は [BertTokenizer](/docs/transformers/main/ja/model_doc/lxmert#transformers.BertTokenizer) と同一であり、句読点の分割と WordPiece によるトークン化をエンドツーエンドで実行します。

パラメータに関する使用例やドキュメントについては、スーパークラス [BertTokenizer](/docs/transformers/main/ja/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*ライブラリをベースにした「高速な」DPRContextEncoderのトークナイザーを構築します。

[DPRContextEncoderTokenizerFast](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRContextEncoderTokenizerFast) は [BertTokenizer](/docs/transformers/main/ja/model_doc/lxmert#transformers.BertTokenizer) と同一であり、句読点の分割と WordPiece を含むエンドツーエンドのトークナイズ処理を実行します。

パラメータに関する使用例やドキュメントについては、スーパークラス [BertTokenizer](/docs/transformers/main/ja/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/ja/model_doc/dpr#transformers.DPRQuestionEncoderTokenizer) は [BertTokenizer](/docs/transformers/main/ja/model_doc/lxmert#transformers.BertTokenizer) と同一であり、句読点の分割と WordPiece を含むエンドツーエンドのトークナイズ処理を実行します。

パラメータに関する使用例やドキュメントについては、スーパークラス [BertTokenizer](/docs/transformers/main/ja/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/ja/model_doc/dpr#transformers.DPRQuestionEncoderTokenizerFast) は [BertTokenizer](/docs/transformers/main/ja/model_doc/lxmert#transformers.BertTokenizer) と同一であり、句読点の分割と WordPiece を含むエンドツーエンドのトークナイズ処理を実行します。

パラメータに関する使用例やドキュメントについては、スーパークラス [BertTokenizer](/docs/transformers/main/ja/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]`) : エンコードする質問です。複数のパッセージに対して 1 つの質問を指定できます。この場合、質問は `[questions] * n_passages` のように複製されます。それ以外の場合は、`titles` または `texts` と同じ数の質問を指定する必要があります。

titles (`str` または `list[str]`) : エンコードするパッセージのタイトルです。複数のパッセージがある場合は、文字列または文字列のリストを指定できます。

texts (`str` または `list[str]`) : エンコード対象のパスセージのテキストです。複数のパスセージがある場合は、文字列または文字列のリストを指定できます。

padding (`bool`、`str`または[PaddingStrategy](/docs/transformers/main/ja/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/ja/internal/tokenization_utils#transformers.tokenization_utils_base.TruncationStrategy)、*optional*、デフォルトは `False`) : トランケーションを有効化し、制御します。以下の値を受け取ります: - `True` または `'longest_first'`: 引数 `max_length` で指定された最大長、またはその引数が指定されていない場合はモデルが許容する最大入力長まで切り詰めます。ペアのシーケンス（またはペアのバッチ）が提供されている場合、ペアの中で最も長いシーケンスからトークン単位で1トークンずつ削除します。 - `'only_first'`: 引数 `max_length` で指定された最大長、またはその引数が指定されていない場合はモデルが許容する最大入力長まで切り詰めます。ペアのシーケンス（またはペアのバッチ）が提供されている場合、ペアの最初のシーケンスのみを切り詰めます。 - `'only_second'`: 引数 `max_length` で指定された最大長、またはその引数が指定されていない場合はモデルが許容する最大入力長まで切り詰めます。ペアのシーケンス（またはペアのバッチ）が提供されている場合、ペアの2番目のシーケンスのみを切り詰めます。 - `False` または `'do_not_truncate'`（デフォルト）: トランケーションを行いません（つまり、モデルが許容する最大入力サイズを超えるシーケンス長を持つバッチを出力する可能性があります）。

max_length (`int`, *optional*) : 切り詰め/パディングパラメータのいずれかによって使用される最大長を制御します。 未設定のまま、または `None` に設定されている場合、切り詰め/パディングパラメータのいずれかが最大長を必要とする場合、事前に定義されたモデルの最大長が使用されます。 モデルに特定の最大入力長がない場合（XLNet など）、最大長への切り詰め/パディングは無効になります。

return_tensors (`str` または [TensorType](/docs/transformers/main/ja/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/ja/model_doc/dpr#transformers.DPRReaderTokenizer) は [BertTokenizer](/docs/transformers/main/ja/model_doc/lxmert#transformers.BertTokenizer) とほぼ同一であり、句読点の分割と WordPiece を含むエンドツーエンドのトークナイズ処理を実行します。違いは、入力文字列が question、titles、texts の3つである点です。これらは結合されて [DPRReader](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRReader) モデルに渡されます。

パラメータに関する使用例やドキュメントについては、スーパークラス [BertTokenizer](/docs/transformers/main/ja/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]`) : エンコードする質問です。複数のパッセージに対して 1 つの質問を指定できます。この場合、質問は `[questions] * n_passages` のように複製されます。それ以外の場合は、`titles` または `texts` と同じ数の質問を指定する必要があります。

titles (`str` または `list[str]`) : エンコードするパッセージのタイトルです。複数のパッセージがある場合は、文字列または文字列のリストを指定できます。

texts (`str` または `list[str]`) : エンコード対象のパスセージのテキストです。複数のパスセージがある場合は、文字列または文字列のリストを指定できます。

padding (`bool`、`str`または[PaddingStrategy](/docs/transformers/main/ja/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/ja/internal/tokenization_utils#transformers.tokenization_utils_base.TruncationStrategy)、*optional*、デフォルトは `False`) : トランケーションを有効化し、制御します。以下の値を受け取ります: - `True` または `'longest_first'`: 引数 `max_length` で指定された最大長、またはその引数が指定されていない場合はモデルが許容する最大入力長まで切り詰めます。ペアのシーケンス（またはペアのバッチ）が提供されている場合、ペアの中で最も長いシーケンスからトークン単位で1トークンずつ削除します。 - `'only_first'`: 引数 `max_length` で指定された最大長、またはその引数が指定されていない場合はモデルが許容する最大入力長まで切り詰めます。ペアのシーケンス（またはペアのバッチ）が提供されている場合、ペアの最初のシーケンスのみを切り詰めます。 - `'only_second'`: 引数 `max_length` で指定された最大長、またはその引数が指定されていない場合はモデルが許容する最大入力長まで切り詰めます。ペアのシーケンス（またはペアのバッチ）が提供されている場合、ペアの2番目のシーケンスのみを切り詰めます。 - `False` または `'do_not_truncate'`（デフォルト）: トランケーションを行いません（つまり、モデルが許容する最大入力サイズを超えるシーケンス長を持つバッチを出力する可能性があります）。

max_length (`int`, *optional*) : 切り詰め/パディングパラメータのいずれかによって使用される最大長を制御します。 未設定のまま、または `None` に設定されている場合、切り詰め/パディングパラメータのいずれかが最大長を必要とする場合、事前に定義されたモデルの最大長が使用されます。 モデルに特定の最大入力長がない場合（XLNet など）、最大長への切り詰め/パディングは無効になります。

return_tensors (`str` または [TensorType](/docs/transformers/main/ja/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*ライブラリをバックエンドとする「高速」なDPRReaderトークナイザーを構築します。

[DPRReaderTokenizerFast](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRReaderTokenizerFast) は [BertTokenizer](/docs/transformers/main/ja/model_doc/lxmert#transformers.BertTokenizer) とほぼ同一であり、句読点の分割と WordPiece を含むエンドツーエンドのトークン化を実行します。違いは、入力文字列が question、titles、texts の3つである点です。これらは結合されて [DPRReader](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRReader) モデルに渡されます。

パラメータに関する使用例やドキュメントについては、スーパークラス [BertTokenizer](/docs/transformers/main/ja/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: FloatTensor, hidden_states: tuple[torch.FloatTensor, ...] | None = None, attentions: tuple[torch.FloatTensor, ...] | None = None)
```

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

**パラメータ:**

pooler_output (`torch.FloatTensor`、shape は `(batch_size, embeddings_size)`) : DPR エンコーダーは、コンテキストの表現に対応する *pooler_output* を出力します。シーケンスの最初のトークン（分類トークン）の最終層の隠れ状態を、Linear 層でさらに処理したものです。この出力は、質問の埋め込みを用いた最近傍クエリにおいてコンテキストを埋め込むために使用されます。

hidden_states (`tuple[torch.FloatTensor, ...]`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返されます) : `torch.FloatTensor` のタプル (モデルに埋め込み層がある場合は埋め込みの出力用 1 つ、各層の出力用 1 つずつ) で、形状は `(batch_size, sequence_length, hidden_size)` です。各層の出力におけるモデルの隠れ状態と、任意の初期埋め込み出力です。

attentions (`tuple[torch.FloatTensor, ...]`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) : `torch.FloatTensor` のタプル（各レイヤーごとに 1 つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)` です。アテンション softmax 後のアテンション重みで、self-attention ヘッドにおける加重平均の計算に使用されます。

[DPRQuestionEncoder](/docs/transformers/main/ja/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: FloatTensor, hidden_states: tuple[torch.FloatTensor, ...] | None = None, attentions: tuple[torch.FloatTensor, ...] | None = None)
```

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

**パラメータ:**

pooler_output (`torch.FloatTensor`、shape は `(batch_size, embeddings_size)`) : DPR エンコーダーは、質問の表現に対応する *pooler_output* を出力します。シーケンスの最初のトークン（分類トークン）の最終層の hidden-state を、Linear 層でさらに処理したものです。この出力は、コンテキストの埋め込みを用いた最近傍クエリにおいて、質問を埋め込むために使用されます。

hidden_states (`tuple[torch.FloatTensor, ...]`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返されます) : `torch.FloatTensor` のタプル (モデルに埋め込み層がある場合は埋め込みの出力用 1 つ、各層の出力用 1 つずつ) で、形状は `(batch_size, sequence_length, hidden_size)` です。各層の出力におけるモデルの隠れ状態と、任意の初期埋め込み出力です。

attentions (`tuple[torch.FloatTensor, ...]`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) : `torch.FloatTensor` のタプル（各レイヤーごとに 1 つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)` です。アテンション softmax 後のアテンション重みで、self-attention ヘッドにおける加重平均の計算に使用されます。

[DPRQuestionEncoder](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRQuestionEncoder)の出力用のクラスです。

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

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

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

**パラメータ:**

start_logits (`torch.FloatTensor`、shape `(n_passages, sequence_length)`) : 各 passage におけるスパンの開始インデックスの logits。

end_logits (`torch.FloatTensor`、shape `(n_passages, sequence_length)`) : 各 passage におけるスパンの終了インデックスの logits。

relevance_logits (`torch.FloatTensor`、shape `(n_passages, )`) : DPRReader の QA クラシファイアによる出力。各 passage が質問に答えるスコアであり、他のすべての passage と比較したものです。

hidden_states (`tuple[torch.FloatTensor, ...]`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返されます) : `torch.FloatTensor` のタプル (モデルに埋め込み層がある場合は埋め込みの出力用 1 つ、各層の出力用 1 つずつ) で、形状は `(batch_size, sequence_length, hidden_size)` です。各層の出力におけるモデルの隠れ状態と、任意の初期埋め込み出力です。

attentions (`tuple[torch.FloatTensor, ...]`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) : `torch.FloatTensor` のタプル（各レイヤーごとに 1 つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)` です。アテンション softmax 後のアテンション重みで、self-attention ヘッドにおける加重平均の計算に使用されます。

[DPRQuestionEncoder](/docs/transformers/main/ja/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/ja/model_doc/dpr#transformers.DPRConfig)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを使用してください。

プーラーの出力をコンテキスト表現として出力する、素のDPRContextEncoderトランスフォーマー。

このモデルは [PreTrainedModel](/docs/transformers/main/ja/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)`、*任意*) : padding トークンのインデックスに対する attention を回避するためのマスクです。マスクの値は `[0, 1]` から選択されます:  - **マスクされない**トークンは 1、- **マスクされる**トークンは 0。  [attention マスクとは?](../glossary#attention-mask)

token_type_ids (`torch.Tensor`、形状 `(batch_size, sequence_length)`、*任意*) : 入力の前半と後半を示すセグメントトークンインデックス。インデックスは `[0, 1]` から選択されます:  - 0 は *文 A* のトークンに対応します。 - 1 は *文 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/ja/main_classes/output#transformers.utils.ModelOutput) を返すかどうか。

**戻り値:** [DPRContextEncoderOutput](/docs/transformers/main/ja/model_doc/dpr#transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput) または `tuple(torch.FloatTensor)`

[DPRConfig](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRConfig) および入力に応じて、さまざまな要素で構成される [DPRContextEncoderOutput](/docs/transformers/main/ja/model_doc/dpr#transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput) または `torch.FloatTensor` のタプル（`return_dict=False` が渡された場合、または `config.return_dict=False` の場合）。

[DPRContextEncoder](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRContextEncoder)のforwardメソッドは、`__call__`特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく`Module`インスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを無視してしまいます。

- **pooler_output** (`torch.FloatTensor`、shape `(batch_size, embeddings_size)`) -- DPR エンコーダーは、コンテキストの表現に対応する *pooler_output* を出力します。シーケンスの最初のトークン（分類トークン）の最終層の隠れ状態を、Linear 層でさらに処理したものです。この出力は、クエリとなる質問の埋め込みを用いた最近傍クエリにおいて、コンテキストを埋め込むために使用されます。
- **hidden_states** (`tuple[torch.FloatTensor, ...]`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返されます) -- `torch.FloatTensor` のタプル（埋め込み層を持つモデルの場合、埋め込みの出力用が 1 つ、各層の出力用が 1 つずつ）で、形状は `(batch_size, sequence_length, hidden_size)` です。

  各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
- **attentions** (`tuple[torch.FloatTensor, ...]`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（レイヤーごとに1つ）で、形状は `(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/main/ja/model_doc/auto#transformers.AutoTokenizer)を使用して取得できます。詳細については、[PreTrainedTokenizer.encode()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode)および[PreTrainedTokenizer.__call__()](/docs/transformers/main/ja/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/ja/model_doc/dpr#transformers.DPRConfig)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを使用してください。

プーラーの出力を質問の表現として出力する、素のDPRQuestionEncoderトランスフォーマー。

このモデルは [PreTrainedModel](/docs/transformers/main/ja/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)`、*任意*) : padding トークンのインデックスに対する attention を回避するためのマスクです。マスクの値は `[0, 1]` から選択されます:  - **マスクされない**トークンは 1、- **マスクされる**トークンは 0。  [attention マスクとは?](../glossary#attention-mask)

token_type_ids (`torch.Tensor`、形状 `(batch_size, sequence_length)`、*任意*) : 入力の前半と後半を示すセグメントトークンインデックス。インデックスは `[0, 1]` から選択されます:  - 0 は *文 A* のトークンに対応します。 - 1 は *文 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/ja/main_classes/output#transformers.utils.ModelOutput) を返すかどうか。

**戻り値:** [DPRQuestionEncoderOutput](/docs/transformers/main/ja/model_doc/dpr#transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput) または `tuple(torch.FloatTensor)`

[DPRQuestionEncoderOutput](/docs/transformers/main/ja/model_doc/dpr#transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput)、または`torch.FloatTensor`のタプル（`return_dict=False`が渡された場合、または`config.return_dict=False`の場合）。設定（[DPRConfig](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRConfig)）や入力に応じて、さまざまな要素で構成されます。

[DPRQuestionEncoder](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRQuestionEncoder)のforwardメソッドは、`__call__`特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく`Module`インスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを無視してしまいます。

- **pooler_output** (`torch.FloatTensor`、shape `(batch_size, embeddings_size)`) -- DPR エンコーダーは、質問の表現に対応する *pooler_output* を出力します。シーケンスの最初のトークン（分類トークン）の最終層の隠れ状態を、Linear 層でさらに処理したものです。この出力は、コンテキストの埋め込みを用いた最近傍クエリにおいて、質問を埋め込むために使用されます。
- **hidden_states** (`tuple[torch.FloatTensor, ...]`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返されます) -- `torch.FloatTensor` のタプル（埋め込み層を持つモデルの場合、埋め込みの出力用が 1 つ、各層の出力用が 1 つずつ）で、形状は `(batch_size, sequence_length, hidden_size)` です。

  各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
- **attentions** (`tuple[torch.FloatTensor, ...]`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（レイヤーごとに1つ）で、形状は `(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/main/ja/model_doc/auto#transformers.AutoTokenizer)を使用して取得できます。詳細については、[PreTrainedTokenizer.encode()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode)および[PreTrainedTokenizer.__call__()](/docs/transformers/main/ja/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/ja/model_doc/dpr#transformers.DPRConfig)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを使用してください。

スパン予測を出力する、素のDPRReaderトランスフォーマー。

このモデルは [PreTrainedModel](/docs/transformers/main/ja/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]` の形状は `(n_passages, sequence_length)`) : 語彙における入力シーケンスのトークンインデックスです。これは、1) 質問、2) パッセージのタイトル、3) パッセージの本文からなるシーケンスのトリプルである必要があります。事前学習との整合性を保つため、DPR の `input_ids` シーケンスは、[CLS] と [SEP] を用いて次の形式でフォーマットする必要があります:  `[CLS] <question token ids> [SEP] <titles ids> [SEP] <texts ids>`  DPR は絶対位置埋め込みを持つモデルであるため、通常は左側ではなく右側にパディングを行うことが推奨されます。  インデックスは [DPRReaderTokenizer](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRReaderTokenizer) を使用して取得できます。詳細はこのクラスのドキュメントを参照してください。  [入力 ID とは何か？](../glossary#input-ids)

attention_mask (`torch.Tensor`、shape `(batch_size, sequence_length)`、*任意*) : padding トークンのインデックスに対する attention を回避するためのマスクです。マスクの値は `[0, 1]` から選択されます:  - **マスクされない**トークンは 1、- **マスクされる**トークンは 0。  [attention マスクとは?](../glossary#attention-mask)

inputs_embeds (`torch.FloatTensor`、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/ja/main_classes/output#transformers.utils.ModelOutput) を返すかどうか。

**戻り値:** [DPRReaderOutput](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRReaderOutput) または `tuple(torch.FloatTensor)`

[DPRConfig](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRConfig) および入力に応じて、さまざまな要素で構成される [DPRReaderOutput](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRReaderOutput) または `torch.FloatTensor` のタプル（`return_dict=False` が渡された場合、または `config.return_dict=False` の場合）。

[DPRReader](/docs/transformers/main/ja/model_doc/dpr#transformers.DPRReader)のforwardメソッドは、`__call__`特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく`Module`インスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを無視してしまいます。

- **start_logits** (`torch.FloatTensor`、shape `(n_passages, sequence_length)`) -- 各 passage におけるスパンの開始インデックスの logits。
- **end_logits** (`torch.FloatTensor`、shape `(n_passages, sequence_length)`) -- 各 passage におけるスパンの終了インデックスの logits。
- **relevance_logits** (`torch.FloatTensor`、shape `(n_passages, )`) -- DPRReader の QA クラシファイアからの出力であり、各 passage が質問に答えるスコアを、他のすべての passage と比較したものです。
- **hidden_states** (`tuple[torch.FloatTensor, ...]`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返されます) -- `torch.FloatTensor` のタプル（埋め込み層を持つモデルの場合、埋め込みの出力用が 1 つ、各層の出力用が 1 つずつ）で、形状は `(batch_size, sequence_length, hidden_size)` です。

  各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
- **attentions** (`tuple[torch.FloatTensor, ...]`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（レイヤーごとに1つ）で、形状は `(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
```

