🐙

GPT-2を理解したい

2022/11/24に公開

GPT-2[1]を理解したい記事です。

GPT-2は一言でいえば超巨大なGPTです。論文タイトルにある通り、教師なしでマルチタスクが実行可能であることを示した論文になります。

GPT-2モデルの凄いポイント

  • Webtextというデータセットを自分たちで作ってしまった。
  • モデルが巨大(ちなみに、GPT-3はさらに桁違いに巨大)
  • ゼロショット設定で様々なタスクをこなせることを示した。

背景

GPTによって、モデルのアーキテクチャを変えることなく様々なタスクを実行できることが証明されました。
しかし、GPTはファインチューニングを必要とする点で完全な教師なし学習ではありませんでした。

GPT-2は、

  1. モデルの構造を変えることなく様々なタスク実行できること
  2. 完全な教師なしで様々なタスクを実行可能であること

の2つを実現しようとしたモデルです。

行っていることはほとんどGPTと同じなのですが、学習に使用したデータセットとアーキテクチャが少し異なります。

順に見ていきましょう。

WebTextデータセット

学習に使用したデータセットはWebTextというデータセットで、OpenAIが独自に作成したデータセットです。

4500万リンクから作成した800万件以上の文書からなり、容量は40GB程あります。

我々一般人にWebTextデータセットを使うことはできませんが、WebTextデータセットを再現しようとする試みは幾つかあるようなので、リンクを貼っておきます。

https://github.com/jcpeterson/openwebtext

https://skylion007.github.io/OpenWebTextCorpus/

詳細は調べていないので、利用する際はライセンスに気を付けてください。

アーキテクチャ

Layer noramlizationの位置

GPT-2をGPTと見比べてみると、layer normalizationの位置が異なっています(下図)。

また、最後のLinear & Softmaxの直前にもlayer normalizationが追加されています。なぜこのようになったかは論文に明記されていませんが、この方が性能が良かったという事なのでしょう。


左:GPTモデル([2] Figure 1 より引用・抜粋)、右:GPT-2モデル。Layer normalizationの位置が変わっていることに注意

また、[1]では12x、24x、36x、48xの4つのモデルで検証しており、12xが先行研究であるGPTモデルに相当します(構造は少し変わっていますが)。

48xが我々が呼んでいるところのGPT-2になります。

Residual layerの重みの初期化方法

モデルの深さによるresidual pathの蓄積を考慮するため、residual layerの重みを 1/ \sqrt N でスケーリングします。ここで、N はresidual layerの数です。

これ以上のことは論文に書かれておらず、詳細は不明ですが、GPT-2を使うときには通常気にするはありません。

なぜなら、事前学習が終わっているので、zero-shotで使う場合はもちろん、ファインチューニングする時にも重みの初期化は関係ないからです。

huggingfaceのissueでもこの重みの初期に関する質問がありました。

https://github.com/huggingface/transformers/issues/2158#issuecomment-565639081

Hi, this is for the initialization. We don't have any scripts that show how to pretrain GPT-2 (therefore no need for initialization), only scripts to fine-tune it from a checkpoint.

と返答されていることからも、実際にどのように初期化が行われているのか情報は無いようです。もし知っている方が居たら教えて頂けると嬉しいです。

トークン化

Byte Pair Encoding (BPE)[3]

言語モデルでは、モデルへの入力表現を得るためにトークン化などの前処理行います。

GPT-2ではByte Pair Encoding (BPE) という前処理を行っています。BPEはデータ圧縮技術として古くから知られており、データ列の中で頻度の高いバイトのペアからを未使用のバイトに置き換えることをペアが無くなるまで繰り返すお手軽な方法です。

当時の言語モデルではByte Pairとは名ばかりで、実際には文字もしくは文字列のペアを用いることが多かったようです[3]。

実はGPTでも使われていたのですが、

We used a bytepair encoding (BPE) vocabulary with 40,000 merges

と特段の説明がなかったので割愛していました。

GPT-2では、本当の意味でBPEを行います。

BPEの実行手順概要

  1. コーパスに含まれる全ての文字を取り出してボキャブラリを構築する
  2. 単語ごとに文字のペアのコーパスにおける出現頻度をカウントする
  3. 最も出現頻度の高い文字ペアを結合してトークン化し、ボキャブラリに追加する。
  4. 2に戻って所望のボキャブラリサイズになるまで繰り返し。

