「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > NVIDIA AI エンドポイントと Ragas を使用した医療検索拡張生成 (RAG) の評価

NVIDIA AI エンドポイントと Ragas を使用した医療検索拡張生成 (RAG) の評価

2024 年 11 月 15 日に公開
ブラウズ:368

Evaluating Medical Retrieval-Augmented Generation (RAG) with NVIDIA AI Endpoints and Ragas

医療の分野では、患者ケアを強化し、研究手法を改善するには、先進技術を取り入れることが不可欠です。検索拡張生成 (RAG) は、これらの先駆的なイノベーションの 1 つであり、大規模言語モデル (LLM) の力と外部知識の検索を融合させています。 RAG システムは、データベース、科学文献、患者記録から関連情報を引き出すことで、より正確で状況に応じて充実した対応基盤を提供し、純粋な LLM でよく見られる古い情報や幻覚などの制限に対処します。

この概要では、創薬や臨床試験などのアプリケーションを変革する可能性に焦点を当て、ヘルスケアにおける RAG の役割の拡大について探っていきます。また、NVIDIA の LangChain エンドポイントや Ragas フレームワークなどの医療 RAG システムの固有の要求を評価するために必要な方法とツールと、PubMed Central からの患者レポートのコレクションである MACCROBAT データセットについても詳しく説明します。


医療用 RAG の主な課題

  1. スケーラビリティ: 医療データは CAGR 35% 以上で拡大しているため、RAG システムは、特にタイムリーな洞察が患者ケアに影響を与える可能性があるシナリオでは、速度を犠牲にすることなく情報を効率的に管理し、取得する必要があります。

  2. 専門的な言語と知識の要件: 医療用語集や内容は、金融や法律などの他の分野とは大幅に異なるため、医療 RAG システムはドメイン固有の調整が必要です。

  3. カスタマイズされた評価指標の欠如: 汎用 RAG アプリケーションとは異なり、医療用 RAG には適切なベンチマークがありません。従来の指標 (BLEU や ROUGE など) は、医療の文脈で重要な事実の正確さよりも、テキストの類似性を強調します。

  4. コンポーネントごとの評価: 効果的な評価には、取得コンポーネントと生成コンポーネントの両方を独立して精査する必要があります。取得では、関連する現在のデータを取得する必要があり、生成コンポーネントでは、取得したコンテンツが忠実であることを確認する必要があります。

RAG 評価用の Ragas の紹介

オープンソースの評価フレームワークである Ragas は、RAG パイプラインを評価するための自動化されたアプローチを提供します。そのツールキットは、コンテキストの関連性、再現性、忠実性、回答の関連性に焦点を当てています。 Ragas は、LLM-as-a-judge モデルを利用することで、データに手動で注釈を付ける必要性を最小限に抑え、プロセスを効率的かつコスト効率の高いものにしています。

RAG システムの評価戦略

堅牢な RAG 評価を行うには、次の手順を検討してください:

  1. 合成データ生成: ベクター ストア ドキュメントに基づいてトリプレット データ (質問、回答、コンテキスト) を生成し、合成テスト データを作成します。
  2. メトリクスベースの評価: 精度や再現率などのメトリクスに基づいて RAG システムを評価し、その応答と生成された合成データをグラウンド トゥルースとして比較します。
  3. 独立したコンポーネントの評価: 質問ごとに、検索コンテキストの関連性と生成の回答精度を評価します。

これがパイプラインの例です。「うっ血性心不全における典型的な血圧測定値は何ですか?」のような質問が与えられました。システムはまず関連するコンテキストを取得し、次に応答が質問に正確に対応しているかどうかを評価します。

NVIDIA API と LangChain を使用した RAG のセットアップ

手順を進めるには、NVIDIA アカウントを作成し、API キーを取得します。
を使用して必要なパッケージをインストールします。

pip install langchain
pip install langchain_nvidia_ai_endpoints
pip install ragas

LangChain 経由でロードして処理できる包括的な医療記録を提供する MACCROBAT データセットをダウンロードします。

