Tech Blog

情報量に飲まれない学習設計 — RAG/LLMチューニングを"深く3つ"に絞り、測るまでを1単位にする

RAG LLM Evaluation Fine-tuning 学習設計 Operations

はじめに

この分野は、学ぶべきツールと手法が多すぎる。評価、検索、リランク、ファインチューニング、可観測性——それぞれに定番ライブラリが何本もあり、毎週のように新しい名前が流れてくる。全部を追えば、どれも中途半端に終わる。だから学ぶ前に、何を捨てて何を深掘るかを先に設計した。この記事は、その学習ロードマップそのものの設計記録だ。

題材は、個人で運用している RAG(過去の記録を意味で検索して引き出す、外付けの長期記憶のような仕組み)だ。RAG そのものの前提は、この記事へ譲る。

AI に5回訂正された夜 — 個人 RAG を5年付き合える相棒にする設計思想

この記事は、「壊れないRAG」「汚れないRAG」と対になる、**「測れるRAG」**の話でもある。壊れず汚れない土台の上で、では自分の技能をどう測って伸ばすか——その設計だ。要点を先に置く。

  • ツールを広く浅く触らない。深く3つ(評価・検索・ファインチューニング)に絞り、残りは「知るだけ」に留める
  • 「読んだ」で終わらせない。自分の実データに接続して測るまでを、学習の最小単位とする
  • 評価(測る手段)を最初に立てる。測れなければ、検索やファインチューニングの改善が「良くなった気がする」で終わるから

なぜ「深く3つ」に絞ったのか

いちばん避けたかったのは、20個のツールを浅く触って「一通り知っている」つもりになることだ。陥りやすい罠で、触った数だけ増えて、測れる腕は一つも増えない。

そこで、層ごとに定番ツールを並べ、自分がどこを持っていてどこが薄いかを棚卸しした。すると、埋めるべきは「ツールの数」ではなく、測る・比べる・データを作るという三つの薄い脚だと分かった。絞り込みはこうなった。

                     RAG/LLM チューニングの学習範囲

        ┌─────────┬───────────┼───────────┬─────────────┐
        ▼         ▼           ▼           ▼             ▼
     評価(E)    検索(R)     FT(F)     オーケスト     …その他多数
       │          │          │      レーション(O)   (浅く触らない)
    ═══╪══════════╪══════════╪═══        │
     深く掘る3本の柱(E→R→F)            知るだけ
       │                                  (過投資しない)
       └──▶ 各柱は「実データで測るまで」を1単位(次節)

深く掘るのは評価・検索・ファインチューニングの3本。オーケストレーション(複数の部品をつなぐ枠組み)は「読めて語れる」程度でよいと割り切った。理由は後述するが、その部分は既に自作で概念を持っているので、標準の枠組みは”翻訳”できれば足りるからだ。

保有と欠けの棚卸し(現在地マップ)

絞り込みの根拠にした棚卸しを、そのまま載せる。自己採点ではなく、「どの層に何があり、何が薄いか」を淡々と並べた設計用の地図だ。

標準ツール自分の現状厚み
評価Ragas / DeepEval関連度の判定器を自作(後述)薄い(標準化・自動回帰が未)
可観測性LangSmith / Langfuseログは自作、トレース基盤は未薄い
検索・リランクpgvector / 各種 rerankerハイブリッド検索+リランクを実運用中核は保有(横比較が未)
つなぎ(O)LangChain / LlamaIndex独自に実装済み概念は保有(標準語彙が未)
基盤・FTQLoRA / LoRA個人RAG向けに訓練・投入済実物あり(データ設計と評価が薄い)

薄いのは三か所——(A) 測定の標準化・自動化、(B) 検索方式の横比較、(C) ファインチューニングのデータ設計。この三つを埋める順に、学習トラックを並べた。

学習の型 ― 「測るまで」を1単位にする

各トラックに共通の進め方を、先に一つの型として固定した。ここが設計の肝だ。

   ① 読む(公式Doc・概念)


   ② 自分の実データで動かす ◀─────────┐
        │   (トイデータ/チュートリアルで終えない)
        ▼                            │ 測れない=まだ動かせていない
   ③ 測る(正解付きデータで数値を出す)─┘
        │   ここに到達して初めて「理解した」と称してよい

   ④ 記事化(学びを固定+ポートフォリオ)

「①読んだ」を「理解した」と呼ばない。③自分の実データで測るまで到達して初めて一単位が完了、とした。チュートリアルのサンプルデータで動いても、それは「動かせた」ではなく「なぞれた」に過ぎない。測って数字が出せなければ②に戻る、という戻りエッジを型に組み込んである。個人RAGの成功/失敗を「対応して成功するまで」を1セットで記録する規律と、同じ考え方だ。

なぜ評価を、いちばん最初に置くのか

三本の柱には順序を付けた。評価(E)→ 検索(R)→ ファインチューニング(F)。評価を先頭にしたのには、はっきりした理由がある。

測る物差しが無いまま検索を変えても、ファインチューニングをやり直しても、良し悪しは「なんとなく良くなった気がする」でしか言えない。実際、検索の改善は「測る」を先に立てたからこそ数字で語れた。ハイブリッド検索を入れて、肝心なときの想起率(recall)を 0.2 から 1.0 まで動かした——この「0.2→1.0」は物差しがあって初めて言える数字だ。その物差しの立て方はこの記事に書いた。

