在保险行业使用 AWS AI 和分析服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

保险行业使用 AWS AI 和分析服务进行智能文档处理:第 2 部分

In 部分1 在本系列中,我们讨论了智能文档处理 (IDP),以及 IDP 如何加速保险行业的理赔处理用例。 我们讨论了如何使用 AWS AI 服务对索赔文件和支持文件进行准确分类。 我们还讨论了如何提取保险索赔包中的各种类型的文档,例如表格、表格或特殊文档,例如发票、收据或 ID 文档。 我们研究了遗留文档流程中的挑战,这些流程耗时、容易出错、昂贵且难以大规模处理,以及如何使用 AWS AI 服务来帮助实施 IDP 管道。

在这篇文章中,我们将向您介绍用于文档提取、查询和扩充的高级 IDP 功能。 我们还研究了如何进一步使用从索赔数据中提取的结构化信息,以使用 AWS Analytics 和可视化服务获得洞察力。 我们重点介绍从 IDP 中提取的结构化数据如何帮助使用 AWS Analytics 服务防止欺诈性索赔。

解决方案概述

下图说明了 IDP 使用 AWS AI 服务的阶段。 在第 1 部分中,我们讨论了 IDP 工作流程的前三个阶段。 在这篇文章中,我们将扩展提取步骤和剩余阶段,包括将 IDP 与 AWS Analytics 服务集成。

我们使用这些分析服务来获得进一步的洞察力和可视化,并使用来自 IDP 的结构化、标准化数据来检测欺诈性索赔。 下图说明了解决方案架构。

IDP架构图

我们在这篇文章中讨论的阶段使用以下关键服务:

  • 亚马逊领悟医疗 是一项符合 HIPAA 要求的自然语言处理 (NLP) 服务,它使用经过预训练的机器学习 (ML) 模型来理解和从医学文本(例如处方、程序或诊断)中提取健康数据。
  • AWS胶水 是 AWS Analytics 服务堆栈的一部分,是一种无服务器数据集成服务,可以轻松发现、准备和组合数据以进行分析、ML 和应用程序开发。
  • 亚马逊Redshift 是 Analytics 堆栈中的另一项服务。 Amazon Redshift 是一种完全托管的 PB 级云数据仓库服务。

先决条件

在开始之前,请参阅 部分1 有关 IDP 保险用例的高级概述以及有关数据捕获和分类阶段的详细信息。

有关代码示例的更多信息,请参阅我们的 GitHub仓库。

萃取阶段

在第 1 部分中,我们了解了如何使用 Amazon Textract API 从文档中提取表单和表格等信息,以及如何分析发票和身份证件。 在这篇博文中,我们使用 Amazon Comprehend 增强了提取阶段,以提取特定于自定义用例的默认和自定义实体。

保险公司经常在保险理赔申请中遇到密集的文本,例如患者的出院摘要信(见下图示例)。 从此类没有明确结构的文档类型中自动提取信息可能很困难。 为了解决这个问题,我们可以使用以下方法从文档中提取关键业务信息:

出院汇总样本

使用 Amazon Comprehend DetectEntities API 提取默认实体

我们在示例医学转录文档上运行以下代码:

comprehend = boto3.client('comprehend') 

response = comprehend.detect_entities( Text=text, LanguageCode='en')

#print enitities from the response JSON

for entity in response['Entities']:
    print(f'{entity["Type"]} : {entity["Text"]}')

以下屏幕截图显示了输入文本中标识的实体集合。 出于本文的目的,输出已被缩短。 请参阅 GitHub回购 获取详细的实体列表。

在保险行业使用 AWS AI 和分析服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

使用 Amazon Comprehend 自定义实体识别提取自定义实体

来自的回应 DetectEntities API 包括默认实体。 但是,我们有兴趣了解特定的实体值,例如患者姓名(由默认实体表示 PERSON),或患者的 ID(由默认实体表示 OTHER)。 为了识别这些自定义实体,我们训练了一个 Amazon Comprehend 自定义实体识别器模型。 我们建议遵循有关如何训练和部署自定义实体识别模型的综合步骤 GitHub仓库。

部署自定义模型后,我们可以使用辅助函数 get_entities() 检索自定义实体,例如 PATIENT_NAMEPATIENT_D 来自 API 响应:

