RAG⼊⾨ 基礎のキ BPStyle#180 kasada
もくじ ● RAG とは ● RAGの構造 ● RAG開発の重要ポイント
もくじ ● RAG とは ● RAGの構造 ● RAG開発の重要ポイント
RAG (Retrieval-Augmented Generation) とは 歴史と背景 検索 + ⽣成 2020年にFacebook AI Research(現Meta)が発表 LLMが回答を⽣成する前に、外部の知識ソースから 関連情報を「検索(Retrieval)」し、その結果を プロンプトに含めて回答を「⽣成 (Generation)」させる⼿法 [1] https://arxiv.org/abs/2005.11401 した論⽂[1]で、「RAG」の概念が導⼊
なぜRAGが必要なのか? LLMの課題 未知の情報: LLMは学習データに含まれない最新情報や、社外秘の内部データを知らない 情報の鮮度: 学習カットオフ以降の出来事には対応できず、知識が古くなっている場合がある ハルシネーション: 事実に基づかないもっともらしい嘘を出⼒するリスクがある 解決策: 外部データに基づいて回答させる「グラウンディング」が必要 これをシステムとして構築したものがRAG
もくじ ● RAG とは ● RAGの構造 ● RAG開発の重要ポイント
RAGの構成要素 1. 検索 Retrieve 2. プロンプトのビルド Augment 3. 回答 Generate ユーザーの質問に関連する情報 検索された情報とユーザーの質問 ユーザーの質問と検索した情報を を、外部のデータベースやドキュ を組み合わせて、プロンプトをビ 組み合わせて、LLMが回答を作成 メントから探す ルドする する
検索⽅式の全体像 ベクトル検索 その他の⽅式 ⽂章を数値ベクトルに変換し、ベクトル間の距離 全⽂検索 (キーワード): 特定の単語が含まれるかを (意味的な類似度)で検索する 検索。完全⼀致に強い。 • 表記揺れに強い(例:「⾞」と「⾃動⾞」) • ⽂脈を理解した検索が可能 • RAGシステムの実装で最も⼀般的 ハイブリッド検索: ベクトル検索とキーワード検索 を組み合わせて補完する ナレッジグラフ: エンティティ間の関係性を利⽤
典型的なRAGアーキテクチャ [2] https://aws.amazon.com/jp/blogs/news/a-practical-guide-to-improve-rag-systems-with-advanced-rag-on-aws/ から図を引用
仕組み①:データ取り込み ❶ ドキュメント取得 PDF, HTML, Textなどの参照データを読み込む ❷ チャンキング (分割) ⻑い⽂章を適切なサイズの塊(チャンク)に分割する ❸ Embedding (ベクトル化) Embeddingモデルを使い、チャンクを多次元ベクトルに変 換する ❹ ベクトルDB格納 検索可能な状態でデータベース(Index)に保存する [2] https://aws.amazon.com/jp/blogs/news/a-practical-guide-to-improve-rag-systems-with-advanced-rag-on-aws/ から図を引用
仕組み②:検索‧テキスト⽣成 ❶ クエリのEmbedding ユーザーの質問⽂をデータと同じモデルでベクトル化する ❷ 類似検索 (Search) ❶と近いチャンク(関連情報)を取得する ❸ プロンプト構築 「以下の情報を参考に回答して」という指⽰に 検索結果を挿⼊してLLMに⼊⼒ ❹ 回答⽣成 LLMが⽂脈を理解し、根拠に基づいた回答を⽣成する [2] https://aws.amazon.com/jp/blogs/news/a-practical-guide-to-improve-rag-systems-with-advanced-rag-on-aws/ から図を引用
もくじ ● RAG とは ● RAGの構造 ● RAG開発の重要ポイント
良いデータを作ることが重要 ML/DLの分野には、Garbage In, Garbage Outという⾔葉がある RAGにおいても、如何に良いデータを⽤意するかが回答品質を左右する。 チャンキング戦略の選び⽅はその⼀つ。[3][4] チャンキング 主要な⽅式 巨⼤な⽂章のままベクトル化するよりも、意味のまとまりご 固定⻑: ⽂字数やトークン数で機械的に分 とに分割した⽅が検索精度(関連性)が⾼くなる 割。実装が容易。 * チャンクサイズが⼤きすぎるとノイズが混ざるが、 ⼩さすぎると⽂脈が失われるため注意 意味単位: ⽂や段落の区切りで分割。⾃然な ⽂脈を維持。 構造ベース: ⾒出しやHTMLタグなど、ド キュメント構造に基づいて分割。 [3] https://zenn.dev/oharu121/articles/efd3d038afc6da RAGの精度が73%から100%に向上した話 ─ チャンキング戦略の比較検証 [4] https://www.openbridge.jp/column/rag-preprocess-chunking RAG検索は前処理 ×チャンクで決まる|ベクトル埋め込み精度を 8割伸ばす実践ガイド
初期段階での評価設計が重要 RAGの回答精度評価の難しさ ● ● RAGの評価は機械的にはできない ○ 主観的になりがち、単発評価では不安定 ○ 回答出⼒が確率的に変化する → 即時的な評価‧改善が難しい 継続的なデータ収集と統計的な評価が重要 ● 条件を⽐較しつつ傾向を評価 ○ 検索時のコンテキストをログとして残す仕組み ■ 検索結果(回答⽣成時の参照情報) ■ システムプロンプト ■ index (チャンキング設定など) ○ ユーザーFB収集の仕組み ■ 回答後にアンケート⼊⼒させるなど * RAG評価ライブラリ(Ragas)を使⽤したLLM as a Judge など、LLMを使⽤して評価実⾏できる⼿段も登場している [6] Googleのベストプラクティスでは、初期段階ではフレームワークでベンチマーク的に評価 → ユーザーFBでの継続的評価‧改善を薦めている [5] https://docs.ragas.io/en/stable/ [6] https://cloud.google.com/blog/products/ai-machine-learning/optimizing-rag-retrieval
まとめ ● ● RAG とは ○ 検索 + ⽣成: LLMの知識を外部データで拡張する技術 ○ 社内データの活⽤、情報の鮮度維持、ハルシネーションの抑制に有効 RAG開発の重要ポイント ○ 良いデータを作る ■ ○ 良いデータを左右するチャンキング戦略 評価をシステムの初期設計に組み込む
おすすめ資料など ● ● 【2025年5月完全版】RAG の教科書 ○ https://zenn.dev/microsoft/articles/rag_textbook ○ Microsoft有志の記事。体系的に情報がまとまっているのでおすすめ AIcia Solid Project 自然言語処理シリーズ ○ 【深層学習】word2vec - 単語の意味を機械が理解する仕組み【ディープラーニングの世界 vol. 21】 ■ https://youtu.be/0CXCqxQAKKQ?si=4UI1zZd6-fVOsoTw ○ ベクトル検索 / Embeddings周りの理解におすすめ ■ Embeddingsの方式としては、word2vecがシンプル ■ 「なぜ単語の意味をベクトルで扱えるのか?」がわかる