AWS医疗NLP

2021-09-03 16:34:01 浏览数 (1)

磐创AI分享

作者 | Ram Vegiraju

编译 | VK 来源 | Towards Data Science

命名实体识别(Named Entity Recognition,NER)是目前最流行和最有需求的自然语言处理任务之一。随着NER的扩展,它也变得更加特定于领域。

为特定领域(如医疗保健/医疗)构建定制的NER模型可能很困难,并且需要大量的数据和计算能力。AWS是一个高级服务,AWS提供了许多不同的NLP任务的自动化,例如情感分析、主题建模和NER。

在本文中,我们将介绍如何使用Streamlit构建一个web应用程序,该应用程序可以调用impless Medical并返回检测到的医疗实体。本文假设具备AWS的基础知识、在AWS控制台中导航的能力以及Python基础知识。

我将提供一个我们将要使用的服务的列表,以及下面的更深入的定义,但是如果已经熟悉这些服务,请随意跳到情感分析和实体提取的代码演示。

目录

  1. AWS服务概述
  2. 体系
  3. 使用Streamlit创建前端
  4. 创建Lambda函数和rest api
  5. Lambda函数与AWS函数的集成
  6. 连接前端和后端
  7. 代码和结论

1.AWS服务

AWS Understand Medical:符合HIPAA的NLP服务,为用户从文本中提取健康数据提供高级API。

AWS lambda:一种无服务器计算服务,允许开发人员在不管理或配置服务器的情况下运行代码。我们将使用此服务访问AWS for NER,并与restapi通信以将结果输出到前端。

Boto3:AWS软件开发工具包(SDK)针对Python开发人员,我们在Lambda函数中使用它来访问其他AWS服务,如consulate。

身份访问和管理(IAM):允许你通过权限和角色管理AWS服务的访问。我们将为Lambda函数创建一个角色,以便能够访问AWS和API GW。

awsapi网关(apigw):允许开发人员创建、发布和监视安全RESTful和socketapi的服务。

2.架构

架构相对简单。我们将构建一个streamlitweb应用程序,它访问我们将使用的amazon api网关创建的rest api。这个rest api将作为后端Lambda函数的接口,该函数使用boto3 sdk访问understand Medical for Medical。

3.使用Streamlit创建前端

对于我们的应用程序,我们将使用一个名为Streamlit的Python库创建一个简单的前端,该库允许Python开发人员和数据科学家快速启动和运行web应用程序/仪表板。我们的应用程序只需要一些标题和一个文本框,用于输入文本,我们将对其进行分析,以检测任何潜在的医疗实体。

代码语言:javascript复制
import requests
import json
import streamlit as st

# 标题
st.title("Medical NER with AWS Comprehend Medical Example")
st.subheader("Enter the text you would like to analyze below")
inputText = st.text_input('Enter text') #text is stored in this variable

请求库稍后将用于访问我们创建的API,但是现在应该创建一个基本的前端模板。

4.创建Lambda函数和restapi

注意:这一步有点困难,为了简单起见,我跳过了许多关于API创建的小细节。

现在,当你直接登录到IAM服务后,就可以转到AWS控制台了。在使用Lambda之前,我们需要为Lambda函数创建一个角色,该角色允许Lambda函数使用comprehensive Medical和API Gateway。

进入IAM服务后,单击页面左侧的角色,然后单击创建角色。现在你选择角色的服务,在本例中是Lambda。单击下一步:权限,现在我们可以在搜索选项卡中查找要附加到角色的策略。确保选中AmazonComprehendFullAccess、AmazonApigatewayFullAccess和AmazonAPIGatewayAdministrator。

继续并单击createrole,我们可以转到Lambda服务。单击create function,命名Lambda函数,选择python3.8作为运行时,然后单击change fault execution role。现在选择Use an existing role并选择你为Lambda服务创建的角色。

继续并单击create function,我们已经准备好了Lambda函数。我们的下一步是使用apigw创建restapi,并将其与Lambda函数集成。转到控制台上的API网关服务,然后单击创建API。选择build rest api,命名API,然后单击create。

创建rest api之后,请确保创建POST方法,以便我们可以将数据从前端发送到后端Lambda函数。在创建适当的资源和方法之后,确保部署API并启用CORS。我们现在有了一个restapi,可以用来集成前端和后端。

5.Lambda函数与AWS函数的集成

现在,架构的一般流程已经建立,我们可以集中精力在后端工作上,以便为NER集成应用程序。

使用boto3库,我们使用API调用。医疗检测实体有五个不同的类别,可分为:解剖、医疗状况、药物、受保护的健康信息和测试治疗程序。有关boto3为你提供的API调用的进一步文档,请访问以下链接:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/comprehendmedical.html。

代码语言:javascript复制
import json
import boto3

# 客户访问Comprehend Medical
medComprehendClient = boto3.client(service_name='comprehendmedical', region_name='us-east-1')

def lambda_handler(event, context):
    print(event['Input'])
    inputText = event['Input']
    print(inputText)

    # API调用医疗实体检测/NER
    entitiesDetected = medComprehendClient.detect_entities(Text = inputText)
    print(entitiesDetected)


    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': entitiesDetected
    }

请注意,你必须在我们返回的JSON中包含一个headers部分,以避免任何CORS错误。

6.连接前端和后端

既然我们已经部署了API,我们需要在前端访问restapi,这样我们就可以将输入文本输入Lambda函数。我们使用Python请求库来访问我们创建的restapi。

代码语言:javascript复制
# 使用API GW和Lambda函数进行实体检测
def detectEntities(inputText):
    # 输入文本被发送到Lambda函数
    inputObj = {"Input": inputText}
    # 部署API
    url = "https://80g6psdc39.execute-api.us-east-1.amazonaws.com/prod/medner"
    x = requests.post(url, data = json.dumps(inputObj))
    # 解析实体检测
    resDict = x.text
    res = json.loads(resDict)
    resEntities = res["body"]["Entities"]
    resText = [i['Text'] for i in resEntities]
    resCategories = [i['Category'] for i in resEntities]
    entDict = dict(zip(resText, resCategories))
    return entDict

函数的第一部分接受用户输入并将其传递给rest api。在impledge Medical返回它检测到的实体之后,我们将数据解析成一种可呈现的格式,我们可以将其写回前端。

7.代码和结论

https://github.com/RamVegiraju/MedNERComprehend

要访问演示的所有代码,请转到上面的链接。AWS拥有一套不断扩展的高级人工智能服务,可以为时间不长或没有构建定制ML模型经验的人提供真正的自动化和强大的应用程序。

谢谢你的阅读!

0 人点赞