生成 AI と LLM のしくみ

生成 AI は人工知能の一種であり、自然言語、画像、音声、コードなどのオリジナル コンテンツを作成できます。 生成 AI の出力は、ユーザーが行う入力に基づきます。 ユーザーが生成 AI と対話する一般的な方法の 1 つに、自然言語を入力として使用する、チャット アプリケーションの利用があげられます。 このよく知られた例が、OpenAI によって開発された ChatGPT です。 自然言語を入力として使用する生成 AI アプリケーションには、自然言語処理 (NLP) を実行するための大規模言語モデル (LLM) が利用されています。

生成 AI のしくみ

すべての生成 AI は、モデルに基づいて構築されます。 これらのモデルは、自然言語、画像、音声、コードなどのコンテンツの形式になった大規模なデータ セットを使用してトレーニングされます。 生成 AI モデルでは、トレーニング データで特定されたパターンを使用して、統計的に類似した新たなコンテンツを生成します。

ユーザーによって提供される入力は、AI モデルによって出力を作成するために使用されます。 入力はまず解析され、モデルが理解できるデータの形式になります。 次にモデルは、そのデータを使用して、そのトレーニングから一致するパターンを特定して組み合わせ、最終的な出力を作成します。 生成 AI モデルは一意のコンテンツを生成するように設計されているため、同じ入力に対して同じ出力が生成されるわけではありません。

入力または出力として自然言語をサポートする生成 AI アプリケーションでは、LLM を利用してこれを行います。 LLM は、入力テキストを分類し、そのセンチメントを判別する NLP を実行するために使用されます。 その分類と感情分析が生成 AI モデルによって使用され、パターンが特定されて、出力が作成されます。 出力がテキストであれば、LLM のみを使用して生成できます。 出力が音声または画像の場合、追加のモデルを使用して、その形式で出力を生成するためのデータとパターンが提供されます。

生成 AI の一般的な用途

生成 AI アプリケーションは、考え得るさまざまなユース ケースと出力をサポートしています。これらについては後のセクションで確認します。

自然言語の生成

一部の生成 AI アプリケーションでは、次のような自然言語の出力を生成できます。

  • LinkedIn のプロファイルのための専門的な言葉で表した概要
  • オンライン ネットショップ内の商品の詳しい説明
  • 健康的な食事のアイデア

たとえば、"ピーマンが入っている健康的な朝食のアイデアを 3 つ教えてください" というユーザー入力が与えられると、生成 AI アプリケーションは以下のような出力を生成する可能性があります。

"はい、ピーマンを使った 3 つの健康的な朝食は次のとおりです。"

  1. 卵とピーマンのスクランブル: 数個のピーマンをサイコロ状に切り、フライパンで少し柔らかくなるまでソテーします。 次に、溶き卵を加えて混ぜながら炒めます。 全粒粉のトーストを添えると、栄養のある朝食になります。

  2. ピーマンとアボカドのトースト: 全粒パンのスライスをトーストし、スライスしたピーマン、つぶしたアボカドを上にのせて塩とコショウを振りかけます。 これは、アボカドから健康的な脂肪を摂取し、ピーマンからビタミン C を摂取する良い方法です。

  3. ピーマンを使った朝食用ブリトー: サイコロ状に切ったピーマン、タマネギ、スクランブルした卵を一緒にフライパンでソテーします。 次に、炒めたものをすくって全粒粉のトルティーヤに乗せ、サルサか辛いソースをかけます。 それを巻いて、満足感のある栄養価の高い朝食をお楽しみください。

イメージの生成

一部の生成 AI アプリケーションは、自然言語の入力から画像出力を生成します。 アプリケーションとそのモデルに応じて、ユーザーは以下を指定できると考えられます。

  • 画像に表示する人々または物
  • 画像の作成に使用する芸術的なスタイル
  • 類似の画像を生成するためのリファレンス

画像生成では、オンライン アカウント用の仮想アバターを作成したり、企業のロゴをデザインしたり、クリエイターに芸術的なインスピレーションを与えたりすることができます。 たとえば、ユーザーは "ハンバーガーを食べている象の画像を作成してください" という要求を入力するかもしれません。 生成 AI アプリケーションでは、次の出力が生成されると考えられます。