def get_entities(text):
try:
    #detect entities
    entities_custom = comprehend.detect_entities(LanguageCode="en",
                      Text=text, EndpointArn=ER_ENDPOINT_ARN) 
    df_custom = pd.DataFrame(entities_custom["Entities"], columns = ['Text',  
                'Type', 'Score'])
    df_custom = df_custom.drop_duplicates(subset=['Text']).reset_index()
    return df_custom
except Exception as e:
    print(e)

# call the get_entities() function 
response = get_entities(text) 
#print the response from the get_entities() function
print(response)

以下屏幕截图显示了我们的结果。

在保险行业使用 AWS AI 和分析服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

富集阶段

在文档丰富阶段,我们对与医疗保健相关的文档执行丰富功能以得出有价值的见解。 我们看看以下类型的富集:

  • 提取特定领域的语言 – 我们使用 Amazon Comprehend Medical 提取特定于医学的本体,例如 ICD-10-CM、RxNorm 和 SNOMED CT
  • 编辑敏感信息 – 我们使用 Amazon Comprehend 编辑个人身份信息 (PII),使用 Amazon Comprehend Medical 编辑受保护的健康信息 (PHI)

从非结构化医学文本中提取医学信息

医疗提供者的笔记和临床试验报告等文件包括密集的医学文本。 保险理赔运营商需要识别从这些密集文本中提取的健康信息之间的关系,并将它们链接到 ICD-10-CM、RxNorm 和 SNOMED CT 代码等医学本体。 这对于自动化索赔捕获、验证和批准工作流程为保险公司加速和简化索赔处理非常有价值。 让我们看看如何使用 Amazon Comprehend Medical InferICD10CM API 将可能的医疗状况检测为实体并将它们链接到它们的代码:

cm_json_data = comprehend_med.infer_icd10_cm(Text=text)

print("nMedical codingn========")

for entity in cm_json_data["Entities"]:
      for icd in entity["ICD10CMConcepts"]:
           description = icd['Description']
           code = icd["Code"]
           print(f'{description}: {code}')

对于输入文本,我们可以从 Amazon Textract 传入 DetectDocumentText API, InferICD10CM API 返回以下输出(为简洁起见,输出已缩写)。

从非结构化医学文本中提取医学信息

同样,我们可以使用 Amazon Comprehend Medical InferRxNorm API用于识别药物和 InferSNOMEDCT 用于检测与医疗保健相关的保险文件中的医疗实体的 API。

执行 PII 和 PHI 编辑

保险索赔包需要大量的隐私合规和法规,因为它们包含 PII 和 PHI 数据。 保险公司可以通过编辑保单编号或患者姓名等信息来降低合规风险。

让我们看一个病人出院总结的例子。 我们使用 Amazon Comprehend DetectPiiEntities API 用于检测文档中的 PII 实体并通过编辑这些实体来保护患者的隐私:

resp = call_textract(input_document = f's3://{data_bucket}/idp/textract/dr-note-sample.png')
text = get_string(textract_json=resp, output_type=[Textract_Pretty_Print.LINES])

# call Amazon Comprehend Detect PII Entities API
entity_resp = comprehend.detect_pii_entities(Text=text, LanguageCode="en") 

pii = []
for entity in entity_resp['Entities']:
      pii_entity={}
      pii_entity['Type'] = entity['Type']
      pii_entity['Text'] = text[entity['BeginOffset']:entity['EndOffset']]
      pii.append(pii_entity)
print(pii)

我们在来自 detect_pii_entities() 应用程序接口:

来自 detect_pii_entities() API 的响应

然后,我们可以利用文档中实体的边界框几何形状来编辑从文档中检测到的 PII 实体。 为此,我们使用了一个名为 amazon-textract-overlayer. 有关更多信息,请参阅 文本覆盖层. 以下屏幕截图比较了编辑前后的文档。

在保险行业使用 AWS AI 和分析服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。在保险行业使用 AWS AI 和分析服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

类似于 Amazon Comprehend DetectPiiEntities API,我们也可以使用 DetectPHI 用于检测正在检查的临床文本中的 PHI 数据的 API。 有关详细信息,请参阅 检测 PHI。

审查和验证阶段

在文档审核和验证阶段,我们现在可以验证索赔包是否符合业务要求,因为我们已经从早期阶段的包中的文档中收集了所有信息。 我们可以通过在循环中引入一个人来做到这一点,该人可以在将包裹发送到下游应用程序之前审查和验证所有字段,或者只是一个低美元索赔的自动批准流程。 我们可以用 亚马逊增强AI (Amazon A2I) 自动化保险索赔处理的人工审核流程。