from langchain_community.document_loaders import HuggingFaceDatasetLoader
from datasets import load_dataset

dataset_name = "singh-aditya/MACCROBAT_biomedical_ner"
page_content_column = "full_text"

loader = HuggingFaceDatasetLoader(dataset_name, page_content_column)
dataset = loader.load()

NVIDIA エンドポイントと LangChain を使用して、堅牢なテスト セット ジェネレーターを構築し、データセットに基づいて合成データを作成できるようになりました。

from ragas.testset.generator import TestsetGenerator
from langchain_nvidia_ai_endpoints import ChatNVIDIA, NVIDIAEmbeddings

critic_llm = ChatNVIDIA(model="meta/llama3.1-8b-instruct")
generator_llm = ChatNVIDIA(model="mistralai/mixtral-8x7b-instruct-v0.1")
embeddings = NVIDIAEmbeddings(model="nv-embedqa-e5-v5", truncate="END")

generator = TestsetGenerator.from_langchain(
    generator_llm, critic_llm, embeddings, chunk_size=512
)
testset = generator.generate_with_langchain_docs(dataset, test_size=10)

パイプラインのデプロイと評価

RAG システムをベクター ストアに展開し、実際の医療レポートからサンプル質問を生成します:

# Sample questions
["What are typical BP measurements in the case of congestive heart failure?",
 "What can scans reveal in patients with severe acute pain?",
 "Is surgical intervention necessary for liver metastasis?"]

各質問は、取得されたコンテキストと生成されたグラウンド トゥルースの回答にリンクされており、取得コンポーネントと生成コンポーネントの両方のパフォーマンスを評価するために使用できます。

Ragas を使用したカスタム メトリクス

医療用 RAG システムでは、検索精度を評価するためにカスタム メトリックが必要な場合があります。たとえば、メトリクスは、取得されたドキュメントが検索クエリに十分関連しているかどうかを判断できます:

from dataclasses import dataclass, field
from ragas.evaluation.metrics import MetricWithLLM, Prompt

RETRIEVAL_PRECISION = Prompt(
    name="retrieval_precision",
    instruction="Is this result relevant enough for the first page of search results? Answer '1' for yes and '0' for no.",
    input_keys=["question", "context"]
)

@dataclass
class RetrievalPrecision(MetricWithLLM):
    name: str = "retrieval_precision"
    evaluation_mode = EvaluationMode.qc
    context_relevancy_prompt: Prompt = field(default_factory=lambda: RETRIEVAL_PRECISION)

# Use this custom metric in evaluation
score = evaluate(dataset["eval"], metrics=[RetrievalPrecision()])

精度と信頼性を実現する構造化された出力

効率的で信頼性の高い評価を行うために、構造化された出力により処理が簡素化されます。 NVIDIA の LangChain エンドポイントを使用して、LLM 応答を事前定義されたカテゴリ (はい/いいえなど) に構造化します。

import enum

class Choices(enum.Enum):
    Y = "Y"
    N = "N"

structured_llm = nvidia_llm.with_structured_output(Choices)
structured_llm.invoke("Is this search result relevant to the query?")

結論

RAG は、LLM と高密度ベクトル検索の橋渡しを行い、医療、多言語、コード生成の各ドメインにわたる高効率でスケーラブルなアプリケーションを実現します。ヘルスケアでは、正確で状況を認識した応答をもたらす可能性は明らかですが、評価では精度、領域の特異性、コスト効率を優先する必要があります。

合成テスト データ、NVIDIA エンドポイント、および Ragas を使用する概説された評価パイプラインは、これらの要求を満たす堅牢な方法を提供します。さらに詳しく知りたい場合は、GitHub で Ragas と NVIDIA Generative AI のサンプルを探索してください。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/koolkamalkishor/evaluating-medical-retrieval-augmented-generation-rag-with-nvidia-ai-endpoints-and-ragas-2m34?1 侵害がある場合は、 Study_golang@163 .comdelete に連絡してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3