使用 AWS 上的生成式 AI 自动根据放射学报告中的发现生成印象 | 亚马逊网络服务

使用 AWS 上的生成式 AI 自动根据放射学报告中的发现生成印象 | 亚马逊网络服务

放射学报告是描述和解释放射成像检查结果的全面、冗长的文件。 在典型的工作流程中,放射科医生监督、读取和解释图像,然后简明地总结主要发现。 总结(或 印象)是报告中最重要的部分,因为它可以帮助临床医生和患者关注报告中包含临床决策信息的关键内容。 创造清晰而有影响力的印象比简单地重申调查结果需要付出更多的努力。 因此,整个过程既费力、耗时,又容易出错。 往往需要数年的时间 训练 让医生积累足够的专业知识来撰写简洁且信息丰富的放射学报告摘要,进一步凸显自动化过程的重要性。 此外,自动生成报告结果摘要 对于放射学报告至关重要。 它能够将报告翻译成人类可读的语言,从而减轻患者阅读冗长而晦涩的报告的负担。

为了解决这个问题,我们建议使用生成式人工智能,这是一种可以创造新内容和想法的人工智能,包括对话、故事、图像、视频和音乐。 生成式人工智能由机器学习 (ML) 模型提供支持,这是一种基于大量数据进行预训练的非常大的模型,通常称为基础模型 (FM)。 机器学习的最新进展(特别是基于变压器的神经网络架构的发明)导致了包含数十亿参数或变量的模型的兴起。 本文中提出的解决方案使用预训练的大型语言模型 (LLM) 进行微调,以帮助根据放射学报告中的发现生成摘要。

本文演示了一种使用 AWS 服务对公开可用的 LLM 进行放射学报告汇总任务进行微调的策略。 法学硕士在自然语言理解和生成方面表现出了卓越的能力,可以作为适应各种领域和任务的基础模型。 使用预训练模型有显着的好处。 它降低了计算成本,减少了碳足迹,并允许您使用最先进的模型,而无需从头开始训练。

我们的解决方案使用 法兰-T5 XL 调频,使用 亚马逊SageMaker JumpStart,这是一个提供算法、模型和 ML 解决方案的 ML 中心。 我们演示了如何使用笔记本来实现这一点 亚马逊SageMaker Studio。 微调预训练模型涉及对特定数据进行进一步训练,以提高不同但相关任务的性能。 该解决方案涉及对 FLAN-T5 XL 模型进行微调,该模型是 FLAN-TXNUMX XL 模型的增强版本 T5 (文本到文本传输转换器)通用法学硕士。 T5 将自然语言处理 (NLP) 任务重新构建为统一的文本到文本格式,这与 BERT-style 模型只能输出类标签或输入范围。 它针对从 91,544 份自由文本放射学报告中获得的摘要任务进行了微调 MIMIC-CXR 数据集.

解决方案概述

在本节中,我们将讨论解决方案的关键组成部分:选择任务策略、微调 LLM 以及评估结果。 我们还说明了解决方案架构以及实施该解决方案的步骤。

确定任务的策略

有多种策略可以完成自动化临床报告总结的任务。 例如,我们可以使用从头开始针对临床报告进行预训练的专门语言模型。 或者,我们可以直接微调公开可用的通用语言模型来执行临床任务。 在训练 a 的环境中,可能需要使用经过微调的领域不可知模型 从头开始的语言模型 成本太高了。 在此解决方案中,我们演示了使用 FLAN -T5 XL 模型的后一种方法,我们针对放射学报告总结的临床任务进行了微调。 下图说明了模型工作流程。

使用 AWS 上的生成式 AI 自动根据放射学报告中的发现生成印象 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

典型的放射学报告组织良好且简洁。 此类报告通常包含三个关键部分:

  • 背景 – 提供有关患者人口统计的一般信息,以及有关患者、临床病史和相关病史的基本信息以及检查程序的详细信息
  • 发现 – 提供详细的检查诊断和结果
  • 印花 – 简要总结最显着的发现或对结果的解释,并根据观察到的异常情况评估重要性和潜在诊断

该解决方案利用放射学报告中的结果部分生成印象部分,该部分与医生的总结相对应。 下图是放射学报告的示例。

使用 AWS 上的生成式 AI 自动根据放射学报告中的发现生成印象 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

针对临床任务微调通用法学硕士

