はじめに
RAG という技術は最近流行っています。この流行の理由は、LLMを基盤としたシステム開発の需要が高まっていることです。なぜなら、Chatgptは今、多くの人が毎日最も頻繁に使っているアプリの一つからです。日常的な質問をすると、すぐに正確な回答を返してくれます。しかし、言語モデル生成する内容は、学習に用いたデータセットに大きく依存します。例えば、データセットを含まれていない最新ニュースや最新の知識については、モデルが十分に回答できない場合があります。一方で、新い知識は日々増えていくため、その度にモデルを再学習のは現実的ではありません。計算コストが大きすぎるからです。この問題を解決するために、まず新しい知識や専門知識を外部に保存します。次に、ユーザーの質問を応じて、保存したデータベースから関連情報を検索し、その結果をLLMに参照させることで、最新の回答を含む回答が可能になります。現在、多くの企業は様々な専門データを持っています。そして、LLMを連携して専門的なチャットボットを開発するために、自社データをRAGシステムに取り込むケースが増えています。
構築
一般的なRAGは、以下の図に従って構築されています。

この流れの中で、重要な要素は主に三つあります。一つ目はデータソースの処理、二つ目はベクトルデータベースの選択、三つ目LLMの選択です。
データソースは非常に重要です。例えば、データはテキストのみの場合と、他の形式を含む場合とでは、後続のベクタ化処理に影響があります。そのため、まずデータのタイプを確認する必要があります。私たちのGastroHealthでは、データソースとして医療分野の論文を多く使用しています。例えば、Natureなどの学術論文のテキストです。これらの文章は、文単位に分割し、MySQLのデータベースに保存しました。
次に、ベクトルデータベースの選択について説明します。この部分では、データベースの選択だけでなく、ベクタル化手法の選択も重要です。例えば、sentense embedding モデルの選択があります。このモデルは文章をベクタル化するために使用されます。このモデルの選択する際には、ベンチマークを参考にしました。検索精度と検索速度の両方を考慮し、性能の良いモデルを選択しました。このリンクを参考してください。
https://huggingface.co/spaces/mteb/leaderboard
sentense embedding モデルの選択した後、ベークタデータベースの選択する必要があります。実際には、様々の選択肢があり、例えばChormaやWeaviateがあります。私は、実装の容易さを重視し、Chromaを選択しました。
最後に、LLMの選択です。この部分は比較的シンプルだと考えています。現在、高い性能を持つLLMの一つとして、Gemini proがあげられます。このグッグルのサービスは、APIとして直接利用でます。しかし、GastroHealthでは、このサービスは使用していません。代わりに、自前のLLMサービスを構築しています。AWS EC2上にA10G GPUを4枚搭載し、合計80gのVRAM を使用しています。この構成により、7Bおよび14Bの中規模モデルのデプロイ可能です。VLLMというフレームワークを用いて、モデルをデプロイました。
最後
RAG システムでは、評価の部分も非常に重要です。評価指標としては、検索速度と検索精度、検索結果の関連性、そしてLLM最終的に生成する結果の品質を用いています。