使用 NVIDIA AI 端点和 Ragas 评估医疗检索增强生成 (RAG)
在医学领域,融入先进技术对于加强患者护理和改进研究方法至关重要。检索增强生成 (rag) 是这些开创性创新之一,它将大型语言模型 (llm) 的强大功能与外部知识检索相结合。通过从数据库、科学文献和患者记录中提取相关信息,rag 系统提供了更准确、上下文更丰富的响应基础,解决了纯法学硕士中经常观察到的过时信息和幻觉等限制。
在本概述中,我们将探讨 rag 在医疗保健领域日益重要的作用,重点关注其改变药物发现和临床试验等应用的潜力。我们还将深入探讨评估医疗 rag 系统独特需求所需的方法和工具,例如 nvidia 的 langchain 端点和 ragas 框架,以及 maccrobat 数据集(来自 pubmed central 的患者报告集合)。
医疗 rag 的主要挑战
可扩展性:随着医疗数据以超过 35% 的复合年增长率扩展,rag 系统需要在不影响速度的情况下高效管理和检索信息,特别是在及时洞察可能影响患者护理的情况下。
专业语言和知识要求:医疗 rag 系统需要针对特定领域进行调整,因为医学词汇和内容与金融或法律等其他领域有很大不同。
缺乏定制的评估指标:与通用 rag 应用不同,医疗 rag 缺乏合适的基准。传统指标(如 bleu 或 rouge)强调文本相似性,而不是医疗环境中至关重要的事实准确性。
按组件评估:有效的评估需要对检索和生成组件进行独立审查。检索必须提取相关的当前数据,生成组件必须确保检索内容的忠实性。
引入 ragas 进行 rag 评估
ragas 是一个开源评估框架,提供了一种评估 rag 管道的自动化方法。其工具包侧重于上下文相关性、召回率、忠实度和答案相关性。 ragas 利用法学硕士作为法官模型,最大限度地减少了对手动注释数据的需求,从而使流程高效且具有成本效益。
rag 系统的评估策略
为了进行稳健的 rag 评估,请考虑以下步骤:
- 合成数据生成:根据向量存储文档生成三元组数据(问题、答案、上下文)以创建合成测试数据。
- 基于指标的评估:根据精确度和召回率等指标评估 rag 系统,将其响应与生成的合成数据作为基本事实进行比较。
- 独立组件评估:对于每个问题,评估检索上下文相关性和生成的答案准确性。
这是一个示例流程:给出诸如“充血性心力衰竭的典型血压测量是什么?”之类的问题。系统首先检索相关上下文,然后评估响应是否准确地解决了问题。
使用 nvidia api 和 langchain 设置 rag
要继续操作,请创建一个 nvidia 帐户并获取 api 密钥。使用以下命令安装必要的软件包:
pip install langchain pip install langchain_nvidia_ai_endpoints pip install ragas
下载maccrobat数据集,该数据集提供了可以通过langchain加载和处理的全面医疗记录。
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 连接了法学硕士和密集向量检索,以实现跨医疗、多语言和代码生成领域的高效、可扩展的应用程序。在医疗保健领域,它带来准确、情境感知响应的潜力是显而易见的,但评估必须优先考虑准确性、领域特异性和成本效率。
概述的评估流程采用综合测试数据、nvidia 端点和 ragas,提供了满足这些需求的强大方法。如需更深入地了解,您可以在 github 上探索 ragas 和 nvidia generative ai 示例。
以上就是使用 NVIDIA AI 端点和 Ragas 评估医疗检索增强生成 (RAG)的详细内容,更多请关注其它相关文章!