在此解决方案中,我们对 FLAN-T5 XL 模型进行微调(调整模型的所有参数并针对任务进行优化)。 我们使用临床领域数据集微调模型 模拟CXR,这是一个公开的胸部 X 光照片数据集。 要通过 SageMaker Jumpstart 微调此模型,必须以 {提示,完成} 对的形式提供带标签的示例。 在本例中,我们使用 MIMIC-CXR 数据集中原始报告中的成对的 {Findings, Impression}。 为了进行推理,我们使用提示,如下例所示:

使用 AWS 上的生成式 AI 自动根据放射学报告中的发现生成印象 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

该模型在加速计算上进行了微调 毫升.p3.16xlarge 具有 64 个虚拟 CPU 和 488 GiB 内存的实例。 为了进行验证,随机选择了 5% 的数据集。 经过微调的 SageMaker 训练作业所用时间为 38,468 秒(约 11 小时)。

评估结果

培训完成后,评估结果至关重要。 为了对生成的印象进行定量分析,我们使用 RED (面向回忆的基础评估),评估摘要最常用的指标。 该指标将自动生成的摘要与参考或一组参考(人工生成的)摘要或翻译进行比较。 ROUGE1 指的是重叠 一元词组 (每个单词)候选(模型的输出)和参考摘要之间。 ROUGE2 指的是重叠 二元组 (两个词)候选摘要和参考摘要之间。 ROUGEL 是一个句子级度量,指的是两段文本之间的最长公共子序列 (LCS)。 它忽略文本中的换行符。 ROUGELsum 是一个汇总级指标。 对于此指标,文本中的换行符不会被忽略,而是被解释为句子边界。 然后计算每对参考句子和候选句子之间的 LCS,然后计算并集 LCS。 为了在给定的一组参考句子和候选句子上聚合这些分数,计算平均值。

演练和架构

如下图所示的整体解决方案架构主要由使用 SageMaker Studio 的模型开发环境、使用 SageMaker 端点的模型部署以及使用 SageMaker Studio 的报告仪表板组成 亚马逊QuickSight.

使用 AWS 上的生成式 AI 自动根据放射学报告中的发现生成印象 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

在以下部分中,我们将演示如何微调 SageMaker JumpStart 上提供的 LLM,以通过 SageMaker Python SDK 总结特定于域的任务。 我们特别讨论以下主题:

  • 搭建开发环境的步骤
  • 模型微调和评估的放射学报告数据集概述
  • 演示如何使用 SageMaker JumpStart 和 SageMaker Python SDK 以编程方式微调 FLAN-T5 XL 模型
  • 预训练和微调模型的推理和评估
  • 预训练模型和微调模型的结果比较

该解决方案可在 在 AWS 上使用具有大型语言模型的生成式 AI 生成放射学报告印象 GitHub回购.

先决条件

首先,您需要一个 AWS账户 您可以在其中使用 SageMaker Studio。 如果您还没有 SageMaker Studio 用户配置文件,则需要创建一份用户配置文件。

本文中使用的训练实例类型是 ml.p3.16xlarge。 请注意,p3 实例类型 需要增加服务配额限制。

MIMIC CXR 数据集 可以通过数据使用协议进行访问,该协议需要用户注册并完成认证过程。

设置开发环境

要设置开发环境,您需要创建 S3 存储桶、配置笔记本、创建端点并部署模型,以及创建 QuickSight 仪表板。

创建一个S3存储桶

创建一个S3存储桶 被称为 llm-radiology-bucket 托管训练和评估数据集。 这也将用于在模型开发期间存储模型工件。

配置笔记本

完成以下步骤:

  1. 从 SageMaker 控制台或 AWS命令行界面 (AWS CLI)。

有关加入域的更多信息,请参阅 加入 Amazon SageMaker 域.

  1. 创建一个新的 SageMaker Studio 笔记本 用于清理报告数据和微调模型。 我们使用带有 Python 3 内核的 ml.t2.medium 4vCPU+3GiB 笔记本实例。
  1. 在笔记本中,安装相关软件包,例如 nest-asyncio, IPyWidgets (适用于 Jupyter Notebook 的交互式小部件)和 SageMaker Python SDK:
!pip install nest-asyncio==1.5.5 --quiet !pip install ipywidgets==8.0.4 --quiet !pip install sagemaker==2.148.0 --quiet

创建端点并部署模型进行推理

为了推断预训练和微调的模型, 创建端点并部署每个模型 在笔记本中如下:

  1. 从 Model 类创建一个可以部署到 HTTPS 端点的模型对象。
  2. 使用模型对象的预构建创建 HTTPS 端点 deploy() 方法:
