Transformers documentation
LXMERT
このモデルは2019年8月20日にHF papersで公開され、2020年11月16日にHugging Face Transformersに貢献されました。
LXMERT
概要
LXMERTモデルは、Hao Tan & Mohit Bansal による LXMERT: Learning Cross-Modality Encoder Representations from Transformers で提案されました。これは、ビジュアルモダリティ用、言語モダリティ用、および両モダリティを融合するためのものという3つの双方向transformerエンコーダーの系列であり、マスク言語モデリング、ビジュアル-言語テキストアライメント、ROI特徴量回帰、マスクビジュアル属性モデリング、マスクビジュアルオブジェクトモデリング、ビジュアル質問応答の目的関数の組み合わせを用いて事前学習されています。事前学習には、MSCOCO、Visual-Genome + Visual-Genome Question Answering、VQA 2.0、GQAといった複数のマルチモーダルデータセットが含まれます。
論文の抄録は以下の通りです。
視覚と言語の推論には、視覚的概念、言語の意味論、そして何よりも重要なのは、これら2つのモダリティ間の整合性と関係性の理解が必要です。そこで、これらの視覚と言語の接続を学習するための LXMERT (Learning Cross-Modality Encoder Representations from Transformers) フレームワークを提案します。LXMERT では、オブジェクト関係エンコーダ、言語エンコーダ、およびクロスモダリティエンコーダの3つのエンコーダからなる大規模な Transformer モデルを構築します。次に、モデルに視覚と言語の意味論を接続する能力を持たせるために、マスク言語モデリング、マスクオブジェクト予測(特徴量回帰とラベル分類)、クロスモダリティマッチング、画像質問応答という5つの多様な代表的な事前学習タスクを通じて、大量の画像と文のペアでモデルを事前学習します。これらのタスクは、モダリティ内およびクロスモダリティの関係性の学習に役立ちます。事前学習済みパラメータからのファインチューニング後、当社のモデルは2つの視覚質問応答データセット(VQA と GQA)で最先端の結果を達成しました。また、事前学習済みクロスモダリティモデルの汎化性を示すために、挑戦的な視覚推論タスクである NLVR に適応させ、従来の最良結果を絶対値で22%(54%から76%)向上させました。最後に、詳細なアブレーションスタディを行い、当社の新しいモデルコンポーネントと事前学習戦略が、強力な結果に大きく貢献していることを証明します。また、異なるエンコーダに対するいくつかの注意可視化も提示します
このモデルは eltoto1219 によって提供されました。元のコードは こちら で確認できます。
使用のコツ
- バウンディングボックスは、視覚特徴埋め込みの使用に必須ではありません。視覚的・空間的な特徴であれば、どのようなものでも機能します。
- LXMERT が出力する言語の隠れ状態と視覚の隠れ状態は、どちらもクロスモダリティ層を通過するため、両方のモダリティの情報を含んでいます。自己のモダリティのみをアテンションするモダリティにアクセスするには、タプルの最初の入力から vision/language 隠れ状態を選択します。
- 双方向クロスモダリティエンコーダーアテンションは、言語モダリティを入力として、ビジョンモダリティをコンテキストベクトルとして使用した場合にのみ、アテンション値を返します。さらに、クロスモダリティエンコーダーにはそれぞれのモダリティごとの自己アテンションとクロスアテンションが含まれていますが、返されるのはクロスアテンションのみであり、両方の自己アテンションの出力は無視されます。
リソース
LxmertConfig
クラス transformers.LxmertConfig
< 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_attention_heads: int = 12num_qa_labels: int = 9500num_object_labels: int = 1600num_attr_labels: int = 400intermediate_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.02l_layers: int = 9x_layers: int = 5r_layers: int = 5visual_feat_dim: int = 2048visual_pos_dim: int = 4visual_loss_normalizer: float = 6.67task_matched: bool = Truetask_mask_lm: bool = Truetask_obj_predict: bool = Truetask_qa: bool = Truevisual_obj_loss: bool = Truevisual_attr_loss: bool = Truevisual_feat_loss: bool = Truepad_token_id: int | None = Nonebos_token_id: int | None = Noneeos_token_id: int | list[int] | None = Nonetie_word_embeddings: bool = True )
パラメータ
- vocab_size (
int、任意、デフォルトは30522) — モデルの語彙サイズ。input_idsで表現できるトークンの種類数を定義します。 - hidden_size (
int、任意、デフォルトは768) — 隠れ表現の次元数。 - num_attention_heads (
int、任意、デフォルトは12) — Transformerデコーダーの各アテンション層におけるアテンションヘッドの数。 - num_qa_labels (
int、任意、デフォルト値は 9500)— これは、存在する質問応答(QA)ラベルの総数を表します。QA を含む複数のデータセットを使用する場合は、ユーザーはすべてのデータセットに存在するラベルの総数を考慮する必要があります。 - num_object_labels (
int, 任意、デフォルトは 1600) — これは、lxmert がプーリングされたオブジェクト特徴量をどのセマンティックに一意なオブジェクトに分類できるかを表す、オブジェクトの総数を示します。 - num_attr_labels (
int、任意、デフォルト値は 400) — これは、lxmert がプーリングされたオブジェクト特徴量を有すると分類できる、意味的に固有な属性の総数を表します。 - 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 の標準偏差です。 - l_layers (
int、任意、デフォルトは 9) — Transformer 言語エンコーダーの隠れ層の数。 - x_layers (
int、任意、デフォルト値は 5)— Transformer のクロスモーダリティエンコーダーにおける隠れ層の数。 - r_layers (
int、任意、デフォルトは 5) — Transformer 視覚エンコーダーの隠れ層の数です。 - visual_feat_dim (
int, 任意、デフォルトは 2048) — モデルの入力として使用されるプーリング済みオブジェクト特徴の最終次元を表します。各オブジェクト特徴自体のサイズを示します。 - visual_pos_dim (
int、任意、デフォルトは 4) — 視覚特徴に混合される空間的特徴の数を表します。デフォルトが 4 に設定されているのは、一般的にバウンディングボックスの位置 (x, y, width, height) を表すためです。 - visual_loss_normalizer (
float, 任意、デフォルト値は 6.67) — 事前学習中に、複数のビジョンベースの損失関数で学習することを決定した場合、各ビジョン損失に掛けられるスケーリング係数を表します。 - task_matched (
bool、任意、デフォルトはTrue) — このタスクは、文と画像の対応付けに使用されます。文が画像を正しく説明している場合、ラベルは 1 になります。文が画像を正しく説明していない場合、ラベルは 0 になります。 - task_mask_lm (
bool、任意、デフォルトはTrue) — 損失関数にマスク言語モデリング(BERT などの事前学習モデルで使用されるもの)を含めるかどうかを指定します。 - task_obj_predict (
bool、省略可、デフォルトはTrue) — 損失関数にオブジェクト予測、属性予測、特徴量回帰を含めるかどうかを指定します。 - task_qa (
bool、省略可、デフォルトはTrue) — 目的関数に質問応答の損失を追加するかどうか - visual_obj_loss (
bool、省略可、デフォルトはTrue) — オブジェクト予測の損失関数を計算するかどうか - visual_attr_loss (
bool、任意、デフォルトはTrue) — 属性予測の損失関数を計算するかどうか - visual_feat_loss (
bool、省略可、デフォルトはTrue) — 特徴量回帰の損失関数を計算するかどうか - pad_token_id (
int, 任意) — 語彙内でパディングに使用されるトークン ID。 - bos_token_id (
int, 省略可) — 語彙におけるストリーム開始に使用されるトークン ID。 - eos_token_id (
Union[int, list[int]], 省略可) — 語彙内でストリーム終了に使用されるトークン ID。 - tie_word_embeddings (
bool、任意、デフォルトはTrue) — モデルのtied_weights_keysマッピングに従って重み埋め込みを共有するかどうかを指定します。
これはLxmertModelの設定を保存するための設定クラスです。指定された引数に基づいてLxmertモデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、unc-nlp/lxmert-base-uncasedと類似した設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
LxmertTokenizer
class transformers.BertTokenizer
< 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 )
パラメータ
- vocab (
strまたはdict[str, int]、省略可) — カスタム語彙辞書です。指定しない場合、vocab_fileから語彙が読み込まれます。 - do_lower_case (
bool、省略可、デフォルトはTrue) — トークン化時に、入力を小文字に変換するかどうかを指定します。 - unk_token (
str、任意、デフォルトは"[UNK]") — 不明トークンです。語彙に存在しないトークンは ID に変換できず、代わりにこのトークンが設定されます。 - sep_token (
str、任意、デフォルトは"[SEP]") — 複数のシーケンスからシーケンスを構築する際に使用される区切りトークンです。例えば、シーケンス分類用の2つのシーケンス、または質問応答用のテキストと質問などです。また、特殊トークンを用いて構築されたシーケンスの最後のトークンとしても使用されます。 - pad_token (
str、任意、デフォルトは"[PAD]") — パディングに使用されるトークンです。例えば、長さが異なるシーケンスをバッチ処理する場合に使用します。 - cls_token (
str、任意、デフォルトは"[CLS]") — シーケンス分類(トークンごとの分類ではなく、シーケンス全体の分類)を行う際に使用される分類トークンです。特殊トークンを用いて構築された場合、シーケンスの最初のトークンになります。 - mask_token (
str、任意、デフォルトは"[MASK]") — 値をマスクするために使用されるトークンです。これは、マスク言語モデリングでこのモデルを学習する際に使用されるトークンです。モデルが予測しようとする対象となるトークンです。 - tokenize_chinese_chars (
bool、省略可能、デフォルトはTrue) — 中国語の文字をトークン化するかどうかを指定します。 - strip_accents (
bool, 任意) — すべてのアクセント記号を除去するかどうか。このオプションが指定されない場合、lowercaseの値によって決定されます(元の BERT と同じ)。
BERTのトークナイザーを構築します(HuggingFaceのtokenizersライブラリをバックエンドとして使用)。WordPieceに基づいています。
このトークナイザーは、TokenizersBackend を継承しており、主要なメソッドの大部分が含まれています。これらのメソッドに関する詳細については、このスーパークラスを参照してください。
Lxmert固有の出力
class transformers.models.lxmert.modeling_lxmert.LxmertModelOutput
< source >( language_output: typing.Optional[torch.FloatTensor] = Nonevision_output: typing.Optional[torch.FloatTensor] = Nonepooled_output: typing.Optional[torch.FloatTensor] = Nonelanguage_hidden_states: tuple[torch.FloatTensor] | None = Nonevision_hidden_states: tuple[torch.FloatTensor] | None = Nonelanguage_attentions: tuple[torch.FloatTensor] | None = Nonevision_attentions: tuple[torch.FloatTensor] | None = Nonecross_encoder_attentions: tuple[torch.FloatTensor] | None = None )
パラメータ
- language_output (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)) — 言語エンコーダーの最終層の出力における、隠れ状態のシーケンス。 - vision_output (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)) — ビジュアルエンコーダの最終層の出力における、隠れ状態のシーケンス。 - pooled_output (
torch.FloatTensor、shape(batch_size, hidden_size)) — シーケンスの最初のトークン(classification、CLS、トークン)の最終層の隠れ状態を、Linear層とTanh活性化関数でさらに処理したものです。Linear - language_hidden_states (
tuple(torch.FloatTensor)、任意、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(入力特徴量用 1 つ + 各クロスモダリティ層の出力用 1 つ)、形状は(batch_size, sequence_length, hidden_size)。 - vision_hidden_states (
tuple(torch.FloatTensor)、任意、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(入力特徴量用 1 つ + 各クロスモダリティ層の出力用 1 つ)で、 形状は(batch_size, sequence_length, hidden_size)です。 - language_attentions (
tuple(torch.FloatTensor)、任意、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(レイヤーごとに 1 つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンション softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。 - vision_attentions (
tuple(torch.FloatTensor)、任意、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに 1 つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)です。アテンションの softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。 - cross_encoder_attentions (
tuple(torch.FloatTensor)、任意、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)です。アテンションの softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。
Lxmertの出力には、言語エンコーダー、ビジュアルエンコーダー、およびクロスモーダリティエンコーダーの最後の隠れ状態、プーリング出力、アテンション確率が含まれます。(注:Lxmertにおけるビジュアルエンコーダーは「関係性」エンコーダーと呼ばれます)
クラス transformers.models.lxmert.modeling_lxmert.LxmertForPreTrainingOutput
< source >( loss: typing.Optional[torch.FloatTensor] = Noneprediction_logits: typing.Optional[torch.FloatTensor] = Nonecross_relationship_score: typing.Optional[torch.FloatTensor] = Nonequestion_answering_score: typing.Optional[torch.FloatTensor] = Nonelanguage_hidden_states: tuple[torch.FloatTensor] | None = Nonevision_hidden_states: tuple[torch.FloatTensor] | None = Nonelanguage_attentions: tuple[torch.FloatTensor] | None = Nonevision_attentions: tuple[torch.FloatTensor] | None = Nonecross_encoder_attentions: tuple[torch.FloatTensor] | None = None )
パラメータ
- loss (
*optional*,labelsが指定された場合に返されます,torch.FloatTensor、shape(1,)) — マスク付き言語モデリングの損失と、次のシーケンス予測(分類)の損失の合計です。 - prediction_logits (
torch.FloatTensor、shape(batch_size, sequence_length, config.vocab_size)) — 言語モデリングヘッドの予測スコア(SoftMax 適用前の各語彙トークンのスコア)。 - cross_relationship_score (
torch.FloatTensor、shape(batch_size, 2)) — テキストマッチング目的(分類)ヘッドの予測スコア(SoftMax 適用前の True/False 継続のスコア)。 - question_answering_score (
torch.FloatTensor、shape(batch_size, n_qa_answers)) — 質問応答タスク(分類)の予測スコアです。 - language_hidden_states (
tuple(torch.FloatTensor)、任意、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(入力特徴量用 1 つ + 各クロスモダリティ層の出力用 1 つ)、形状は(batch_size, sequence_length, hidden_size)。 - vision_hidden_states (
tuple(torch.FloatTensor)、任意、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(入力特徴量用 1 つ + 各クロスモダリティ層の出力用 1 つ)で、 形状は(batch_size, sequence_length, hidden_size)です。 - language_attentions (
tuple(torch.FloatTensor)、任意、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(レイヤーごとに 1 つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンション softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。 - vision_attentions (
tuple(torch.FloatTensor)、任意、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに 1 つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)です。アテンションの softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。 - cross_encoder_attentions (
tuple(torch.FloatTensor)、任意、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)です。アテンションの softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。
LxmertForPreTrainingの出力型。
クラス transformers.models.lxmert.modeling_lxmert.LxmertForQuestionAnsweringOutput
< source >( loss: typing.Optional[torch.FloatTensor] = Nonequestion_answering_score: typing.Optional[torch.FloatTensor] = Nonelanguage_hidden_states: tuple[torch.FloatTensor] | None = Nonevision_hidden_states: tuple[torch.FloatTensor] | None = Nonelanguage_attentions: tuple[torch.FloatTensor] | None = Nonevision_attentions: tuple[torch.FloatTensor] | None = Nonecross_encoder_attentions: tuple[torch.FloatTensor] | None = None )
パラメータ
- loss (
*optional*,labelsが指定された場合に返されます,torch.FloatTensor、shape(1,)) — マスク付き言語モデリングの損失と、次のシーケンス予測(分類)の損失の合計です。 - question_answering_score (
torch.FloatTensor、shape(batch_size, n_qa_answers)、任意) — 質問応答タスク(分類)の予測スコア。 - language_hidden_states (
tuple(torch.FloatTensor)、任意、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(入力特徴量用 1 つ + 各クロスモダリティ層の出力用 1 つ)、形状は(batch_size, sequence_length, hidden_size)。 - vision_hidden_states (
tuple(torch.FloatTensor)、任意、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(入力特徴量用 1 つ + 各クロスモダリティ層の出力用 1 つ)で、 形状は(batch_size, sequence_length, hidden_size)です。 - language_attentions (
tuple(torch.FloatTensor)、任意、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(レイヤーごとに 1 つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンション softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。 - vision_attentions (
tuple(torch.FloatTensor)、任意、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに 1 つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)です。アテンションの softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。 - cross_encoder_attentions (
tuple(torch.FloatTensor)、任意、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)です。アテンションの softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。
LxmertModel
class transformers.LxmertModel
< source >( config: LxmertConfig )
パラメータ
- config (LxmertConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
特定のヘッドを付加せず、生のhidden-statesを出力する素のLxmertモデル。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonevisual_feats: typing.Optional[torch.FloatTensor] = Nonevisual_pos: typing.Optional[torch.FloatTensor] = Noneattention_mask: typing.Optional[torch.FloatTensor] = Nonevisual_attention_mask: typing.Optional[torch.FloatTensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → LxmertModelOutput or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- visual_feats (
torch.FloatTensorの形状(batch_size, num_visual_features, visual_feat_dim)) — この入力は視覚特徴を表します。faster-RCNN モデルを使用してバウンディングボックスから ROI プールされたオブジェクト特徴ですこれらは現在、Transformers ライブラリでは提供されていません。
- visual_pos (
torch.FloatTensorの形状(batch_size, num_visual_features, visual_pos_dim)) — この入力は、インデックスを介した相対的な視覚特徴に対応する空間的特徴を表します。事前学習済みの LXMERT モデルは、これらの空間的特徴が 0 からこれらは現在、Transformers ライブラリでは提供されていません。
- attention_mask (
torch.FloatTensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- visual_attention_mask (
torch.FloatTensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。マスクの値は[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- token_type_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、任意) — 入力テキストの第1部分と第2部分を区別するためのセグメントトークンインデックス。インデックスは[0, 1]:- 0 は sentence A トークンに対応します。
- 1 は sentence B トークンに対応します。
- inputs_embeds (
torch.FloatTensor、形状(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 を返すかどうか。
戻り値
LxmertModelOutput または tuple(torch.FloatTensor)
torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または LxmertModelOutput。設定(LxmertConfig)や入力に応じて、さまざまな要素で構成されます。
LxmertModel の forward メソッドは、__call__ という特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
- language_output (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)) — language encoder の最終層の出力における hidden-states のシーケンス。 - vision_output (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)) — 視覚エンコーダの最終層の出力における、隠れ状態のシーケンス。 - pooled_output (
torch.FloatTensor、shape(batch_size, hidden_size)) — シーケンスの最初のトークン(classification、CLS、トークン)の最終層の隠れ状態を、Linear層とTanh活性化関数でさらに処理したものです。Linear - language_hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返される)—torch.FloatTensorのタプル(入力特徴量用 1 つ + 各クロスモダリティ層の出力用 1 つ)、shape は(batch_size, sequence_length, hidden_size)。 - vision_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)です。 - language_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返される)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンション softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。 - vision_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンション softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。 - cross_encoder_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 ヘッドにおける加重平均の計算に使用されます。
LxmertForPreTraining
class transformers.LxmertForPreTraining
< source >( config: LxmertConfig )
パラメータ
- config (LxmertConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
指定された事前学習ヘッドを上部に備えた Lxmert モデル。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonevisual_feats: typing.Optional[torch.FloatTensor] = Nonevisual_pos: typing.Optional[torch.FloatTensor] = Noneattention_mask: typing.Optional[torch.FloatTensor] = Nonevisual_attention_mask: typing.Optional[torch.FloatTensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneobj_labels: dict[str, tuple[torch.FloatTensor, torch.FloatTensor]] | None = Nonematched_label: typing.Optional[torch.LongTensor] = Noneans: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → LxmertForPreTrainingOutput or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- visual_feats (
torch.FloatTensorの形状(batch_size, num_visual_features, visual_feat_dim)) — この入力は視覚特徴を表します。faster-RCNN モデルを使用してバウンディングボックスから ROI プールされたオブジェクト特徴ですこれらは現在、Transformers ライブラリでは提供されていません。
- visual_pos (
torch.FloatTensorの形状(batch_size, num_visual_features, visual_pos_dim)) — この入力は、インデックスを介した相対的な視覚特徴に対応する空間的特徴を表します。事前学習済みの LXMERT モデルは、これらの空間的特徴が 0 からこれらは現在、Transformers ライブラリでは提供されていません。
- attention_mask (
torch.FloatTensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- visual_attention_mask (
torch.FloatTensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。マスクの値は[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- token_type_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、任意) — 入力テキストの第1部分と第2部分を区別するためのセグメントトークンインデックス。インデックスは[0, 1]:- 0 は sentence A トークンに対応します。
- 1 は sentence B トークンに対応します。
- inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - labels (
torch.LongTensor、shape(batch_size, sequence_length)、任意) — マスク言語モデリング損失を計算するためのラベルです。インデックスは[-100, 0, ..., config.vocab_size]の範囲である必要があります(input_idsのドキュメント文字列を参照)。インデックスが-100に設定されたトークンは無視(マスク)され、損失は[0, ..., config.vocab_size]の範囲のラベルを持つトークンに対してのみ計算されます。 - obj_labels (
dict[Str -- tuple[Torch.FloatTensor, Torch.FloatTensor]], optional): 各キーは視覚損失のそれぞれに命名され、タプルの各要素は、ラベル ID とラベルスコアそれぞれについて、形状が(batch_size, num_features)および(batch_size, num_features, visual_feature_dim)となります - matched_label (
torch.LongTensor形状(batch_size,), 省略可) — テキスト入力が画像と一致するかどうかを判定するための(分類)損失を計算するためのラベル。入力にはシーケンスペアを指定します(input_idsのドキュメントを参照)。インデックスは[0, 1]:- 0 は、文が画像と一致しないことを示します。
- 1 は、その文が画像と一致することを示します。
- ans (
Torch.Tensor、形状(batch_size)、任意) — 正解の one hot 表現 任意 - output_attentions (
bool, 省略可) — すべてのアテンション層のアテンションテンソルを返すかどうかを指定します。詳細は、返されるテンソルのattentionsを参照してください。 - output_hidden_states (
bool, 省略可) — すべての層の hidden states を返すかどうかを指定します。詳細は、返されるテンソルのhidden_statesを参照してください。 - return_dict (
bool, 任意) — プレーンなタプルではなく ModelOutput を返すかどうか。
戻り値
LxmertForPreTrainingOutput または tuple(torch.FloatTensor)
torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または LxmertForPreTrainingOutput。設定(LxmertConfig)や入力に応じて、さまざまな要素で構成されます。
LxmertForPreTraining の forward メソッドは、__call__ という特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
- loss (
*optional*,labelsが提供された場合のみ返されます,torch.FloatTensor、shape(1,)) — マスク言語モデリングの損失と次のシーケンス予測(分類)の損失の合計。 - prediction_logits (
torch.FloatTensor、shape(batch_size, sequence_length, config.vocab_size)) — 言語モデリングヘッドの予測スコア(SoftMax 適用前の各語彙トークンのスコア)。 - cross_relationship_score (
torch.FloatTensor、shape(batch_size, 2)) — テキストマッチング目的(分類)ヘッドの予測スコア(SoftMax 適用前の True/False 継続のスコア)。 - question_answering_score (
torch.FloatTensor、shape(batch_size, n_qa_answers)) — 質問応答タスク(分類)の予測スコア。 - language_hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返される)—torch.FloatTensorのタプル(入力特徴量用 1 つ + 各クロスモダリティ層の出力用 1 つ)、shape は(batch_size, sequence_length, hidden_size)。 - vision_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)です。 - language_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返される)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンション softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。 - vision_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンション softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。 - cross_encoder_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 ヘッドにおける加重平均の計算に使用されます。
LxmertForQuestionAnswering
クラス transformers.LxmertForQuestionAnswering
< source >( config: LxmertConfig )
パラメータ
- config (LxmertConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
Lxmert モデルは、下流の QA タスク用にビジュアル・アンサーヘッドを上部に備えています
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonevisual_feats: typing.Optional[torch.FloatTensor] = Nonevisual_pos: typing.Optional[torch.FloatTensor] = Noneattention_mask: typing.Optional[torch.FloatTensor] = Nonevisual_attention_mask: typing.Optional[torch.FloatTensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → LxmertForQuestionAnsweringOutput or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- visual_feats (
torch.FloatTensorの形状(batch_size, num_visual_features, visual_feat_dim)) — この入力は視覚特徴を表します。faster-RCNN モデルを使用してバウンディングボックスから ROI プールされたオブジェクト特徴ですこれらは現在、Transformers ライブラリでは提供されていません。
- visual_pos (
torch.FloatTensorの形状(batch_size, num_visual_features, visual_pos_dim)) — この入力は、インデックスを介した相対的な視覚特徴に対応する空間的特徴を表します。事前学習済みの LXMERT モデルは、これらの空間的特徴が 0 からこれらは現在、Transformers ライブラリでは提供されていません。
- attention_mask (
torch.FloatTensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- visual_attention_mask (
torch.FloatTensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。マスクの値は[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- token_type_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、任意) — 入力テキストの第1部分と第2部分を区別するためのセグメントトークンインデックス。インデックスは[0, 1]:- 0 は sentence A トークンに対応します。
- 1 は sentence B トークンに対応します。
- inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - labels (
Torch.Tensor、shape(batch_size)、任意) — 正解の one-hot 表現 - output_attentions (
bool, 省略可) — すべてのアテンション層のアテンションテンソルを返すかどうかを指定します。詳細は、返されるテンソルのattentionsを参照してください。 - output_hidden_states (
bool, 省略可) — すべての層の hidden states を返すかどうかを指定します。詳細は、返されるテンソルのhidden_statesを参照してください。 - return_dict (
bool, 任意) — プレーンなタプルではなく ModelOutput を返すかどうか。
戻り値
LxmertForQuestionAnsweringOutput または tuple(torch.FloatTensor)
torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または LxmertForQuestionAnsweringOutput。設定(LxmertConfig)や入力に応じて、さまざまな要素で構成されます。
LxmertForQuestionAnswering の forward メソッドは、__call__ という特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
- loss (
*optional*、labelsが指定された場合のみ返されます、torch.FloatTensor、形状(1,)) — マスク言語モデリングの損失と次のシーケンス予測(分類)の損失の合計。 - question_answering_score(
torch.FloatTensor、形状(batch_size, n_qa_answers)、任意)— 質問応答目的(分類)の予測スコア。 - language_hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返される)—torch.FloatTensorのタプル(入力特徴量用 1 つ + 各クロスモダリティ層の出力用 1 つ)、shape は(batch_size, sequence_length, hidden_size)。 - vision_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)です。 - language_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返される)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンション softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。 - vision_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンション softmax 後のアテンション重みで、セルフアテンションヘッドにおける加重平均の計算に使用されます。 - cross_encoder_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 ヘッドにおける加重平均の計算に使用されます。
例:
>>> from transformers import AutoTokenizer, LxmertForQuestionAnswering
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("unc-nlp/lxmert-base-uncased")
>>> model = LxmertForQuestionAnswering.from_pretrained("unc-nlp/lxmert-base-uncased")
>>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"
>>> inputs = tokenizer(question, text, return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> answer_start_index = outputs.start_logits.argmax()
>>> answer_end_index = outputs.end_logits.argmax()
>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
>>> tokenizer.decode(predict_answer_tokens, skip_special_tokens=True)
...
>>> # target is "nice puppet"
>>> target_start_index = torch.tensor([14])
>>> target_end_index = torch.tensor([15])
>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = outputs.loss
>>> round(loss.item(), 2)
...