この記事の対象読者
- 「LLM」という言葉をよく目にするが、実は正確な意味を説明できない方
- SoraやRunwayなどの動画生成AIも「LLM」だと思っている方
- LLM・SLM・LM・テキストエンコーダーの違いがモヤっとしている方
この記事で得られること
- LLMの正確な定義と境界線が腹落ちする: 何がLLMで何がLLMでないのか、明確な判断基準を持てる
- AI用語の「家系図」が整理できる: LLM・SLM・LM・拡散モデル・テキストエンコーダーの関係を一枚の図で理解
- 「なぜSoraはLLMではないのか」を人に説明できる: 技術的根拠に基づいて、よくある誤解を正せるようになる
この記事で扱わないこと
- Transformerアーキテクチャの数学的詳細(Attention機構の行列演算等)
- 特定のLLMモデル(GPT-4、Claude、Llama等)の性能比較
- LLMの学習方法(事前学習・RLHF等)の詳細手順
1. LLMとの出会い
「最近のAIってすごいよね、LLMでさ、動画まで作れるんでしょ? Soraとか」
これは実際に私が知人から言われた言葉だ。そのとき私は「うーん、まあ広い意味では...」と曖昧に答えてしまった。
でも正直に言おう。SoraはLLMではない。
そして恥ずかしながら、当時の私自身も「LLMとは何か」を正確に説明できる自信がなかった。ChatGPTとかのことでしょ? くらいの認識だった。LM、SLM、LLM、拡散モデル、テキストエンコーダー...。似たような用語が多すぎて、境界線がぼんやりしている。
この記事では、そのモヤモヤを完全にクリアにする。読み終わる頃には「SoraがLLMではない理由」を、技術的根拠を持って誰にでも説明できるようになるはずだ。
ここまでで、この記事の問題意識が共有できたと思う。次は、記事で使う用語を整理しておこう。
2. 前提知識の確認
本題に入る前に、この記事で登場する用語を確認する。
2.1 モデル(Model)とは
AIにおける「モデル」とは、大量のデータから学習したパターンを数学的に表現したものだ。料理に例えるなら、シェフの「経験と勘」を数式に落とし込んだもの。モデルは入力を受け取り、学習したパターンに基づいて出力を生成する。
2.2 パラメータ(Parameter)とは
モデルの中にある「調整可能なつまみ」のようなもの。パラメータが多いほど、より複雑なパターンを学習できる。GPT-4は推定1兆以上のパラメータを持つと言われている。人間の脳のシナプス(神経接続)に例えられることが多い。
2.3 トークン(Token)とは
テキストをAIが処理できる最小単位に分割したもの。英語では1単語が概ね1トークン、日本語では1文字が1〜2トークン程度になる。「こんにちは」は3〜5トークンに分割される。
2.4 Transformer(トランスフォーマー)とは
2017年にGoogleが発表した「Attention Is All You Need」論文で提案されたニューラルネットワークのアーキテクチャ。「入力データの中で、どの部分とどの部分が関連しているか」を効率的に計算する仕組み(Attention機構)を持つ。現代のLLMはほぼすべてこのTransformerをベースにしている。
これらの用語が押さえられたら、LLMの正確な定義を見ていこう。
3. LLMが生まれた背景
3.1 言語モデルの歴史:ルールから確率、そしてニューラルネットワークへ
LLMを理解するには、まず「言語モデル(LM: Language Model)」の歴史を振り返る必要がある。
| 年代 | 手法 | 考え方 | 例 |
|---|---|---|---|
| 1950〜80年代 | ルールベース | 文法規則を人間が手書き | ELIZA(最初のチャットボット) |
| 1990〜2000年代 | 統計的言語モデル | 単語の出現確率を統計的に計算 | n-gramモデル |
| 2010年代前半 | ニューラル言語モデル | ニューラルネットワークで学習 | Word2Vec、LSTM |
| 2017年〜 | Transformer | Attention機構で並列処理 | BERT、GPT |
| 2020年〜 | Large Language Model | Transformerを巨大化 | GPT-3(1750億パラメータ) |
ポイントは、「言語モデル」自体は1950年代から存在する概念であり、LLMはその最新形態に過ぎないということだ。
3.2 「Large」になって何が変わったのか
2020年にOpenAIがGPT-3(1750億パラメータ)を発表したとき、研究者たちは驚くべき現象を目撃した。モデルを巨大にしただけで、明示的に教えていないタスクができるようになったのだ。これは**創発的能力(Emergent Abilities)**と呼ばれる。小さなモデルでは全くできなかったことが、パラメータ数がある閾値を超えると突然できるようになる。
3.3 なぜ「言語」モデルと呼ぶのか
ここが最も重要なポイントだ。LLMの「L」は「Language」、つまり「言語」を扱うモデルであることを明示している。LLMは**テキスト(言語データ)**を入力として受け取り、テキストを出力する。これがLLMの本質的な定義だ。画像も動画も音声も、LLM単体では生成できない。
背景がわかったところで、LLMの正確な定義と他のモデルとの違いを見ていこう。
4. 基本概念と仕組み:LLMの正確な定義と「家系図」
4.1 LLMの定義:3つの条件
LLMと呼ばれるためには、以下の3つの条件をすべて満たす必要がある。
| 条件 | 説明 |
|---|---|
| 1. 言語(テキスト)を扱う | 入力も出力もテキスト(トークン列)。画像や動画を直接生成するモデルは含まない |
| 2. 大規模である | パラメータ数が数十億〜数兆規模。一般に200億パラメータ以上をLLMと呼ぶことが多い |
| 3. 汎用的なタスクに対応 | 特定タスク専用ではなく、翻訳・要約・コード生成・質問応答など多様なタスクを処理できる |
4.2 AIモデルの「家系図」
混同されやすいAIモデル群の関係を整理する。
AI(人工知能)
│
├── 生成AI(Generative AI)
│ │
│ ├── 言語生成系 ◄── テキストを扱う
│ │ ├── LLM ... GPT-4, Claude, Llama 70B
│ │ └── SLM ... Phi-3 Mini (3.8B), Llama 3B, Gemma 2B
│ │
│ ├── 画像生成系 ◄── 画像を扱う(拡散モデル)
│ │ 例: Stable Diffusion, DALL·E 3, Midjourney
│ │
│ ├── 動画生成系 ◄── 動画を扱う(拡散トランスフォーマー)
│ │ 例: Sora, Runway Gen-4, Veo 3
│ │
│ └── 音声生成系 ◄── 音声を扱う
│ 例: ElevenLabs, Whisper
│
├── テキストエンコーダー ◄── テキストを「理解」するが「生成」しない
│ 例: BERT, CLIP, Sentence-BERT
│
└── 推論エンジン ◄── モデルではなく「モデルを動かすソフトウェア」
例: vLLM, TensorRT-LLM
4.3 「SoraはLLMではない」——その明確な理由
なぜSoraやRunwayをLLMと呼ぶのは間違いなのか?
理由1: 出力が「言語」ではない
| モデル | 入力 | 出力 | LLMか? |
|---|---|---|---|
| GPT-4 | テキスト | テキスト | Yes |
| Claude | テキスト | テキスト | Yes |
| Sora | テキスト | 動画 | No |
| Runway Gen-4 | テキスト/画像 | 動画 | No |
| Stable Diffusion | テキスト | 画像 | No |
理由2: 根本的なアーキテクチャが異なる
| 項目 | LLM(例: GPT-4) | 動画生成モデル(例: Sora) |
|---|---|---|
| 核心技術 | 次のトークンを予測 | ノイズを除去して映像を復元 |
| アーキテクチャ | Transformer(デコーダー型) | 拡散トランスフォーマー(DiT) |
| 生成プロセス | トークンを1つずつ逐次生成 | ランダムノイズから反復的にデノイズ |
| 出力空間 | 語彙の確率分布(離散的) | ピクセル/潜在空間の連続値 |
理由3: 「テキストプロンプトを受け付ける」だけではLLMにならない
SoraやStable Diffusionは確かにテキストプロンプトを受け付ける。しかし、それはモデル内部に「テキストエンコーダー」(CLIPなど)を部品として組み込んでいるだけ。
【Soraの内部構造(簡略図)】
テキストプロンプト
│
▼
┌──────────────┐
│テキストエンコーダー│ ← テキストを数値に変換する「部品」
│ (CLIPなど) │
└──────────────┘
│ ベクトル
▼
┌──────────────┐
│拡散トランスフォーマー│ ← ノイズ除去で映像を生成する「本体」
│ (DiT) │
└──────────────┘
│
▼
動画出力
テキストエンコーダーは「通訳」のようなもの。人間の言葉をモデルが理解できる形に変換する。しかし通訳がいるからといって、料理人が言語学者になるわけではない。
4.4 LLMとSLMの境界線
| 分類 | パラメータ数 | 代表例 | 特徴 |
|---|---|---|---|
| SLM | 〜200億未満 | Phi-3 Mini (3.8B), Llama 3.2 3B | 特定タスク特化、エッジデバイスで動作可能 |
| LLM | 200億〜 | GPT-4 (推定1T+), Llama 3.1 70B | 汎用的、創発的能力、高い推論能力 |
ただし、パラメータ数だけが基準ではない。MicrosoftのPhi-3は3.8Bパラメータながら旧世代のLLM(GPT-3.5)に匹敵する性能を発揮する。
4.5 LLMとテキストエンコーダーの違い
| 項目 | LLM | テキストエンコーダー |
|---|---|---|
| 目的 | テキストを生成する | テキストを**理解(ベクトル化)**する |
| 方向性 | テキスト → テキスト | テキスト → 数値ベクトル |
| 代表例 | GPT-4, Claude, Llama | BERT, CLIP, Sentence-BERT |
| 使い道 | チャット、文章作成、コード生成 | 検索、分類、他モデルへの入力 |
基本概念が理解できたところで、実際にLLMがどう動いているのかをコードで確認してみよう。
5. 実践:LLMの動作を体感する
5.1 環境構築
pip install transformers torch openai
5.2 環境別の設定ファイル
開発環境用(config.development.yaml)
# config.development.yaml - ローカル開発環境
llm:
provider: "local"
base_url: "http://localhost:11434/v1"
model: "llama3.2"
temperature: 0.7
max_tokens: 512
logging:
level: "DEBUG"
ステージング環境用(config.staging.yaml)
# config.staging.yaml - テスト環境(API利用)
llm:
provider: "openai"
base_url: "https://api.openai.com/v1"
model: "gpt-4o-mini"
temperature: 0.3
max_tokens: 1024
logging:
level: "INFO"
本番環境用(config.production.yaml)
# config.production.yaml - 本番環境
llm:
provider: "openai"
base_url: "https://api.openai.com/v1"
model: "gpt-4o"
temperature: 0.1
max_tokens: 2048
logging:
level: "WARNING"
5.3 LLMの「次のトークン予測」を体感する
"""
LLMの「次のトークン予測」を可視化するスクリプト
実行方法: python llm_next_token.py
前提: pip install transformers torch
"""
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
def demonstrate_next_token_prediction():
"""次のトークン予測の仕組みを可視化"""
model_name = "gpt2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
prompt = "The capital of Japan is"
inputs = tokenizer(prompt, return_tensors="pt")
print(f"入力: '{prompt}'")
print(f"トークン化: {tokenizer.tokenize(prompt)}")
with torch.no_grad():
outputs = model(**inputs)
next_token_logits = outputs.logits[0, -1, :]
probs = torch.softmax(next_token_logits, dim=-1)
top5 = torch.topk(probs, 5)
print(f"\n--- 次のトークン予測(上位5件)---")
for i in range(5):
token = tokenizer.decode(top5.indices[i])
probability = top5.values[i].item() * 100
bar = "█" * int(probability / 2)
print(f" '{token}' : {probability:.1f}% {bar}")
if __name__ == "__main__":
demonstrate_next_token_prediction()
5.4 実行結果
$ python llm_next_token.py
入力: 'The capital of Japan is'
トークン化: ['The', ' capital', ' of', ' Japan', ' is']
--- 次のトークン予測(上位5件)---
' Tokyo' : 42.3% █████████████████████
' the' : 15.7% ███████
' a' : 5.2% ██
' located': 3.8% █
' not' : 2.1% █
これがLLMの本質だ。「次に来る可能性が最も高いトークンを選び続ける」。この単純な仕組みの積み重ねが、驚くほど人間らしい文章を生成する。
5.5 よくあるエラーと対処法
| エラー・誤解 | 原因 | 正しい理解 |
|---|---|---|
| 「SoraはLLMだ」 | テキストプロンプトを使う=LLMという誤解 | テキストを「受け付ける」のと「生成する」のは別。Soraの出力は動画 |
| 「BERTもLLMだ」 | Transformerを使う=LLMという誤解 | BERTはエンコーダー型でテキスト生成能力がない |
| 「vLLMは新しいLLMだ」 | 名前に「LLM」が含まれるという誤解 | vLLMは推論エンジン。モデルではない |
| 「Llama 3.2 3BはLLMだ」 | 全てのLlamaがLLMという誤解 | 3Bパラメータ版はSLM寄り |
torch.cuda.OutOfMemoryError |
LLMをローカルで動かそうとしてVRAM不足 | VRAMとモデルサイズの関係を確認 |
5.6 環境診断スクリプト
#!/usr/bin/env python3
"""
LLM実行環境診断スクリプト
実行方法: python check_llm_env.py
"""
import sys
import subprocess
def main():
print("=" * 55)
print(" LLM実行環境診断ツール v1.0")
print("=" * 55)
# Python
v = sys.version_info
print(f"\n[Python] {v.major}.{v.minor}.{v.micro}")
# パッケージ
for pkg in ["torch", "transformers", "openai"]:
try:
mod = __import__(pkg)
ver = getattr(mod, "__version__", "?")
print(f"[OK] {pkg} {ver}")
except ImportError:
print(f"[--] {pkg} 未インストール")
# GPU
try:
import torch
if torch.cuda.is_available():
name = torch.cuda.get_device_name(0)
mem = torch.cuda.get_device_properties(0).total_mem / (1024**3)
print(f"\n[GPU] {name} ({mem:.1f} GB)")
if mem >= 24:
print(" → LLM (8B FP16): OK / LLM (70B 4bit): OK")
elif mem >= 8:
print(" → SLM (3B FP16): OK / LLM (8B 4bit): OK")
else:
print(" → SLM (3B 4bit): OK / 量子化モデル推奨")
else:
print("\n[GPU] 利用不可(CPU推論のみ)")
except ImportError:
print("\n[GPU] PyTorch未インストール")
# Ollama
try:
r = subprocess.run(["ollama", "--version"], capture_output=True, text=True, timeout=5)
print(f"\n[Ollama] {r.stdout.strip()}")
except FileNotFoundError:
print("\n[Ollama] 未インストール")
print("\n診断完了")
if __name__ == "__main__":
main()
実装方法がわかったので、次は具体的なユースケースを見ていく。
6. ユースケース別ガイド
6.1 ユースケース1: テキストで対話・文章生成がしたい → LLM / SLM
想定読者: チャットボットや文章作成ツールを作りたい方
選ぶべきモデル: LLMまたはSLM
"""
LLMでチャットボットを実装
前提: Ollamaがlocalhost:11434で起動済み
"""
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
response = client.chat.completions.create(
model="llama3.2",
messages=[
{"role": "system", "content": "あなたは親切なAIアシスタントです。"},
{"role": "user", "content": "Pythonの特徴を教えて"}
],
max_tokens=512
)
print(response.choices[0].message.content)
6.2 ユースケース2: テキストの意味検索・分類がしたい → テキストエンコーダー
想定読者: ドキュメント検索やテキスト分類を実装したい方
選ぶべきモデル: BERT、Sentence-BERT等(LLMではない)
"""
テキストエンコーダーで意味検索
前提: pip install sentence-transformers
"""
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer("all-MiniLM-L6-v2")
documents = [
"Pythonは初心者に優しいプログラミング言語です",
"東京タワーは1958年に完成した電波塔です",
"機械学習はデータからパターンを学ぶ技術です",
]
doc_embeddings = model.encode(documents)
query_embedding = model.encode("AIの学習について教えて")
scores = util.cos_sim(query_embedding, doc_embeddings)[0]
results = sorted(enumerate(scores), key=lambda x: x[1], reverse=True)
print("クエリ: 'AIの学習について教えて'")
for idx, score in results:
print(f" {score:.3f} | {documents[idx]}")
6.3 ユースケース3: 画像や動画を生成したい → 拡散モデル
想定読者: テキストから画像・動画を生成したい方
選ぶべきモデル: Stable Diffusion、DALL·E、Sora等(LLMではない)
"""
拡散モデルで画像生成(LLMではない処理)
前提: pip install diffusers torch
注意: GPU(VRAM 8GB以上)が必要
"""
from diffusers import StableDiffusionPipeline
import torch
pipe = StableDiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-2-1",
torch_dtype=torch.float16
).to("cuda")
# テキストを「入力」に使うが、出力は「画像」→ LLMではない
prompt = "A serene Japanese garden with cherry blossoms"
image = pipe(prompt, num_inference_steps=30).images[0]
image.save("generated_image.png")
print("画像生成完了(これは拡散モデルであり、LLMではありません)")
ユースケースを把握できたところで、この先の学習パスを確認しよう。
7. 学習ロードマップ
初級者向け(まずはここから)
- OllamaをインストールしてLLMを手元で動かしてみる
- 上記の「次のトークン予測」スクリプトを実行して、LLMの動作原理を体感する
- ChatGPTやClaudeを使いながら「これはLLMが次のトークンを予測した結果なんだ」と意識してみる
中級者向け(実践に進む)
- PyTorchでTransformerの基礎を学ぶ
- Hugging FaceのTransformersライブラリで様々なモデル(LLM、エンコーダー、拡散モデル)を試す
- GGUFや量子化技術を学び、ローカルでのLLM活用を最適化する
上級者向け(さらに深く)
- Attention Is All You Need原論文を読み、Transformerを数学的に理解する
- LLMのファインチューニング(LoRA等)を実践する
- マルチモーダルモデル(GPT-4o、Gemini等)のアーキテクチャを学ぶ
8. まとめ
この記事では、LLMについて以下を解説した。
- LLMの正確な定義: 「大規模」で「言語(テキスト)」を扱う「生成モデル」。3条件すべてを満たすものだけがLLM
- SoraがLLMではない理由: 出力が動画であること、アーキテクチャが拡散モデルであること、テキストエンコーダーを「部品として使っている」だけであること
- AIモデルの家系図: LLM・SLM・テキストエンコーダー・拡散モデル・推論エンジンの関係を整理
判断早見表
| 質問 | Yes → | No → |
|---|---|---|
| テキストを生成するか? | 言語モデルの可能性あり | LLMではない |
| パラメータ数が200億以上か? | LLMの可能性あり | SLM寄り |
| 汎用的なタスクに対応するか? | LLM | 特化型モデル |
私の所感
この記事を書いて改めて思ったのは、「LLM」という言葉が便利すぎるゆえに、何でもかんでも「LLM」と呼ばれてしまう現状がある、ということだ。
でも、区別を曖昧にしたまま話を進めると、技術選定で間違った判断をしてしまう。「画像生成したいのでLLMを導入しよう」は、「寿司が食べたいのでイタリアンレストランに行こう」くらいの的外れになりかねない。
正確な用語を使えることは、エンジニアとしての信頼に直結する。この記事が、あなたの「LLM理解」をアップデートする一助になれば嬉しい。
次に誰かが「SoraってLLMでしょ?」と言ったら、自信を持って訂正してあげてほしい。
参考文献
- Attention Is All You Need (Vaswani et al., 2017)
- Language Models are Few-Shot Learners (GPT-3論文, Brown et al., 2020)
- Red Hat - SLMs vs LLMs
- Splunk - LLMs vs. SLMs
- DataCamp - SLMs vs LLMs: A Complete Guide
- Microsoft - Key differences between SLMs and LLMs
- MIT Technology Review - How do AI models generate videos?
- Hugging Face - State of Open Video Generation Models
- vLLM公式サイト
この記事が役に立ったら、いいね・ストックしていただけると励みになります。
他にもAI/LLM関連の記事を書いています:
- Ollamaってなんだ?
- llama.cppってなんだ?
- GGUFってなんだ?
- LM Studioってなんだ?
- PyTorchってなんだ?
- CUDAってなんだ?
- GPUってなんだ?
- VRAMってなんだ?