asopi tech
asopi techOSS Developer
【第1回】生成AIは何を「正解」に学ぶのか ― 自己教師あり学習とLLM

【2026年7月版】

【第1回】生成AIは何を「正解」に学ぶのか ― 自己教師あり学習とLLM

公開日: 2026/07/09
読了時間: 約 14分

「AI」と呼んでいるものは、どうやって作られているのか

「最近のAIはすごい」とよく言われます。ただ、その「AI」が具体的に何を指しているかは、意外とあいまいです。ChatGPTのように文章を書くもの、画像を描くもの、音声を読み上げるもの——ふだんはまとめて「AI」と呼ばれますが、技術的にはこれらは生成AIと呼ばれ、その中心にあるのが大規模言語モデル(LLM)という仕組みです。機械学習、ディープラーニング、LLM、生成AI……言葉は多いのに、その境目は普段あまり意識されません。多くの人にとって、それらはひとまとめの「AI」なのだと思います。

このシリーズが扱うのは、その一段奥です。「AIはすごい」の先にある、そもそもLLMや生成AIはどうやって作られているのか。とりわけ、モデルに何を学ばせているのか——その「教材」の作り方に注目します。

意外に思われるかもしれませんが、GPTのようなLLM、Stable Diffusionのような画像生成、音声合成、動画生成、ロボットのワールドモデルは、見た目がまったく違うのに、学習の骨格が驚くほど共通しています。一言でいうと、こうです。

元データをそのまま食わせるのではなく、
元データから「入力」と「正解」のペアを機械的に作る

このシリーズでは、モデルの種類ごとに、この「教材(教師データ)の作り方」を追いかけていきます。第1回は、全体を貫く考え方と、いちばん基本になるLLMから始めます。

LLMは「テキスト→テキスト」のモデル

作り方に入る前に、主役のLLMがどういうものかを押さえておきます。LLM(大規模言語モデル)は、ざっくり言えばテキストを入れると、その続きにふさわしいテキストを返すモデルです。入力も出力もテキストなので、頭文字をとって「TXT2TXT(text-to-text)」と表現されることもあります。

「B-treeとは」と入れれば「探索を高速化する木構造です……」と続ける。ChatGPTのように質問へ答えたり、翻訳したり、コードを書いたりできるのも、根っこは同じ「もっともらしい続きを生成する」という一つの働きです。

では、その「もっともらしい続き」を、モデルはどうやって身につけるのか。ここから先が本題です。

そもそも「学習」と「教師データ」とは

本題に入る前に、言葉を一つずつ確かめておきます。まず「学習」とは何か。人が九九を反復で覚えるように、モデルの学習も大量の例を見て、そこに潜むパターンを数値(パラメータ)として掴んでいく作業です。この、学ぶための例をまとめたものが学習データです。

機械学習には学習データの与え方にいくつか流儀がありますが、代表的なのが教師あり学習です。ここでは一つひとつの例に「これが入力、これが正しい答え(正解)」というセットを用意します。この「入力と正解のペア」が教師データです。学校のドリルでいえば、問題(入力)と模範解答(正解)がそろったプリントのようなもの。モデルは、自分の出した答えと正解とのズレ(誤差)が小さくなるように、パラメータを少しずつ調整していきます。

裏を返せば、学習をさせるには「入力」と「正解」がそろっていなければなりません。この正解をどうやって用意するか——それが、生成AIを作るうえでの最初の関門になります。

元データと教師データは同じではない

ここで一つ、混同しやすい点があります。世の中から集めてくる生のデータと、そこから作る教師データは、同じではありません。

  • 元データ:Webページ、書籍、論文、コード、画像、音声、動画など、世の中から集めてくる生の素材。
  • 教師データ:モデルに「これが入力、これが正解」と示すために、元データから加工して作るペア。

モデルごとに整理すると、次のようになります。

モデル元データ教師データの作り方
LLMWeb、書籍、論文、コード、会話ログテキストをトークン化し、1つずらして「次トークン」を正解にする
Instruction LLM指示文、質問、回答、会話ログユーザー指示 → 模範回答 の会話形式へ整形する
画像生成(TXT2IMG)画像、alt text、caption画像+説明文 を作り、ノイズを加えて「加えたノイズ」を正解にする
音声合成(TTS)音声、書き起こし、話者IDテキスト → 音声特徴量/音声トークン の対応を作る
動画生成動画、caption、字幕動画+説明文 を作り、動画latentにノイズを加える
ワールドモデル観測、行動、次観測状態 S_t + 行動 A_t → 次状態 S_{t+1} の系列を作る

ここで注目してほしいのは、多くのモデルで人間が「正解」を一件ずつ付けているわけではないという点です。元データの構造をうまく利用して、正解を自動的に取り出しています。これを 自己教師あり学習(self-supervised learning) と呼びます。

LLMの元データ ― まずはテキストを集めて洗う