在保险行业使用 AWS AI 和分析服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

现在我们已经使用 IDP 的 AI 服务从索赔处理中提取和规范化了所有需要的数据,我们可以扩展解决方案以与 AWS 分析服务(例如 AWS Glue 和 Amazon Redshift)集成,以解决其他用例并提供进一步的分析和可视化。

检测欺诈性保险索赔

在这篇文章中,我们实现了一个无服务器架构,其中提取和处理的数据存储在数据湖中,并用于使用 ML 检测欺诈性保险索赔。 我们用 亚马逊简单存储服务 (Amazon S3) 来存储处理后的数据。 然后我们可以使用 AWS胶水 or 亚马逊电子病历 清理数据并添加其他字段以使其可用于报告和 ML。 之后,我们使用 亚马逊红移机器学习 建立欺诈检测机器学习模型。 最后,我们使用 亚马逊QuickSight 以深入了解数据。

设置 Amazon Redshift 外部架构

出于本示例的目的,我们创建了一个 样本数据集 模拟 ETL(提取、转换和加载)过程的输出,并将 AWS Glue 数据目录用作元数据目录。 首先,我们创建一个名为 idp_demo 在数据目录和 Amazon Redshift 中的外部架构中称为 idp_insurance_demo (见下面的代码)。 我们使用一个 AWS身份和访问管理 (IAM) 角色授予 Amazon Redshift 集群访问 Amazon S3 和 亚马逊SageMaker. 有关如何使用最低权限设置此 IAM 角色的更多信息,请参阅 为 Amazon Redshift ML 管理集群和配置设置.

CREATE EXTERNAL SCHEMA idp_insurance_demo
FROM DATA CATALOG
DATABASE 'idp_demo' 
IAM_ROLE '<<>>'
CREATE EXTERNAL DATABASE IF NOT EXISTS;

创建 Amazon Redshift 外部表

下一步是在 Amazon Redshift 中创建一个外部表,引用文件所在的 S3 位置。 在这种情况下,我们的文件是一个逗号分隔的文本文件。 我们还想从文件中跳过标题行,可以在表属性部分进行配置。 请参阅以下代码:

create external table idp_insurance_demo.claims(id INTEGER,
date_of_service date,
patients_address_city VARCHAR,
patients_address_state VARCHAR,
patients_address_zip VARCHAR,
patient_status VARCHAR,
insured_address_state VARCHAR,
insured_address_zip VARCHAR,
insured_date_of_birth date,
insurance_plan_name VARCHAR,
total_charges DECIMAL(14,4),
fraud VARCHAR,
duplicate varchar,
invalid_claim VARCHAR
)
row format delimited
fields terminated by ','
stored as textfile
location '<<>>'
table properties ( 'skip.header.line.count'='1');

创建训练和测试数据集

创建外部表后,我们通过将数据集拆分为训练集和测试集来为 ML 准备数据集。 我们创建一个新的外部表,名为 claim_train,其中包含声明表中 ID <= 85000 的所有记录。 这是我们训练 ML 模型的训练集。

CREATE EXTERNAL TABLE
idp_insurance_demo.claims_train
row format delimited
fields terminated by ','
stored as textfile
location '<<>>/train'
table properties ( 'skip.header.line.count'='1')
AS select * from idp_insurance_demo.claims where id <= 850000

我们创建另一个名为 claim_test 它由 ID >85000 的所有记录组成,作为我们测试 ML 模型的测试集:

CREATE EXTERNAL TABLE
idp_insurance_demo.claims_test
row format delimited
fields terminated by ','
stored as textfile
location '<<>>/test'
table properties ( 'skip.header.line.count'='1')
AS select * from idp_insurance_demo.claims where id > 850000

使用 Amazon Redshift ML 创建 ML 模型

现在我们使用 建立模型 命令(见下面的代码)。 我们从 claims_train 可以确定欺诈交易的表。 该模型的目标是预测 fraud 柱子; 所以, fraud 被添加为预测目标。 模型训练完成后,它会创建一个名为 insurance_fraud_model. 该函数用于在运行 SQL 语句时进行推理,以预测 fraud 新记录的列。

CREATE MODEL idp_insurance_demo.insurance_fraud_model
FROM (SELECT 
total_charges ,
fraud ,
duplicate,
invalid_claim
FROM idp_insurance_demo.claims_train
)
TARGET fraud
FUNCTION insurance_fraud_model
IAM_ROLE '<<>>'
SETTINGS (
S3_BUCKET '<<>>'
);