from sagemaker import model_uris, script_uris
from sagemaker.model import Model
from sagemaker.predictor import Predictor
from sagemaker.utils import name_from_base # Retrieve the URI of the pre-trained model
pre_trained_model_uri =model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference") large_model_env = {"SAGEMAKER_MODEL_SERVER_WORKERS": "1", "TS_DEFAULT_WORKERS_PER_MODEL": "1"} pre_trained_name = name_from_base(f"jumpstart-demo-pre-trained-{model_id}") # Create the SageMaker model instance of the pre-trained model
if ("small" in model_id) or ("base" in model_id): deploy_source_uri = script_uris.retrieve( model_id=model_id, model_version=model_version, script_scope="inference" ) pre_trained_model = Model( image_uri=deploy_image_uri, source_dir=deploy_source_uri, entry_point="inference.py", model_data=pre_trained_model_uri, role=aws_role, predictor_cls=Predictor, name=pre_trained_name, )
else: # For those large models, we already repack the inference script and model # artifacts for you, so the `source_dir` argument to Model is not required. pre_trained_model = Model( image_uri=deploy_image_uri, model_data=pre_trained_model_uri, role=aws_role, predictor_cls=Predictor, name=pre_trained_name, env=large_model_env, ) # Deploy the pre-trained model. Note that we need to pass Predictor class when we deploy model
# through Model class, for being able to run inference through the SageMaker API
pre_trained_predictor = pre_trained_model.deploy( initial_instance_count=1, instance_type=inference_instance_type, predictor_cls=Predictor, endpoint_name=pre_trained_name,
)

创建 QuickSight 仪表板

创建一个 具有 Athena 数据源的 QuickSight 仪表板 推论结果为 亚马逊简单存储服务 (Amazon S3)将推理结果与真实情况进行比较。 以下屏幕截图显示了我们的示例仪表板。 使用 AWS 上的生成式 AI 自动根据放射学报告中的发现生成印象 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

放射学报告数据集

该模型现已进行微调,所有模型参数均根据从下载的 91,544 份报告进行调整 MIMIC-CXR v2.0 数据集。 由于我们仅使用放射学报告文本数据,因此我们仅下载了一份压缩报告文件(mimic-cxr-reports.zip)来自 MIMIC-CXR 网站。 现在我们在 2,000 份报告(称为 dev1 数据集)来自单独的 保留了该数据集的子集。 我们使用另外 2,000 份放射学报告(称为 dev2)用于评估来自胸部 X 射线收集的微调模型 印第安纳大学医院网络。 所有数据集都以 JSON 文件形式读取并上传到新创建的 S3 存储桶 llm-radiology-bucket。 请注意,默认情况下所有数据集都不包含任何受保护的健康信息 (PHI); 所有敏感信息均替换为三个连续下划线(___)由提供商提供。

使用 SageMaker Python SDK 进行微调

为了进行微调, model_id 被指定为 huggingface-text2text-flan-t5-xl 来自 SageMaker JumpStart 模型列表。 这 training_instance_type 设置为 ml.p3.16xlarge 并且 inference_instance_type 如ml.g5.2xlarge。 JSON格式的训练数据是从S3存储桶中读取的。 下一步是使用选定的 model_id 提取 SageMaker JumpStart 资源 URI,包括 image_uriAmazon Elastic Container注册 (Amazon ECR)Docker 映像的 URI), model_uri (预训练模型工件 Amazon S3 URI),以及 script_uri (训练脚本):

from sagemaker import image_uris, model_uris, script_uris # Training instance will use this image
train_image_uri = image_uris.retrieve( region=aws_region, framework=None, # automatically inferred from model_id model_id=model_id, model_version=model_version, image_scope="training", instance_type=training_instance_type,
) # Pre-trained model
train_model_uri = model_uris.retrieve( model_id=model_id, model_version=model_version, model_scope="training"
) # Script to execute on the training instance
train_script_uri = script_uris.retrieve( model_id=model_id, model_version=model_version, script_scope="training"
) output_location = f"s3://{output_bucket}/demo-llm-rad-fine-tune-flan-t5/"

此外,输出位置设置为 S3 存储桶内的文件夹。

只有3个超参数epochs改为XNUMX,其余均为默认:

from sagemaker import hyperparameters # Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version) # We will override some default hyperparameters with custom values
hyperparameters["epochs"] = "3"
print(hyperparameters)

训练指标如 eval_loss (用于验证损失), loss (对于训练损失),以及 epoch 定义并列出要跟踪的内容:

