大規模な言語モデルと AI コード ジェネレーターの台頭
マーティン・ヘラー著
InfoWorld 寄稿編集者 |
2021 年 11 月に GitHub Copilot について書いたとき、Copilot は利用できる数少ない AI コード生成テクノロジーの 1 つでした。 Visual Studio Code 拡張機能としてテストしました。 当時、Copilot は必ずしも適切で正確なコード、さらには実行可能なコードを生成するとは限りませんでしたが、それでもある程度は役に立ちました。 Copilot (および機械学習を使用する他のコード ジェネレーター) の背後にある大きな期待は、ユーザーのフィードバックを組み込むことと、トレーニング コーパスに新しいコード サンプルを取り込むことの両方によって、時間の経過とともに改善するように設計されていることです。
2023 年 5 月の時点で、Visual Studio Code だけでも数百の「AI」または「コード生成」拡張機能が利用可能です。 これらのいくつかはコーディングの時間を節約するかもしれませんが、生成されたコードをレビュー、テスト、デバッグせずに信じるのであれば、私があなたに売り込む橋を用意しています。
市場に出回っている何百もの Visual Studio Code 拡張機能は「コード生成」または「AI」を約束していますが、実際に機械学習に基づいてコードを生成するのはそのうちのほんの一部だけです。
この分野における有望な発展の 1 つは、いくつかのツールに単体テストの自動生成機能があることです。 単体テストの生成は、汎用コードの生成よりもはるかに扱いやすい問題です。実際、単純なパターンを使用して実行できます。ただし、生成されたテストが意味があるかどうかを確認するには、生成されたテストをレビューして実行する必要があります。
この記事では、テキスト生成に使用される OpenAI の GPT ファミリや Google の LaMDA や PaLM などの最先端の大規模言語モデル (LLM) について概説する前に、言語モデルの歴史について簡単に説明します。そして今日のコード生成。 最後に、Amazon CodeWhisperer、Google Bard、GitHub Copilot X など 10 個のコード生成ツールの簡単なツアーを終了します。
言語モデルは、1913 年のアンドレイ マルコフに遡ります。その研究分野は現在、マルコフ モデルの特殊なケースであるマルコフ連鎖と呼ばれています。 マルコフは、ロシア語、特にプーシキンのエフゲニー・オネーギンでは、文字が出現する確率は前の文字に依存し、一般に子音と母音が交互になる傾向があることを示した。 マルコフの方法はその後、単語、他の言語、および他の言語アプリケーションに一般化されました。
マルコフの研究は、1948 年にクロード シャノンによってコミュニケーション理論のために拡張され、1985 年に再び IBM のフレッド ジェリネックとロバート マーサーによって相互検証 (削除された推定値と呼ばれる) に基づく言語モデルが作成され、リアルタイムに適用されました。大量の語彙を含む音声認識。 基本的に、統計言語モデルは単語のシーケンスに確率を割り当てます。
言語モデルの動作をすぐに確認するには、Google 検索またはスマートフォンのテキスト メッセージ アプリにいくつかの単語を入力し、自動補完オプションを提供できるようにします。
2000 年に Yoshua Bengio ら。 ニューラル確率言語モデルに関する論文を発表しました。このモデルでは、ニューラル ネットワークが統計言語モデルの確率を置き換え、次元の呪いを回避し、平滑化されたトライグラム モデル (当時の最先端技術) よりも単語予測 (以前の単語に基づく) が向上しました。 ) 20% ~ 35% 増加します。 言語のフィードフォワード、自己回帰、ニューラル ネットワーク モデルの考え方は現在でも使用されていますが、モデルには数十億のパラメーターがあり、広範なコーパスでトレーニングされているため、「大規模言語モデル」という用語が付けられています。
これから見ていきますが、言語モデルはパフォーマンスを向上させるために時間の経過とともに大きくなり続けています。 ただし、これにはコストがかかります。 確率的オウムの危険性に関する 2021 年の論文: 言語モデルは大きすぎる可能性がありますか? Emily Bender、Timnit Gebru 他私たちがこの傾向に行き過ぎているのではないかという疑問です。 著者らは、とりわけ、最初に環境コストと財務コストを比較検討し、Web 上のすべてを取り込むのではなく、データセットの収集と慎重な文書化にリソースを投資する必要があると提案しています。
最近の大規模言語モデルの爆発的な増加は、Ashish Vaswani らによる 2017 年の論文「Attention is All You Need」によって引き起こされました。 Google Brain と Google Research の研究者。 その論文では、「再帰と畳み込みを完全に排除し、アテンション メカニズムのみに基づいた、新しいシンプルなネットワーク アーキテクチャである Transformer 」が紹介されています。 Transformer モデルは、再帰型モデルや畳み込みモデルよりも単純であると同時に優れています。 また、トレーニングに必要な時間も大幅に短縮されます。
ELMo は、AllenNLP による 2018 年の深い文脈化された単語表現 (ELMo の論文を参照) であり、単語使用の複雑な特性 (構文や意味論など) と、これらの使用が言語文脈間でどのように変化するか (つまり、多義性をモデル化する) の両方をモデル化します。 元のモデルには 9,360 万のパラメーターがあり、10 億ワード ベンチマークでトレーニングされました。
BERT は、Google AI Language の 2018 言語モデルで、同社の Transformer (2017) ニューラル ネットワーク アーキテクチャに基づいています (BERT の論文を参照)。 BERT は、すべてのレイヤーの左と右の両方のコンテキストを共同で条件付けすることにより、ラベルのないテキストから深い双方向表現を事前トレーニングするように設計されています。 元の論文で使用された 2 つのモデル サイズは、合計パラメーターが 1 億個と 3 億 4,000 万個でした。 BERT はマスクされた言語モデリング (MLM) を使用します。MLM では、トレーニングのために最大 15% のトークンが「破損」します。 これは、英語版ウィキペディアとトロント ブック コーパスでトレーニングされました。
Google の 2020 Text-To-Text Transfer Transformer (T5) モデル (T5 の論文を参照) は、新しいオープンソースを使用して、GPT、ULMFiT、ELMo、BERT とその後継からの最高の転移学習技術に基づいて新しいモデルを合成します。 、Colossal Clean Crawled Corpus (C4) と呼ばれる事前トレーニング データ セット。 英語の標準 C4 は、Common Crawl データ セットに基づく 800 GB データ セットです。 T5 は、クラス ラベルまたは入力のスパンのみを出力する BERT スタイルのモデルとは対照的に、すべての自然言語処理タスクを、入力と出力が常にテキスト文字列である統一されたテキスト対テキスト形式に再構成します。 基本の T5 モデルには合計約 2 億 2,000 万のパラメータがあります。
AI の研究と展開を行う企業である OpenAI は、「汎用人工知能 (AGI) が全人類に確実に利益をもたらすことを保証する」という使命を掲げています。 もちろん、OpenAI はまだ AGI を達成していません。 また、機械学習のパイオニアである Meta-FAIR の Yann LeCun など、一部の AI 研究者は、AGI に対する OpenAI の現在のアプローチは行き止まりであると考えています。
OpenAI は、OpenAI API および Microsoft の Azure OpenAI サービスを通じて利用できる言語モデルの GPT ファミリを担当します。 GPT ファミリ全体は、Google の 2017 Transformer ニューラル ネットワーク アーキテクチャに基づいていることに注意してください。これは、Google が Transformer をオープンソース化しているため、正当なものです。
GPT (Generative Pretrained Transformer) は、約 1 億 1,700 万のパラメーターを使用する OpenAI の 2018 年モデルです (GPT の論文を参照)。 GPT は、Toronto Book Corpus で事前トレーニングされた一方向変換器であり、因果言語モデリング (CLM) 目標を使用してトレーニングされました。つまり、シーケンス内の次のトークンを予測するようにトレーニングされました。
GPT-2 は、2019 年に GPT を直接スケールアップしたもので、15 億のパラメーターを備え、800 万の Web ページまたは約 40 GB のテキスト データのデータ セットでトレーニングされています。 OpenAIは当初、GPT-2が「良すぎる」上に「フェイクニュース」につながるとして、GPT-2へのアクセスを制限していた。 GPT-3のリリースで潜在的な社会問題はさらに悪化したが、同社は最終的には折れた。
GPT-3 は、1,750 億のパラメーターを備えた 2020 年の自己回帰言語モデルで、フィルターされたバージョンの Common Crawl、WebText2、Books1、Books2、および英語版 Wikipedia の組み合わせでトレーニングされています (GPT-3 の論文を参照)。 GPT-3 で使用されるニューラル ネットワークは GPT-2 のニューラル ネットワークに似ていますが、ブロックがいくつか追加されています。
GPT-3 の最大の欠点は、「幻覚」、つまり、認識できる根拠なしに事実をでっち上げる傾向があることです。 GPT-3.5 と GPT-4 にも、程度は低いものの、同じ問題があります。
CODEX は、5,400 万のオープンソース GitHub リポジトリでのコード生成用に微調整された GPT-3 の 2021 年の子孫です。 これは、次のセクションで説明する GitHub Copilot で使用されるモデルです。
GPT-3.5 は、GPT-3 および CODEX に対する 2022 年のアップデートのセットです。 gpt-3.5-turbo モデルはチャット用に最適化されていますが、従来の完了タスクにも適しています。
GPT-4 は 2023 年の大規模マルチモーダル モデル (画像とテキストの入力を受け入れ、テキスト出力を出力する) であり、OpenAI は、さまざまな専門的および学術的なベンチマークで人間レベルのパフォーマンスを発揮すると主張しています。 GPT-4 は、統一司法試験、LSAT、GRE、およびいくつかの AP 科目試験を含む、多くの模擬試験で GPT-3.5 を上回りました。
OpenAI が GPT-4 がどのように訓練されたかを説明していないことは深刻な懸念です。 同社はこれは競争上の理由だと述べているが、Microsoft (OpenAI に資金提供している) と Google の間の競争を考慮すると、これはある程度理にかなっている。 それでも、トレーニング コーパスのバイアスがわからないということは、モデルのバイアスがわからないことを意味します。 GPT-4 に関するエミリー ベンダーの見解 (2023 年 3 月 16 日にマストドンに投稿) は、「#OpenAI がそのトレーニング データ、モデル アーキテクチャなどについて *オープン* になるまで、およびそうでない限り、GPT-4 は有毒なゴミであると想定されるべきである」です。
ChatGPT と BingGPT は、もともと gpt-3.5-turbo をベースにしていたチャットボットで、2023 年 3 月に GPT-4 を使用するようにアップグレードされました。 現在、GPT-4 に基づくバージョンの ChatGPT にアクセスするには、ChatGPT Plus に加入する必要があります。 GPT-3.5 に基づく標準の ChatGPT は、2021 年 9 月に途切れたデータでトレーニングされました。 Microsoft Edge ブラウザーでアクセスできる BingGPT も、2021 年に途切れたデータでトレーニングされましたが、(質問すると)それ) 「私は常にウェブからの新しい情報を学習し、知識を更新しています。」
画像の右側にある、その言語モデルとトレーニング データを説明する BingGPT。 2023 年 3 月 16 日に撮影されたスクリーンショット。
2023 年 3 月初旬、香港科技大学人工知能研究センターの Pascale Fung 氏が ChatGPT の評価について講演しました。 1時間かけて観る価値は十分にあります。
Google の 2021 年の「画期的な」会話テクノロジーである LaMDA (Language Model for Dialogue Applications) は、対話でトレーニングされた 2017 Transformer モデルであり、応答の感性と具体性を大幅に向上させるために微調整されています。 LaMDA の強みの 1 つは、人間の会話でよくある話題の逸脱に対処できることです。
LaMDA のバージョンは、Google の会話型 AI サービスである Bard を強化します。 Bard は 2023 年 3 月 21 日にリリースされ、2023 年 5 月 10 日に一般提供されました。そのコード生成機能については以下で説明します。
PaLM (Pathways Language Model) は、Pathways システムでトレーニングされた、5,400 億のパラメーターを備えた Google Research の 2022 年のデンス デコーダー専用 Transformer モデルです (PaLM の論文を参照)。 PaLM は、高品質の Web ドキュメント、書籍、Wikipedia、会話、GitHub コードを含む英語と多言語のデータ セットを組み合わせてトレーニングされました。
Google はまた、すべての空白 (特にコードにとって重要) を保持し、語彙外の Unicode 文字をバイトに分割し、数字を各桁に 1 つずつ個別のトークンに分割する、PaLM 用の「ロスレス」語彙を作成しました。 PaLM-Coder は、Python のみのコード データ セットに基づいて微調整された PaLM 540B のバージョンです。
PaLM-E は、Google の 2023 年に「具体化された」(ロボット工学向け)マルチモーダル言語モデルです。 研究者らは、強力な大規模言語モデルである PaLM から開始し、ロボット エージェントからのセンサー データで補完することによってそれ (PaLM-E の「E」) を具体化しました。 PaLM-E は、一般的に機能する視覚および言語モデルでもあります。 PaLM に加えて、ViT-22B ビジョン モデルが組み込まれています。
LLaMA (Large Language Model Meta AI) は、2023 年 2 月に Meta AI (別名 Meta-FAIR) によってリリースされた 650 億パラメータの「生」大規模言語モデルです。Meta によると、「LLaMA のような小規模な基礎モデルを大規模言語でトレーニングすることが望ましい」新しいアプローチをテストし、他の人の作業を検証し、新しいユースケースを探索するために必要なコンピューティング能力とリソースがはるかに少ないため、モデル空間が必要となります。基盤モデルはラベルなしの大量のデータセットでトレーニングされるため、さまざまなデータの微調整に最適です。タスク。」
LLaMA はいくつかのサイズでリリースされ、モデルの構築方法を詳しく説明したモデル カードも付属していました。 Meta-FAIR の Yann LeCun 氏によると、元々はチェックポイントとトークナイザーをリクエストする必要がありましたが、現在ではリクエストを提出してモデルを適切に入手した誰かによってダウンロード可能な torrent が 4chan に投稿されたため、これらは野放しになっています。
ChatGPT や Bard などのいくつかの大規模な言語モデルは、リリースされたままのコード生成に使用できますが、あからさまな著作権侵害を避けるために、通常は無料のオープンソース ソフトウェアからのコードを微調整すると役立ちます。 このことは依然として「オープンソース ソフトウェアの著作権侵害」の懸念を引き起こしている。これは、GitHub Copilot 製品と OpenAI GPT Codex モデルに関して、GitHub、Microsoft (GitHub の所有者)、OpenAI に対して 2022 年に連邦政府が提起する集団訴訟の主張である。
主に公開されているコードでトレーニングされた AI モデルを使用することに加えて、一部のコード生成ツールは Stack Overflow などのコード共有サイトの検索に依存していることに注意してください。
Amazon CodeWhisperer は Visual Studio Code および JetBrains IDE と統合し、コメントや既存のコードに基づくコード補完に応じてコードの提案を生成し、コードをスキャンしてセキュリティの問題を検出できます。 CodeWhisperer をアクティベートして AWS Cloud9 および AWS Lambda 内で使用することもできます。
CodeWhisperer は、Python、Java、JavaScript、TypeScript、C# プログラミング言語を十分にサポートしており、程度は低いですが、別の 10 個のプログラミング言語もサポートしています。 個人の開発者は無料で利用でき、プロフェッショナル チームの場合はユーザーあたり月額 19 ドルかかります。
CodeWhisperer は、以下に示す Python コードを作成するのに役立ちました。 レビュー、テスト、デバッグしましたが、問題ありません。
Amazon CodeWhisperer によるコード生成。 ファイルの先頭にコメントを入力しましたが、残りのほとんどは CodeWhisperer でした。 いくつかのオプションからコードを選択し、前のオプションから未使用の import ステートメントを削除する必要がありました。
Bard のプログラミング サポートは、2023 年 4 月 21 日に発表されました。発表では、C++、Go、Java、JavaScript、TypeScript、Python を含む 20 以上のプログラミング言語のサポートが記載されています。 簡単なテストとして、私は Bard に「現在の日付と時刻を返す Go 関数を作成する」ように依頼しました。 それは非常に迅速に行われました。
Bard は、「現在の日付と時刻を返す go 関数を作成してください」というプロンプトから、正しい Go 言語関数、関数の使用例、関数の説明を生成しました。 関数とテスト コードをコピーするためのアイコンに注目してください。
Bard は関数を作成しただけでなく、関数について説明し、関数の呼び出し例も生成しました。