DeNA LLM スタディ Part 1: LLM基礎と2025年AI現況
DeNA LLMスタディシリーズ開始。GPT-4、Claude、Gemini比較、Next Token Prediction、Instruction Tuning、Reasoningモデル、プロンプトエンジニアリング基礎を扱います。
シリーズ: DeNA LLM スタディ (1/5)
DeNA LLM スタディを始めるにあたって
2025年、AI技術の発展速度は想像を超えています。DeNAで実施されたLLMスタディ資料をもとに、最新LLM技術の基礎から実践活用まで5回にわたって整理します。今回のPart 1では、LLMの基本原理と2025年現在のAIエコシステムを見ていきます。
資料出典: 本記事はDeNA 社内勉強会資料を基に作成されました。
2025年主要LLM現況
性能比較: GPT-4 vs Claude vs Gemini
2025年現在、3つの主要LLMが市場を主導しています:
| モデル | 開発会社 | 特徴 | 強み |
| ------------------------------------ | --------- | ---------------- | -------------------------- |
| <strong>GPT-5.1 / GPT-4o</strong> | OpenAI | 128Kコンテキスト | 汎用性、マルチモーダル |
| <strong>Claude Opus 4</strong> | Anthropic | 200Kコンテキスト | エージェント、コーディング、分析 |
| <strong>Claude Sonnet 4</strong> | Anthropic | 200Kコンテキスト | コーディング、コスト効率 |
| <strong>Gemini-2.5-Pro</strong> | Google | 1Mコンテキスト | マルチモーダル、超長文 |
| <strong>DeepSeek-R1</strong> | DeepSeek | 64Kコンテキスト | 推論、オープンソース |
ベンチマーク性能 (2025年12月基準)
graph LR
A[LLMベンチマーク] --> B[MMLU]
A --> C[HumanEval]
A --> D[MATH]
B --> B1["Claude Opus 4: 91.2%"]
B --> B2["GPT-5.1: 90.8%"]
B --> B3["Gemini-2.5: 89.5%"]
C --> C1["Claude Sonnet 4: 94.5%"]
C --> C2["GPT-4o: 92.1%"]
C --> C3["DeepSeek-R1: 90.8%"]
D --> D1["DeepSeek-R1: 97.3%"]
D --> D2["o3: 96.7%"]
D --> D3["Claude Opus 4: 88.5%"]
MMLU: Massive Multitask Language Understanding (57科目の知識評価) HumanEval: プログラミング能力評価 MATH: 数学問題解決能力
価格比較 (2025年12月基準)
graph TD
subgraph Input["入力トークンコスト (per 1M tokens)"]
I1["GPT-4o: $2.50"]
I2["Claude Sonnet 4: $3"]
I3["Gemini-2.5-Pro: $1.25"]
I4["DeepSeek-R1: $0.55"]
I1 ~~~ I2 ~~~ I3 ~~~ I4
end
subgraph Output["出力トークンコスト (per 1M tokens)"]
O1["GPT-4o: $10"]
O2["Claude Sonnet 4: $15"]
O3["Gemini-2.5-Pro: $5"]
O4["DeepSeek-R1: $2.19"]
O1 ~~~ O2 ~~~ O3 ~~~ O4
end
Input ~~~ Output
重要インサイト: DeepSeek-R1はコストパフォーマンスに優れ、Claudeはコーディングとエージェントタスクで優位性を示します。
Next Token Prediction: LLMの核心原理
Transformerアーキテクチャ
LLMの基盤となるTransformerは、2017年にGoogleの”Attention is All You Need”論文で初めて紹介されました。
graph TD
A[入力テキスト] --> B[Tokenization]
B --> C[Embedding]
C --> D[Self-Attention]
D --> E[Feed Forward]
E --> F[次トークン予測]
F --> G[出力テキスト]
D -.-> D1["Query, Key, Value"]
E -.-> E1["Layer Normalization"]
F -.-> F2["Softmax確率分布"]
Next Token Prediction 動作原理
# 簡単なNext Token Prediction例
def predict_next_token(context: str, model: LLM) -> str:
"""
与えられたコンテキストから次トークンを予測
Args:
context: "The quick brown"
model: LLMモデル
Returns:
"fox" (最も確率の高いトークン)
"""
# 1. トークン化
tokens = tokenize(context) # ["The", "quick", "brown"]
# 2. 埋め込み変換
embeddings = model.embed(tokens)
# 3. Transformerレイヤー通過
hidden_states = model.forward(embeddings)
# 4. 確率分布計算
logits = model.lm_head(hidden_states[-1]) # 最後のトークンのhidden state
probs = softmax(logits)
# 5. 最も確率の高いトークン選択
next_token = argmax(probs) # "fox" (prob: 0.87)
return next_token
重要: LLMは単語ではなくトークン単位で動作します。英語は1単語 ≈ 1トークン、日本語は1単語 ≈ 2〜3トークンです。
最新研究動向: Mixture of Experts (MoE)
2024年から大型モデルはMoEアーキテクチャを採用しています:
graph TD
A[入力] --> B[Router]
B --> C1[Expert 1<br/>コーディング]
B --> C2[Expert 2<br/>数学]
B --> C3[Expert 3<br/>言語]
B --> C4[Expert 4<br/>常識]
C1 --> D[出力統合]
C2 --> D
C3 --> D
C4 --> D
利点:
- 計算効率性: 全パラメータの一部のみ活性化
- 専門化: 各Expertが特定ドメインに特化
- 拡張性: Expert追加で性能向上可能
Instruction Tuning: AIを指示に従えるように
Pre-training vs Fine-tuning vs RLHF
graph TD
A[1. Pre-training] --> B[2. Supervised Fine-tuning<br/>SFT]
B --> C[3. RLHF]
C --> D[Production Model]
A -.-> A1["大規模テキストデータ<br/>(数兆トークン)"]
B -.-> B1["高品質指示-応答ペア<br/>(数万〜数十万個)"]
C -.-> C1["人間フィードバック基盤<br/>報酬モデル学習"]
Instruction Tuning データセット例
# SFT (Supervised Fine-Tuning) データ形式
- instruction: "次のJSONをパースして名前を抽出してください。"
input: '{"user": {"name": "John", "age": 30}}'
output: "John"
- instruction: "このコードのバグを修正してください。"
input: |
def add(a, b):
return a - b
output: |
def add(a, b):
return a + b # - の代わりに + 使用
- instruction: "次の文を日本語に翻訳してください。"
input: "Hello, world!"
output: "こんにちは、世界!"
Post-training 技法比較
| 技法 | 目的 | データ要求量 | コスト |
|---|---|---|---|
| SFT | 指示に従う学習 | 数万個 | 低い |
| RLHF | 人間の好みに整列 | 数千〜数万個 | 高い |
| DPO | 好み直接最適化 | 数千個 | 中間 |
| Constitutional AI | 価値整列自動化 | 非常に少ない | 低い |
DPO (Direct Preference Optimization): 2023年にStanfordで提案された方法で、RLHFよりシンプルで効果的です。
Reasoning モデル: 考えるAI
o1、o3とDeepSeek-R1の登場
2024年9月、OpenAIは「考える」AIモデルo1を発表し、2025年には改善版o3を公開しました。特にDeepSeek-R1はオープンソースでありながら最高レベルの数学・推論性能を示しています:
graph TD
A[ユーザー質問] --> B[内部推論過程<br/>Chain of Thought]
B --> C[中間ステップ1]
C --> D[中間ステップ2]
D --> E[中間ステップ3]
E --> F[最終回答]
B -.-> B1["数秒〜数分要する"]
C -.-> C1["仮説立案"]
D -.-> D1["検証"]
E -.-> E1["結論導出"]
Reasoning モデル性能比較
| ベンチマーク | GPT-4o | o3 | DeepSeek-R1 |
| ----------------------------------------------- | --------------- | --------------- | --------------- |
| <strong>AIME 2024</strong> (数学オリンピアード) | 13.4% | 96.7% | 79.8% |
| <strong>Codeforces</strong> (コーディング大会) | 11th percentile | 99th percentile | 96th percentile |
| <strong>GPQA Diamond</strong> (科学) | 50.6% | 87.7% | 71.5% |
| <strong>MATH-500</strong> | 74.6% | 96.7% | 97.3% |
Chain of Thought (CoT) プロンプティング
一般モデルもCoTを使用すれば推論能力を向上できます:
# ❌ 一般プロンプト
"234 × 567を計算してください。"
→ 間違った回答の可能性が高い
# ✅ CoT プロンプト
"234 × 567をステップバイステップで計算してください。各ステップの中間結果を示してください。"
→ 正確度が大幅に向上
実際のCoT例:
質問: 234 × 567を計算してください。
CoT 応答:
1. まず234を200 + 30 + 4に分解します。
2. それぞれを567に掛けます:
- 200 × 567 = 113,400
- 30 × 567 = 17,010
- 4 × 567 = 2,268
3. すべてを足します:
113,400 + 17,010 + 2,268 = 132,678
答: 132,678
プロンプトエンジニアリング基礎
Zero-shot vs Few-shot vs Chain of Thought
graph TD
A[プロンプト戦略] --> B[Zero-shot]
A --> C[Few-shot]
A --> D[Chain of Thought]
B --> B1["指示のみ提供<br/>'感情を分析してください'"]
C --> C1["例を提供<br/>'ポジティブ: 良い<br/>ネガティブ: 悪い'"]
D --> D1["思考過程誘導<br/>'ステップバイステップで分析してください'"]
B1 -.-> B2["正確度: 60%"]
C1 -.-> C2["正確度: 80%"]
D1 -.-> D2["正確度: 90%"]
Temperature パラメータの影響
# Temperature設定による出力の違い
# Temperature = 0 (決定的、一貫性)
response = model.generate(
"Pythonでフィボナッチ数列を書いてください。",
temperature=0
)
# 出力: 常に同じコード (最も確率の高いトークン選択)
# Temperature = 0.7 (バランス、推奨)
response = model.generate(
"創造的なストーリーを書いてください。",
temperature=0.7
)
# 出力: 適度に多様で一貫性維持
# Temperature = 1.5 (創造的、不安定)
response = model.generate(
"完全に新しいアイデアを提案してください。",
temperature=1.5
)
# 出力: 非常に多様だが一貫性低い、時に奇妙な出力
効果的なプロンプト作成原則
-
明確性: 曖昧な指示を避ける
❌ "これについて教えて" ✅ "Claude Sonnet 4の主な特徴3つを150字以内で説明してください。" -
コンテキスト提供: 背景情報を含める
❌ "コードレビューして" ✅ "次はReactコンポーネントです。性能、可読性、アクセシビリティの観点からレビューしてください: [コード]" -
出力形式指定: 望む構造を明示
✅ "次の形式で応答してください: 1. 要約 (1文) 2. 主要ポイント (3つ) 3. 実行計画 (ステップバイステップ)"
実習 A インサイト: OpenAI API 実践
API基本使用法
from openai import OpenAI
client = OpenAI(api_key="your-api-key")
# 基本チャット完成
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "あなたは役立つAIアシスタントです。"},
{"role": "user", "content": "LLMとは何ですか?"}
],
temperature=0.7,
max_tokens=500
)
print(response.choices[0].message.content)
会話履歴管理
# 会話コンテキスト維持
conversation_history = [
{"role": "system", "content": "あなたはPython専門家です。"}
]
def chat(user_message: str) -> str:
# ユーザーメッセージ追加
conversation_history.append({"role": "user", "content": user_message})
# API呼び出し
response = client.chat.completions.create(
model="gpt-4o",
messages=conversation_history,
temperature=0.7
)
# アシスタント応答保存
assistant_message = response.choices[0].message.content
conversation_history.append({"role": "assistant", "content": assistant_message})
return assistant_message
# 会話例
print(chat("リスト内包表記を説明してください。"))
print(chat("例のコードを見せてください。")) # 以前のコンテキスト維持
print(chat("これを辞書内包表記に変えてください。")) # 連続的な会話
トークン使用量最適化
import tiktoken
def count_tokens(text: str, model: str = "gpt-4") -> int:
"""テキストのトークン数を計算"""
encoding = tiktoken.encoding_for_model(model)
return len(encoding.encode(text))
# プロンプト最適化例
long_prompt = "これは非常に長いプロンプトです..." * 100
token_count = count_tokens(long_prompt)
print(f"トークン数: {token_count}") # 例: 8,543 tokens
# コスト計算
input_cost = (token_count / 1_000_000) * 10 # GPT-4 Turbo 入力コスト
print(f"予想コスト: ${input_cost:.4f}")
主要学習ポイント
1. モデル選択基準
graph TD
A[タスクタイプ] --> B{何をしたい?}
B --> C[コーディング/分析]
B --> D[汎用対話]
B --> E[超長文処理]
B --> F[コスト最適化]
B --> G[複雑な推論]
C --> C1["Claude Sonnet 4"]
D --> D1["GPT-4o"]
E --> E1["Gemini-2.5-Pro"]
F --> F1["GPT-4o-mini or<br/>Gemini-2.5-Flash"]
G --> G1["o3 or<br/>DeepSeek-R1"]
2. 性能向上チェックリスト
- ✅ 明確な指示: 曖昧性を排除
- ✅ Few-shot例: 3〜5個提供
- ✅ CoT プロンプティング: 複雑な推論タスク
- ✅ Temperature調整: タスクに合わせて設定
- ✅ 出力形式指定: 構造化された応答
- ✅ コンテキスト管理: トークン制限考慮
3. 実践活用シナリオ
| シナリオ | 推奨モデル | 設定 |
|---|---|---|
| コードレビュー | Claude Sonnet 4 | temp=0.3 |
| 創造的な執筆 | GPT-4o | temp=0.9 |
| データ分析 | Claude Sonnet 4 | temp=0.1 |
| カスタマーサポートチャットボット | GPT-4o-mini | temp=0.7 |
| 長文ドキュメント要約 | Gemini-2.5-Pro | temp=0.5 |
| 複雑な数学/推論 | DeepSeek-R1 | temp=0.1 |
次回予告
Part 2では構造化出力とマルチLLMパイプラインを扱います:
- JSONモードとFunction Calling
- 構造化出力の実践活用
- マルチLLMパイプライン設計
- Pydanticを活用した型安全性
- 実習 B: 複雑なデータ抽出システム構築
次の記事へ: Part 2: 構造化出力とマルチLLMパイプライン
参考資料
- DeNA LLM スタディ資料 (Zenn)
- OpenAI API Documentation
- Anthropic Claude Documentation
- Google Gemini Documentation
- Attention is All You Need (Transformer論文)
- Chain of Thought Prompting
作成日: 2025年12月8日 シリーズ: DeNA LLM スタディ (1/5) タグ: #LLM #AI #PromptEngineering #DeNA
他の言語で読む
- 🇰🇷 한국어
- 🇯🇵 日本語(現在のページ)
- 🇺🇸 English
- 🇨🇳 中文
この記事は役に立ちましたか?
より良いコンテンツを作成するための力になります。コーヒー一杯で応援してください!☕