メインコンテンツへスキップ

7.1.4 事前学習済み言語モデルの概観

転移学習の適応マップ

実務での判断

事前学習済みモデルは、あなたの業務を自動で理解する魔法ではありません。再利用できる言語 foundation です。大事なのは、その foundation を最小コストで信頼できる形に適応させることです。

まずメンタルモデルを作る

Pretraining が一般化する前は、NLP タスクごとに別のモデルとデータ処理が必要になることが多くありました。現代の NLP は違う出発点から始まります。

large general corpus -> pretrained foundation -> task adaptation -> product behavior

Foundation model は、すでに有用な言語パターンを学んでいます。多くのタスクでは次のどれかで適応します。

  • prompt をより安定させる。
  • RAG で不足知識を補う。
  • 小さな task head を訓練する。
  • LoRA や full update で fine-tuning する。
  • 評価と guardrail で挙動を制御する。

Pretraining が与えるもの

Pretraining は主に 3 つの実務的な資産を与えます。

資産意味
再利用できる表現テキストが有用な hidden states に写るclassification、ranking、retrieval
再利用できる生成能力文章を続ける、変換するchat、writing、code generation
再利用できる言語 prior文法、よくあるパターン、高頻度事実下流データが少なくて済む

ただし、知識が最新であること、業務ポリシーが正しいこと、安全な挙動は保証されません。そこにはデータ、検索、評価、デプロイ時の制御が必要です。

実験:共有 foundation + 2 つの task head

この玩具例は本物の LLM を訓練しません。ただし構造は示します。1 つの共有 encoder と、2 つの異なる head です。

from math import exp

word_vectors = {
"refund": [0.9, 0.8, 0.1],
"order": [0.8, 0.7, 0.2],
"password": [0.1, 0.2, 0.9],
"reset": [0.1, 0.1, 0.95],
"great": [0.7, 0.2, 0.1],
"bad": [0.2, 0.8, 0.1],
}


def encode(text):
tokens = text.lower().split()
valid = [word_vectors[token] for token in tokens if token in word_vectors]
dim = len(valid[0])
return [sum(vec[i] for vec in valid) / len(valid) for i in range(dim)]


def dot(a, b):
return sum(x * y for x, y in zip(a, b))


def softmax(scores):
exps = [exp(score) for score in scores]
total = sum(exps)
return [value / total for value in exps]


intent_head = {
"refund_intent": [1.0, 0.9, 0.1],
"password_intent": [0.1, 0.2, 1.0],
}

sentiment_head = {
"positive": [1.0, 0.2, 0.0],
"negative": [0.1, 1.0, 0.0],
}


def classify(vector, head):
labels = list(head.keys())
scores = [dot(vector, head[label]) for label in labels]
probs = softmax(scores)
best = max(zip(labels, probs), key=lambda item: item[1])
rounded = dict(zip(labels, [round(prob, 3) for prob in probs]))
return best, rounded


for text in ["refund order", "reset password"]:
vector = encode(text)
best, probs = classify(vector, intent_head)
print("intent:", text, "->", best, probs)

for text in ["great refund", "bad refund"]:
vector = encode(text)
best, probs = classify(vector, sentiment_head)
print("sentiment:", text, "->", best, probs)

期待される出力:

intent: refund order -> ('refund_intent', 0.7604230019887309) {'refund_intent': 0.76, 'password_intent': 0.24}
intent: reset password -> ('password_intent', 0.654188113761243) {'refund_intent': 0.346, 'password_intent': 0.654}
sentiment: great refund -> ('positive', 0.5793242521487495) {'positive': 0.579, 'negative': 0.421}
sentiment: bad refund -> ('negative', 0.5361866202317948) {'positive': 0.464, 'negative': 0.536}

共有 foundation と task head の結果図

読み方:

  • encode() が共有 foundation。
  • intent_headsentiment_head が task-specific adapter。
  • foundation は再利用され、最後の判断層だけが変わる。
  • 実際のモデルでは、手書き vector ではなく、百万から数千億規模の学習済み parameter が使われる。

主なモデルファミリー

ファミリー典型的な情報の流れ得意
Encoder-only入力を双方向に読むclassification、extraction、matching、embeddingsBERT 系
Decoder-onlycausal に next token を予測chat、completion、code、tool useGPT/LLaMA/Qwen 系
Encoder-decoder入力を読んでから出力を生成translation、summarization、structured generationT5/BART 系

これは最初のフィルタであって、絶対ルールではありません。現代のシステムは retrieval、tools、serving constraints と組み合わせて設計されます。

適応方法を選ぶ

状況まず試すこと理由
モデルがタスク形式をほぼ理解しているprompt 改善反復が最速
答えが private / fresh knowledge に依存するRAG重みを変えずに知識を更新できる
安定した label や score が必要task head / classifier安く、評価しやすい
style や domain behavior を変えたいLoRA / PEFT管理しやすいコストで挙動を変える
高度に特殊で、データも強いfull fine-tuning最大の柔軟性。ただし高リスク高コスト

これは信念ではなくエンジニアリング判断です。評価を通る最小の変更を選びます。

よくある失敗モード

  • Pretraining data mismatch: 一般言語は学んでいても、あなたの業務ポリシーを知っているとは限らない。
  • Stale knowledge: 最近の事実を知らないことがある。
  • Contamination: 評価データやテストデータに似たものが訓練コーパスに入っていることがある。
  • Over-adaptation: fine-tuning で一部は良くなり、別の能力が落ちることがある。
  • Evaluation gaps: デモ prompt は良くても、境界ケースで失敗することがある。

練習

  1. 実験に topic_head を追加し、account_topiccommerce_topic を分類する。
  2. bad の vector を変えると sentiment confidence はどう変わるか。
  3. private policy を持つ support bot なら、prompt、RAG、task head、fine-tuning のどれから始めるか。理由も書く。
  4. 本番で pretrained model を信頼する前に、どの 2 つのチェックを行うか。
  5. 「大きいモデル」と「今のタスクに合うモデル」が同じではない理由を説明する。

まとめ

Pretraining はワークフローを変えます。

do not relearn language every time -> reuse a foundation -> adapt with evidence

このパターンが見えると、Prompt、RAG、fine-tuning、alignment、Agent はすべて、同じ再利用可能な foundation を別の方法で制御する技術として理解できます。