from sagemaker.estimator import Estimator
from sagemaker.utils import name_from_base model_name = "-".join(model_id.split("-")[2:]) # get the most informative part of ID
training_job_name = name_from_base(f"js-demo-{model_name}-{hyperparameters['epochs']}")
print(f"{bold}job name:{unbold} {training_job_name}") training_metric_definitions = [ {"Name": "val_loss", "Regex": "'eval_loss': ([0-9.]+)"}, {"Name": "train_loss", "Regex": "'loss': ([0-9.]+)"}, {"Name": "epoch", "Regex": "'epoch': ([0-9.]+)"},
]

我们使用 SageMaker JumpStart 资源 URI (image_uri, model_uri, script_uri)之前确定了创建估计器并通过指定数据集的 S3 路径在训练数据集上对其进行微调。 Estimator 类需要一个 entry_point 范围。 在这种情况下,JumpStart 使用 transfer_learning.py。 如果未设置该值,训练作业将无法运行。

# Create SageMaker Estimator instance
sm_estimator = Estimator( role=aws_role, image_uri=train_image_uri, model_uri=train_model_uri, source_dir=train_script_uri, entry_point="transfer_learning.py", instance_count=1, instance_type=training_instance_type, volume_size=300, max_run=360000, hyperparameters=hyperparameters, output_path=output_location, metric_definitions=training_metric_definitions,
) # Launch a SageMaker training job over data located in the given S3 path
# Training jobs can take hours, it is recommended to set wait=False,
# and monitor job status through SageMaker console
sm_estimator.fit({"training": train_data_location}, job_name=training_job_name, wait=True)

这项培训工作可能需要几个小时才能完成; 因此,建议将等待参数设置为 False 并在 SageMaker 控制台上监控训练作业状态。 使用 TrainingJobAnalytics 函数来跟踪不同时间戳的训练指标:

from sagemaker import TrainingJobAnalytics # Wait for a couple of minutes for the job to start before running this cell
# This can be called while the job is still running
df = TrainingJobAnalytics(training_job_name=training_job_name).dataframe()

部署推理端点

为了进行比较,我们为预训练模型和微调模型部署了推理端点。

首先,使用以下命令检索推理 Docker 映像 URI model_id,并使用此 URI 创建预训练模型的 SageMaker 模型实例。 通过使用模型对象的预构建创建 HTTPS 端点来部署预训练模型 deploy() 方法。 为了通过 SageMaker API 运行推理,请确保传递 Predictor 类。

from sagemaker import image_uris
# Retrieve the inference docker image URI. This is the base HuggingFace container image
deploy_image_uri = image_uris.retrieve( region=aws_region, framework=None, # automatically inferred from model_id model_id=model_id, model_version=model_version, image_scope="inference", instance_type=inference_instance_type,
) # Retrieve the URI of the pre-trained model
pre_trained_model_uri = model_uris.retrieve( model_id=model_id, model_version=model_version, model_scope="inference"
) pre_trained_model = Model( image_uri=deploy_image_uri, model_data=pre_trained_model_uri, role=aws_role, predictor_cls=Predictor, name=pre_trained_name, env=large_model_env, ) # Deploy the pre-trained model. Note that we need to pass Predictor class when we deploy model
# through Model class, for being able to run inference through the SageMaker API
pre_trained_predictor = pre_trained_model.deploy( initial_instance_count=1, instance_type=inference_instance_type, predictor_cls=Predictor, endpoint_name=pre_trained_name,
)

重复上述步骤以创建微调模型的 SageMaker 模型实例并创建端点以部署模型。

评估模型

首先,设置摘要文本的长度、模型输出的数量(如果需要生成多个摘要,则应大于1)以及光束的数量 束搜索。

将推理请求构建为 JSON 负载,并使用它来查询预训练和微调模型的端点。

计算聚合的 胭脂分数 (ROUGE1、ROUGE2、ROUGEL、ROUGELsum)如前所述。

比较结果

下表描述了评估结果 dev1dev2 数据集。 评估结果于 dev1 (MIMIC CXR 放射学报告中的 2,000 个结果)显示总体平均值提高了约 38 个百分点 胭脂1和胭脂2 与预训练模型相比的分数。 对于 dev2,ROUGE31 和 ROUGE25 分数分别提高了 1 个百分点和 2 个百分点。 总体而言,微调使 ROUGELsum 分数提高了 38.2 个百分点和 31.3 个百分点 dev1dev2 数据集,分别。

评价

数据集

