Open yoheikikuta opened 2 months ago
GPT-1 論文と同様に、過去に軽く目を通したことはあるけどちゃんと読もうと思い読んでみる。
GPT-1 論文と同様に、arXiv や conference には論文がなく、OpenAI が自社のウェブサイトで共有しているもの https://openai.com/index/better-language-models/
GPT-2 のモチベーションは GPT-1 での発見である、ゼロショットでのタスク性能がモデルサイズ(論文では capacity という単語を充てている)に依存する、をより押し進めてより巨大なデータでゼロショットでのタスク性能の向上を図りたいというものになっている。
データとしては数百万のウェブページからなる新しいデータセット「WebText」を構築していて、モデルは 1.5 B パラメタ数の Transformer を使用していて、言語処理タスクとしては文章中の単語予測などの 8 つのタスクを準備している。
これらのポイントを詳しく見ていく。
Introduction のところで興味を引くのはこの部分か。 マルチタスク学習の文脈で、(データセット、目的)というペアで学習をして複数のタスクを同じようなフォーマットで扱うようにして性能を向上させるという部分。これは、メタ学習の観点からは、データセットと目的の分布からサンプリングされたものになっている。
Recent work reports modest performance improvements (Yogatama et al., 2019) and the two most ambitious efforts to date have trained on a total of 10 and 17 (dataset, objective) pairs respectively (McCann et al., 2018) (Bowman et al., 2018). From a meta-learning perspective, each (dataset, objective) pair is a single training example sampled from the distribution of datasets and objectives.
これくらいの時期から、自然言語処理のタスクを同一の枠組みで扱うことでモデルアーキテクチャをいじらずにさまざまなタスクが解けるようになったという研究が多くなっている。T5 とかも 2019 年だしね(arXiv の v1 が10月だから GPT-2 と比べると結構先だけど)。
GPT-1 とか GPT-2 とかはデータの作り方を工夫して質問応答とか予測とかを同じアーキテクチャで扱えるようにしてるけど、これが発展していって自然言語なんだから自然言語で指定してあげればいろんなタスク解けるよねという T5 とかに代表されるより柔軟な方向へと発展していくことになる。
アプローチに関しては本質的には GPT-1 と同じだけど、もう少し定式化や関連する情報が整理されている。
教師なしの言語モデルの事前学習はいいとして、downstream task の定式化は p(output|input, task)
とモデル化すべきことを指摘している。これ自体はまあそうという話ではあるが、GPT-1 の論文でも書かれていたように過去はアーキテクチャレベルで task の違いを取り込んでいたが、これをモデルアーキテクチャは同一にして、タスクの方を翻訳なら (translate to french, english text, french text)
で読解なら (answer the question, document, question, answer)
みたいな 3 つ組で表現すれば解けるということをしたのが https://arxiv.org/abs/1806.08730 の論文(この論文では question, context, answer という 3 つ組で定式化している)。
学習データをこの 3 つ組表現を一つのテキストの中に入れることを考えれば、このようなタスクは教師あり学習でなくて言語モデルの教師なし学習で学習することも原理的には可能である。 教師なしの場合は文章全体を使って next token prediction を使って学習するもので、これは教師ありの場合は answer の部分だけ予測するものだと考えれば、後者は前者の subset なので global minimum は一緒だ、というロジックである。 予備実験では、十分に大きな言語モデルが、この(教師ありの質の良いデータのみを教師なし学習に使っているという意味で) toy-ish な設定でマルチタスク学習を行うことができることが確認されましたが、学習は明示的な教師ありアプローチに比べてはるかに遅かった、と述べている。
学習は大変だけどやれそうなので、大規模なモデルで、対話などと比べて相対的に低コストで集められる大規模なインターネットのデータを使って教師なし学習を実施してゼロショットでのタスク性能を調べることで、この議論がどれくらい現実の language in the wild
で実現できるかを調べることができる。
学習データセットに関して。
インターネット上の多様で大規模なデータといえば Common Crawl https://commoncrawl.org/ だが、これはデータ品質の問題で回避している。先行研究ではこのデータ品質を “whose content are mostly unintelligible”
と評している。ワロタ、という感じだがまあ無作為に集めたらそうなるよな。
ちなみにこの論文でも初期に Common Crawl を使った初期の実験で同じように品質の問題を観測したと言ってるので、最初はこれで試してみてダメそうなので自分たちでデータを構築したという流れなのだろう。
どうやって品質を上げるのかといったらこれはもう人間による評価を入れる方向だが、全部人間がチェックするのは非現実的なので、Reddit で少なくとも3カルマ(upvote されたら増えて downvote されたら減るポイント的なもの)を得たすべての外部リンクをスクレイプした、と言っている。
これで得られたデータには 4500 万件のリンクのテキストで、以下で前処理などをして初期バージョンの WebText を構築している。
データリークを避けるために Wikipedia のデータを削除しているというのはなるほどと思う一方で、とはいえ Reddit のリンクの中にもリークに相当するものは含まれるだろうし、これだけ大規模なものだともはやリークは避けきれないと思う。
入力文章の tokenization に関しては結構面白いことが書いてある。
まず、Unicode文字列をUTF-8バイトのシーケンスとして処理してこれを基に語彙を作っていくのは単純さの観点から有望(この論文には書かれてないけどトークン数が多くなるというネガティブな点はある)だが、単語レベルの言語モデルと比べて性能が優位に落ちてしまうので採用しない。この論文でも試してみたけど同じように性能がイマイチだったと報告している。
次に BPE で、オリジナルは真に Byte Pair だったが、その後自然言語処理で使われるようになって Byte Pair じゃなくて Unicode code point Pair なのが多いねと書いてる。こういうのを改めてちゃんと書いてる文章を見たことが少ないのでいいねってなった。
Despite its name, reference BPE implementations often operate on Unicode code points and not byte sequences.
全ての Unicode 文字を辞書に登録するとそれだけで 130,000 とかでここから複数文字とかを加えていくと、標準的に使われる 32000 ~ 64000 という語彙を考えると多すぎるのでこれはなし。 全て Byte レベルで扱って BPE をすると、dog, dog., dog!, dog? などをそれぞれ辞書登録してしまい、これはいかにも最適ではない。
上記踏まえて、GPT-2 での BPE は、バイトレベルから始めるが、て文字カテゴリを超えて結合するのは防ぐという形を採用している。 スペースについては例外で、単語が複数の語彙にまたがって断片化されるのを最小限に抑えつつ、圧縮効率を大幅に向上させると述べている。
このスペースについての表記はやや混乱をするところだが、たとえば I am
という表記を考えるときに、これはスペースを挟むが スペースが出たらそこで明確に分割することでI a
とm
のように分割されることを防ぐという意味である(この例はそんな風に分割される可能性は低いだろうが)。この論文のtokenizeではこのようなケースではスペースは後ろの単語とのペアを考慮されるようになっており、I
とam
に分割される(amの前にスペースが入っている)。
バイトレベルで BPE をやるというのがごちゃごちゃ小難しいことをやらずにあらゆるテキストを扱うんだ、という意図を感じる。
モデルは基本的に GPT-1 のもの https://github.com/yoheikikuta/paper-reading/issues/70#issuecomment-2362959731 と同様だが、いくつか修正を加えている。
1 / \sqrt{N}
$ 倍($N
$ は residual layer の数)して、モデルを深くすることで residual path が積み重なる分を考慮した<|endoftext|>
を追加。これで 50257 個になる。モデルに関しては以下のように 4 つのサイズを試してモデルサイズによる違いを検証している。 一番小さいモデルは GPT-1 相当、次に小さいモデルは BERT 論文 https://arxiv.org/abs/1810.04805 の BERT Large (パラメタ数 3.4 億)相当、最大のモデルが GPT-2 (パラメタ数 15 億程度)で billion レベルまで来ている。 学習率は WebTextの5% のデータで perplexity が最も良くなるように手動で調整したとのこと。
データセットの内容は後で解説されるが、1BW (one billion word benchmark) 以外では zero-shot での性能で SOTA を達成している。 興味深い一文として、すべてのモデルはまだ WebText のデータを過学習できるほど学習が回せておらず、学習時間を長くすればもっと perplexity が改善されると述べている。
期待通りではあるが、Penn TreebankやWikiText-2のような学習トークンが100万から200万しかない小規模データセットで大幅な改善をしている。 また、長距離依存性が重要になる LAMBADA や the Children’s Book Test でも改善幅が著しい。
唯一 1BW は最大のデータセットであり、sentence の shuffle をするという長距離依存を壊す前処理をしていてモデルとの相性が悪いため、性能を大幅に下げている。 このデータセットの論文 https://arxiv.org/abs/1312.3005 で shuffle しているので sentence boundaries を超えて依存性を獲得するようなモデルには有用ではないと明言している。 モデルが長距離コンテキストを強く獲得していることを強調したいからこそ、あえてこのように性能が低くなるデータセットを準備しているということが伺える。
言語モデルについては、BPT-2 ではバイトレベルで扱っているので、tokenization は lossless であるとともにあらゆるベンチマークで評価することができる。 言語モデルの評価については負の対数尤度を canonical units (文字や単語やバイト) 単位で計算して方向することが多く、GPT-2 ではバイト単位なので、バイト単位で対数確率を計算してバイト数で割るという規格化をしている。別に特別なことは言ってなくて、平均対数確率の単位としてバイトレベルで扱うということを述べている。
評価の際には out-of-distribution の状況下で評価できている。評価時に具体的にどんなことが起こるかというと以下
この論文ではこういう artifact などを可能な限り取り除く invertible な de-tokenizer を使って table3 の結果を計算していると述べている。これはモデルの de-tokenizer の話ではなく、上記のようなデータセットの処理の話である。 invertible な de-tokenizer なので変わらず対数確率の計算は可能であり、これは様々なデータセットを前処理によって WebText で学習したモデルに適用しやすくするという意味で domain adaptation の簡単な形式になっている。 これによって GPT2 の perplexity が 2.5 ~ 5 point 上昇したと述べている。
この辺りは、一般にそれぞれ異なる目的で作られているデータセットをうまく扱うための前処理の重要性を感じさせる記述である。 ただ、invertible な de-tokenizer というのがどこまでやっているかは詳しくは書かれてない。スペースを入れる処理などは一定対応ができると思うが、標準化や sentence shuffle などは一般に不可逆なのでこれをやるには元のデータが必要だったりして必ずしもデータセットにはその情報がないはずなので、ナイーブにはやれていることはそこまで多くないと思う。 一方で、perplexity の gain の度合いを考えるとかなり効果があるので、色々データを集めてきて頑張って色々やっていそうな感じもする。
ここからは個別のデータセットとそれに対する結果の評価。
https://arxiv.org/abs/1511.02301 固有名詞、名詞、動詞、前置詞など、さまざまなカテゴリーの単語に対する言語モデル(LM)の性能を評価するために作成されたもの。perplexity ではなく accuracy が評価指標で、欠落した単語に対して10個の可能な選択肢の中から正しいものを予測するもの。 具体例は以下。
言語モデルの予測としては、各選択肢と、その選択肢を条件とした残りの文の確率を計算し、最も高い確率のものを予測する。
データの分析で The Jungle Book by Rudyard Kipling
が WebText にも含まれていることがわかったのでこれは除いている。
PTB スタイルの tokenization artifact (これは上の方の説明でも出てきた、句読点や記号が出てきたときにスペースを入れる処理) を除いている。
結果は以下の通りで、人間に対してあと数ポイントというところまで来ている。 2024 の感覚だとへ〜人間に勝ててないんですねまだまだですね〜という感じだが、2019 ではこれはもうすぐ人間に勝てちゃうじゃん!という感じだろう。
https://arxiv.org/abs/1606.06031 人間が正しく予測するために少なくとも50トークンの文脈を必要とする文の最後の単語を予測するというもので、長距離依存関係が重要になるもの。 具体例は以下。論文の最初に出てくる例だけど重めの話だな......
Context: “Yes, I thought I was going to lose the baby.” “I was scared too,” he stated, sincerity flooding his eyes. “You were ?” “Yes, of course. Why do you even ask?” “This baby wasn’t exactly planned for.” Target sentence: “Do you honestly think that I would want you to have a ___ ?” Target word: miscarriage
性能は先ほどの表の通りだが、GPT-2 のエラー分析で、意味としては有効な予測を出すが、文章の最後としては有効でない予測をしているとわかった。これは具体例が書かれていないが、例えば、名詞で終わりにしたい target sentence に対して冠詞 + 名詞と続けていくことを想定して冠詞を出すとか、形容詞 + 名詞と続けていくことを想定して形容詞を出すとか、そういう類のものだろう。
データセットとして最後の単語を予測するというものなので、その制約を近似的に取り込むために予測する単語に対して stop-word filter を適用したと書いてある。具体的に何を入れたかは書いてないが、冠詞を除くとかそういうことをしていると思われ、これによって 10 pt くらい acc が向上したとのこと。 こういうのは決まったデータセットに対する性能を引き上げるという意味では効果的だし、自分が興味ある問題に応用するためにも重要だよな。
過去の SOTA acc は 59.23 だけど、LM で解いていた(つまり zero-shot では)場合は 19% https://arxiv.org/abs/1807.03819 だったということで、zero-shot での性能が圧倒的に向上している。
https://arxiv.org/abs/1808.07042 7つの異なるドメインからの文書と、その文書に関する質問者と回答者の自然言語での対話のデータセットで、読解力だけでなく「なぜ?」のような会話の履歴に依存する質問に答えられる必要がある。 データの中身の具体例はこんな感じで Answer の部分をモデルに予測させる。
これは先ほどの結果のまとめの表に載っていないが、F1スコアで 55 であり、SOTA の BERT は F1 スコアで 89 でまだ差が大きい。 エラー分析で、例えば「誰」という質問に対して文書から名前を引っ張ってきて答える検索的な振る舞いをしていることが示唆されているとのこと。
https://arxiv.org/abs/1602.06023 具体的なデータは以下で、entitiy が匿名化されているので見づらいがテキストとその grount truth の要約が与えられている。
GPT-2 では記事の後に「TL;DR:」というテキストを追加することで要約をすることを把握させている。 top-k (k=2) ランダムサンプリングで100トークンを生成し、最初の3つの生成文を要約として使用している。
ROUGE で評価した結果が以下。 性能としては元の文章から random に 3 つの文章をピックアップしたものからそう違いはなく、記事の最近の内容に焦点を当てたり、事故に関与した車の台数や、ロゴが帽子にあったのかシャツにあったのかといった具体的な詳細を混同したりしていたとのこと。
性能は大したことがないけど、ここでの結果で重要なのは TL;DR:
のように自然言語でタスク固有の問題に合わせた回答に誘導できるということで、prompt engineering の走りみたいなことになっているというところだろう。
english sentence = french sentence
という形で prompt を構築して、予測するときには english sentence =
でモデルに出力させている。これなんかは明確に prompt engineering をしていて、詳細は書いてないけど何かしらの例文を与えて翻訳させている。
性能は現状の SOTA には全然及ばないが、意図的にWebTextから非英語のウェブページを削除していて、フランス語のデータはわずか10MBしか検出されなかった中で一定まともに動いているのは驚きだと述べている。
これも翻訳と同じように prompt engineering をして、質問と回答の例を埋め込んだ上で質問を与えて回答させるということをしている。 このタスクも SQUAD の性能は SOTA に比べれば全然低いが、モデルが高い予測確率で回答ができている1%の質問に対しては63.1%の正解率を出しており、もっと色々ちゃんとわかってくれるまで学習すれば性能が高まることを期待させる結果になっている。
自信もって答えている top 30 が以下で、確かに結構当たっている。 N クラス分類問題だとモデルの予測は N 個しかないので自信満々に高い予測確率で予測して間違えるということは珍しくないが、生成モデルの場合は出力のバリエーションは指数的に増大していくので、自信もって高い予測確率で予測しているのは本当に尤もらしくなっている、というのはなるほどと思った。
これらの結果を表にしたものが以下。 言語モデル的タスクは圧倒的な性能で、そうではない多様な NLP タスクにおいても zero-shot (厳密には prompt で few shot にしているものもあるが) でモデルサイズとともに性能を向上させられることを示している。
これだけでかいデータセットを作るとデータの重複は避けらないので、それがどの程度かを調べている。 大文字を小文字に統一するなど正規化前処理をして 8-gram で重複を検出するフィルター(8 であるのは誤検出率が 1 / 10^8 以下にするという条件で決めた)で、データセットの重複を調べた結果が以下。
WebText の重複もあるけど、それよりも同一データセットでの学習/テストの重複が大きいことが分かる。
これは本文では . Somewhat surprisingly
と書いてるが、自分たちで大きいデータセットを準備すると重複云々言われるけど、よく使われるデータセットの方が目も当てられないじゃないか!という心の声が聞こえてきそうだ。
データセットによってもちろん異なるが、重複しているデータはスコアが数 point は改善していて、こういう実験結果は少なくともそれくらいは差っ引いてみるべきであることを教えてくれる。
overfit の可能性を見るために、WebText の学習とテストデータでの言語モデル学習の perplexity を比較しているが、以下のように類似していて、これはまだ overfit してないのでもっと性能が向上しそうなことを示唆している(実際に論文に出した以降も学習をして perplexity が減少していることを報告している)。
そして、将来につながる非常に興味深い一文がさらっと書かれている。
GPT-2 is also able to write news articles about the discovery of talking unicorns. An example is provided in Table 13.
table 13 は以下。 cherry pick しているとは書いてるけど、これは試してみて非常にワクワクした結果だろうなと思う。 自由に生成した文章を評価するのは簡単ではないのでこの論文では軽く紹介しているのみだけど、軽くでもここに書くというところにその先の大きな可能性を感じていたのだろうなと窺わせる。
これを含めてこの論文には Appendix に色々な例が載っているので眺めてみると面白い。
Related Work の部分で印象的なところは 2 つ。
1 つは大規模化のところで、他の研究でも示されているしこの論文でも示したように、パラメタ数が 10 億を越す領域においても性能向上が継続していること(タスク間のばらつきはもちろんあるが)。 これはのちのスケーリング則の布石というかそういう方向にもっと進める研究が出るはずだなということを確実視させるものになる。
もう 1 つは https://arxiv.org/abs/1801.10198 の論文の結果で、Wikipedia の英語記事を生成するために学習したモデルが、異なる言語間で名前の翻訳にも有効だったという結果にインスパイアされたと述べている。 大規模言語モデルの事前学習の汎化性能は強力である、ということはこのタイミングでも一部の人々の中には確信に近いものがあったのだろう。
Discussion のところではやはりこの文章がポイントか。 この論文自体でも色々調べているし非常に示唆的というわけではないが、これまで半教師あり学習が強力だったところを、教師なし学習だけでもっと高性能に色々解けるようになるのだろうということが期待できる。 要約のようなタスクではこの時点ではまだ全然実応用に耐えるレベルではないが。
These findings potentially help explain the widespread success of pre-training techniques for down-stream NLP tasks as we show that, in the limit, one of these pre-training techniques begins to learn to perform tasks directly without the need for supervised adaption or modification.
また、以下のように fine-tuning もしてみる予定だと述べている。
we plan to investigate fine-tuning on benchmarks such as decaNLP and GLUE,
この結果は調べてもわからなかったが、公式のページでは人間のフィードバックによる fine-tuning について記事にしている: https://openai.com/index/fine-tuning-gpt-2/ ここでの性能は目を見張るほどのものというわけではないが、強化学習の枠組みが重要になるだろうというビジョンを持って実験をしている。 このブログ記事程度のレベルだとこの方向性で世界が変わるとは全然思えない。 ベースとしての更なる大規模化に加えて RLHF で圧倒的なモデルを作れるという未来になることを知っているから大事だねと分かるけど、この段階で強化学習の価値を信じているならなかなか凄いね。
ということで一通り読んだ。
GPT-1 は Transformer Decoder が強い!(もちろん zero-shot task に関しても言及して実験してるのは偉いんだけど)という印象が強いけど、GPT-2 の論文はその後の GPT-3 へのつながりを感じさせるような示唆的な記述が色々あったりして読んでて面白い論文だった。
論文リンク
https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
公開日(yyyy/mm/dd)
2019/02/14
概要
GPT-2 の論文。 15 億というパラメタ数の言語モデルである GPT-2 をウェブから大規模に集めた WebText というデータセットで事前学習した結果、言語モデリングのセットアップが適しているデータセットの 8 個のうち 7 個で教師あり学習を含んだ SOTA よりも良い性能を出した(性能が低い One Billion Word Benchmark は sentence が shuffle されていて長距離コンテキストを学習する場合は不適切なので、これが低いのは期待通り)。 その他の NLP タスクにおいても zero-shot で性能を検証し、モデルを大規模化することで性能が継続的に向上していくことも示した。要約とかは全然まだまだというレベルでもあるが、それでも
TL;DR:
とつけることでタスクに適した出力になるように誘導できることなど、モデルの柔軟性を明らかにしている。 この論文自体は生成について述べている論文ではないが、少しだけ架空のトピックに関する文章生成でも人間が読んで面白い文章を生成できることも示しており、今後の生成モデルの発展を予感させるものになっている。公式実装: https://github.com/openai/gpt-2