LLMの課題をマスターする:検索拡張世代の探求
この4部構成のハンドブックでは、RAGについて、そのアーキテクチャ、利点、対処できる課題、そして生成AIアプリケーションのパフォーマンスを向上させるためにRAGが望ましい選択肢である理由を探ります。
シリーズ全体を読む
- 検索拡張ジェネレーション(RAG)でAIアプリを構築する
- LLMの課題をマスターする:検索拡張世代の探求
- ディープラーニングにおける主要なNLPテクノロジー
- RAGアプリケーションの評価方法
- リランカーによるRAGの最適化:役割とトレードオフ
- マルチモーダル検索拡張世代(RAG)のフロンティアを探る
- ChatGPTをMilvusで強化する:長期記憶でAIを強化する
- RAGパイプラインのパフォーマンスを高める方法
- ChatGPTをMilvusで強化する:長期記憶でAIを強化する
- Pandas DataFrame:Milvusによるチャンキングとベクトル化
- Llama3、Ollama、DSPy、Milvusを使った検索支援生成(RAG)システムの作り方
- 検索拡張世代(RAG)のためのチャンキング戦略ガイド
- 仮説的文書埋め込み(HyDE)による情報検索とRAGの改善
- Milvus Lite、Llama3、LlamaIndexを使ったRAGの構築
- RA-DITによるRAGの強化:LLM幻覚を最小化する微調整アプローチ
4部構成のRAGハンドブック
大規模言語モデル(LLMs)は、高度な自然言語処理(NLP)機能によってAIの世界を作り変えた。その長所にもかかわらず、LLMは、幻覚、知識の更新の遅さ、実世界のアプリケーションにおける回答の透明性の必要性などの課題に遭遇している。Retrieval-augmented generation (RAG)は著名なAIフレームワークとして登場し、外部知識をモデルの応答に統合することでこれらの問題に効果的に取り組んでいる。
この4部構成のハンドブックでは、RAGについて、そのアーキテクチャ、利点、対処可能な課題、そして生成AIアプリケーションのパフォーマンスを向上させるための好ましい選択肢である理由を探ります。
RAGとMilvusの簡単なレビュー
RAGは、LLMの外部知識をクエリコンテキストに提供することでLLMの能力を強化し、より正確で最新の応答を保証するAIフレームワークである。標準的なRAGシステムには、LLM、Milvusのようなベクトルデータベース、およびいくつかのコードとしてのプロンプトが含まれます。従業員が社内文書にアクセスするためのチャットボットを構築することを想像してみてください。RAGを使えば、ユーザーは信頼できるプライベートな情報源から正確な情報を得ることができ、ChatGPTのような強力なLLMでさえ克服するのに苦労する限界に対処することができる。
大規模言語モデルの限界
LLMは素晴らしい能力を披露してきましたが、限界もあります。例えば、ChatGPTは2021年9月までのトレーニングデータしか持っていない。そのため、それ以降に起こる出来事に関する事実知識が不足しています。ChatGPTは、"幻覚 "として知られる最近の出来事について質問されたとき、想像的で信じられるが不正確な情報を提供するかもしれない。
より具体的に言えば、強力なChatGPTを含むLLMは以下のような課題に直面している:
- ドメイン固有情報の欠如**:LLMは一般に公開されているデータに依存することが多く、ドメイン固有の情報や専有情報、プライベートな情報のニュアンスに富んだ理解が制限される。プライベートなデータへのアクセスができないため、専門的な業界や用途に合わせたソリューションや対応ができない。
- 最新の情報にアクセスできない:LLMは静的なデータセットでトレーニングされるため、最新の情報や動的に変化する情報へのアクセスが制限される。LLMは定期的に知識ベースを更新する必要があるが、トレーニングコストが高いため更新していない。例えば、GPT-3のトレーニングには400万ドルもの費用がかかる。そのため、生成された結果が古くなることがある。
- 幻覚を見やすい:これらのモデルは訓練データのみから答えを導き出すため、関連する情報が不足している場合、誤解を招くような、誤った、あるいは完全に捏造された答えを出す可能性がある。
- 事前学習データが不変**:LLMが利用する事前学習データは不変である。トレーニング後のデータを修正、訂正、削除するメカニズムが現在のところ存在しないため、トレーニングの段階で含まれる不正確な情報や古い情報はそのまま残ります。
LLMの限界に対処する:ファインチューニングとRAGの比較
LLMの限界に対処するには、ファインチューニングとRAGという2つの手法がある。
ファインチューニングLLM
ファインチューニングとは、事前に訓練されたLLMを最新またはドメイン固有の知識で継続的に訓練することで、幻覚的な問題に対処し、より正確な結果をもたらす。しかし、これは複雑で、リソースを必要とし、大企業にしか適していません。 例えば、Llama 2 やChatGPTのようなLLMを微調整するには、大量の関連データを収集し、前処理する必要がある。さらに、効果的な学習のためには、堅牢な計算インフラが必要です。膨大な計算リソースとメモリを含む関連コストは、中小企業にとって経済的な負担となる。LLMの微調整は反復プロセスである。モデルを何度も微調整し、ハイパーパラメータを調整し、さまざまなトレーニング手法を試す必要があります。繰り返しのたびに計算リソースが追加され、全体的なコストがかさむ。例えば、カスタムデータベースでGPT-3モデルを微調整する場合、数百万ドルのコストがかかる可能性があります。
さらに、トレーニング後の継続的な評価と微調整は非常に重要なプロセスです。繰り返しテストし、パフォーマンスを改善し、ハイパーパラメータを調整し、トレーニングプロセスを繰り返す。このような継続的な取り組みは、中小企業にとって、専用のリソースを割り当てたり、専門家を定期的に雇用したりすることが難しいかもしれない。
RAG
前述したように、RAG は AI フレームワークであり、ユーザーのクエリに関連する追加的で関連性の高い知識を LLM に提供することで、LLM の幻覚を効果的に軽減する。このフレームワークにはいくつかの利点がある:
- 精度の向上**:RAGはLLMに外部知識を提供することで、LLMの幻覚を軽減し、より洗練された回答をもたらす。
- 柔軟性**:RAGはいつでも知識を更新することができます。この機能により、強力な適応性と新しい情報のシームレスな取り込みが保証され、知識ベースの更新にはわずか数分しかかかりません。
- 水平スケーラビリティ**:RAGは、すべてのパラメータの更新を必要とすることなく、膨大なデータセットを巧みに扱います。また、水平方向のスケーラビリティも備えており、拡大するデータセットにシームレスに対応することができます。このスケーラビリティは、ユーザーの進化するニーズに完全に合致し、RAGを微調整に代わる、より効率的で費用対効果の高い選択肢として位置づけます。
- 透明性**:ソースを参照することで、ユーザーは回答の正確性を確認することができ、モデルの出力に対する信頼性を高めることができます。
- セキュリティRAGアプリは、ユーザーが管理するベクターデータベースにプライベートデータを安全に保存します。さらに、ナレッジベース内に組み込みの役割とセキュリティ制御を組み込むことで、データ管理を改善し、データ使用に対する制御を強化します。
- 費用対効果**:RAGは、ファインチューニングよりもコンピュータリソースを大幅に削減し、大幅なコスト削減を実現します。
例えて言えば、RAGはオープンブック試験のように機能し、参考書を置き換えることで新しい課題への容易な適応を可能にします。一方、ファインチューニングはクローズドブックの試験のようなもので、反復のたびに新しい知識の学習と消化に多大な時間投資を必要とします。
RAGの仕組み
LangChainとZilliz CloudによるRAGの使用例](https://assets.zilliz.com/Retrieval_Augmented_Generation_RAG_use_case_20240220_083822_ef868474b5.png)
上の図に示すように、RAGシステムは3つの重要なプロセスから構成される:検索、増強、生成。検索プロセスは、ユーザーのクエリに関連する情報を取得することに重点を置く。補強プロセスでは、ベクトルデータベースから取得したコンテキスト情報と元の質問を融合した新しいプロンプトを作成する。最後に、提供されたコンテキストとLLMを活用することで、生成プロセスはより正確な回答を生成する。
検索
検索プロセスは、知識の取り込みとベクトル類似検索から構成される。
- Knowledge Ingestion:RAGアプリケーションにクエリを実行する前に、すべての外部知識をベクトル埋め込みとしてZilliz Cloudのようなベクトルデータベースに挿入します。
- ベクトル類似検索**:ユーザが質問をすると、埋め込みモデルがそれをベクトル埋め込みに変換する。これらの埋め込みは、類似検索のためにベクトル・データベースに送られ、そこで最も関連性の高いトップKの結果が検索される。検索結果は、ユーザーの質問のコンテキストとして機能し、応答を生成するために元の質問と一緒にLLMに転送されます。
拡張
Augmented "プロセスは、検索された知識をプロンプトに組み立て、元の質問の "知識ベースの拡張 "を表現する。 以下はプロンプトの例です。
追加のコンテキストを使って質問に答えてください: ユーザの質問} {検索されたドキュメント1 検索されたドキュメント1} {検索されたドキュメントn {取得したドキュメント n}
実際には、`{User Question}` は実際のユーザーの質問に置き換えられ、`{Retrieved Doc i}` は検索された知識の断片に置き換えられる。
組み立てられたプロンプトは次のようになる:
追加のコンテキストを使って質問に答えてください:
{RAGとは何ですか?}
{RAGはLLMが生成する応答の質を向上させるためのAIのフレームワークである。
RAGは、LLMがより正確な方法で質問に答えるための専門的な知識体系を構築することを可能にする。}
生成
生成プロセスでは、より正確な回答のためにLLMに直接プロンプトを提示します。上に示したプロンプトに対するChatGPTの回答です:
RAGはRetrieval-augmented generationの略で、モデル内部の情報表現を補うために外部の知識ソースを取り入れることで、LLMが生成する回答の質を高めるAIのフレームワークです。これにより、LLMは質問に対してより正確な回答を提供するために専門的な知識を利用することができる。
結論
このブログでは
- RAGの概要。
- RAGの基本、ワークフロー、利点。
- RAGの役割は、大規模な言語モデルが直面する課題に対処することです。
また、LLMの幻覚を軽減することを目的とした2つのアプローチ、fine-tuningとRAGを比較。
fine-tuningは、最新の情報とドメイン特異性のための継続的なトレーニングという利点がある一方で、その複雑さとリソース集約的な性質は、一部の開発者や企業、特に大規模な企業にしか適さないかもしれない。それに対してRAGは、非常に正確で関連性の高い結果を生成する能力において際立っている。RAGは、微調整よりも費用対効果が高く、スケーラブルで、柔軟性があり、生成AIの様々なタスクに適用できることが証明されています。 今後の投稿では、RAGアプリケーションの構築、評価と最適化の戦略など、さらなるトピックを探求していきます。さらなる洞察にご期待ください!