预训练模型 微调模型
胭脂1 胭脂2 鲁格尔 鲁格尔苏姆 胭脂1 胭脂2 鲁格尔 鲁格尔苏姆
dev1 0.2239 0.1134 0.1891 0.1891 0.6040 0.4800 0.5705 0.5708
dev2 0.1583 0.0599 0.1391 0.1393 0.4660 0.3125 0.4525 0.4525

以下箱线图描述了 ROUGE 分数的分布 dev1dev2 使用微调模型评估的数据集。

使用 AWS 上的生成式 AI 自动根据放射学报告中的发现生成印象 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。 使用 AWS 上的生成式 AI 自动根据放射学报告中的发现生成印象 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。
(一个): dev1 (b): dev2

下表显示评估数据集的 ROUGE 分数具有大致相同的中位数和平均值,因此呈对称分布。

数据集 樂譜 计数 平均值 标准差 最低限度 25% 百分位 50% 百分位 75% 百分位 最大
dev1 胭脂1 2000.00 0.6038 0.3065 0.0000 0.3653 0.6000 0.9384 1.0000
胭脂 2 2000.00 0.4798 0.3578 0.0000 0.1818 0.4000 0.8571 1.0000
胭脂L 2000.00 0.5706 0.3194 0.0000 0.3000 0.5345 0.9101 1.0000
鲁格尔苏姆 2000.00 0.5706 0.3194 0.0000 0.3000 0.5345 0.9101 1.0000
dev2 胭脂 1 2000.00 0.4659 0.2525 0.0000 0.2500 0.5000 0.7500 1.0000
胭脂 2 2000.00 0.3123 0.2645 0.0000 0.0664 0.2857 0.5610 1.0000
胭脂L 2000.00 0.4529 0.2554 0.0000 0.2349 0.4615 0.7500 1.0000
胭脂Lsum 2000.00 0.4529 0.2554 0.0000 0.2349 0.4615 0.7500 1.0000

清理

为避免将来产生费用,请删除您使用以下代码创建的资源:

# Delete resources
pre_trained_predictor.delete_model()
pre_trained_predictor.delete_endpoint()
fine_tuned_predictor.delete_model()
fine_tuned_predictor.delete_endpoint()

结论

在这篇文章中,我们演示了如何使用 SageMaker Studio 微调 FLAN-T5 XL 模型以执行临床领域特定的总结任务。 为了增加置信度,我们将预测与真实情况进行比较,并使用 ROUGE 指标评估结果。 我们证明,针对特定任务进行微调的模型比针对通用 NLP 任务预训练的模型返回更好的结果。 我们想指出的是,对通用法学硕士进行微调可以完全消除预培训的成本。

尽管这里介绍的工作重点是胸部 X 射线报告,但它有可能扩展到具有不同解剖结构和模式的更大数据集,例如 MRI 和 CT,其中放射学报告可能更复杂,有多种发现。 在这种情况下,放射科医生可以按照重要性顺序生成印象,并包括后续建议。 此外,为此应用程序设置反馈循环将使放射科医生能够随着时间的推移提高模型的性能。

正如我们在这篇文章中所示,微调模型会生成具有高 ROUGE 分数的放射学报告的印象。 您可以尝试根据不同部门的其他特定领域的医疗报告对法学硕士进行微调。


关于作者

使用 AWS 上的生成式 AI 自动根据放射学报告中的发现生成印象 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。阿德瓦勒·阿金法德林博士 是 AWS 医疗保健和生命科学领域的高级数据科学家。 他的专业知识是可重复的端到端 AI/ML 方法、实际实施,以及帮助全球医疗保健客户针对跨学科问题制定和开发可扩展的解决方案。 他拥有两个物理学研究生学位和一个工程博士学位。

使用 AWS 上的生成式 AI 自动根据放射学报告中的发现生成印象 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。普里亚·帕达特 是 AWS 的高级合作伙伴解决方案架构师,在医疗保健和生命科学领域拥有丰富的专业知识。 Priya 与合作伙伴共同推动上市战略,并推动解决方案开发,以加速基于 AI/ML 的开发。 她热衷于利用技术来改变医疗保健行业,以推动更好的患者护理结果。

使用 AWS 上的生成式 AI 自动根据放射学报告中的发现生成印象 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。埃克塔·瓦利亚·布拉尔博士,是 AWS 医疗保健和生命科学 (HCLS) 专业服务业务部门的高级 AI/ML 顾问。 她在人工智能/机器学习在医疗保健领域的应用方面拥有丰富的经验,特别是在放射学领域。 工作之余,当不讨论放射学中的人工智能时,她喜欢跑步和徒步旅行。

时间戳记:

更多来自 AWS机器学习