磐创AI分享
作者 | Ram Vegiraju
编译 | VK 来源 | Towards Data Science
命名实体识别(Named Entity Recognition,NER)是目前最流行和最有需求的自然语言处理任务之一。随着NER的扩展,它也变得更加特定于领域。
为特定领域(如医疗保健/医疗)构建定制的NER模型可能很困难,并且需要大量的数据和计算能力。AWS是一个高级服务,AWS提供了许多不同的NLP任务的自动化,例如情感分析、主题建模和NER。
在本文中,我们将介绍如何使用Streamlit构建一个web应用程序,该应用程序可以调用impless Medical并返回检测到的医疗实体。本文假设具备AWS的基础知识、在AWS控制台中导航的能力以及Python基础知识。
我将提供一个我们将要使用的服务的列表,以及下面的更深入的定义,但是如果已经熟悉这些服务,请随意跳到情感分析和实体提取的代码演示。
目录
- AWS服务概述
- 体系
- 使用Streamlit创建前端
- 创建Lambda函数和rest api
- Lambda函数与AWS函数的集成
- 连接前端和后端
- 代码和结论
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模型经验的人提供真正的自动化和强大的应用程序。
谢谢你的阅读!