LLMの事前学習では、とにかく大量のテキストを集めます。

  • Webページ、書籍、論文、Wikipedia
  • GitHubのコード、Q&A、マニュアル、ニュース
  • 会話ログ、数式や表、JSONなどの構造化データ

ただし、集めたテキストをそのまま使うことはありません。まずはノイズを落とす前処理をかけます。

import re

def clean_text(text: str) -> str:
    text = re.sub(r"\s+", " ", text)       # 連続する空白をまとめる
    text = re.sub(r"<[^>]+>", "", text)    # 残ったHTMLタグを除去
    return text.strip()

現実にはこれよりずっと重い処理——重複除去、言語判定、品質スコアリング、有害コンテンツの除去——が入りますが、狙いはシンプルで「学習に使える素直なテキストにする」ことです。

トークン化 ― テキストを整数の列にする

洗ったテキストは、そのままではモデルに入りません。トークン化して整数の列に変換します。

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("gpt2")

text = "B-tree indexes are widely used in databases."
ids = tokenizer.encode(text)

print(ids)                    # [33, 12, ...] のような整数列
print(tokenizer.decode(ids))  # 元の文へ復元できる

実務では単純な split() ではなく、BPEやSentencePieceといったサブワード分割を使います。これで「未知語」を減らしつつ、語彙サイズを現実的な大きさに抑えられます。

教師データはこう作る ― 1トークンずらすだけ

ここがLLMの核心です。整数列を用意したら、入力を1トークン分ずらしたものを正解にします。

import torch

ids = torch.tensor(ids)

x = ids[:-1]   # 入力:最後のトークンを除いた列
y = ids[1:]    # 正解:最初のトークンを除いた列(=xの1つ先)

文章で書くと、こうなっています。

入力: B-tree indexes are widely used in
正解:        indexes are widely used in databases

つまり、各位置で「次に来るトークン」を当てる問題に変換しているだけです。人間が「この文章の正解はこれ」と付けているわけではありません。 既存のテキストをずらすだけで、無限に近い量の教師データが自動的に手に入ります。これが、LLMがWebスケールで学習できる理由の一つです。

学習ループも、概念だけ見ればとても素直です。

import torch.nn.functional as F

def train_step(model, input_ids, optimizer):
    x = input_ids[:, :-1]
    y = input_ids[:, 1:]

    logits = model(x).logits

    loss = F.cross_entropy(
        logits.reshape(-1, logits.size(-1)),
        y.reshape(-1),
    )

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    return loss.item()

「次トークンを当てる」問題を、ひたすら大量に解かせる。それだけで、文法・知識・文体・簡単な推論までが副産物として身についていきます。

「続きを書く機械」から「指示に従う相手」へ

ただし、次トークン予測だけで作ったモデルは、あくまで「文章の続きを書く機械」です。質問しても、律儀に答えるとは限らず、それらしい続きを書いてしまうこともあります。

ChatGPTのように「指示に従う」ふるまいを身につけさせるには、追加で Instructionデータ を使います。形式は、指示と模範回答のペアです。

{
  "instruction": "B-treeを説明してください",
  "output": "B-treeは、探索・挿入・削除を高速に行うために平衡を保つ木構造です。"
}

これを会話形式に整形し、回答部分の次トークン予測として学習します。

ユーザー:
B-treeを説明してください

アシスタント:
B-treeは探索を高速化する木構造です

仕組みそのものは事前学習と同じ「次トークン予測」ですが、データの中身を「指示 → 望ましい回答」にそろえることで、モデルの応答の性格が変わります。事前学習で言語と知識を、Instruction Tuningで従順さを、と役割が分かれているわけです。

AIが教師データを作り始めている

もう一つ、近年の大きな変化に触れておきます。かつてInstructionデータは人手で書くものでしたが、いまは別のAIに作らせることが一般的になりました。

たとえば「Self-Instruct」と呼ばれる手法では、既存のLLM自身に種となる問いを与え、そこから派生した質問と回答を大量に生成させます。

Explain B-tree.
   ↓ LLMが自動生成
Explain B+Tree.
Compare B-tree and AVL.
Explain insertion into a B-tree.

こうして教師データが自己増殖していきます。「モデルを学習するAI」であると同時に、「学習用データを作るAI」でもある——この二重の役割は、後の回で扱う画像・音声・動画・ワールドモデルでも繰り返し登場する重要なテーマです。

まとめ

第1回の要点は、次の3つに集約できます。

  • 生成AIの学習は「元データをそのまま食わせる」のではなく、「元データから入力と正解のペアを機械的に作る」ことが本質。
  • LLMは、テキストをトークン化して1つずらすだけで「次トークン予測」という教師データを自動生成できる。だからWebスケールで学べる。
  • 事前学習で言語と知識を、Instruction Tuningで指示追従を身につける。そのInstructionデータ自体も、いまはAIが作るようになってきた。

次回は、この「入力と正解を作る」という発想が、画像生成(TXT2IMG)ではまったく別の形——ノイズを当てる問題——として現れることを見ていきます。