なお、実際にエンコーディングするときは、ボキャブラリに存在しない文字に遭遇することが多々あります(例えば絵文字など)。これに対処するために、ボキャブラリに存在しない文字を"[UNK]"(Unkownの略)に置き換える事で対処します。ただ、実際の学習ではユニコード文字全てをカバーする必要があり、ボキャブラリが巨大になることは想像に難くありません。

そこで、GPT-2ではバイトレベルのBPEを行います(本当の意味でのBPE)。これにより、トークン化実行前のベースとなるボキャブラリは256にまで削減されます。ただし、バイトレベルのBPEをそのまま用いると、"dog"のような一般的な頻出単語はバリエーションが多く(dog!, dog?など)、ボキャブラリが冗長になります。GPT-2ではこれを防ぐために、空白文字を特別扱いし、文字カテゴリをまたいだマージが起きないようにしているとのことです。

文字カテゴリが何なのか説明はありませんでしたが、例から察するに「!」や「?」と単語に登場する文字を分けて考えるということだと思います。

Hugging Faceで非常に丁寧に解説してくれているので、詳細はこちらを参照してください。

https://huggingface.co/course/chapter6/5?fw=pt

ゼロショット予測の結果

下図はゼロショットでの自然言語処理タスクの結果を示しています。


[1] Figure 1より

SOTAには及ばないもののQuestion Answering以外でそこそこの性能が出ています。そして、まだ曲線がsaturationしていないことからパラメータを増やせばさらなる性能向上が期待されます(GPT-3への布石)。

他にも様々なデータセットで実験しています。下図がその結果です。


[1] Table 3より

表を見てわかる通り、1BW以外全てでGPT-2がSOTAを達成しました。1BWで全然性能が出なかったのは、巨大なデータセットだったことと、破壊的な前処理(センテンスレベルのシャッフル)が原因だろうと筆者らは考察しています。

それぞれのタスクについては本記事の最後に記載しました。

まとめ

冒頭で述べた通り、GPT-2ゼロショット設定で様々なタスクをこなせることを示しました。その結果は、8つのデータセット中7つでSOTAを達成するという圧倒的な結果となりました。それだけにとどまらず、学習に使用したWebTextデータセットに対してはまだアンダーフィットしている状態であることが示されています。


[1] Figure 4より

つまり、モデルをもっと巨大にすれば性能が向上することが示唆されており、後継モデルであるGPT-3の開発へ繋がっていきます。

付録

Children's Bool Test (CBT) [4]

Children's Book Testは児童書を元に作成されたデータセットで、言語モデルがどれだけ広い言語的文脈を利用できているか測定するために以下のようなテストを行います。

  1. context から20個の連続した文 S を抽出します。
  2. S に続く21文目の任意の1単語 a を削除し、この文を設問 q とします。
  3. context内に含まれる10単語(a を含む)の候補 C をモデルへ渡し、削除された単語を予測させます。

[4]では下図の例で説明されています。


[4] Figure 1より

左がcontextで、青が S ですね。右側は上記で説明した S, q, C, a が対応します。

LAMBADA [5]

LAMBADAは context (平均4.6文)と target\;sentence からなる節から構成されています。

contextのサイズは target\;sentense の前にある完全な文のうち、最低で50個のトークンを含む最小のサイズです。

contexttarget\;sentence が与えられたとき、最後の単語(target\;word)を予測するのがLAMBADAのタスクになります。

以下が抜粋した例です。


[5] Figure 1より抜粋。contextにtarget wordが出現する場合は、当該単語がアンダーラインでハイライトされています。

Winograd Schema Challenge [6]

Winograd Schema (WS) は、質問に対して与えられている2つの選択肢から、1つの正解を選ぶタスクの評価データセットです。[6]では以下の例が挙げられています。

The trophy doesn’t fit in the brown suitcase because it’stoo big.
What is too big?
Answer 0: the trophy
Answer 1: the suitcase

Joan made sure to thank Susan for all the help she hadgiven.
Who had given the help?
Answer 0: Joan
Answer 1: Susan

以下のページから実際の評価セットを取得することができます。日本語や中国語の評価セットもあって面白いです。

https://cs.nyu.edu/~davise/papers/WinogradSchemas/WS.html

Reading Comprehension [7]

パッセージと会話が与えられたときに、会話の中で次の質問に答えるというタスクです。

