※本記事は、スタンフォード大学のCS224N「NLP with Deep Learning」の「Lecture 9 - Pretraining」の講義内容を基に作成されています。講義の詳細情報は https://online.stanford.edu/courses/c... および http://web.stanford.edu/class/cs224n/ でご覧いただけます。本記事では、講義の内容を要約・構造化しております。なお、本記事の内容は講義の内容を正確に反映するよう努めていますが、要約や解釈による誤りがある可能性もありますので、正確な情報や文脈については、オリジナルの講義映像(https://www.youtube.com/watch?v=DGfCRXuNA2w )をご覧いただくことをお勧めいたします。
講師: John Hewitt(https://nlp.stanford.edu/~johnhew/) Christopher Manning(トーマス・M・シーベル機械学習教授、言語学・コンピュータ科学教授、スタンフォード人工知能研究所(SAIL)所長)
スタンフォード大学の人工知能に関する専門・大学院プログラムの詳細は https://stanford.io/ai でご覧いただけます。
1. はじめに
1.1. 講義の位置づけと概要
こんにちは、CS224Nへようこそ。今日は事前学習(pre-training)についてお話しします。これは現代の自然言語処理への道のりにおける、もう一つの刺激的なトピックです。
私たちは今、5週目に入っています。今回の講義と、Transformersに関する講義、そして木曜日の自然言語生成に関する講義は、これから取り組むべき課題のための総まとめ的な講義となります。課題5は木曜日に公開されます。この講義で扱う事前学習と、自己注意機構とTransformers、そして少し自然言語生成についての内容が課題5でテストされることになります。
そして講義の残りの部分では、最終プロジェクトや将来の仕事、面接、そして知的好奇心に役立つような、現代の自然言語処理における本当に魅力的なトピックについて学んでいきます。
今日の講義は、先週木曜日の自己注意機構とTransformersに関する講義ほど技術的な詳細はありませんが、事前学習の世界とそれが現代の自然言語処理をどのように定義しているかについての概要を提供するでしょう。
1.2. 課題と提出物の案内
課題5は来週木曜日に公開される予定です。また、プロジェクト提案書も次の火曜日が提出期限となっています。プロジェクト提案書は期限通りに提出するよう心がけてください。そうすれば、私たちからのフィードバックを迅速に受け取ることができます。この提案書は、あなたたちの最終プロジェクトに関するものです。
今回の講義と、自己注意機構とTransformersに関する講義、そして自然言語生成に関する講義の内容が、課題5の範囲となります。これらの講義で学ぶ概念は、最終プロジェクトや将来の仕事、面接にも役立つものであり、また知的好奇心を満たすものでもあります。
2. サブワードモデリング
2.1. 有限語彙の問題点
今日のトピックを始めるにあたって、まず単語構造とモデルが受け取る単語列をどのようにモデル化するかについての技術的な詳細から少し話をしていきます。
Word2Vecやこれまで話してきた手法では、有限の語彙を仮定していました。つまり、データを見て、そのデータに含まれる単語を決定することで語彙Vを定義します。例えば「pizza」や「tasty」のような単語があり、それに対して適切に学習された埋め込み表現があります。これらの単語がモデル内で見られるとき、あなたのデータで学習された埋め込みがあるため、これらの単語に何をすべきかを知ることができます。
しかし、何らかのバリエーションを見た場合、例えば「tasty」のタイポや、「Transformerify」のような新しい項目(これは派生形態論と呼ばれるもので、名詞を取り、その名詞により似たものを作る動詞を返すような変形)を見た場合はどうでしょうか。これらは訓練コーパスには出現していないかもしれません。言語は常にこのようなことを行っています。人々は常に新しい単語を作り出し、新しい領域があり、若者たちは常に新しい単語を作り出しています。それは素晴らしいことです。
しかし、モデルにとっては問題になります。なぜなら、有限の語彙を定義しており、これらのそれぞれに対応する語彙内のマッピングがないからです。これまで見てきたデータに基づいて、それらの意味は比較的よく定義されているはずですが、それらを定義する文字列が見てきたものとは少し異なるだけなのです。
ではどうするか?たぶん、これらを「UNK」(unknown)という一般的な未知トークンにマッピングするでしょう。つまり、「何か見たことがないものを見たので、それは常に同じトークンUNKで表現されます」と言うようなものです。これは過去に行われてきましたが、明らかに大量の情報を失うので良くありません。しかし、何かにマッピングする必要があるのです。
2.2. 未知語とUNKトークン
英語では語彙の問題はある程度対処可能ですが、世界の多くの言語ではこれははるかに大きな問題になります。英語は比較的単純な単語構造を持っています。各動詞にはいくつかの活用形しかありません。例えば「eat」、「eats」、「eaten」、「ate」などです。しかし、より複雑な形態を持つ言語では、見る可能性のある語形のセットはかなり複雑になります。
未知語に対して、単に「UNK」という普遍的な未知トークンにマッピングするアプローチは、大量の情報を失うことになるので明らかに良くありません。しかし、何らかの方法で未知の単語を表現する必要があるのです。
この問題はとくに形態的に複雑な言語において顕著です。モデルは入力内の未知の文字列に対して何かしらの処理をする必要がありますが、すべてを同じUNKトークンとして扱うと、単語間の重要な違いや類似性が失われてしまいます。
UNKトークンを使用するときの大きな問題は、異なる未知語がすべて同じ表現を持ってしまうことです。これにより、モデルは単語の部分的な情報からでも推測できる可能性のある有用な情報を活用できなくなります。例えば、見たことのない複合語や派生語であっても、その構成要素から意味を推測できる場合があります。
これらの問題に対処するためには、より柔軟な単語表現方法が必要になります。単語全体を一つの単位として扱うのではなく、単語の構成要素に注目するアプローチが求められているのです。
2.3. 形態的に複雑な言語における課題
英語では単語構造が比較的単純ですが、世界の多くの言語ではこの問題は実質的にずっと大きくなります。例えば、形態的にはるかに複雑な言語では、世界で見られる可能性のある事物のセットは非常に複雑になります。
ここにスワヒリ語の動詞の活用表があります。これには300以上の活用形があります。もし語彙を「文字列の一意な組み合わせはそれぞれ独自の単語にマッピングされる」と定義したら、300の活用形それぞれに独立したベクトルが与えられることになります。これは意味をなしません。なぜなら、300の活用形は明らかに多くの共通点を持ち、意味のある範囲で異なるからです。
すべての活用形が出現するように語彙を巨大にすることは望ましくありません。効率性の理由と学習の理由の両方から見て、これは間違いです。どの単語表現アプローチを使うにしても、形態的に豊かな言語では、すべての可能な単語形態を個別のエントリとして語彙に含めることは非現実的です。これは語彙サイズを膨大にし、計算効率を下げるだけでなく、単語間の形態的・意味的関係を捉えられなくなります。
さらに、モデルがまれな活用形や複合形態を学習する能力も大きく制限されます。なぜなら、それぞれが独立した表現を持つため、共通する部分から情報を共有できないからです。例えば、同じ語根を持つが異なる接尾辞を持つ単語は、関連する意味を持つ可能性が高いですが、完全に別々の表現を与えられるとその関係は失われてしまいます。
2.4. サブワード分割アルゴリズム
私たちが最終的に行うことは、サブワードの構造を見ることです。つまり、すべての単語のセットを定義しようとするのではなく、単語の一部を含むように語彙を定義します。これには単純なアルゴリズムがあります。
まず、すべての文字から始めます。つまり、語彙がすべての文字と、おそらく単語の終わりを示す記号だけで構成されているとすると、将来どのような単語を見ても、その単語を見て「この単語は知らないから、個々の文字に分割しよう」と言うことができます。これでUNK問題はなくなります。どんな単語でも表現できますが、次に隣接する文字の共通のペアを見つけて、「AとBはかなり頻繁に一緒に出現するので、新しい単語AB(サブワード)を語彙に追加しよう」と言います。
同様に、文字のペアを新しいサブワードに置き換えて、語彙項目をたくさん追加するまでこのプロセスを繰り返します。結果として、単語を構成するための共通して一緒に出現するサブストリングの語彙が得られます。
このアプローチは元々機械翻訳のために開発されましたが、その後、現代の言語モデルのほぼすべてで広く使用されるようになりました。
では「hat」と「learn」は私たちのサブワード語彙では十分に出現したため、それら自体が個々の単語になります。これは良いことです。単純な一般的な単語は語彙内の単語として表示されますが、「tasty」はおそらく「TAA」「AAA」「sty」のように3つのサブワードトークンに分割されるでしょう。
私が一単語に見える要素を実際には語彙内で3つのサブワードに分割しているのです。これをTransformerやリカレントニューラルネットワークに渡すと、リカレントニューラルネットワークは「TAA」を単一の要素として扱い、RNNを更新し、次に「AAA」を取り込んでまた更新し、最後に「sty」を処理します。このような構造の処理を学習でき、単に全体の単語「tasty」を見て意味を理解できないよりもはるかに良いのです。
同様に「Transformerify」は「Transformer」と「ify」に分割できるでしょう。このように、役に立たない単一のUNK埋め込みではなく、3つの学習済み埋め込みがあることがわかります。これは非常に有用で、現代のNLPでほぼどこでも使用されています。このアルゴリズムのバリエーションがほぼすべての現代NLPで使用されています。
2.5. サブワードの実践的な利用
サブワード分割を実際に適用する際、いくつかの重要な考慮点があります。まず、分割方法をどのように決定するかという問題があります。私たちのアルゴリズムでは、頻繁に共起する隣接文字列を組み合わせることで語彙を学習しました。実際にトークン化する際には、できるだけ分割を少なくするようにします。つまり、単語を最大のサブワード(最も多くの文字を占めるサブワード)に分割します。
例えば「tasty」が「TAA」「AAA」「sty」に分割される場合、実際のリカレントニューラルネットワークやTransformerの処理においては、各部分が単一の要素として扱われます。RNNの場合、「TAA」を入力として取り込み、RNNの更新を行い、次に「AAA」を取り込み更新を行い、そして「sty」についても同様に処理します。
句読点の扱いについては、基本的に可能な限り処理を少なくし、元のテキストをそのまま反映させるようにします。この時点以降は、テキストが実際にどのように使われるかに近い形で処理することを前提としています。以前のWord2Vecでは句読点のベクトルは不要かもしれないと考えていましたが、今では人々がシステムを使おうとするときに得られるテキストにできるだけ近いものを使うようにしています。実際には、句読点や「...」は独自の単語になる可能性があります。
サブワード分割の利点は、非常に長い単語であっても統計的に頻出するものであれば語彙に含まれるという点です。頻出しないものは含まれません。これをさらに改良するアルゴリズムもありますが、長さに関係なく頻繁に共起するサブストリングを見つけるという直感が正しいアプローチです。
なお、サブワード分割においては、単語をできるだけ少ないサブワードに分割するよう試みますが、非常に短いサブワードと非常に長いサブワードのどちらを優先するかという選択もあります。通常は、シーケンスの長さがTransformerのボトルネックになりやすいため、サブワードの数をできるだけ少なく保つ方が良いとされています。
人はコンテキストの中で単語を使うので、単語の意味はそれが実際に表示されるコンテキストによって定義されるべきです。完全な単語の意味は常に文脈的なものであり、完全な文脈から切り離された意味の研究は真剣に受け止められないのです。
3. 事前学習の動機
3.1. 単語埋め込みからの展開
講義の冒頭で「単語はその周囲の語によって知られる」という引用を紹介しました。これは分布仮説の基本的な考え方であり、単語の意味はその単語が共起する傾向のある単語によって定義される、あるいは少なくとも反映されるというものです。私たちはこれをWord2Vecを通じて実装しました。
同じ人物が、意味がコンテキストによって定義されるという考え方を続ける別の引用もしています。その引用は「単語は実際に使われる文脈の中で現れるので、単語の意味は実際に現れる文脈の中で定義されるべきであり、完全な文脈から切り離された意味の研究は真剣に受け止められない」というものです。
ここでの大きな違いは次のとおりです。Word2Vec訓練時に「record」(r-e-c-o-r-d)という単語がある場合、これに対して1つのベクトル(または2つ)が得られますが、基本的には「record」という文字列に対して1つのベクトルが得られます。このベクトルは、出現するコンテキストから、時に動詞の「録音する」という意味で、時に名詞の「記録」という意味で使われることを学習する必要があります。しかし、この単語埋め込みを使う時、両方の意味が混在した1つのベクトルしか持っていません。
そのため、Word2Vecはそれぞれの意味を「これは記録(動詞)の意味、これは記録(名詞)の意味」と特定して表現することができず、失敗してしまいます。より良い言語表現を構築するには、これまで使用してきたリカレントニューラルネットワークやTransformerなどを使って文脈的な意味を構築する必要があります。
これまで私たちが持っていたのは、事前学習された単語埋め込みでした。その上に、Transformerやリカレントニューラルネットワークのような大きなモジュールがあり、これは事前学習されていませんでした。Word2Vecのような文脈から単語埋め込みを学習し、次に感情分析や機械翻訳、構文解析などのタスクがあり、このモジュールのパラメータをランダムに初期化して、ラベルを予測するよう訓練します。
今日の研究の大きな違いは、すべてのパラメータを事前学習しようとしていることです。私は大きなTransformerを持っており、Word2Vecで単語埋め込みを事前学習するだけでなく、ネットワークのすべてのパラメータを訓練し、言語や下流タスクについてより多くを教えようとします。
3.2. 文脈的表現の重要性
単語埋め込みから文脈的表現へと移行することで、言語の表現能力が大幅に向上します。Word2Vecでは「record」という単語に対して単一の表現しか持てませんでしたが、文脈的表現を使えば、その単語が文中のどこに出現し、特定の入力のどの単語と共に出現するかに基づいて、異なる表現を持つことができます。
Word2Vecは単語の出現文脈から1つの表現を学習しますが、動詞の「record」と名詞の「record」の意味を区別できません。文脈的表現を用いれば、これらの異なる使用例を適切に区別できるようになります。
事前学習されたモデル全体は、言語の強力な表現を提供します。「record」と「record」の意味は、シーケンス内のどこに位置し、特定の入力内でどの単語が共起しているかを知っている文脈的表現では異なります。これに対してWord2Vecは、出現場所に関係なく「record」に対して1つの表現しか持ちません。
また、これはNLPモデルのための強力なパラメータ初期化としても機能します。これまでの宿題では、重み行列をどのように初期化するかなど、自然言語処理システムをゼロから構築してきました。常に「小さな正規分布ノイズ、ゼロに近い小さな値」と言ってきました。ここでは、Word2Vec埋め込みを使用し、それらが構造をエンコードしているように、事前学習によって与えられるパラメータ初期化から機械翻訳システムを開始すると言っています。
さらに、言語の確率分布も得られ、これを使ってテキスト生成などができるようになります。事前学習は基本的に、入力を再構成するというアイデアを中心に展開されます。人間が生成したテキストの列があり、その一部をマスクアウトし、元の入力を再構成するタスクをニューラルネットワークに与えることで、そのネットワークは入力を適切に再構成するために言語や世界について多くを学ぶ必要があるという仮説です。
これは、機械翻訳のような教師あり学習問題になります。例えば「Stanford University is located in」という文章があり、その一部を削除することで自分でラベルを作成しました。入力は「Stanford University is located in [MASK] California」のような破損した文章で、ラベルは「Stanford」や「Palo Alto」です。このような例をネットワークに与え、中央の部分を予測させると、「Stanford University is located in」と「Palo Alto」の間の共起関係について情報をエンコードします。
3.3. 事前学習-微調整パラダイム
事前学習-微調整パラダイムは2つのステップで構成されています。まず最初に、大量のテキストデータを使って言語モデリングを行い、単語の分布P_θ(単語t | これまでのすべての単語)をモデル化します。これには大量のデータがあります。特に英語では膨大な量のデータが利用可能です。ただし、世界の大部分の言語では、このようなデータが非常に少ないという別の問題があります。
言語モデリングだけで事前学習を行うことができます。教師強制(teacher forcing)を使用して、「iro」が与えられたら「goes」を予測し、「goes」が与えられたら「to」を予測するようにlstmやTransformerを訓練します。そして、すべての重みを保存します。ネットワークのすべてのパラメータを保存し、これらのパラメータを使用して言語モデルから生成する代わりに、パラメータの初期化として使用します。
あなたがたの多くは、最終プロジェクトでこの事前学習-微調整パラダイムを使用することになるでしょう。誰かがあなたのために事前学習を行った場合、大量のテキストがあり、単語の分布と世界や言語について潜在的に教えてくれるものについて非常に一般的なことを学習します。次にステップ2では、感情分析などのタスクがあり、ラベル付きデータがそれほど多くない場合、事前学習されたモデルをそのタスクに適応させます。
この方法は、ゼロから訓練するよりも信じられないほど優れた結果をもたらします。直感的には、言語や世界について学ぶという多くの負担を、感情分析用にラベル付けしたデータから取り除き、より一般的なタスクである言語モデリングにその負担を与えるからです。
事前学習-微調整の2段階パラダイムがなぜ役立つのかについて、これはまだ研究が進行中の分野ですが、その直感は次のようなものです。事前学習は、事前学習損失の可能なすべてのパラメータ設定における最小化を試みることで、何らかの開始パラメータLθを提供します。そして微調整プロセスは、勾配降下を通じて微調整タスクの損失の最小値に近づこうとしますが、事前学習プロセスが与えたθhatから始めます。
この初期点が重要なのは、勾配降下のプロセスにおいて、微調整中にθhatの比較的近くに留まる傾向があるからです。θhatから始めて、勾配降下で下り坂を歩いていき、ある谷に到達します。その谷は事前学習パラメータに近いため、多くのことに適していた事前学習パラメータに近い位置にあるため、非常に良い結果になります。
これは、理論と実践が出会う興味深い領域です。最適化の研究者はなぜこれが非常に有用なのかを理解したいと考え、NLPの研究者はより良いシステムを構築したいと考えています。θ_hatの周りの領域は、一般化が良い傾向があります。
事前学習-微調整パラダイムが、より多くの層を追加したり、より多くのデータを追加したりするだけよりも優れている理由は、非ラベルデータ(テキストだけ)の量が、注意深くラベル付けされた映画レビューなどのラベル付きデータよりも桁違いに多いからです。インターネット上には少なくとも5兆語、おそらく10兆語のテキストがあり、ラベル付きデータはおそらく100万語程度です。規模が全く異なるのです。
また、感情分析のような非常に単純なことを学ぶことは、言語モデリングと比較して、広範な設定で一般的に能力のあるエージェントを得ることはできないという直感もあります。今日の映画レビューのスタイルに大量のラベル付きデータを持っていたとしても、明日人々が少し異なるスタイルの映画レビューを書き始めると、システムの性能が低下するかもしれません。一方、幅広いソースやさまざまな人々からの多様なテキストで事前学習すれば、訓練データとは少し異なる新しいテキストにも適応しやすくなります。
4. モデル事前学習の3つのアプローチ
4.1. エンコーダー型モデル
モデル事前学習について詳しく話していきましょう。Transformersの講義では、エンコーダー、エンコーダー-デコーダー、そしてデコーダーについて話しました。ここではデコーダーを最後に扱います。なぜなら、今日使われている最大のモデルの多くは実はデコーダーのみだからです。
まず、これら3つのタイプを思い出してみましょう。エンコーダーは双方向コンテキストを得ます。単一のシーケンスがあり、そのすべてを見ることができます。これは機械翻訳におけるエンコーダーのようなものです。エンコーダー-デコーダーは、双方向コンテキストを得るネットワークの一部分(機械翻訳システムのソース文のような)と、一方向コンテキストを得るデコーダーとがペアになっています。これにより、次のトークンを生成するための言語モデリングのような情報マスキングを持ちます。
デコーダーのみのモデルは、これまで見てきた言語モデルのようなものです。これら3つのモデルクラスすべてに対して事前学習方法があり、それらをどのように事前学習し、使用するかは、特定のアーキテクチャの特性と生産性に依存します。
エンコーダー型モデルから見ていきましょう。言語モデリングについてはかなり見てきましたが、エンコーダーでは言語モデリングを行うことができません。なぜなら、双方向コンテキストを得るからです。ここで「I」にいて次の単語を予測しようとする場合、次の単語を見ることができるので、次の単語を予測することは自明なタスクになってしまいます。
エンコーダーを事前学習するとき、もう少し巧妙にする必要があります。実際には、入力を少し修正し、講義の最初に示した例のように単語をマスクアウトします。「I [MASK] to the [MASK]」のように一部の単語をマスクし、ネットワークにそれらの単語を予測させます。「[MASK]」の位置にあるベクトル表現はその周囲のコンテキスト全体を見て、「went」や「store」といった単語を予測します。
これは言語モデリングに似ていますが、双方向コンテキストがあります。[MASK]に入る単語についてのネットワークの情報を削除し、それを再構築するように訓練します。マスクアウトした単語に対してのみ損失を計算し、勾配を逆伝播させます。
これは、実際の文書Xの確率を学習するのではなく、一部の情報が欠けている破損文書X̃が与えられた場合の実際の文書Xの確率を学習していると考えることができます。エンコーダーの出力として各単語に対応するベクトルのシーケンスを得て、予測したい単語については、その表現の線形変換を行って予測を行います。
4.2. マスク言語モデリング
マスク言語モデリングは、エンコーダー型モデルの事前学習に使われる主要な手法です。この手法では、双方向コンテキストを活用しながら、言語モデリングに似た目標を達成できます。
これにより私たちは非常に人気のあるNLPモデルであるBERT(Bidirectional Encoder Representations from Transformers)に到達します。BERTはマスク言語モデリング目標を普及させた最初のモデルで、この方法で事前学習されたTransformerの重みをリリースしました。これらの重みは、Hugging Faceという会社がリリースしたコードを通じてダウンロードして使用することができます。多くの人が最終プロジェクトでBERTのようなモデルを使用することになるでしょう。それは言語とコンテキストの表現を構築する上で非常に有用なツールだからです。
BERTのマスク言語モデリングの詳細について少し話しましょう。まず、サブワードトークンの15%を取り、それに対していくつかの操作を行います。時には単語をマスクアウトし、実際の単語を予測させます。時には単語を語彙からランダムにサンプリングした別の単語に置き換え、実際の単語を予測させます。そして時には単語をまったく変更せず、それでも予測させます。
この直感は次のとおりです。もし単にマスクアウトされた単語のために中間層でよい表現を構築するだけなら、テスト時に実際の映画レビューなどの実際のテキストにモデルを使用すると、このようなトークンは存在しないため、モデルはあまり良い性能を発揮しないかもしれません。しかし、時には実際の単語、時には間違った単語を予測させることで、マスクのない文に対しても、すべての単語をコンテキスト内で適切に表現できるようになります。これは、いつでもどんな単語でも予測するよう求められる可能性があるからです。
マスク言語モデリングの利点は、モデルが入力の文脈全体を見ることができ、その情報を使って隠されたトークンを予測できることです。これにより、単語の意味や文法的役割についての深い理解を獲得できます。例えば、両側のコンテキストを見ることで、正しい性別の代名詞や適切な時制の動詞形など、文法的に正しい選択肢を選ぶことができます。
また、単語をランダムな単語に置き換えるという戦略は、モデルに入力の一貫性をチェックする能力を与え、意味的に適切でない単語を検出できるようにします。これはモデルが文脈における単語の適切性を理解することを助けます。
これらの工夫により、BERTは単語の深い文脈的表現を学習し、その結果として多くのNLPタスクで大きな成功を収めることができました。特に、双方向コンテキストを活用する能力は、以前の一方向言語モデルや静的単語埋め込みと比較して大きな進歩でした。
4.3. BERTモデルの詳細
GoogleのBERTモデルには、論文から興味深い追加タスクが含まれていました。彼らのモデルには、Transformersの講義で見たような位置埋め込みとトークン埋め込みがありましたが、さらに「セグメント埋め込み」と呼ばれるものも追加されていました。セグメントAとセグメントBという2つの可能なセグメントがあり、BERTはセグメントAに大きなテキストのチャンク、セグメントBにも大きなテキストのチャンクを取得し、「セグメントBはセグメントAの実際の続きなのか、それとも別の場所からランダムに選んだだけなのか」をモデルに尋ねました。
この考え方は、ネットワークに長距離の一貫性について何らかの概念、つまりこちらの大量のテキストとあちらの大量のテキストの間の接続について教えるべきだというものです。実際にはこれはそれほど必要ではないことが判明しましたが、興味深いアイデアであり、類似のアイデアがその後も影響を与え続けています。
ネットワークが言語について多くを学ばなければならないような難しい問題を思いつこうとしていることを理解すべきです。そのような問題を、単にテキストから情報を削除したり、たまたま発生したテキストに簡単な変換を加えたりすることで定義しています。
Googleが定義したこのBERTモデルでは、位置埋め込み、トークン埋め込みに加えて、セグメント埋め込みも使用されました。これらはすべて要素ごとに加算されます。これらの埋め込みをすべて同じ次元にして加算することは、ネットワークのあらゆる層で常に同じ次元数を持つという大きな慣習の一つです。これにより、すべてが非常にシンプルになります。
次文予測タスクについてのセグメントの使用については、一つの懸念点があります。それは多くの例で効果的なコンテキスト長が半分になってしまうことです。事前学習の有用な点の一つは、非常に長いテキストシーケンスの表現を構築できることです。実際には、セグメントAは約250語、セグメントBも約250語になる傾向がありました。このタスクが必要ないことを示した論文では、常に500語の長いセグメントを使用していました。長いコンテキストは、各単語がそのコンテキスト内で果たす役割についてより多くの情報を提供するため有用です。
もう一つの理由は、このタスクが実際には非常に難しく、モデルがそのタスクをうまく実行できなかったため有用ではなかった可能性があるということです。BERTはマスク予測と次文予測の両方を同時に行っていました。次文予測のために、シーケンスの先頭に特別な[CLS]トークンがあり、このトークン上に次文が本物か偽物かを予測する分類器を定義できました。
BERTモデルには2つの異なるバージョンがありました。一つは1億1000万パラメータで、もう一つは3億4000万パラメータでした。これは後でさらに大きなパラメータ数を持つモデルについて話すときに念頭に置いておいてください。BERTは8億語以上(正確には数十億語)のテキストで訓練され、当時としては非常に多くの計算リソースを使用しましたが、現在ではそれほど多いとは考えられていません。1つのGPUでも微調整は実用的で一般的です。
4.4. 次文予測タスク
GoogleのBERT研究者たちは、マスク言語モデリングに加えて次文予測(Next Sentence Prediction、NSP)という追加タスクを導入しました。このタスクではセグメントAとセグメントBという二つのテキスト塊を用意し、「セグメントBはセグメントAの実際の続きなのか、それとも別の場所からランダムに選ばれただけなのか」をモデルに判断させます。
この次文予測タスクの背後にある考え方は、長距離の一貫性、つまりあるテキスト塊と別のテキスト塊の間の関係性についての概念をネットワークに教えるというものでした。多くのNLPタスクはペアのテキストに対して定義されており、研究者たちはこの能力が有用かもしれないと考えました。
BERTの実装では、シーケンスの先頭に特別な[CLS]トークンが配置され、このトークンの表現に基づいて「次の文は本物か偽物か」を予測する分類器が構築されました。このタスクは事前学習と同時に行われ、マスク言語モデリングとは別の予測ヘッドを必要としました。
しかし、後の研究ではこの次文予測タスクは実際には必要ないことが判明しました。その理由のひとつは、多くの例で効果的なコンテキスト長が半分になってしまうことです。事前学習の有用な点のひとつは、非常に長いテキストシーケンスの表現を構築できることです。実際、セグメントAは約250語、セグメントBも約250語になっていましたが、このタスクを使用しない場合、500語の長いセグメントを常に使用できました。
長いコンテキストを持つことは、各単語がそのコンテキスト内で果たす役割についてより多くの情報を提供するため有用です。「record」という単語だけを見ると、それが動詞なのか名詞なのかを知るのは難しいですが、その周りに1000語あれば、そのコンテキストにおける役割はずっと明確になります。
また、最近の研究ではこれらのモデルは次文予測タスクに実際には非常に弱いことが示されています。おそらくこのタスクは当時としては難しすぎたため、モデルがそれをうまく実行できず、結果として有用ではなかった可能性があります。
研究の歴史としては、このタスクが有用だと考えられていましたが、その後誰かが新しいモデルを発表し、このタスクを行わずにより良い結果を出したのです。これは、これらのモデルの訓練についてのベストプラクティスがまだ完全には理解されていないことを示す一例です。
4.5. BERTの拡張: スパンマスキングとRoBERTa
以前、単語をランダムにマスクアウトするかどうかという質問がありました。実際には、連続するスパン(範囲)全体をマスクアウトする方が効果的であることが判明しています。これは、問題の難易度と関係しています。
例えば「irresistibly」という単語の場合、最初の部分「irre」があれば、その前に来る部分に基づいて非常に簡単に予測できるかもしれません。しかし、より長いシーケンスをマスクアウトすると、これはトレードオフになりますが、より難しい問題になり、結果としてランダムなマスキングよりもスパンベースのマスキングの方が効果的になります。これは、単語の一部のサブワードだけをマスクアウトする場合と比べて、単語のすべてのサブワードをマスクアウトする方が、予測問題がより複雑になるためだと考えられます。
また、RoBERTaと呼ばれる論文では、次文予測が必要ないことが示されました。彼らはさらに、BERTをもっと多くのテキストで訓練すべきだったことも示しました。RoBERTaはBERTの代替となるモデルであり、BERTを使用しようと考えているなら、代わりにRoBERTaを使うべきです。それはより優れているからです。
これにより、これらのモデルを訓練するためのベストプラクティスについては、まだ多くのことが分かっていないという直感が得られました。基本的には、時間と計算資源の許す限り長く訓練すれば、良い結果が得られるということです。しかし、これらのモデルが大きく、訓練にコストがかかるため、これらのモデルでの反復実験は非常に難しいのです。
BERTの拡張としてのスパンマスキングとRoBERTaの主な貢献は、事前学習プロセスをより効果的にする方法を示したことです。特にRoBERTaは、次の点でBERTを改良しました:
- 次文予測タスクを完全に排除
- より大規模なデータセットでの訓練
- より長いシーケンスでの訓練
- バッチサイズの動的変更
- より長い訓練期間
これらの変更により、RoBERTaはBERTと同じアーキテクチャを使用しながらも、ほぼすべてのベンチマークでBERTを上回る性能を示しました。これは、事前学習のプロセスと設定が、モデルアーキテクチャ自体と同じくらい重要であることを示しています。
スパンマスキングの導入は特に重要で、これによりモデルはより難しい予測問題に取り組むことになり、結果としてより豊かな言語表現を学習できるようになりました。単一のトークンをマスクする代わりに関連するトークンのグループをマスクすることで、モデルは単語の一部ではなく、概念や句全体を予測する必要が生じ、これがより深い言語理解につながります。
4.6. パラメータ効率の良い微調整手法
最終プロジェクトや今後の実務で知っておくべきもう一つの概念は、ネットワークのすべてのパラメータを微調整するか、一部だけを微調整するかという選択です。これまで話してきたのは、すべてのパラメータを事前学習し、その後もすべてのパラメータを微調整するアプローチです。つまり、すべてのパラメータ値が変化します。
これに対する代替手法として、パラメータ効率的な微調整または軽量な微調整と呼ばれるものがあります。この方法では、パラメータの小さな部分だけを選択するか、ほとんどのパラメータを固定し、一部のみを微調整する賢明な方法を見つけます。
この直感は、事前学習されたパラメータが非常に優れていたため、事前学習モデルから欲しいモデルへの最小限の変更を行うことで、事前学習の一般性や良さの一部を保持したいというものです。
これを実現する一つの方法は「プレフィックスチューニング」と呼ばれるもので、「プロンプトチューニング」も非常に似ています。この手法では、ネットワークのすべてのパラメータを凍結し、パラメータ値を一切変更しません。代わりに、シーケンスの最初に追加する一連の偽の「疑似単語ベクトル」を作成し、これらだけを訓練します。
これは少し直感に反するかもしれません。これらは通常ネットワークへの入力となるものですが、それらをパラメータとして指定し、これらの「偽の単語」の値を変更するだけで感情分析タスクを実行するよう訓練します。これは良いアプローチです。なぜなら、すべての良い事前学習パラメータを保持しながら、この「差分」を指定するだけでより良く一般化できるからです。
また、この方法はより安価です。すべてのパラメータに関して勾配を計算したり、最適化状態を保存したりする必要がなく、非常に少数のパラメータだけを訓練するからです。この分野はまだ活発に研究されています。
デコーダーでは、これらのパラメータをシーケンスの先頭に置く必要があります。そうしなければ、シーケンス全体を処理する前にそれらを見ることができないからです。
もう一つのよく機能するアプローチは、各重み行列を取り、重み行列を凍結し、非常に低ランクの「差分」を学習するというものです。重み行列の値を元の値と私の非常に低ランクな差分の和に設定します。これも同様に有用な手法であり、全体的な考え方としては、事前学習で学習したパラメータよりもはるかに少ないパラメータを学習し、事前学習パラメータのほとんどを凍結するということです。
これらのパラメータ効率の良い微調整手法は、計算コストを大幅に削減するだけでなく、過学習を防ぎ、モデルのロバスト性を向上させることが示されています。特に限られたラベル付きデータしか持たない場合、すべてのパラメータを微調整すると過学習のリスクがありますが、パラメータ効率の良い手法はこの問題を軽減します。
5. エンコーダー-デコーダー型モデル
5.1. スパン破損タスク
エンコーダー-デコーダーモデルについては、言語モデリングのようなことができます。入力シーケンスとエンコーダー出力シーケンスがあり、この前半部分を双方向コンテキストを持つプレフィックスとして使用し、後半部分のすべての単語を言語モデルのように予測することができます。これは問題なく機能します。
長いテキストを取り、それを二つに分割し、半分をエンコーダーに与え、デコーダーで後半を生成するというアプローチは可能です。しかし、実際にはスパン破損(span corruption)と呼ばれる方法の方がはるかに効果的です。これは課題5でも扱うことになります。
スパン破損の考え方はBERTに似ていますが、生成的な意味合いがあります。入力内の多くの単語をマスクアウトし、「thank you [MASK_TOKEN_1] me to your party [MASK_TOKEN_2] week」のようにします。そして出力では、マスクトークンとそれが置き換えた内容を生成します:「thank you for inviting me to your party last week」のように。
これにより、双方向コンテキストを持つことができます。シーケンス全体を見ることができますが、欠けている部分を生成できます。これは、入力の一部をマスクアウトしますが、言語モデリングでするように出力をシーケンスとして生成するという感じです。
このアプローチは、双方向コンテキストを持つ入力と、出力を生成したい機械翻訳のようなタスクに適しています。2018年にGoogleの研究者たちがテストできる規模で、スパン破損は言語モデリングよりも優れた結果を示しました。この手法は現在でも非常に人気があります。
スパン破損による事前学習の興味深い特性の一つは、暗黙的な知識抽出能力です。T5はスパン破損で最初に導入されたモデルで、事前学習時に「Franklin D. Rooseveltは[BLANK]に生まれた」のようなテキストを見て、空白を生成していました。オープンドメイン質問応答と呼ばれるタスクがあり、「Franklin D. Rooseveltはいつ生まれましたか?」のような雑学の質問があり、パラメータだけから答えを文字列として生成することが求められます。
驚くべきことに、このスパン破損法により、事前学習を行い、いくつかの雑学質問の例で微調整した後、新しい雑学質問をテストすると、モデルは微調整時に明示的に見たことのない新しい質問に対して、事前学習データから何らかの方法で暗黙的に答えを抽出できました。常に正しいわけではなく、50%未満の割合でしたが、ランダムな推測よりははるかに良い性能でした。
これは非常に興味深い現象です。事前学習によって蓄積した潜在的な知識にアクセスする方法を学習したのです。モデルに「Rooseveltはいつ生まれましたか?」というテキストを渡すと、答えを出力しますが、答えは常に非常に流暢で合理的に見えるものの、しばしば間違っていることに注意が必要です。これはChatGPTなどの現代のモデルでも同様です。
5.2. T5モデルと暗黙的知識抽出
T5(Text-to-Text Transfer Transformer)は、スパン破損を使って導入された代表的なエンコーダー-デコーダーモデルです。この事前学習タスクの興味深い特性の一つは、モデルが暗黙的な知識抽出能力を獲得することです。
事前学習の過程で、T5は「Franklin D. Rooseveltは[BLANK]に生まれた」のようなテキストを見て、空白部分を生成するよう訓練されました。その後、オープンドメイン質問応答というタスクに応用されました。このタスクでは、「Franklin D. Rooseveltはいつ生まれましたか?」のような雑学的な質問が与えられ、モデルはパラメータだけから答えを文字列として生成することが求められます。
驚くべきことに、T5モデルはこのような質問に対応できました。事前学習を行い、いくつかの雑学的質問例で微調整した後、新しい質問でテストすると、モデルは微調整時に明示的に見たことのない質問に対しても、事前学習データから何らかの方法で暗黙的に答えを抽出できたのです。
もちろん、この能力は完璧ではありません。正解率は50%未満でしたが、ランダムな推測よりは大幅に優れていました。これは、事前学習によってモデルが蓄積した潜在的な知識にアクセスする方法を学習していることを示しています。
この現象は非常に興味深いものです。モデルが「Rooseveltはいつ生まれましたか?」というテキストを受け取ると、答えを出力します。その答えは常に非常に流暢で合理的に見えますが、しばしば間違っていることに注意が必要です。この特性はChatGPTなどの現代の大規模言語モデルでも観察されます。
T5モデルは、テキスト入力からテキスト出力への変換という統一的な枠組みを採用しており、多様なNLPタスクを同じフォーマットで扱えるようにしました。これにより、単一のモデルで要約、翻訳、質問応答、文章補完など、さまざまなタスクを処理できるようになりました。
エンコーダー-デコーダーアーキテクチャは、特に入力を理解する必要があるタスク(双方向コンテキストが重要)と、それに基づいて新しいテキストを生成するタスク(デコーダーが必要)の両方を含む場合に有効です。T5の成功により、現在ではこの種のアーキテクチャが多くのNLPタスクで標準的に使用されています。
6. デコーダー型モデル
6.1. 言語モデリングによる事前学習
次に、デコーダーモデルについて長く話していきましょう。これは私たちの通常の言語モデルです。デコーダーから一連の隠れ状態を取得しますが、モデル化される単語は自分自身だけを見ることができ、未来を見ることはできません。そして次の単語を予測します。
ここでも、感情分析を行うためには、おそらく最後の単語の最後の状態を取り、その最後の埋め込みに基づいてhappyかsadかを予測します。そして勾配をネットワーク全体に逆伝播させ、ネットワーク全体を訓練するか、あるいは先ほど説明したような軽量または効率的なパラメータ微調整を行います。
これがデコーダーを事前学習する方法です。単純に言語モデリングで事前学習できます。このアプローチは、テキストを生成したい場合に適しています。エンコーダー-デコーダーのように使うこともできますが、実際には後で見るように、最も強力な事前学習されたモデルの多くはデコーダーのみの傾向があります。
なぜそうなのかは完全には明確ではありませんが、エンコーダー-デコーダーよりもデコーダーのみの方が少しシンプルだということと、エンコーダー-デコーダーでは一部のパラメータをエンコーダーに、一部をデコーダーに分割する必要があるのに対し、デコーダーのみではすべてのパラメータを一つの大きなネットワークで共有できるという点が理由かもしれません。
講義の残りの部分ではデコーダーのみに焦点を当てます。現代のモデルでも、最大のネットワークはデコーダーになる傾向があります。2018年にOpenAIから発表されたGPTモデルは大きな成功を収めました。このモデルは1億1700万パラメータを持ち、768次元の隠れ状態と、クラスの最初に示したような方法で定義された約4万の単語からなる語彙を持っていました。BooksCorpusで訓練されました。
実は、GPTという名前は元の論文には登場しておらず、正確に何を指すのかは不明確ですが、このモデルが今日聞いているすべてのものの前身となりました。
6.2. GPTモデルの進化
2018年にOpenAIから発表されたGPTモデル(Generative Pre-trained Transformer)は、デコーダー型モデルの代表的な例です。このモデルは1億1700万のパラメータを持ち、時代の先駆けとなりました。
自然言語推論のような複雑なタスクを解決するため、GPTは興味深いアプローチを取りました。例えば「The man is in the doorway(男性は出入り口にいる)」と「The person is near the door(人はドアの近くにいる)」というような文のペアを取り、前提が仮説を含意するかどうかを判断するタスクがあります。GPTはこれらの文を単純に連結し、開始トークン、一つ目の文、区切りトークン、二つ目の文を順に与え、含意関係があるかないかを予測します。この手法でGPTに微調整を行うと、非常に良い結果が得られました。
GPTの後にはBERTが登場し、双方向コンテキストを持つためGPTよりも少し良い性能を示しました。しかし、GPTはその生成能力において素晴らしい仕事をしました。
GPTモデルの進化において重要なステップとなったのは、その次のバージョンであるGPT-2です。GPT-2では、モデルの生成能力に焦点が当てられました。GPTの1億1700万パラメータから、GPT-2では15億パラメータへと大幅に増加しました。あるプロンプト(入力文)に対して、当時としては驚くほど一貫性のある続きを生成することができました。例えば、科学者とユニコーンについての物語を継続して生成することができました。
このサイズのモデルは、小型のGPUでも使用でき、微調整ができるほどの大きさです。長い一貫したテキストを生成する能力は、当時としては例外的なものでした。GPT-2は約90億語のテキストで訓練され、GPTよりもさらに多くのデータが使用されました。
GPTモデルファミリーは、単に大きなパラメータ数を持つだけでなく、言語の確率分布をよりよく捉え、より流暢で一貫性のあるテキストを生成できるように進化しました。これらの進化は、自然言語処理の分野に大きな影響を与え、生成モデルの可能性を拡大しました。
最初のGPTから始まったこのモデル系列は、現在私たちが耳にする最新の大規模言語モデルの基礎となっています。デコーダー型アーキテクチャの単純さと効率性が、これらのモデルの継続的な開発と成功に貢献しています。
6.3. GPT-2の改良と大規模化
GPT-2は、元のGPTに比べて大幅な規模拡大を実現しました。GPTの1億1700万パラメータから、GPT-2では15億パラメータへと約13倍に増加しています。この規模の拡大により、モデルの能力に質的な変化がもたらされました。
GPT-2では、モデルの生成能力に焦点が当てられました。与えられたプロンプトに対して、当時としては驚くほど一貫性のある自然な文章を続けて生成することができるようになりました。例えば、科学者とユニコーンについての物語の一部を与えると、その続きとなる物語を生成することができました。
この規模のモデルは、依然として小型のGPUでも使用でき、微調整が可能なサイズでした。長い一貫したテキストを生成する能力は、当時としては例外的なものであり、自然言語処理の可能性を大きく広げるものでした。
GPT-2の訓練データも大幅に拡大されました。約90億語のテキストで訓練され、これはGPTよりもさらに多くのデータが使用されたことを意味します。より多様で大量のデータに基づいて訓練されたことで、より広範な知識とより自然な言語生成能力を獲得しました。
GPT-2の成功により、モデルサイズと訓練データ量を増やすことで言語モデルの能力が著しく向上することが実証されました。これは「スケーリング則」として知られるようになる現象の初期の証拠となり、その後のGPT-3など、さらに大規模なモデルの開発への道を開きました。
GPT-2は特に長文生成において顕著な進歩を示し、単なる次の単語の予測を超えて、文脈を維持しながら段落や物語全体を生成できる能力を持つようになりました。この進歩は、単にモデルのサイズを拡大しただけでなく、より効果的な訓練手法とより多様なデータセットによって達成されました。
6.4. GPT-3と文脈内学習の出現
GPT-2の後、次はGPT-3に進み、モデルとの対話方法に新たな変化が生まれました。これまで事前学習モデルとの対話は2つの方法で行われていました。1つは定義した分布からサンプリングしてテキストを生成すること、もう1つは関心のあるタスクでモデルを微調整してその予測を取ることでした。
しかしGPT-3は、はるかに大きなモデルとなり、微調整なしでもいくつかのタスクを実行できるという興味深い新しい能力を示しました。GPT-3はGPT-2よりもはるかに大規模で、1750億パラメータを持ち、3000億語のテキストで訓練されました。
この文脈内学習(in-context learning)と呼ばれる能力により、モデルは現在見ているサンプルのパターンを定義または検出し、そのパターンを継続できるようになりました。例えば「thanks」という単語に矢印を付けて「merci」に対応させ、「hello」に矢印を付けて「bonjour」に対応させると、モデルに多くの例を与え、「otter」に対応するものは何かと尋ねると、これが翻訳であることを理解し、「loutre」と回答できるようになりました。
ここで重要なのは、これが単一の入力であり、「翻訳をせよ」と指示したわけでも、翻訳で微調整したわけでもないということです。単に入力を与え、いくつかの例を示し、モデルがこの一見複雑なタスクをある程度実行できるようになったのです。これが文脈内学習です。
他にも加算の例があり、モデルに加算の例をいくつか与えると、簡単な加算ができるようになります。または誤字の修正例を与えると、文脈内学習で誤字修正ができるようになります。これは機械翻訳の例でもあります。
これは「創発的特性」の始まりであり、より大きなモデルでこの質的に新しい振る舞いが現れました。小さなモデルを見ただけでは、この種の新しい振る舞いが生まれるとは明らかではありませんでした。GPT-3は単に次の単語を予測するデコーダーのみのモデルとして訓練されていましたが、その訓練の結果として、文脈の関数として非常に複雑なことを実行できるようになりました。
これは驚くべきことです。ここまで我々は文脈的表現、単語の文脈内での意味などについて話してきましたが、これは非常に高レベルのパターンマッチングです。単一のテキスト列内のパターンを識別し、そのパターンを完成させることができるのです。このモデルがどのような問題を解決できるのか、その能力と限界は何かについては、研究の開かれた領域となっています。
6.5. モデルサイズと学習データのトレードオフ
ここまで私たちはモデルのサイズについて多く話してきました。モデルが大きくなるにつれて常に性能が向上してきました。より多くのデータで訓練することも性能向上に寄与しています。GPT-3は3000億語のテキストで訓練され、1750億パラメータを持っていましたが、この規模では、これらのモデルを構築するのには莫大なコストがかかります。
お金を最も効果的に使っているのかどうかは非常に不明確です。パラメータ数を増やすことが本当に正しいアプローチなのでしょうか?これらのモデルを訓練するコストは、大まかに言えば、パラメータ数と訓練するトークン(単語)数を掛け合わせたものになります。
DeepMindの研究者たちは、実験を通じて、GPT-3が実は「滑稽なほど」過大なサイズだったことを発見しました。彼らが訓練したChinchillaというモデルは、GPT-3の半分以下のサイズでありながら、より良い性能を示しました。ただし、彼らはより多くのデータで訓練しました。
これは、計算リソースをどのように最も効果的に使うかという興味深いトレードオフを示しています。Googleのような大企業でも、このような実験を何度も繰り返すことはできません。そのため、最適なモデルサイズとデータ量のバランスについては依然として未解決の問題があります。
Chinchillaの例は、単純にモデルサイズを増やすことが最適な戦略ではないことを示しています。モデルサイズとデータ量の間には、計算効率の観点から最適な比率が存在します。GPT-3がサイズの割に十分なデータで訓練されていなかったという発見は、今後の大規模言語モデル開発に大きな影響を与えました。
この研究の結果、同じ計算予算でより良いモデルを作るためには、モデルのパラメータを増やすことと、より多くのデータで訓練することのバランスを取ることが重要だという理解が広まりました。大規模なモデルを訓練する際の計算効率の最適化は、今日の人工知能研究における重要なテーマの一つとなっています。
6.6. 思考の連鎖プロンプト技術
最近登場したネットワークとの対話方法として「思考の連鎖」(Chain of Thought)プロンプティングがあります。プレフィックス(入力の先頭部分)は、現在解こうとしているタスクを指定するのに役立つだけでなく、それ以上のことも可能です。
標準的なプロンプティングでは、質問と回答の例がプロンプトとなります。つまり、質問があり、その回答例があります。これがプロンプトとなり、タスクを指定します。そして新しい質問を与えると、モデルは回答を生成しますが、時に間違った回答をすることがあります。
思考の連鎖プロンプティングでは、例示部分で質問を与え、その後に回答に至るステップの分解を示します。つまり、人間として「この種の単語問題を解くためには、このように考えていけます」という注釈を入力の一部として与えます。次に新しい質問を与えると、モデルは「ここでやるべきことは分かっている。まず中間ステップの連鎖を生成し、次に『答えは』と言って、その答えを述べるんだ」と理解します。
驚くべきことに、モデルは妥当な中間ステップのシーケンスを生成することができ、その後、単独で答えを生成するよりもはるかに頻繁に正しい答えを生成します。これはメモ帳として考えることもできますし、問題を解くために投入する計算量を増やすこととも考えられます。この続きの各単語を生成する際、これまでのすべての単語に条件付けることができるため、おそらくモデルは問題をより小さく単純な問題に分解でき、各問題をより適切に解決できるようになります。
なぜこれが正確に機能するのかは、現時点では誰も本当には分かっていません。このように大きなネットワークでは、創発的特性が非常に強力でありながら、理解することが非常に難しく、信頼することも非常に難しいのです。その能力と制限が何であるか、どこで失敗するかが不明確だからです。
思考の連鎖プロンプティングのアプローチは、モデルに問題解決のための思考プロセスを明示的に示すことで、単に答えだけを求めるよりも、より複雑な推論タスクでの性能を大幅に向上させました。この手法はその後、数学、論理的推論、常識的推論など、さまざまな難しいタスクにおいて大きな改善をもたらしています。
7. 事前学習が教えるもの
7.1. 構文、共参照、語彙的意味論
事前学習によって、モデルはさまざまな種類の言語知識を獲得します。最初に説明した入力の再構成タスクを通じて、モデルは多くの言語現象を学習します。
例えば、「Stanford University is located in」という文脈があり、私がこの部分を削除して「Stanford」や「Palo Alto」を予測する課題を与えると、モデルはスタンフォード大学がどこにあるかという情報を学習します。他にどのようなことを学習できるでしょうか?
構文的な制約も学習できます。例えば「I put [BLANK] fork down on the table」という例では、ここに現れる単語のセットは限られています。「I put the fork down on the table」や「I put a fork down on the table」などは構文的な制約です。文脈から、どのような単語がどのような文脈に現れるかを学習します。
また「The woman walked across the street checking for traffic over [BLANK] shoulder」という例では、ここに入る可能性のある単語は何でしょうか?これは共参照(co-reference)という言語概念に関わります。ここで議論されている女性という実体と彼女の肩の間には共参照関係があります。「her」という単語は「woman」と同じ実体を指しています。ネットワークは談話内でどのような実体が何をしているかについて学習できるのです。
意味論に関しても学習できます。「I went to the ocean to see the fish, turtle, seals, and [BLANK]」という文があれば、空白に入る単語は、私が文を書いている人間として考える「海に行って見るもの」のクラスのメンバーであるべきです。この予測タスクを行うことで、水生生物の意味論についても学習するかもしれません。
他にも「Overall the value I got from the two hours watching it was the sum total of the popcorn and drink. The movie was [BLANK]」という例では、どのようなタスクを学習しているでしょうか?これは感情分析です。これは自然に書いたテキストですが、「the movie was bad」と書くことで、映画についての潜在的な感情を学習しています。後で新しいレビューを見た時に、「the movie was [BLANK]」と入力すれば、モデルが「bad」や「good」を生成することで、暗黙的に感情分析タスクを解決できるかもしれません。
また「Ira went to the kitchen to make some tea. Standing next to Ira, Zuko pondered his destiny. Zuko left the [BLANK]」という例では、この文脈では人間が作成したテキストによって暗黙的に設計された世界があります。キッチンという物理的な場所があり、Zukoがいて、IraがキッチンにいてZukoがIraの隣にいるので、Zukoもキッチンにいるはずです。Zukoが去ることができるのはキッチンだけです。これは物理的な場所や、人々が物の隣にいることや何かから離れることについての潜在的な概念を教えてくれます。
7.2. 常識的推論能力
事前学習では、言語的な知識だけでなく、常識的な推論能力も獲得されます。これは、言語モデルが文脈から情報を抽出し、世界がどのように機能するかについての基本的な理解を構築できることを示しています。
例えば、「I was thinking about the sequence that goes 1, 1, 2, 3, 5, 8, 13, 21, [BLANK]」という例を考えてみましょう。これはかなり難しい課題です。これはフィボナッチ数列であり、次の数字を予測するモデルを作成するには、フィボナッチ数列からいくつかの数字を見て、一般的に次の数字を予測することを学習する必要があります。
このような数学的パターンの認識は、単なる言語理解を超えた能力を示しています。モデルは、数字の列に潜むパターンを理解し、そのパターンに基づいて次の要素を予測できるようになります。これは、事前学習が世界の構造に関する抽象的な理解を促進できることを示しています。
常識的推論はさまざまな形で現れます。例えば、物理的な空間と移動に関する理解(キッチンにいる人がキッチンを出ることができるなど)、時間の経過に伴う状態変化の理解、因果関係の把握(ある行動が特定の結果をもたらす理由)などがあります。
事前学習モデルは、テキストのパターンを学習することで、これらの常識的な関係性を暗黙的に把握していきます。これらは明示的に教えられたものではなく、大量のテキストデータから帰納的に学ぶことで獲得された知識です。
また、事前学習モデルは、人々の行動原理や動機についての理解も示します。例えば、人々が特定の状況でどのように反応するか、または特定の目標を達成するためにどのような行動をとるかといった社会的知識も含まれています。
これらの常識的推論能力は、より大きなモデルになるほど顕著になる傾向があります。モデルのサイズが大きくなるにつれて、より複雑で微妙な推論パターンを捉えることができるようになります。これは、大規模な事前学習が単なる言語モデリングを超えて、世界についての一般的な知識表現を学習する能力を持つことを示しています。
7.3. 事前学習モデルのバイアス問題
事前学習モデルが雑学や構文、共参照、語彙的意味論、感情、推論能力などの幅広いことを学習する一方で、これらのモデルは人種差別や性差別など、あらゆる種類のバイアスも学習し、増幅してしまいます。
モデルが訓練されるテキストデータには、人間社会に存在する偏見や固定観念が反映されています。事前学習の過程でモデルはこれらのパターンを捉え、自身の予測や生成に組み込んでしまうのです。例えば、特定の職業と性別の関連付けや、特定の民族グループに対するステレオタイプなどが、モデルの出力に現れることがあります。
これらのバイアスは、モデルが単に中立的な言語パターンを学習しているのではなく、社会的な偏見も同時に取り込んでいることを示しています。問題なのは、モデルがこれらのバイアスを学習するだけでなく、時にはそれを増幅してしまうことです。テキストの生成や予測において、これらのバイアスが強調されてしまうケースが見られます。
この問題に対処するには、訓練データの選択と前処理、モデルアーキテクチャの設計、事後的なバイアス軽減技術など、複数のアプローチが必要です。単にインターネット上のすべてのテキストで訓練するのではなく、可能な限りクリーンで偏りの少ないデータを使用することが理想的です。しかし、完全に「中立」なデータセットを作ることは実質的に不可能です。
これらのモデルの一般性は多くの人を驚かせていますが、同時にこれらのモデルは単に使用するためだけでなく、どのように機能し、どのように失敗するかを理解するために研究される対象となっています。バイアスの問題は、これらのモデルを実社会で責任を持って使用するために取り組まなければならない重要な課題の一つです。
モデルが学習するバイアスの種類と程度は、訓練データに大きく依存します。例えば、特定の時代やコミュニティに偏ったテキストで訓練されたモデルは、その時代や集団に特有のバイアスを反映します。このため、多様で幅広い視点を含むデータセットの構築が重要視されていますが、それだけでバイアスの問題を完全に解決することはできません。
バイアスの検出と評価のための方法論も活発に研究されており、モデルの出力における偏見を体系的に特定し測定するためのベンチマークやテスト手法が開発されています。これらの研究は、より公平で責任あるAIシステムの開発に不可欠な要素となっています。
8. 大規模モデルと文脈内学習
8.1. 大規模モデルの驚くべき能力
事前学習はさまざまなことを教えるでしょう。雑学、構文、共参照、語彙的意味論、感情、そして3年前には考えられなかったほど多くの推論能力を教えます。しかし同時に、これらのモデルは人種差別や性差別など、あらゆる種類のバイアスも学習し、増幅します。
これらのモデルの一般性は多くの人を驚かせています。そのため、これらのモデルは単に使用するためだけでなく、どのように機能し、どのように失敗するかを理解するために研究される対象となっています。
大規模モデルの最も驚くべき側面の一つは、そのサイズが大きくなるにつれて出現する「創発的能力」です。GPT-3のように十分に大きなモデルでは、事前学習の目的には明示的に含まれていなかったタスクを遂行できるようになりました。例えば、簡単な算術、翻訳、要約、質問応答などのタスクを、特別な訓練を受けることなく実行できるようになりました。
特に文脈内学習の能力は、研究者たちにとって驚きでした。モデルはいくつかの例を与えられただけで、そのパターンを理解し、新しい入力に適用することができます。これは伝統的な機械学習の枠組みでは説明が難しい現象です。
また、大規模モデルは人間の言語の微妙なニュアンスを捉える能力も示しています。隠喩や皮肉、文化的参照など、従来の自然言語処理システムでは難しかった言語の側面を理解できるようになりました。これにより、より自然で人間らしい対話が可能になりました。
しかし、これらの能力は一様に現れるわけではありません。モデルのサイズを増やしていくと、ある閾値を超えたときに突然新しい能力が現れることがあります。これはモデルの規模と能力の関係が線形ではなく、ある種の「相転移」が起こることを示唆しています。
こうした創発的能力の出現は、人工知能研究における重要な発見であり、大規模モデルの開発がさらに進むにつれて、どのような新しい能力が現れるかは活発な研究領域となっています。
8.2. 文脈内学習のメカニズム
文脈内学習(in-context learning)は、大規模言語モデルが示す最も興味深い能力の一つです。これは基本的に、訓練の例なしで、モデルが入力として与えられた例からパターンを学習し、新しい例に適用できる能力です。
例えば、GPT-3に「thanks → merci, hello → bonjour, otter → ?」のような入力を与えると、「loutre」と回答できます。このとき、モデルは英語からフランス語への翻訳を行うよう明示的に指示されていません。単に例のパターンからタスクを推測しています。
この能力は非常に驚くべきものです。なぜなら、モデルは言語モデリング、つまり次の単語を予測するというシンプルなタスクでのみ訓練されているからです。文脈内学習のような高度な能力が、この基本的なタスクからどのように生まれるのかは、まだ完全には理解されていません。
現時点での理解では、文脈内学習は訓練データと新しいタスクの間に何らかの関連性が必要だと考えられています。例えば、GPT-3は事前学習中に二言語辞書のようなテキストを見た可能性が高く、それが翻訳タスクの実行に役立っているかもしれません。しかし、モデルが新しい種類のパターンを学習する非自明な能力も持っていることは明らかです。
文脈内学習の正確なメカニズムは依然として活発な研究分野であり、単に訓練データにおける類似タスクの記憶なのか、それとも新しいパターンを学習するための一般的な能力なのかは不明です。実際には、その中間的なものである可能性が高いでしょう。訓練データと何らかの形で結びついているが、新しい種類のパターンを学習する能力も持っています。
このメカニズムをより深く理解することは、次世代の人工知能システムの開発にとって重要な課題です。特に、文脈内学習がどのようなタスクに適用でき、どのような限界があるのかを明らかにすることは、これらのモデルの実用化において不可欠です。
文脈内学習は、デコーダー型モデルが持つ独特の能力であり、これがモデルサイズの拡大とともに顕著になっていくという事実は、大規模言語モデルの開発における重要な発見でした。この能力をより体系的に理解し活用することが、現在の自然言語処理研究の重要な目標となっています。
8.3. 大規模モデルの評価と限界
大規模モデルの評価方法については、質問がありました。「事前学習モデルはどのような指標で評価するのか」という問いです。これらのモデルは一般的なものであることを目指していますが、特定のアプリケーションに特化した指標もあります。
訓練中は、言語モデリングの単純な指標を使用できます。言語モデルの複雑性(perplexity)を評価することができ、より良い複雑性が、評価が難しい多くの異なるタスクとの相関性を持つことが判明しています。しかし、自然言語処理コミュニティは、一般性の概念を捉えようとする多様なタスクからなる大規模なベンチマークスイートも構築しています。
一般性の定義自体が非常に難しく、曖昧なものです。新しい事前学習方法を開発する際には、さまざまな評価を選択し、それらすべてで良い結果を示すことが一般性の証拠となります。
大規模モデルには明らかな限界もあります。これらのモデルの能力と制限を理解することは非常に困難です。このため、どこで失敗するか、どのような問題を解決できるかを事前に予測することが難しいのです。例えば、数学的な推論や常識的な推論において時折見られる失敗は、モデルの理解の不完全さを示しています。
また、大規模モデルは通常、非常に流暢で合理的に見える答えを生成しますが、それらは頻繁に誤りを含んでいます。特にGPT-3やChatGPTなどのモデルでは、この「確信に満ちた誤り」の問題が顕著です。モデルは自身の無知を認識したり、不確かさを適切に表現したりすることが苦手です。
さらに、これらのモデルのサイズと複雑さは、その内部動作の分析と解釈を困難にしています。「ブラックボックス」の性質を持つため、モデルがなぜ特定の出力を生成したのか、またはどのような内部表現を形成しているのかを理解することは容易ではありません。
これらの限界にもかかわらず、大規模言語モデルは自然言語処理の可能性を大きく拡張しました。その限界と能力をより深く理解することは、次世代AIシステムの開発において中心的な研究課題となっています。
9. 質疑応答
9.1. サブワード分割に関する質問
講義中にはサブワード分割に関する多くの質問が寄せられました。一つの重要な質問は、「分割する場所をどのように決めるのか」というものでした。分割は、先ほど指定したアルゴリズムに基づいて行われます。頻繁に共起する隣接文字列を組み合わせることで語彙を学習し、単語をトークン化する際には、できるだけ分割を少なくするよう試みます。単語を最大のサブワード(最も多くの文字を占めるサブワード)に分割するアルゴリズムがあります。
また、「システムは単一の埋め込みと複数の埋め込みを区別するのか」という質問もありました。システムは、これらがすべて単なる埋め込み語彙行列へのインデックスであるという意味では区別しません。すべて平等に扱われます。
「非常に長い単語はどうなるのか」という質問もありました。実際には、統計がものを言います。長い単語が非常に一般的であれば、それは語彙に入ります。そうでなければ入りません。これよりも少しだけ良いアルゴリズムもありますが、長さにほぼ関係なく、共通して共起するサブストリングを見つけるという直感が正しいアプローチです。
サブワードの周波数と長さのバランスについての質問もありました。例えば「Transformerify」という単語があり、「Transformer」はサブワードで「ify」も一つのサブワードだとすると、「if」が非常に一般的な場合はどうなるかという質問です。この場合は、できるだけ少ない数のサブワードに分割することを選択します。これはシーケンス長がTransformerのボトルネックになりやすいためです。したがって、非常に短い一般的なサブワードをたくさん持つよりも、少ないサブワードで分割する方が良いのです。
句読点の扱いについても質問がありました。基本的に、テキストをできるだけ未処理のままにし、実際に人々がシステムを使用するときに反映されるようにします。過去にWord2Vecを使用していた時は、句読点のベクトルは不要と考えていたかもしれませんが、現在ではシステムを使用しようとする人々が実際に得るテキストにできるだけ近いものを使用するよう心がけています。
9.2. 事前学習と微調整のバランス
講義中に、事前学習と微調整のバランスに関する重要な質問がありました。「大量の一般データと、微調整タスク用の大量のデータの両方がある場合、いつ新しいモデルを訓練するのが良いか、いつ事前学習と微調整を使うのが良いか」という質問です。
この質問に対する答えは、「あなたが関心のあるタスク用の大量のデータがある場合、それだけでモデルを訓練するよりも、事前学習と微調整の組み合わせを使う方がほぼ常に良い」というものでした。関心のあるタスクに大量のデータがある場合、よく行われるのは「3段階訓練」です。まず非常に幅広いコーパスで事前学習を行い、次にラベル付きデータのラベルを外して、そのすべてをテキストとして扱い、言語モデリングのような方法でその上でさらに事前学習(ドメイン適応)を続け、パラメータを少し調整します。そして最後に、望むラベルで微調整の最終段階を行います。この方法はさらに良い結果をもたらします。
なぜ事前学習-微調整パラダイムが、単により多くの層を追加したり、微調整に使うデータを増やしたりするよりも効果的なのかという質問もありました。単純な答えは、ラベルなしのデータ(インターネット上のテキスト)の量が、注意深くラベル付けされたデータ(映画レビューなど)の量と比較して桁違いに多いからです。インターネット上には少なくとも5兆語、おそらく10兆語のテキストがあり、ラベル付きデータはおそらく100万語程度です。スケールが全く異なるのです。
また、感情分析のような非常に単純なタスクを学習するだけでは、言語モデリングと比較して、広範な設定で一般的に機能するエージェントを得ることは難しいという直感もあります。今日書かれているような映画レビューの大量のラベル付きデータを持っていたとしても、明日人々が少し異なるスタイルで書き始めると、システムの性能が低下するかもしれません。一方、幅広いソースから多様なテキストで事前学習を行えば、訓練データとは少し異なる新しいテキストにも適応しやすくなります。
微調整データの量が事前学習データに比べて桁違いに少ない場合、どのようにモデルに「微調整タスクの方が重要だから、それに集中してください」と伝えるかという質問もありました。これは、事前学習を最初に行い、その後で微調整を行うという事実によって解決されます。まず事前学習からパラメータの初期化を得て、それを起点として、関心のあるタスクに対してパラメータを調整します。モデルは事前学習のことを「忘れて」しまうかもしれませんが、それは微調整後にはこのタスクに集中するよう求められているからです。
9.3. プログラミングタスクでの性能
講義中に「GPTをプログラミングタスクにおいてベンチマークしたり、その精度を測定したりした人はいるか」という質問がありました。この質問に対する回答は「はい」でした。GPT-3や4を単純なプログラミングタスクに使用した例は確かに存在し、最先端の競争的プログラミングボットはすべて言語モデリングのアイデアに基づいています。
現在の最先端の競争的プログラミングボットはすべて、言語モデリングの考え方に基づいており、おそらくそれらはすべて事前学習された言語モデル自体に基づいています。これらのアイデアをすべてGitHubに適用すると、コードに関連する非常に興味深い創発的な振る舞いが得られます。最高のシステムはすべて多かれ少なかれこのアプローチを使用しているため、この分野では確かに多くのベンチマークが行われています。
また、「これはGitHub Copilotの基礎になっているのか」という質問もありました。回答は「間違いなくそうです」でした。具体的な詳細は明らかではありませんが、同じアイデアに基づいています。
プログラミングタスクにおける言語モデルの性能は、単純なコードの補完から複雑なアルゴリズムの実装まで多岐にわたります。特に大規模な事前学習済み言語モデルは、GitHubの膨大なコードベースから学習することで、コードの構文、一般的なプログラミングパターン、さらには特定の言語やフレームワークに固有の慣習までも把握しています。
これらのモデルはプログラミング言語の文法規則だけでなく、良いコーディング実践や効率的なアルゴリズムの選択など、より微妙な側面も学習しています。事前学習と微調整のパラダイムは、プログラミングドメインにおいても非常に効果的であることが証明されており、GitHub Copilotのようなツールは、このアプローチの実用的な応用例となっています。
9.4. 未見タスクの実行能力
講義の最後に「事前学習されたモデルが、微調整なしで見たことのないタスクを実行できる例はあるか」という興味深い質問がありました。この質問に対する回答は、「見たことのない」という意味に依存します。
GPT-3のような非常に大規模なモデルの場合、事前学習中に算術的な単語問題のようなものを正確に見たかどうかは不明確です。見た可能性もあれば、見ていない可能性もあります。モデルは明らかに事前学習中に暗黙的に見た課題の断片を再結合することができます。
私たちは雑学クイズでも同じことを見ました。言語モデリングは時々雑学クイズのようなものです。Wikipediaのページの最初の段落を読むと、それは誰かがどこで生まれたかや、いつ生まれたかについての小さな雑学の質問に答えているようなものです。しかし、このような特定の形式のタスクを見たことがなくても、ある程度それに対応できることは驚くべきことです。
事前学習データに直接現れていないと思われるタスクをモデルがどの程度実行できるかを定量化することは、現在も研究が進行中の問題です。文脈内学習の能力は、単純な次の単語の予測から創発した能力であり、それがどのように機能するのか、その限界は何かについてはまだ完全には理解されていません。
未見タスクの実行能力は、大規模モデルの最も興味深い特性の一つです。事前学習データに直接含まれていない推論や生成のパターンを、モデルがどのようにして捉えることができるのかという問いは、今後の研究において重要なテーマであり続けるでしょう。
この能力を体系的に評価し、その限界を理解することは、次世代の自然言語処理システムの開発において重要な課題となっています。特に、どのようなタスクが事前学習から自然に創発するのか、そしてどのようなタスクが依然として明示的な訓練を必要とするのかを理解することは、より一般的で強力な言語モデルを構築するために不可欠です。