RAG
Retrieval Augmented Generation
#WIP
https://note.com/wandb_jp/n/n8ea88483a96c
https://zenn.dev/knowledgesense/articles/7a8e9aafe08d35
GPT-4.icon
RAGとは?
RAG(Retrieval-Augmented Generation)は、AIモデルが外部データベースや知識ベースから情報を取得(Retrieve)し、それを元に応答を生成(Generate)するアーキテクチャまたは手法のことを指します。
主に、大規模言語モデル(LLM)と検索エンジンを組み合わせて、高精度で最新の情報を提供するために用いられます。
なぜRAGが必要なのか?
1. 情報の最新性の確保:
通常のLLMはトレーニングデータが固定されているため、最新の情報を反映できません。しかし、RAGはリアルタイムで外部データを取得することで、最新の情報を提供できます。
2. 専門知識の提供:
特定のドメイン(医療、法律、技術仕様など)に関する深い知識を要求される場合、一般的なLLMでは不十分です。RAGは専門的なデータベースから必要な知識を取り出して、正確かつ専門的な回答を生成します。
3. モデルサイズの効率化:
大量の知識をLLM自体に詰め込むのではなく、外部リソースから動的に取得することで、モデルのサイズを効率化し、計算リソースを節約できます。
RAGの基本構造
RAGは大きく2つのコンポーネントで構成されています。
1. Retriever (RAG)(検索モジュール)
役割: 質問に関連する情報を外部データベースから検索・取得する。
技術: Dense Passage Retrieval(DPR)、ElasticSearch、Faiss などのベクトル検索エンジンを使用。
特徴:
質問をベクトル化し、データベース内のドキュメントベクトルと比較して関連性の高いものを取得する。
2. Generator (RAG)(生成モジュール)
役割: Retriever が取得した情報を元に回答を生成する。
技術: GPT、T5、BART などの大規模言語モデルを使用。
特徴:
取得したコンテキスト情報を入力に加え、それを元に回答を生成する。
---
RAGの動作フロー
1. 質問の入力:
ユーザーが質問を入力します。
2. 質問のベクトル化:
Retriever が質問をベクトル化して、外部データベース内のドキュメントと類似度検索を行います。
3. 関連情報の取得:
最も関連性が高い情報を取得します。複数のドキュメントを取得することが多いです。
4. 情報のコンテキスト化:
取得した情報をそのまま返すのではなく、Generator に渡して回答を生成する際のコンテキストとして使用します。
5. 応答の生成:
Generator が質問と取得した情報を組み合わせて、最適な回答を生成します。
6. 回答の出力:
ユーザーに対して自然な言語で回答を出力します。
RAGの具体例
1. 検索エンジン連携型のチャットボット
質問:「2025年のiPhoneの新機能は?」
フロー:
1. Retriever が質問に関連する最新のニュース記事を検索。
2. 取得した記事内容を Generator に渡して回答を生成。
3. 回答:「2025年のiPhoneには、折りたたみ式ディスプレイと新しいAIアシスタントが搭載されています。」
代表的なRAGモデル
OpenAI ChatGPT + Bing Search: 最新のウェブ検索を活用して、リアルタイムの情報を提供。
Google Bard: Google検索と連携し、最新のウェブ情報を回答に反映。
Meta's RETRO (Retrieval-Enhanced Transformer): 大規模なテキストデータベースから情報を取得し、回答を生成する。
https://zenn.dev/sompojapan_dx/articles/eb755a18e893ce
https://zenn.dev/spiralai/articles/8af7cbf526c2e1
https://qiita.com/jw-automation/items/045917be7b558509fdf2
https://qiita.com/FukuharaYohei/items/0949aaac17f7b0a4c807
https://zenn.dev/minedia/articles/8f4ef7f2daed11g
https://tech.algomatic.jp/entry/column/rag-00
入力から、
DB等から関連する情報を引っ張ってきて、
それを参考にして返答を生成して返す
https://python.langchain.com/docs/modules/data_connection/
lang chain
この辺の作業も必要
ドキュメントをvector化する
vectorをDBに保存する
DBから検索する
https://www.ibm.com/blogs/solutions/jp-ja/retrieval-augmented-generation-rag/
https://techblog.nhn-techorus.com/archives/30709
Amazon Bedrock
外部知識を参照できる
https://speakerdeck.com/smiyawaki0820/retrieval-based-lm-rag-system-zatukurili-jie-suru
CRAG
https://zenn.dev/knowledgesense/articles/bb5e15abb3c547