会話の各ターンに質問とその答えが含まれています。以下がその例です。


[7] Figure 2より

Qが質問Aが答え、Rが根拠です。根拠は質問に答えるためのオプションとして提供されていますが、テスト時には提供されないとのことです。

GPT-2はゼロショットの評価をしていたので、Rは提供されないと考えて良さそうです。

Summarization

[8] で紹介された CNN/Daily Mail Corpusを用いて文書の要約を行っています。

Top-kランダムサンプリングという方法で100トークンを生成し、最初に生成された3つの文章を要約として使用します。Top-kランダムサンプリングは、文生成の各時点で、次の単語として確率の高い k 個を選び、ランダムサンプリングを行う方法です [9]。

以下が例です。


[8] Table 2より

Translation

WMT-14 English-Frenchテストセットを用いて英仏翻訳を、WMT-14 French-Englishテストセットを用いて仏英翻訳を行っています。

https://www.statmt.org/wmt14/index.html

GPT-2で翻訳タスクを行うために、「英語文=フランス語文」という形式の例文ペアでモデルを条件づけて、予測時には「英語文=」というプロンプトを渡します。そしてモデルから貪欲にサンプリングを行って、最初に生成された文を翻訳として使用します。

Question Answering

Natural Questions [10] というデータセットを使って、質問に答えるというタスクの評価を行っています。

Natural Questionsは (question, wikipedia\;page, long\;answer, short\;ansert) から構成されます。

question は文字通り事実情報を求める質問、wikipedia\;page は質問に答えるのに使用可能な情報(ただし、有用かどうかは別)、long\;answer は質問に答えるwikipedia pageの抜粋(例えば段落)もしくはそのページに答えが無いことを示すもの、
short\;answerは質問に対する短い答え、またはyesかnoのどちらかです。

モデルには questionwikipedia\;page を与え、long\;answershort\;answer を予測させます。

参考文献

  1. Radford, A., Wu, J., Child, R., Luan, D., Amodei, D. & Sutskever, I. (2019). Language Models are Unsupervised Multitask Learners.
  2. Radford, A., Narasimhan, K., Salimans, T. & Sutskever, I. (2018). Improving Language Understanding by Generative Pre-Training.
  3. Sennrich, R., Haddow, B. & Birch, A. (2015). Neural Machine Translation of Rare Words with Subword Units. arXiv. https://doi.org/10.48550/arxiv.1508.07909
  4. Hill, F., Bordes, A., Chopra, S. & Weston, J. (2015). The Goldilocks Principle: Reading Children’s Books with Explicit Memory Representations. arXiv. https://doi.org/10.48550/arxiv.1511.02301
  5. Paperno, D., Kruszewski, G., Lazaridou, A., Pham, Q. N., Bernardi, R., Pezzelle, S., Baroni, M., Boleda, G. & Fernández, R. (2016). The LAMBADA dataset: Word prediction requiring a broad discourse context. arXiv. https://doi.org/10.48550/arxiv.1606.06031
  6. Levesque, H., Davis, E. & Morgenstern, L. (2012, May 17). The winograd schema challenge. Thirteenth International Conference on the Principles of Knowledge Representation and Reasoning.
  7. Reddy, S., Chen, D. & Manning, C. D. (2018). CoQA: A Conversational Question Answering Challenge. arXiv. https://doi.org/10.48550/arxiv.1808.07042
  8. Nallapati, R., Zhou, B., santos, C. N. dos, Gulcehre, C. & Xiang, B. (2016). Abstractive Text Summarization Using Sequence-to-Sequence RNNs and Beyond. arXiv. https://doi.org/10.48550/arxiv.1602.06023
  9. Fan, A., Lewis, M. & Dauphin, Y. (2018). Hierarchical Neural Story Generation. arXiv. https://doi.org/10.48550/arxiv.1805.04833
  10. Kwiatkowski, T., Palomaki, J., Redfield, O., Collins, M., Parikh, A., Alberti, C., Epstein, D., Polosukhin, I., Devlin, J., Lee, K., Toutanova, K., Jones, L., Kelcey, M., Chang, M.-W., Dai, A. M., Uszkoreit, J., Le, Q. & Petrov, S. (2019). Natural Questions: A Benchmark for Question Answering Research. Transactions of the Association for Computational Linguistics, 7, 453–466. https://doi.org/10.1162/tacl_a_00276

Discussion