Transformers documentation
DPR
このモデルは2020年4月10日にHF papersで公開され、2020年11月16日にHugging Face Transformersに貢献されました。
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 で紹介されました。
論文の抄録は以下の通りです。
オープンドメインの質問応答は、候補コンテキストを選択するための効率的なパッセージ検索に依存しており、TF-IDFやBM25などの従来のスパースベクトル空間モデルが事実上の標準手法となっています。本研究では、単純なデュアルエンコーダーフレームワークにより、少数の質問とパッセージから埋め込みを学習させることで、高密度表現のみを用いて検索を実用的に実装できることを示します。幅広いオープンドメインQAデータセットで評価した結果、本手法の高密度検索器は、トップ20パッセージ検索精度において、強力なLucene-BM25システムを大きく上回り、9%〜19%の絶対的な向上を達成しました。また、エンドツーエンドのQAシステムを支援し、複数のオープンドメインQAベンチマークで新たな最良性能を樹立しました。
このモデルは lhoestq によって提供されました。元のコードは こちら で確認できます。
使用のコツ
DPRは3つのモデルで構成されています:
- Question encoder: 質問をベクトルとしてエンコード
- コンテキストエンコーダー: コンテキストをベクトルとしてエンコード
- Reader: 検索されたコンテキスト内の質問に対する回答を抽出し、関連性スコア(推定されたスパンが実際に質問に回答している場合は高くなる)を出力します。
DPRConfig
クラス transformers.DPRConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 30522hidden_size: int = 768num_hidden_layers: int = 12num_attention_heads: int = 12intermediate_size: int = 3072hidden_act: str = 'gelu'hidden_dropout_prob: float | int = 0.1attention_probs_dropout_prob: float | int = 0.1max_position_embeddings: int = 512type_vocab_size: int = 2initializer_range: float = 0.02layer_norm_eps: float = 1e-12pad_token_id: int | None = 0bos_token_id: int | None = Noneeos_token_id: int | list[int] | None = Noneprojection_dim: int = 0is_decoder: bool = Falseadd_cross_attention: bool = False )
パラメータ
- 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) — レイヤーノーマル層で使用する 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と類似した設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
例:
>>> 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.configDPRContextEncoderTokenizer
DPRContextEncoderのトークナイザーを構築します。
DPRContextEncoderTokenizer は BertTokenizer と同一であり、句読点の分割と wordpiece を含む、エンドツーエンドのトークナイズ処理を実行します。
パラメータに関する使用例やドキュメントについては、スーパークラス BertTokenizer を参照してください。
DPRContextEncoderTokenizerFast
クラス transformers.DPRContextEncoderTokenizerFast
< source >( vocab: str | dict[str, int] | None = Nonedo_lower_case: bool = Trueunk_token: str = '[UNK]'sep_token: str = '[SEP]'pad_token: str = '[PAD]'cls_token: str = '[CLS]'mask_token: str = '[MASK]'tokenize_chinese_chars: bool = Truestrip_accents: bool | None = None**kwargs )
HuggingFaceのtokenizersライブラリをベースにした「高速な」DPRContextEncoderのトークナイザーを構築します。
DPRContextEncoderTokenizerFast は BertTokenizer と同一であり、句読点の分割と WordPiece を含むエンドツーエンドのトークナイズ処理を実行します。
パラメータに関する使用例やドキュメントについては、スーパークラス BertTokenizer を参照してください。
DPRQuestionEncoderTokenizer
DPRQuestionEncoderのトークナイザーを構築します。
DPRQuestionEncoderTokenizer は BertTokenizer と同一であり、句読点の分割と WordPiece を含むエンドツーエンドのトークナイズ処理を実行します。
パラメータに関する使用例やドキュメントについては、スーパークラス BertTokenizer を参照してください。
DPRQuestionEncoderTokenizerFast
class transformers.DPRQuestionEncoderTokenizerFast
< source >( vocab: str | dict[str, int] | None = Nonedo_lower_case: bool = Trueunk_token: str = '[UNK]'sep_token: str = '[SEP]'pad_token: str = '[PAD]'cls_token: str = '[CLS]'mask_token: str = '[MASK]'tokenize_chinese_chars: bool = Truestrip_accents: bool | None = None**kwargs )
「fast」DPRQuestionEncoder トークナイザーを構築します(HuggingFace の tokenizers ライブラリがバックエンドとして使用されます)。
DPRQuestionEncoderTokenizerFast は BertTokenizer と同一であり、句読点の分割と WordPiece を含むエンドツーエンドのトークン化を実行します。
パラメータに関する使用例やドキュメントについては、スーパークラス BertTokenizer を参照してください。
DPRReaderTokenizer
クラス transformers.DPRReaderTokenizer
< source >( *argsdo_lower_case = False**kwargs ) → dict[str, list[list[int]]]
パラメータ
- questions (
strまたはlist[str]) — エンコードする質問です。複数のパッセージに対して1つの質問を指定できます。この場合、質問は[questions] * n_passagesのように複製されます。それ以外の場合は、titlesまたはtextsと同じ数の質問を指定する必要があります。 - titles (
strまたはlist[str]) — エンコードするパッセージのタイトルです。複数のパッセージがある場合は、文字列または文字列のリストを指定できます。 - texts (
strまたはlist[str]) — エンコードするパッセージのテキストです。複数のパッセージがある場合は、文字列または文字列のリストを指定できます。 - padding (
bool,strまたは PaddingStrategy, 省略可, デフォルトはFalse) — パディングの有効化と制御を行います。以下の値を受け入れます:Trueまたは'longest': バッチ内の最長のシーケンスの長さにパディングします(単一のシーケンスのみが提供された場合は、パディングを行いません)。'max_length': 引数max_lengthで指定された最大長、またはその引数が指定されていない場合はモデルが受け入れ可能な最大入力長までパディングします。Falseまたは'do_not_pad'(デフォルト):パディングを行いません(つまり、長さが異なるシーケンスのバッチを出力できます)。
- truncation (
bool,strまたは TruncationStrategy, 省略可能, デフォルトはFalse) — 切り詰めを有効にし、制御します。以下の値を受け取ります:Trueまたは'longest_first': 引数max_lengthで指定された最大長、またはその引数が指定されていない場合はモデルが許容する最大入力長まで切り詰めます。この場合、トークン単位で切り詰められ、ペアのシーケンス(またはペアのバッチ)が提供されている場合は、ペアの中で最も長いシーケンスから1トークンずつ削除します。'only_first': 引数max_lengthで指定された最大長、またはその引数が指定されていない場合はモデルが許容する最大入力長まで切り詰めます。このモードでは、ペアのシーケンス(またはペアのバッチ)が提供された場合のみ、ペアの最初のシーケンスだけが切り詰められます。'only_second': 引数max_lengthで指定された最大長、またはその引数が指定されていない場合はモデルが受け入れ可能な最大入力長まで切り詰めます。このモードでは、シーケンスのペア(またはペアのバッチ)が提供された場合のみ、ペアの2番目のシーケンスが切り詰められます。Falseまたは'do_not_truncate'(デフォルト): トランケーションを行いません(つまり、モデルが許容する最大入力サイズを超えるシーケンス長を持つバッチを出力する可能性があります)。
- max_length (
int, 省略可能) — truncation/padding パラメータのいずれかによって使用される最大長を制御します。未設定のまま、または
Noneに設定されている場合、truncation/padding パラメータのいずれかが最大長を必要とする場合、事前に定義されたモデルの最大長が使用されます。モデルに特定の最大入力長がない場合(XLNet など)、最大長への truncation/padding は無効になります。 - return_tensors (
strまたは TensorType, 省略可) — 設定すると、Python の整数のリストではなくテンソルを返します。指定可能な値は以下の通りです:'pt': PyTorchのtorch.Tensorオブジェクトを返します。'np': Numpy のnp.ndarrayオブジェクトを返します。
- return_attention_mask (
bool, 省略可) — attention mask を返すかどうか。設定されていない場合、特定の tokenizer のデフォルトに従って attention mask を返します。これはreturn_outputs属性で定義されます。
戻り値
dict[str, list[list[int]]]
以下のキーを持つ辞書:
input_ids: モデルに渡すトークンIDのリスト。attention_mask: モデルがどのトークンに注意を払うべきかを指定するインデックスのリスト。
DPRReaderのトークナイザーを構築します。
DPRReaderTokenizer は BertTokenizer とほぼ同一であり、句読点の分割と WordPiece を含むエンドツーエンドのトークナイズ処理を実行します。違いは、入力文字列が question、titles、texts の3つである点で、これらを結合して DPRReader モデルに渡します。
パラメータに関する使用例やドキュメントについては、スーパークラス BertTokenizer を参照してください。
入力文字列のトークン ID と、.decode_best_spans に渡すためのその他の情報を格納した辞書を返します。
トークナイザーと語彙を用いて、質問と異なるパッセージ(タイトルと本文)の文字列を ID(整数)のシーケンスに変換します。生成される input_ids は、サイズが (n_passages, sequence_length) の行列です。
DPRReaderTokenizerFast
class transformers.DPRReaderTokenizerFast
< source >( vocab: str | dict[str, int] | None = Nonedo_lower_case: bool = Trueunk_token: str = '[UNK]'sep_token: str = '[SEP]'pad_token: str = '[PAD]'cls_token: str = '[CLS]'mask_token: str = '[MASK]'tokenize_chinese_chars: bool = Truestrip_accents: bool | None = None**kwargs ) → dict[str, list[list[int]]]
パラメータ
- questions (
strまたはlist[str]) — エンコードする質問です。複数のパッセージに対して1つの質問を指定できます。この場合、質問は[questions] * n_passagesのように複製されます。それ以外の場合は、titlesまたはtextsと同じ数の質問を指定する必要があります。 - titles (
strまたはlist[str]) — エンコードするパッセージのタイトルです。複数のパッセージがある場合は、文字列または文字列のリストを指定できます。 - texts (
strまたはlist[str]) — エンコードするパッセージのテキストです。複数のパッセージがある場合は、文字列または文字列のリストを指定できます。 - padding (
bool,strまたは PaddingStrategy, 省略可, デフォルトはFalse) — パディングの有効化と制御を行います。以下の値を受け入れます:Trueまたは'longest': バッチ内の最長のシーケンスの長さにパディングします(単一のシーケンスのみが提供された場合は、パディングを行いません)。'max_length': 引数max_lengthで指定された最大長、またはその引数が指定されていない場合はモデルが受け入れ可能な最大入力長までパディングします。Falseまたは'do_not_pad'(デフォルト):パディングを行いません(つまり、長さが異なるシーケンスのバッチを出力できます)。
- truncation (
bool,strまたは TruncationStrategy, 省略可能, デフォルトはFalse) — 切り詰めを有効にし、制御します。以下の値を受け取ります:Trueまたは'longest_first': 引数max_lengthで指定された最大長、またはその引数が指定されていない場合はモデルが許容する最大入力長まで切り詰めます。この場合、トークン単位で切り詰められ、ペアのシーケンス(またはペアのバッチ)が提供されている場合は、ペアの中で最も長いシーケンスから1トークンずつ削除します。'only_first': 引数max_lengthで指定された最大長、またはその引数が指定されていない場合はモデルが許容する最大入力長まで切り詰めます。このモードでは、ペアのシーケンス(またはペアのバッチ)が提供された場合のみ、ペアの最初のシーケンスだけが切り詰められます。'only_second': 引数max_lengthで指定された最大長、またはその引数が指定されていない場合はモデルが受け入れ可能な最大入力長まで切り詰めます。このモードでは、シーケンスのペア(またはペアのバッチ)が提供された場合のみ、ペアの2番目のシーケンスが切り詰められます。Falseまたは'do_not_truncate'(デフォルト): トランケーションを行いません(つまり、モデルが許容する最大入力サイズを超えるシーケンス長を持つバッチを出力する可能性があります)。
- max_length (
int, 省略可能) — truncation/padding パラメータのいずれかによって使用される最大長を制御します。未設定のまま、または
Noneに設定されている場合、truncation/padding パラメータのいずれかが最大長を必要とする場合、事前に定義されたモデルの最大長が使用されます。モデルに特定の最大入力長がない場合(XLNet など)、最大長への truncation/padding は無効になります。 - return_tensors (
strまたは TensorType, 省略可) — 設定すると、Python の整数のリストではなくテンソルを返します。指定可能な値は以下の通りです:'pt': PyTorchのtorch.Tensorオブジェクトを返します。'np': Numpy のnp.ndarrayオブジェクトを返します。
- return_attention_mask (
bool, 省略可) — attention mask を返すかどうか。設定されていない場合、特定の tokenizer のデフォルトに従って attention mask を返します。これはreturn_outputs属性で定義されます。
戻り値
dict[str, list[list[int]]]
以下のキーを持つ辞書:
input_ids: モデルに渡すトークンIDのリスト。attention_mask: モデルがどのトークンに注意を払うべきかを指定するインデックスのリスト。
HuggingFaceのtokenizersライブラリを基盤とする「fast」DPRReaderトークナイザーを構築します。
DPRReaderTokenizerFast は BertTokenizer とほぼ同一であり、句読点の分割と WordPiece を含むエンドツーエンドのトークナイズ処理を実行します。違いは、question、titles、texts という3つの文字列を入力として受け取り、それらを結合して DPRReader モデルに渡す点です。
パラメータに関する使用例やドキュメントについては、スーパークラス BertTokenizer を参照してください。
入力文字列のトークン ID と、.decode_best_spans に渡すためのその他の情報を格納した辞書を返します。
トークナイザーと語彙を用いて、質問と異なるパッセージ(タイトルと本文)の文字列を ID(整数)のシーケンスに変換します。
生成される input_ids は、(n_passages, sequence_length) のサイズの行列で、以下の形式です:
[CLS] <question token ids> [SEP] <titles ids> [SEP] <texts ids>
DPR固有の出力
class transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput
< source >( pooler_output: FloatTensorhidden_states: tuple[torch.FloatTensor, ...] | None = Noneattentions: tuple[torch.FloatTensor, ...] | None = None )
パラメータ
- pooler_output (
torch.FloatTensor、shape(batch_size, embeddings_size)) — DPR エンコーダーは、コンテキストの表現に対応する pooler_output を出力します。シーケンスの最初のトークン(分類トークン)の最終層の hidden-state を、Linear 層でさらに処理したものです。この出力は、質問の embedding を用いた最近傍クエリにおいて、コンテキストを埋め込むために使用されます。 - hidden_states (
tuple[torch.FloatTensor, ...], 省略可能, が返されるのは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, ...], 省略可能, が返されるのはoutput_attentions=Trueが渡された場合、またはconfig.output_attentions=True) — のタプルtorch.FloatTensor(の形状を持つ、各レイヤーごとに1つの要素を含む(batch_size, num_heads, sequence_length, sequence_length).アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
DPRQuestionEncoderの出力用のクラスです。
クラス transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput
< source >( pooler_output: FloatTensorhidden_states: tuple[torch.FloatTensor, ...] | None = Noneattentions: tuple[torch.FloatTensor, ...] | None = None )
パラメータ
- pooler_output (
torch.FloatTensor、shape(batch_size, embeddings_size)) — DPR エンコーダーは、質問の表現に対応する pooler_output を出力します。シーケンスの最初のトークン(分類トークン)の最終層の hidden-state を、Linear 層でさらに処理したものです。この出力は、コンテキストの埋め込みを用いた最近傍クエリにおいて、質問を埋め込むために使用されます。 - hidden_states (
tuple[torch.FloatTensor, ...], 省略可能, が返されるのは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, ...], 省略可能, が返されるのはoutput_attentions=Trueが渡された場合、またはconfig.output_attentions=True) — のタプルtorch.FloatTensor(の形状を持つ、各レイヤーごとに1つの要素を含む(batch_size, num_heads, sequence_length, sequence_length).アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
DPRQuestionEncoderの出力用のクラスです。
クラス transformers.DPRReaderOutput
< source >( start_logits: FloatTensorend_logits: typing.Optional[torch.FloatTensor] = Nonerelevance_logits: typing.Optional[torch.FloatTensor] = Nonehidden_states: tuple[torch.FloatTensor, ...] | None = Noneattentions: tuple[torch.FloatTensor, ...] | None = None )
パラメータ
- 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、形状(n_passages, )) — DPRReader の QA クラシファイアからの出力であり、各 passage が質問に答えるスコアを、他のすべての passage と比較したものです。 - hidden_states (
tuple[torch.FloatTensor, ...], 省略可能, が返されるのは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, ...], 省略可能, が返されるのはoutput_attentions=Trueが渡された場合、またはconfig.output_attentions=True) — のタプルtorch.FloatTensor(の形状を持つ、各レイヤーごとに1つの要素を含む(batch_size, num_heads, sequence_length, sequence_length).アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
DPRQuestionEncoderの出力用のクラスです。
DPRContextEncoder
クラス transformers.DPRContextEncoder
< source >( config: DPRConfig )
パラメータ
- config (DPRConfig) — モデルのすべてのパラメータを含むモデル設定クラス。設定ファイルで初期化しても、モデルに関連付けられた重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
プーラーの出力をコンテキスト表現として出力する、素のDPRContextEncoderトランスフォーマー。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DPRContextEncoderOutput or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensor形状(batch_size, sequence_length)) — 語彙における入力シーケンスのトークンインデックスです。事前学習と一致させるために、DPR の入力シーケンスは [CLS] と [SEP] トークンを使用して次のようにフォーマットする必要があります:(a) シーケンスのペアの場合(例:タイトルと本文のペア):
- attention_mask (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- token_type_ids (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — 入力テキストの第1部分と第2部分を区別するためのセグメントトークンインデックス。インデックスは[0, 1]:- 0 は sentence A トークンに対応します。
- 1 は sentence B トークンに対応します。
- inputs_embeds (
torch.Tensor、形状(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 を返すかどうか。
戻り値
DPRContextEncoderOutput または tuple(torch.FloatTensor)
torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または DPRContextEncoderOutput。設定(DPRConfig)や入力に応じて、さまざまな要素で構成されます。
DPRContextEncoderのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
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)です。各層の出力におけるモデルの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 1DPR は絶対位置埋め込みを持つモデルであるため、通常は左ではなく右にパディングを行うことが推奨されます。
インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
例:
>>> 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_outputDPRQuestionEncoder
クラス transformers.DPRQuestionEncoder
< source >( config: DPRConfig )
パラメータ
- config (DPRConfig) — モデルのすべてのパラメータを含むモデル設定クラス。設定ファイルで初期化しても、モデルに関連付けられた重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
プーラーの出力を質問の表現として出力する、素のDPRQuestionEncoderトランスフォーマー。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DPRQuestionEncoderOutput or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensor形状(batch_size, sequence_length)) — 語彙における入力シーケンスのトークンインデックスです。事前学習と一致させるために、DPR の入力シーケンスは [CLS] と [SEP] トークンを使用して次のようにフォーマットする必要があります:(a) シーケンスのペアの場合(例:タイトルと本文のペア):
- attention_mask (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- token_type_ids (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — 入力テキストの第1部分と第2部分を区別するためのセグメントトークンインデックス。インデックスは[0, 1]:- 0 は sentence A トークンに対応します。
- 1 は sentence B トークンに対応します。
- inputs_embeds (
torch.Tensor、形状(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 を返すかどうか。
戻り値
DPRQuestionEncoderOutput または tuple(torch.FloatTensor)
torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または DPRQuestionEncoderOutput。設定(DPRConfig)や入力に応じて、さまざまな要素で構成されます。
DPRQuestionEncoderのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
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)です。各層の出力におけるモデルの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 1DPR は絶対位置埋め込みを持つモデルであるため、通常は左ではなく右にパディングを行うことが推奨されます。
インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
例:
>>> 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_outputDPRReader
class transformers.DPRReader
< source >( config: DPRConfig )
パラメータ
- config (DPRConfig) — モデルのすべてのパラメータを含むモデル設定クラス。設定ファイルで初期化しても、モデルに関連付けられた重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
スパン予測を出力する、素のDPRReaderトランスフォーマー。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DPRReaderOutput or tuple(torch.FloatTensor)
パラメータ
- input_ids (
tuple[torch.LongTensor]の形状(n_passages, sequence_length)) — は、語彙における入力シーケンスのトークンインデックスです。これは、1) 質問、2) パッセージのタイトル、3) パッセージの本文からなるシーケンスのトリプルである必要があります。事前学習に合わせるため、DPRinput_idsシーケンスは、[CLS] と [SEP] を以下のような形式で含める必要があります:[CLS] <question token ids> [SEP] <titles ids> [SEP] <texts ids>DPR は絶対位置埋め込みを持つモデルであるため、通常は左ではなく右にパディングを行うことが推奨されます。
インデックスはDPRReaderTokenizerを使用して取得できます。詳細については、このクラスのドキュメントを参照してください。
- attention_mask (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- 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 を返すかどうか。
戻り値
DPRReaderOutput または tuple(torch.FloatTensor)
torch.FloatTensor のタプル、または DPRReaderOutput(return_dict=False が渡された場合、または config.return_dict=False の場合)。設定(DPRConfig)や入力に応じて、さまざまな要素で構成されます。
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後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
例:
>>> 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