Amazon Web Services 한국 블로그
Amazon Comprehend Medical – 의료 서비스 특성이 반영된 자연어 처리 서비스
대개 병원에서 의사들이 하는 인체 해부학, 외과 시술, 약물의 명칭이나 그 약어 등 복잡한 의학 용어가 나오면 이해하기가 쉽지 않습니다. 따라서, Amazon Comprehend의 의료 서비스 고객용 확장판인 Amazon Comprehend Medical는 이러한 의학 용어를 이해하는데 큰 도움을 줄 것으로 생각합니다.
우선 Amazon Comprehend는 지난 해 AWS re:Invent에서 출시되었습니다. 이 자연어 처리 서비스는 언어 감지, 엔터티 분류, 감정 분석 및 핵심 구 추출에 사용되는 실시간 API를 제공합니다. 또한 “주제 모델링“이라고 하는 자율 학습 기술을 사용하여 텍스트 문서를 자동으로 구성할 수도 있습니다.
Amazon Comprehend는 FINRA, LexisNexis 및 Isentia에서 사용하고 있으며 범용 텍스트를 이해할 수 있습니다. 그러나 임상 문서의 특성을 고려하여 의료계에 종사하는 고객들은 의료 서비스의 고유한 요구 사항에 맞춰진 Amazon Comprehend의 버전을 구축해 줄 것을 요청했습니다.
Amazon Comprehend Medical 소개
Amazon Comprehend Medical은 Amazon Comprehend를 기반으로 구축되며 다음과 같은 기능을 추가로 제공합니다.
- 해부학, 질병, 시술, 약물, 약어 등을 포함하는 방대한 의학 용어에 대한 엔터티 추출 및 엔터티 특성 지원
- 이러한 범주 및 하위 유형에서 훈련된 엔터티 추출 API (detect_entities)
- 상세 연락처, 의료 기록 번호 등의 위치를 찾을 수 있는 PHI(Protected Health Information) 추출 API (detect_phi)
주의: Amazon Comprehend Medical은 일부 상황에서 PHI (Protected Health Information)를 정확히 식별하지 못할 수 있으며, HIPAA가 적용되는 PHI의 비식별화 요구 사항을 충족하지 않습니다. Amazon Comprehend Medical이 제공하는 결과값이 해당 요구 사항을 충족하는지 여부에 대한 확인 책임은 사용자에게 있습니다.
이제 이 새로운 서비스를 시작하는 방법을 보여드리겠습니다. 먼저, AWS 콘솔을 사용하여 단순한 Python 예제를 실행하겠습니다.
AWS 콘솔에서 사용 방법
AWS 콘솔을 열고 텍스트 일부를 붙여넣은 다음 [Analyze] 버튼을 클릭하기만 하면 됩니다.
문서가 즉시 처리되고 엔터티는 추출되어 강조 표시됩니다. 개인 정보는 주황색, 약물은 빨간색, 해부학 용어는 보라색, 질병은 녹색으로 표시된 것을 볼 수 있습니다.
개인 식별 정보가 올바르게 정리된 것을 볼 수 있습니다. 이 기능은 문서를 교환하거나 게시하기 전, 개인 정보를 익명 처리해야 하는 연구원들에게 특히 유용합니다. 또한 ‘rash’ 및 ‘sleeping trouble’이 의사가 진단한 질병으로 올바르게 감지되었습니다(‘Dx’는 진단을 나타내는 ‘diagnosis’의 약칭임). 약물도 감지되었습니다.
그러나 Amazon Comprehend Medical은 단순한 의학 용어 추출 이상의 기능을 제공합니다. 약물의 정량이나 상세 진단 정보 같은 복잡한 관계를 이해할 수 있습니다. 아래 예시를 들어 보겠습니다.
보시다시피 Amazon Comprehend Medical은 ‘po‘ 및 ‘qhs‘ 같은 약어를 이해할 수 있습니다. 첫 번째 약어는 약물을 경구 투여해야 한다는 것을 의미하며 두 번째 약어는 취침 시를 나타내는 ‘quaque hora somni‘(라틴어)의 약어입니다.
이제 좀 더 깊이 들어가서 Python 예제를 실행하도록 하겠습니다.
AWS SDK for Python에서 사용 방법
먼저, boto3 SDK를 가져오고 이 서비스에 대한 클라이언트를 생성합니다.
import boto3
comprehend = boto3.client(service_name='comprehendmedical')
텍스트 샘플에서 detect_entity API를 호출하고 감지된 엔터티를 인쇄합니다.
text = "Pt is 40yo mother, software engineer HPI : Sleeping trouble on present
dosage of Clonidine. Severe Rash on face and leg, slightly itchy Meds : Vyvanse
50 mgs po at breakfast daily, Clonidine 0.2 mgs -- 1 and 1 / 2 tabs po qhs HEENT :
Boggy inferior turbinates, No oropharyngeal lesion Lungs : clear Heart : Regular
rhythm Skin : Papular mild erythematous eruption to hairline Follow-up as scheduled"
result = comprehend.detect_entities(Text=text)
entities = result['Entities']
for entity in entities:
print(entity)
아래 약물 엔터티를 살펴보겠습니다. 여기에는 매우 중요한 컨텍스트를 제공하는 3개의 속성(정량, 용법 및 빈도)이 내포되어 있습니다.
{u'Id': 3,
u'Score': 0.9976208806037903,
u'BeginOffset': 145, u'EndOffset': 152,
u'Category': u'MEDICATION',
u'Type': u'BRAND_NAME',
u'Text': u'Vyvanse',
u'Traits': [],
u'Attributes': [
u'Id': 4,
u'Score': 0.9681360125541687,
u'BeginOffset': 153, u'EndOffset': 159,
u'Type': u'DOSAGE',
u'Text': u'50 mgs',
u'Traits': []
},
{u'Id': 5,
u'Score': 0.99924635887146,
u'BeginOffset': 160, u'EndOffset': 162,
u'Type': u'ROUTE_OR_MODE',
u'Text': u'po',
u'Traits': []
},
{u'Id': 6,
u'Score': 0.9738683700561523,
u'BeginOffset': 163, u'EndOffset': 181,
u'Type': u'FREQUENCY',
u'Text': u'at breakfast daily',
u'Traits': []
}]
}
다음은 또 다른 예입니다. 이 질병 엔터티는 질병이 감지되지 않았음을 의미하는 ‘negation’ 으로 완료됩니다. 즉, 이 환자에게는 구강인두 관련 병변이 없습니다.
{u'Category': u'MEDICAL_CONDITION',
u'Id': 16,
u'Score': 0.9825472235679626,
u'BeginOffset': 266, u'EndOffset': 286,
u'Type': u'DX_NAME',
u'Text': u'oropharyngeal lesion',
u'Traits': [
{u'Score': 0.9701067209243774, u'Name': u'NEGATION'},
{u'Score': 0.9053299427032471, u'Name': u'SIGN'}
]}
마지막으로 보여드릴 기능은 detect_phi API로 개인 정보를 추출하는 기능입니다.
result = comprehend.detect_phi(Text=text) entities = result['Entities'] for entity in entities: print(entity)
이 텍스트에 포함된 개인 정보가 올바르게 추출되었습니다.
{u'Category': u'PERSONAL_IDENTIFIABLE_INFORMATION',
u'BeginOffset': 6, u'EndOffset': 10, u'Text': u'40yo',
u'Traits': [],
u'Score': 0.997914731502533,
u'Type': u'AGE', u'Id': 0}
{u'Category': u'PERSONAL_IDENTIFIABLE_INFORMATION',
u'BeginOffset': 19, u'EndOffset': 36, u'Text': u'software engineer',
u'Traits': [],
u'Score': 0.8865673542022705,
u'Type': u'PROFESSION', u'Id': 1}
보시다시피 Amazon Comprehend는 복잡한 정보 및 관계를 추출하는 데 도움이 될 뿐 아니라 매우 간단하게 사용할 수 있습니다.
다시 말하지만 Amazon Comprehend Medical은 전문 의료진의 진찰, 진단 또는 치료를 대체하는 것이 아닙니다. 이 서비스가 제공하는 정보를 면밀히 검토하고 보유한 경험을 바탕으로 판단한 후 의사 결정을 내려야 합니다.
지금 이용 가능
이 게시물에서 소개한 내용이 유용했나요? 오늘부터 미국 동부(버지니아 북부), 미국 중부(오하이오), 미국 서부(오레곤) 및 EU(아일랜드) 리전에서 Amazon Comprehend Medical을 사용해 애플리케이션을 구축할 수 있습니다.
이 서비스는 AWS 프리 티어에 포함됩니다. 가입 후 3개월 동안 첫 25,000단위의 텍스트(또는 250만 자)가 무료로 제공됩니다.
최신 처방전 또는 건강 검진으로 서비스를 평가해 보신 후, 의견을 알려주세요.
— Julien;
이 글은 AWS News Blog의 Amazon Comprehend Medical – Natural Language Processing for Healthcare Customers의 한국어 번역입니다.