ALBERT
概要
ALBERTモデルは、「ALBERT: A Lite BERT for Self-supervised Learning of Language Representations」という論文でZhenzhong Lan、Mingda Chen、Sebastian Goodman、Kevin Gimpel、Piyush Sharma、Radu Soricutによって提案されました。BERTのメモリ消費を減らしトレーニングを高速化するためのパラメータ削減技術を2つ示しています:
- 埋め込み行列を2つの小さな行列に分割する。
- グループ間で分割された繰り返し層を使用する。
論文の要旨は以下の通りです:
自然言語表現の事前学習時にモデルのサイズを増やすと、下流タスクのパフォーマンスが向上することがしばしばあります。しかし、ある時点でさらなるモデルの増大は、GPU/TPUのメモリ制限、長い訓練時間、予期せぬモデルの劣化といった問題のために困難になります。これらの問題に対処するために、我々はBERTのメモリ消費を低減し、訓練速度を高めるための2つのパラメータ削減技術を提案します。包括的な実証的証拠は、我々の提案方法が元のBERTに比べてはるかによくスケールするモデルを生み出すことを示しています。また、文間の一貫性をモデリングに焦点を当てた自己教師あり損失を使用し、複数の文が含まれる下流タスクに一貫して助けとなることを示します。その結果、我々の最良のモデルは、BERT-largeに比べてパラメータが少ないにもかかわらず、GLUE、RACE、SQuADベンチマークで新たな最先端の結果を確立します。
このモデルはlysandreにより提供されました。このモデルのjaxバージョンはkamalkrajにより提供されました。オリジナルのコードはこちらで見ることができます。
使用上のヒント
- ALBERTは絶対位置埋め込みを使用するモデルなので、通常、入力を左側ではなく右側にパディングすることが推奨されます。
- ALBERTは繰り返し層を使用するためメモリ使用量は小さくなりますが、同じ数の(繰り返し)層を反復しなければならないため、隠れ層の数が同じであればBERTのようなアーキテクチャと同様の計算コストがかかります。
- 埋め込みサイズEは隠れサイズHと異なりますが、これは埋め込みが文脈に依存しない(一つの埋め込みベクトルが一つのトークンを表す)のに対し、隠れ状態は文脈に依存する(1つの隠れ状態がトークン系列を表す)ため、H >> Eとすることがより論理的です。また、埋め込み行列のサイズはV x Eと大きいです(Vは語彙サイズ)。E < Hであれば、パラメータは少なくなります。
- 層はパラメータを共有するグループに分割されています(メモリ節約のため)。次文予測(NSP: Next Sentence Prediction)は文の順序予測に置き換えられます:入力では、2つの文AとB(それらは連続している)があり、Aに続いてBを与えるか、Bに続いてAを与えます。モデルはそれらが入れ替わっているかどうかを予測する必要があります。
参考資料
AlbertConfig
[[autodoc]] AlbertConfig
AlbertTokenizer
[[autodoc]] AlbertTokenizer - build_inputs_with_special_tokens - get_special_tokens_mask - create_token_type_ids_from_sequences - save_vocabulary
AlbertTokenizerFast
[[autodoc]] AlbertTokenizerFast
Albert specific outputs
[[autodoc]] models.albert.modeling_albert.AlbertForPreTrainingOutput
[[autodoc]] models.albert.modeling_tf_albert.TFAlbertForPreTrainingOutput
AlbertModel
[[autodoc]] AlbertModel - forward
AlbertForPreTraining
[[autodoc]] AlbertForPreTraining - forward
AlbertForMaskedLM
[[autodoc]] AlbertForMaskedLM - forward
AlbertForSequenceClassification
[[autodoc]] AlbertForSequenceClassification - forward
AlbertForMultipleChoice
[[autodoc]] AlbertForMultipleChoice
AlbertForTokenClassification
[[autodoc]] AlbertForTokenClassification - forward
AlbertForQuestionAnswering
[[autodoc]] AlbertForQuestionAnswering - forward
TFAlbertModel
[[autodoc]] TFAlbertModel - call
TFAlbertForPreTraining
[[autodoc]] TFAlbertForPreTraining - call
TFAlbertForMaskedLM
[[autodoc]] TFAlbertForMaskedLM - call
TFAlbertForSequenceClassification
[[autodoc]] TFAlbertForSequenceClassification - call
TFAlbertForMultipleChoice
[[autodoc]] TFAlbertForMultipleChoice - call
TFAlbertForTokenClassification
[[autodoc]] TFAlbertForTokenClassification - call
TFAlbertForQuestionAnswering
[[autodoc]] TFAlbertForQuestionAnswering - call
FlaxAlbertModel
[[autodoc]] FlaxAlbertModel - call
FlaxAlbertForPreTraining
[[autodoc]] FlaxAlbertForPreTraining - call
FlaxAlbertForMaskedLM
[[autodoc]] FlaxAlbertForMaskedLM - call
FlaxAlbertForSequenceClassification
[[autodoc]] FlaxAlbertForSequenceClassification - call
FlaxAlbertForMultipleChoice
[[autodoc]] FlaxAlbertForMultipleChoice - call
FlaxAlbertForTokenClassification
[[autodoc]] FlaxAlbertForTokenClassification - call
FlaxAlbertForQuestionAnswering
[[autodoc]] FlaxAlbertForQuestionAnswering - call