AI が生成した、ハンバーガーを食べている象の画像の例。

音声の生成

一部の生成 AI アプリケーションは、自然言語の入力からオーディオ出力を生成します。 アプリケーションとそのモデルに応じて、ユーザーは以下を行うことができると考えられます。

  • 入力テキストから自然に聞こえる音声を合成する
  • 特定のスタイルで、または特定の楽器を特色とする音楽を作成する
  • 自然言語で提供された入力音声ファイルを、設定された条件に基づいて変更する

オーディオ生成では、デジタル音声アシスタントからの音声応答を提供したり、音楽制作のために曲に演奏を追加したり、参照用の録音からユーザーの元の音声を再現したりすることができます。

コード生成

一部の生成 AI アプリケーションは、自然言語の入力からコードを生成します。 アプリケーションとそのモデルに応じて、ユーザーは以下のようなコードを生成できると考えられます。

  • 自分で選択した言語になっている
  • 特定の入力および出力の構造を受け入れている
  • リファレンス ドキュメントに基づいて特定のテクノロジを使用している

コード生成では、データの並べ替えやフィルター処理といった一般的な操作の実装を即座に提供したり、ある言語から別の言語へのコードの変換を高速化したり、指定されたリファレンス ドキュメントに基づいて技術に関する質問に回答したりすることができます。 たとえば、「C# を使用して tic-tac-toe のゲームのコードを書く方法を教えて」と入力された場合、生成 AI アプリケーションでは次の出力が生成されると考えられます。

C# で tic-tac-toe のゲームのコードを書く方法の簡単な例を次に示します。

using System;

namespace TicTacToe
{
    class Program
    {
        static char[] board = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        static int player = 1; // Player 1 will start
        static int choice; // The number the player chooses
        static int flag = 0; // Set the flag value to 0

        // Check if the position is already marked or not
        private static int CheckPosition(char mark)
        {
            for (int i = 0; i < 9; i++)
            {
                if (board[i] == mark)
                {
                    return 1;
                }
            }
            return 0;
        }

        // The rest of the generated code has been omitted for brevity
        // ...
    }
}

このコードでは、C# での単純なコンソールベースの tic-tac-toe ゲームを作成します。 これは、1 次元配列を使用してボードを表現し、各手番の後に勝ちか引き分けかをチェックします。

LLM のしくみ

LLM のトレーニング時には、トレーニング テキストはまずトークンに分割されます。 各トークンは、一意のテキスト値を示します。 1 つのトークンは、1 つの単語、単語の一部、または単語と句読点の組み合わせの場合があります。 各トークンには ID が割り当てられ、テキストをトークン ID のシーケンスとして表すことができます。

テキストがトークンに分割されると、埋め込みと呼ばれるコンテキスト ベクトルが各トークンに割り当てられます。 これらの埋め込みベクターは複数値の数値データであり、トークンのベクターの各要素がトークンのセマンティック属性を表します。 トークンのベクターの要素は、トークンがどの程度高い頻度で、一緒に、または類似のコンテキストで使用されているかに基づいて決定されます。

シーケンス内の次のトークンを、前のトークンに基づいて予測することがゴールです。 既存のシーケンス内の各トークンには、次のトークンに対する相対的な影響を表す重みが割り当てられます。 次に、前のトークンの重みと埋め込みを使用する計算が行われ、次のベクター値が予測されます。 続いて、最も可能性の高いトークンがモデルによって選択され、予測されたベクターに基づいてシーケンスが続けられます。

このプロセスはシーケンス内の各トークンに対して反復的に続けられ、出力シーケンスは次の反復の入力として回帰的に使用されます。 一度に 1 つのトークンずつ、出力が作成されます。 この戦略は、オートコンプリートのしくみに似ています。提案は、それまでに入力された内容に基づいて表示され、新しい入力が行われるたびに更新されます。

トレーニング中、トークンのシーケンス全体は認識されますが、現在考慮対象になっているトークンの後にあるものはすべて無視されます。 次のトークンのベクターの予測された値が実際の値と比較され、損失が計算されます。 その後、損失を減らしモデルを改善するために、重みが段階的に調整されます。