ベクトル検索だけのRAGは「肝心なときに思い出さない」— ハイブリッド検索+測定で recall を 0.2→1.0 にした話

   E: 評価基盤(物差し)
        │  これが立たないと ↓ の良否が数字で言えない
   ┌────┴────┐
   ▼         ▼
   R: 検索    F: ファインチューニング
   (比べる)  (鍛える)

物差し無しの R や F は、賭けと変わらない。だから評価を最初に据えた。ここが今いちばん薄く、そして埋めれば残り全部の判断が数字に変わる、最大の投資対効果がある場所だ。

三本の柱の中身と、「知るだけ」のO

各トラックの「学ぶ概念/作る成果物/完了条件」を並べる。完了条件は、すべて数値や動く成果物で定義した。

学ぶ概念(初出を噛み砕く)作る成果物完了条件
E 評価Faithfulness(答えが根拠に忠実か=作り話をしていないか)、文脈の再現率/適合率、LLM-as-judge(LLM自身に採点させる)、回帰テスト正解付きデータ(golden set)に Ragas(評価用ライブラリ)を接続した評価の土台+変更前後を自動比較する回帰スイート。Langfuse(自己ホストで動く、処理を可視化する基盤)でトレースを見える化ハイブリッド検索の係数やリランクを替えたとき、良否を数値で判定できる
R 検索密ベクトル(意味の近さで引く)/疎ベクトル(語の一致で引く)/ハイブリッド、reranker(取得結果を関連順に並べ直す器)、chunking(文書の刻み方)、クエリ変換pgvector(Postgres上でベクトル検索する拡張)版の検索を実装し、既存版と同一データで横比較(想起率・適合率・速度)「どちらの方式をなぜ選ぶか」を、測った数字で語れる
F ファインチューニングデータセット設計(多様性・リーク防止)、評価用の分割、LoRA/QLoRA(省メモリで微調整する手法)データを意図して設計し直して再訓練し、訓練に使わないデータ(hold-out)で評価・比較「なぜこのデータ構成か・精度がどう動いたか」を数字で説明できる

E で自作した関連度の判定器と、F で訓練した微調整モデルは、既に手元にある実物だ。それぞれの実装記事へ譲る。

RAGに「関係あるか」を見分ける小さな判定器を置く — 取得したものを、全部は渡さない

RTX 2070ノートだけで個人RAGをファインチューニングした話

E の狙いは、この自作の判定器を、Ragas という標準の物差しに接続・置換することにある。自分で発明した勘を、他人と比較できる共通の目盛りに載せ替える、という作業だ。

一方、四つ目のO(オーケストレーション)は深追いしない。独自に組んだ活性化層やつなぎの層で、概念そのものは既に手の内にある。

AIに毎ターン「今、思い出すべきこと」を差し込む — 個人RAGの活性化層

だからOは、LangChain などの標準の枠組みを「読めて、自作の仕組みをその語彙で説明できる」ところまでで十分とした。小さく一本だけ写経して、それ以上は投資しない。

先回りで潰すアンチパターン

この設計は、裏返せば「やってしまいがちな失敗」を先に列挙し、それぞれに対策を紐づけたものだ。

  • ツールを広く浅く触る:20個を触って一つも測れない。→ だから深く3つに絞り、Oは知るだけにした。
  • 測らずに改善する:「良くなった気がする」で止まる。→ だから評価(E)を最初に立てる。
  • トイデータで満足する:チュートリアルのサンプルで完結する。→ だから「自分の実データに接続して測るまで」を1単位にした。
  • 枠組みに過投資する:つなぎのライブラリを極めようとする。→ 概念は自作で持っているので、標準語彙へ翻訳できれば足りる。

四つとも、知識ではなく設計で潰す種類の失敗だ。学び始める前に地図の上で潰しておけば、走り出してから溶かす時間が減る。

学びも、測って初めて「進んだ」と言える

このロードマップの背骨は一つだ。「読んだ」を「できる」と混同せず、自分の実データで測るところまでを一単位にする。 そして測る物差し(評価)を、何よりも先に立てる。物差しさえ立てば、検索もファインチューニングも「賭け」から「測定」に変わり、伸びを数字で確かめながら進める。

これは、記憶を壊れないように保ち、汚れないように正す話と、同じ思想の三本目だ。壊れず・汚れず・測れる——その三つが揃って初めて、外付けの記憶は「ただ増える」ものから「鍛えられる」ものになる。壊れない側と汚れない側は、対になる二本の記事に書いた。

AWS S3 + restic で相棒の脳を暗号化オフサイトバックアップ — 記憶を”平文のままクラウドに上げず”に遠隔退避する

RAGに溜めた誤った教訓を、あとから撤回する仕組みを作った — 相棒を毎ターン歪める汚染を自動で消す

そして、これらを健全なまま保ち続けるための毎週の点検の仕組みは、この記事に書いた。

個人RAGの健全性を、意志でなく仕組みで毎週点検する — 多角ヘルスチェックと、その実行を強制する時限ゲート

気軽にメッセージください

仕事の依頼、案件紹介、ご感想・ご質問なんでもお待ちしております。 高い志をもった同士の皆様と繋がることを切に願っております。 これからも人生を掛けたチャレンジを続けていきます。 何卒よろしくお願い致します。