评估 ML 模型指标

创建模型后,我们可以运行查询来检查模型的准确性。 我们使用 insurance_fraud_model 预测值的函数 fraud 新记录的列。 运行以下查询 claims_test 创建混淆矩阵的表:

SELECT 
fraud,
idp_insurance_demo.insurance_fraud_model (total_charges ,duplicate,invalid_claim ) as fraud_calculcated,
count(1)
FROM idp_insurance_demo.claims_test
GROUP BY fraud , fraud_calculcated;

使用 ML 模型检测欺诈

创建新模型后,随着新的理赔数据插入数据仓库或数据湖,我们可以使用 insurance_fraud_model 计算欺诈交易的函数。 为此,我们首先将新数据加载到临时表中。 然后我们使用 insurance_fraud_model 计算函数 fraud 标记每个新事务,并将数据与标记一起插入到最终表中,在本例中为 claims 表。

可视化索赔数据

当数据在 Amazon Redshift 中可用时,我们可以使用 QuickSight 创建可视化。 然后,我们可以与业务用户和分析师共享 QuickSight 仪表板。 要创建 QuickSight 控制面板,您首先需要在 QuickSight 中创建一个 Amazon Redshift 数据集。 有关说明,请参阅 从数据库创建数据集.

创建数据集后,您可以使用该数据集在 QuickSight 中创建新分析。 以下是我们创建的一些示例报告:

  • 按州分类的索赔总数,按 fraud 部分 – 该图表向我们展示了欺诈交易与特定状态下交易总数的比例。
  • 索赔的总美元价值的总和,按 fraud 部分 – 该图表向我们展示了欺诈交易的美元金额与特定州交易总额的比例。
  • 每家保险公司的交易总数,按 fraud 部分 – 这张图表向我们展示了每家保险公司有多少索赔以及其中有多少是欺诈性的。

• 每家保险公司的交易总数,按欺诈字段分组

  • 美国地图上显示的按州分列的欺诈交易总额 – 此图表仅显示欺诈交易,并在地图上按州显示这些交易的总费用。 较深的蓝色阴影表示较高的总电荷。 我们可以通过该州内的城市和城市的邮政编码进一步分析这一点,以更好地了解趋势。

在保险行业使用 AWS AI 和分析服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

清理

为防止将来对您的 AWS 账户产生费用,请按照以下说明删除您在设置中预置的资源 清理部分 在我们的回购中。

结论

在这个由两部分组成的系列中,我们了解了如何在很少或没有 ML 经验的情况下构建端到端 IDP 管道。 我们探讨了保险行业的索赔处理用例,以及 IDP 如何使用 Amazon Textract、Amazon Comprehend、Amazon Comprehend Medical 和 Amazon A2I 等服务帮助自动化该用例。 在第 1 部分中,我们演示了如何使用 AWS AI 服务进行文档提取。 在第 2 部分中,我们扩展了提取阶段并执行了数据丰富。 最后,我们扩展了从 IDP 中提取的结构化数据以进行进一步分析,并使用 AWS Analytics 服务创建了可视化来检测欺诈性索赔。

我们建议查看 亚马逊Textract, 亚马逊领悟亚马逊A2I 文档并遵循提供的指南。 要了解有关解决方案定价的更多信息,请查看定价详情 亚马逊Textract, 亚马逊领悟亚马逊A2I.


作者简介

作者钦马伊兰 是 Amazon Web Services 的 AI/ML 专家解决方案架构师。 她对应用数学和机器学习充满热情。 她专注于为 AWS 客户设计智能文档处理解决方案。 工作之余,她喜欢萨尔萨舞和巴哈塔舞。


在保险行业使用 AWS AI 和分析服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。
乌代纳拉亚南
是 AWS 的分析专家解决方案架构师。 他喜欢帮助客户找到应对复杂业务挑战的创新解决方案。 他关注的核心领域是数据分析、大数据系统和机器学习。 在业余时间,他喜欢运动、看电视节目和旅行。


在保险行业使用 AWS AI 和分析服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。
索纳利萨胡
在 Amazon Web Services 领导智能文档处理 AI/ML 解决方案架构师团队。 她是一个充满激情的技术爱好者,喜欢与客户合作,利用创新解决复杂的问题。 她的核心关注领域是用于智能文档处理的人工智能和机器学习。

时间戳记:

更多来自 AWS机器学习