Medical-RAGは、中国医学領域向けに設計されたQ&Aインテリジェンスプロジェクトである。 このプロジェクトはRAG(Retrieval Augmented Generation)技術に基づいており、外部の知識ベースを取り入れることにより、医療アドバイスのための大規模言語モデル(LLM)の精度と安全性を向上させている。 このプロジェクトの中核は、医療知識の保存と検索に高性能ベクトルデータベースMilvusを使用することと、Q&Aプロセス全体を管理するためにLangChainフレームワークを統合することである。 このプロジェクトは、LLMを用いたインテリジェントなデータアノテーション、医療ドメイン固有の単語リストの構築、効率的なデータウェアハウスを含む、完全な自動データ処理パイプラインを実装している。 密なベクトルによる意味検索と疎なベクトルによるキーワード検索(BM25)を組み合わせた高度なハイブリッド検索アーキテクチャを採用し、検索されたコンテンツの精度を向上させるために、設定可能な再配置アルゴリズムで複数の結果を融合する。 開発者は柔軟なYAML設定ファイルを通してシステム全体をデプロイし管理することができ、異なる動作環境や要件に適応することができる。
機能一覧
- 自動データ処理このプロジェクトは、アノテーションプロセスを高速化するために、HTTPまたはローカルGPUコールを介して大規模なモデル推論をサポートする自動データアノテーションパイプラインを提供します。
- 単語リストの自動管理:: 検索精度を向上させるために、スパース検索用の単語リストの構築と管理を自動化する、マルチスレッド対応の医療ドメイン辞書を内蔵。
- ハイブリッド・サーチ・アーキテクチャ密なベクトル検索と疎なベクトル検索の両方に対応。密な検索はOllama、OpenAI、HuggingFaceなどの様々な埋め込みモデルをサポートし、疎な検索は医療分野向けに最適化されたBM25アルゴリズムを使用する。
- 結果の並べ替えと統合RRF (Reciprocal Rank Fusion) または複数の検索結果の重み付けフュージョンの使用をサポートし、最終的な回答の関連性を向上させます。
- 医療分野における深い最適化6つの主要部門分類と8つの主要問題分類を含む、あらかじめ定義された専門職分類システム。
pkuseg
テキスト処理のための医療領域分割モデリング. - 高性能ベクトル・データベース:: Milvus v2.6+をベースに、効率的なベクトル検索、バッチ埋め込み、同時クエリをサポート。
- 柔軟な設定システム:: データベースの接続、モデルの選択、検索ストラテジーなどのすべてのコアパラメーターはYAMLファイルを通して設定されます。
- 高効率インターフェースパッケージMilvusの共通インターフェースをカプセル化し
RAGSearchTool
セカンダリー開発やコールを容易にするデベロッパーなどのコアツール。
ヘルプの使用
このプロジェクトは、準備から最終的なクエリープロセスまで、完全な環境一式を提供する。
ステップ1:環境準備
開始する前に、プロジェクトのクローン、依存関係のインストール、必要なサービスの開始など、基本的な実行環境を準備する必要がある。
- プロジェクトコードの複製
まず、GitHubからクローンする。medical-rag
ソース・コードをローカル・マシンにコピーする。git clone https://github.com/yolo-hyl/medical-rag cd medical-rag/src
- プロジェクトの依存関係をインストールする
プロジェクトはPythonで開発されており、依存関係はすべてsetup.py
で。取り付けにはpipを使用。pip install -e .
- Milvusベクターデータベースを開始する
このプロジェクトはベクター・データベースとしてMilvusを使用しており、Dockerでの起動が推奨されている。便利な起動スクリプトがプロジェクト・コードに既に含まれている。cd Milvus bash standalone_embed.sh start ``` 此命令会启动一个单机版的Milvus实例。
- Ollamaサービスを開始する(オプション)
ローカルで実行されるビッグモデル(Qwenなど)をデータ注釈や回答生成に使用する場合は、Ollamaをインストールして起動する必要がある。# 启动Ollama服务 ollama serve # 拉取需要用到的模型 # bge-m3是一个常用的嵌入模型,用于生成向量 ollama pull bge-m3:latest # qwen2:7b是一个性能不错的标注和问答模型 ollama pull qwen2:7b
ステップ2:基本設定
特定のプロセスを実行する前に、コア・パラメーターを設定する必要がある。設定ファイルはsrc/MedicalRag/config/default.yaml
.あなたの環境に応じて、以下のキー情報を変更する必要があります:
- ミルバス接続情報を確保する。
uri
歌で応えるtoken
開始したMilvusインスタンスに合わせる。milvus: client: uri: "http://localhost:19530" token: "root:Milvus" collection: name: "qa_knowledge"
- 組み込みモデルの構成密なベクトルを生成するために使用するモデルを指定します。以下の設定では、ローカルのOllamaサービスを
bge-m3
モデルembedding: dense: provider: ollama model: "bge-m3:latest" base_url: "http://localhost:11434"
ステップ3:データ処理と在庫管理
データ処理はQ&Aシステム構築の中核であり、このプロジェクトでは、データのラベリング、単語リストの構築、コレクションの作成、データ入力の4つの部分に分けている。
- データ注釈
このステップでは、大規模な言語モデルを使用して、生のQ&Aデータ(所属部署、質問タイプなど)を自動的に分類する。- まず、ラベリング・パラメーター・ファイルを設定する:
src/MedicalRag/config/data/annotator.yaml
. - 次に、注釈スクリプトを実行する:
python scripts/annotation.py src/MedicalRag/config/data/annotator.yaml
- まず、ラベリング・パラメーター・ファイルを設定する:
- 単語リストを作る
BM25スパース検索をサポートするためには、医療領域のコーパスに基づいた独自の語彙を構築する必要がある。python scripts/build_vocab.py
スクリプトはデータを処理し、次のような名前のファイルを生成する。
vocab.pkl.gz
単語リストファイルの - Milvusコレクションの作成(コレクション)
このステップでは、ベクトルと関連情報を保存するためのコレクションをMilvusに作成します。コレクションの構造(スキーマ)はdefault.yaml
プロフィールの定義# 使用默认配置文件创建集合 python scripts/create_collection.py -c src/MedicalRag/config/default.yaml # 如果需要强制删除并重建集合,可以添加--force-recreate参数 python scripts/create_collection.py --force-recreate
- データ入力
処理されラベル付けされたデータはベクトル化され、最終的にMilvusコレクションに保存される。python scripts/insert_data_to_collection.py
このスクリプトは、データのベクトル化(密なベクトルと疎なベクトルの両方)を自動的に処理し、データベースにバッチ挿入する。
ステップ4:検索
データがすべて揃えば、Q&A検索が始まる。
- クエリポリシーの設定
これを行うにはsrc/MedicalRag/config/search/search_answer.yaml
ファイルで検索戦略を定義する。例えば、異なる検索チャンネル(密、疎)の重みを調整する。 - クエリースクリプトの実行
利用するsearch_pipline.py
スクリプトでクエリを実行する。# 使用指定的搜索配置文件进行查询 python scripts/search_pipline.py --search-config src/MedicalRag/config/search/search_answer.yaml
スクリプトは対話モードになり、質問を入力することができる(例:「梅毒の症状は何ですか?)を入力して検索をテストすることができます。
コアツールの使用
プロジェクトはまたRAGSearchTool
ツールクラスは、他のコードで検索関数を直接呼び出すことを容易にする。
from MedicalRag.tools.rag_search_tool import RAGSearchTool
# 从配置文件初始化工具
tool = RAGSearchTool("config/search.yaml")
if tool.is_ready():
# 执行单个查询
results = tool.search("梅毒的症状有哪些?")
print(results)
# 执行批量查询
results_batch = tool.search(["梅毒的治疗方法", "高血压的预防措施"])
print(results_batch)
# 带过滤条件的查询(例如,只在“外科”相关的知识中检索)
results_filtered = tool.search("骨折怎么办", filters={"dept_pk": "3"}) # 假设3代表外科
print(results_filtered)
アプリケーションシナリオ
- インテリジェント診断アシスタント
このシステムは、医師の臨床支援として利用できる。医師は、複雑な症例や稀な症例に遭遇した際、関連する診断・治療ガイドライン、医薬品情報、最新の医学研究などを迅速に検索し、診断・治療の意思決定をサポートすることができる。 - 医学生の教育とトレーニング
医学生が仮想環境で質問、診断、治療計画の立案を練習するための模擬診察システムの構築に利用できる。このシステムは、学生の質問に基づいて標準的な回答や関連する知識のポイントを提供することにより、学習プロセスを加速することができます。 - 患者の健康相談
一般向けのインテリジェントなカスタマーサービスやチャットボットとして導入し、患者に24時間365日の初期健康相談サービスを提供することができる。ユーザーは、一般的な病気、症状、薬の注意事項などについて質問することができ、システムは権威ある知識ベースから安全で正確な回答を提供し、病院の外来診療所の負担を軽減することができる。 - 医療知識ベースの管理と検索
病院や研究機関にとって、このシステムは膨大な内部医療文書、医療記録、研究論文を統合し、インテリジェントな知識管理プラットフォームを構築することができる。研究者や医療従事者は、自然言語を通じて必要な情報を迅速かつ正確に見つけることができる。
品質保証
- このプロジェクトはどのような問題を解決するのか?
汎用の大規模言語モデルでは、特に医療分野などの専門領域に関する知識が不十分であり、「幻覚」を見たり、不正確な情報を提供したりしやすいという問題に対処する。RAG技術により、モデルの応答は信頼できる外部の医療知識ベースに限定されるため、より正確で安全な医療アドバイスを提供することができる。 - プロジェクトで使用されている主要技術は何ですか?
このプロジェクトでは主に、RAG(Retrieval Augmented Generation)、ベクトルデータベース(Milvus)、自然言語処理フレームワーク(LangChain)、ハイブリッド検索技術(密なベクトルと疎なベクトルの組み合わせBM25)、大規模言語モデリングのための様々なオプションのバックエンド(Ollama、OpenAIなど)を使用している。 - プロジェクトで使用している埋め込みモデルや言語モデルを置き換えるにはどうすればよいですか?
モデルの変更は、対応するYAML設定ファイルを修正するのと同じくらい簡単です。 たとえば、密な埋め込みモデルを変更するにはdefault.yaml
修正embedding.dense
シェアprovider
歌で応えるmodel
フィールドを持つ。同様に、データ注釈に使われるLLMはannotator.yaml
で設定する。 - 検索結果が満足のいくものでなかった場合、どのように最適化すべきでしょうか?
これを最適化する方法はいくつかある。 まずsearch_answer.yaml
の異なる検索チャンネル用の設定ファイルである。weight
(重み)により、密な検索結果と疎な検索結果の融合比率を変えることができる。 第二に、単語リストを構築するために使用されたデータを調べ、より質の高い検索結果を生成するために拡張することができる。vocab.pkl.gz
文書を検索することで、スパース検索の精度を向上させることができる。 最後に、知識ベース・データが高品質で広範囲をカバーしていることを確認することは、結果を向上させるための基本である。