Nesta página, você verá como ativar a API Healthcare Natural Language, configurar
permissões e chamar o método analyzeEntities
para extrair insights clínicos do texto médico.
Visão geral
A API Natural Language oferece soluções de aprendizado de máquina para gerar insights de textos médicos. A API Cloud Natural Language é parte da API Cloud Healthcare. Para uma visão geral, consulte a documentação conceitual da API Healthcare Natural Language.
A API Healthcare Natural Language analisa textos médicos não estruturados, como registros médicos ou pedidos de seguro. Em seguida, ela gera uma representação de dados estruturados das entidades de conhecimento médico armazenadas nessas fontes para análise e automação de downstream. Por exemplo, você pode:
- extrair informações sobre conceitos médicos, como doenças, medicamentos, dispositivos médicos, procedimentos e seus atributos clinicamente relevantes;
- mapear conceitos médicos para vocabulários médicos padrão, como RxNorm, ICD-10, MeSH e SNOMED CT (somente usuários dos EUA);
- Extrair insights médicos de textos e integrá-los a produtos de análise de dados no Google Cloud
Locais disponíveis
A API Healthcare Natural Language está disponível nos seguintes locais:
Nome do local | Descrição do local |
---|---|
us-central1 |
Iowa, EUA |
europe-west4 |
Países Baixos |
Como ativar a API Healthcare Natural Language
Antes de começar a usar a API Healthcare Natural Language, é necessário ativar a API no projeto do Google Cloud. É possível usar a API Healthcare Natural Language sem ativar ou usar recursos da API Cloud Healthcare.
Para ativar a API, conclua as seguintes etapas:
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.
-
Crie uma conta de serviço:
-
No console do Cloud, acesse a página Criar conta de serviço.
Acesse "Criar conta de serviço" - Selecione o projeto.
-
No campo Nome da conta de serviço, insira um nome. O console do Cloud preenche o campo ID da conta de serviço com base nesse nome.
No campo Descrição da conta de serviço, insira uma descrição. Por exemplo,
Service account for quickstart
. - Clique em Criar e continuar.
-
Para fornecer acesso ao projeto, conceda os seguintes papéis à conta de serviço: Projeto > Proprietário.
Na lista Selecionar um papel, escolha um.
Para papéis adicionais, clique em
Adicionar outro papel e adicione cada papel adicional. - Clique em Continuar.
-
Clique em Concluído para terminar a criação da conta de serviço.
Não feche a janela do navegador. Você vai usá-la na próxima etapa.
-
-
Crie uma chave de conta de serviço:
- No console do Cloud, clique no endereço de e-mail da conta de serviço que você criou.
- Clique em Chaves.
- Clique em Adicionar chave e em Criar nova chave.
- Clique em Criar. O download de um arquivo de chave JSON é feito no seu computador.
- Clique em Fechar.
-
Defina a variável de ambiente
GOOGLE_APPLICATION_CREDENTIALS
como o caminho do arquivo JSON que contém a chave da conta de serviço. Essa variável só se aplica à sessão de shell atual. Dessa maneira, se você abrir uma nova sessão, defina a variável novamente. -
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.
-
Crie uma conta de serviço:
-
No console do Cloud, acesse a página Criar conta de serviço.
Acesse "Criar conta de serviço" - Selecione o projeto.
-
No campo Nome da conta de serviço, insira um nome. O console do Cloud preenche o campo ID da conta de serviço com base nesse nome.
No campo Descrição da conta de serviço, insira uma descrição. Por exemplo,
Service account for quickstart
. - Clique em Criar e continuar.
-
Para fornecer acesso ao projeto, conceda os seguintes papéis à conta de serviço: Projeto > Proprietário.
Na lista Selecionar um papel, escolha um.
Para papéis adicionais, clique em
Adicionar outro papel e adicione cada papel adicional. - Clique em Continuar.
-
Clique em Concluído para terminar a criação da conta de serviço.
Não feche a janela do navegador. Você vai usá-la na próxima etapa.
-
-
Crie uma chave de conta de serviço:
- No console do Cloud, clique no endereço de e-mail da conta de serviço que você criou.
- Clique em Chaves.
- Clique em Adicionar chave e em Criar nova chave.
- Clique em Criar. O download de um arquivo de chave JSON é feito no seu computador.
- Clique em Fechar.
-
Defina a variável de ambiente
GOOGLE_APPLICATION_CREDENTIALS
como o caminho do arquivo JSON que contém a chave da conta de serviço. Essa variável só se aplica à sessão de shell atual. Dessa maneira, se você abrir uma nova sessão, defina a variável novamente. -
Ative a Cloud Healthcare API.
- Instale e inicialize a Google Cloud CLI.
Configurar permissões
Para usar os recursos deste guia, é necessário ter a permissão healthcare.nlpservce.analyzeEntities
,
que está incluída no
papel healthcare.nlpServiceViewer
.
Para atribuir esse papel, execute o comando gcloud projects add-iam-policy-binding
:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT_ID \ --role roles/healthcare.nlpServiceViewer
Como extrair entidades, relações e atributos contextuais
A API Healthcare Natural Language usa modelos com reconhecimento de contexto para extrair
entidades, relações e atributos contextuais médicos. Cada entidade de texto é extraída
para uma entrada de dicionário médico. Para extrair esse nível
de insights médicos do texto, use o
método
projects.locations.services.nlp.analyzeEntities
.
Para extrair insights clínicos do texto médico usando a
API Healthcare Natural Language, faça uma solicitação POST
e, nela, especifique as seguintes
informações:
- O nome do serviço pai, incluindo o ID e o local do projeto
- O texto do destino. O tamanho máximo é de 10.000 caracteres unicode.
curl
O exemplo a seguir mostra uma solicitação POST usando curl
:
curl -X POST \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type:application/json" \ --data "{ 'nlpService':'projects/PROJECT_ID/locations/LOCATION/services/nlp', 'documentContent':'Insulin regimen human 5 units IV administered.' }" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/services/nlp:analyzeEntities"
PowerShell
O exemplo a seguir mostra uma solicitação POST usando o Windows PowerShell.
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'nlpService':'projects/PROJECT_ID/locations/LOCATION/services/nlp', 'documentContent':'Insulin regimen human 5 units IV administered.' }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/services/nlp:analyzeEntities" | Select-Object -Expand Content
Se a solicitação for bem-sucedida, a resposta incluirá as seguintes informações:
- Entidades de conhecimento médico reconhecidas
- Recursos funcionais
- Relações entre as entidades reconhecidas
- Atributos contextuais
- Mapeamentos de entidades de conhecimento médico em terminologias padrão
Para uma lista de tipos de entidade, atributos e relações compatíveis, consulte a documentação conceitual da API Healthcare Natural Language.
A seguinte resposta para os exemplos anteriores identificou a insulina terapêutica, entidade com o código
C581
no sistema de terminologia do NCI, como medicamento. Ela
também inclui a pontuação de confiança atribuída à resposta. Para mais
informações sobre os campos de resposta, consulte a
documentação
analyzeEntities
.
{ "entityMentions": [ { "mentionId": "1", "type": "MEDICINE", "text": { "content": "Insulin regimen human" }, "linkedEntities": [ { "entityId": "UMLS/3537244" }, { "entityId": "UMLS/3714501" }, { "entityId": "UMLS/21641" }, { "entityId": "UMLS/795635" }, { "entityId": "UMLS/1533581" }, { "entityId": "UMLS/4721402" } ], "temporalAssessment": { "value": "CURRENT", "confidence": 0.87631082534790039 }, "certaintyAssessment": { "value": "LIKELY", "confidence": 0.9999774694442749 }, "subject": { "value": "PATIENT", "confidence": 0.99999970197677612 }, "confidence": 0.41636556386947632 }, { "mentionId": "2", "type": "MED_DOSE", "text": { "content": "5 units", "beginOffset": 22 }, "confidence": 0.56910794973373413 }, { "mentionId": "3", "type": "MED_ROUTE", "text": { "content": "IV", "beginOffset": 30 }, "linkedEntities": [ { "entityId": "UMLS/348016" } ], "confidence": 0.9180646538734436 } ], "entities": [ { "entityId": "UMLS/1533581", "preferredTerm": "Therapeutic Insulin", "vocabularyCodes": [ "MTH/NOCODE", "NCI/C581" ] }, { "entityId": "UMLS/21641", "preferredTerm": "Insulin", "vocabularyCodes": [ "FMA/83365", "LNC/LA15805-7", "LNC/LP14676-8", "LNC/LP16325-0", "LNC/LP32542-0", "LNC/LP70329-5", "LNC/MTHU002108", "LNC/MTHU019392", "MSH/D007328", "MTH/NOCODE" ] }, { "entityId": "UMLS/348016", "preferredTerm": "Intravenous", "vocabularyCodes": [ "LNC/LA9437-0", "LNC/LP32453-0", "MTH/NOCODE", "NCI/C13346" ] }, { "entityId": "UMLS/3537244", "preferredTerm": "Insulins", "vocabularyCodes": [ "MSH/D061385", "MTH/NOCODE" ] }, { "entityId": "UMLS/3714501", "preferredTerm": "Insulin Drug Class", "vocabularyCodes": [ "MTH/NOCODE", "VANDF/4021631" ] }, { "entityId": "UMLS/4721402", "preferredTerm": "INS protein, human", "vocabularyCodes": [ "MTH/NOCODE", "NCI/C2271" ] }, { "entityId": "UMLS/795635", "preferredTerm": "insulin, regular, human", "vocabularyCodes": [ "LNC/LP17001-6", "MSH/D061386", "MTH/NOCODE", "NCI/C29125", "RXNORM/253182", "VANDF/4017559", "VANDF/4017569", "VANDF/4019786" ] } ], "relationships": [ { "subjectId": "1", "objectId": "2", "confidence": 0.53775161504745483 }, { "subjectId": "1", "objectId": "3", "confidence": 0.95007365942001343 } ] }
Incluir vocabulários licenciados
É possível incluir os seguintes vocabulários licenciados nas solicitações para a API Healthcare Natural Language:
- Classificação internacional de doenças, décima revisão, modificação clínica (ICD10CM, na sigla em inglês) (link em inglês): usada para codificar e classificar dados de morbidade de registros de pacientes ambulatoriais e médicos, além da maioria das pesquisas do Centro Nacional de Estatísticas de Saúde (NCHS, na sigla em inglês).
- Termos Clínicos SNOMED, versão dos EUA (SNOMEDCT_US, na sigla em inglês) (link em inglês): fornece a terminologia geral principal dos registros eletrônicos de saúde.
Os exemplos a seguir mostram como fazer uma solicitação POST
para a API Healthcare Natural Language
e incluir os dois vocabulários licenciados disponíveis no objeto
licensedVocabularies
. É possível especificar um ou mais vocabulários
licenciados disponíveis.
curl
O exemplo a seguir mostra uma solicitação POST
usando curl
.
curl -X POST \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type:application/json" \ --data "{ 'nlpService':'projects/PROJECT_ID/locations/us-central1/services/nlp', 'documentContent':'Diabetes. Insulin regimen human 5 units IV administered.', 'licensedVocabularies':['SNOMEDCT_US','ICD10CM'] }" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/services/nlp:analyzeEntities"
Substitua PROJECT_ID pelo ID do projeto do Google Cloud.
A saída é esta: A saída da especificação dos vocabulários licenciados está em negrito:
{ "entityMentions": [ { "mentionId": "1", "type": "PROBLEM", "text": { "content": "Diabetes" }, "linkedEntities": [ { "entityId": "UMLS/C0011847" }, { "entityId": "UMLS/C0011849" }, { "entityId": "UMLS/C0241863" } ], "temporalAssessment": { "value": "CURRENT", "confidence": 0.98781299591064453 }, "certaintyAssessment": { "value": "LIKELY", "confidence": 0.872421145439148 }, "subject": { "value": "PATIENT", "confidence": 0.99975031614303589 }, "confidence": 0.99663406610488892 }, { "mentionId": "2", "type": "MEDICINE", "text": { "content": "Insulin regimen", "beginOffset": 10 }, "linkedEntities": [ { "entityId": "UMLS/C0795635" }, { "entityId": "UMLS/C0021641" }, { "entityId": "UMLS/C3537244" }, { "entityId": "UMLS/C1533581" }, { "entityId": "UMLS/C3714501" } ], "temporalAssessment": { "value": "CURRENT", "confidence": 0.91042423248291016 }, "certaintyAssessment": { "value": "LIKELY", "confidence": 0.99766635894775391 }, "subject": { "value": "PATIENT", "confidence": 0.999998152256012 }, "confidence": 0.716249406337738 }, { "mentionId": "3", "type": "MEDICINE", "text": { "content": "human", "beginOffset": 26 }, "temporalAssessment": { "value": "CURRENT", "confidence": 0.64570724964141846 }, "certaintyAssessment": { "value": "LIKELY", "confidence": 0.90325617790222168 }, "subject": { "value": "PATIENT", "confidence": 0.97613298892974854 }, "confidence": 0.57638454437255859 }, { "mentionId": "4", "type": "MED_DOSE", "text": { "content": "5 units", "beginOffset": 32 }, "confidence": 0.92076742649078369 }, { "mentionId": "5", "type": "MED_ROUTE", "text": { "content": "IV", "beginOffset": 40 }, "linkedEntities": [ { "entityId": "UMLS/C0348016" } ], "confidence": 0.967033863067627 } ], "entities": [ { "entityId": "UMLS/C0011847", "preferredTerm": "Diabetes", "vocabularyCodes": [ "ICD10CM/E11", "LNC/LA10529-8", "LNC/LP128793-9", "LNC/MTHU040702", "MTH/NOCODE", "OMIM/MTHU050182" ] }, { "entityId": "UMLS/C0011849", "preferredTerm": "Diabetes Mellitus", "vocabularyCodes": [ "HPO/HP:0000819", "ICD10CM/E08-E13", "ICD9CM/250", "LNC/LA14291-1", "LNC/LA27539-8", "LNC/MTHU020781", "MEDLINEPLUS/4", "MEDLINEPLUS/45", "MSH/D003920", "MTH/NOCODE", "MTH/U000263", "NCI/C2985", "NCI/OMFAQ", "NCI/TCGA", "OMIM/MTHU036798", "SNOMEDCT_US/73211009" ] }, { "entityId": "UMLS/C0021641", "preferredTerm": "Insulin", "vocabularyCodes": [ "FMA/83365", "LNC/LA15805-7", "LNC/LP14676-8", "LNC/LP16325-0", "LNC/LP32542-0", "LNC/LP70329-5", "LNC/MTHU002108", "LNC/MTHU019392", "MEDLINEPLUS/4935", "MSH/D007328", "MTH/NOCODE", "SNOMEDCT_US/39487003", "SNOMEDCT_US/412222002", "SNOMEDCT_US/67866001" ] }, { "entityId": "UMLS/C0241863", "preferredTerm": "Diabetic", "vocabularyCodes": [ "LNC/LA26134-9" ] }, { "entityId": "UMLS/C0348016", "preferredTerm": "Intravenous", "vocabularyCodes": [ "LNC/LA9437-0", "LNC/LP32453-0", "MTH/NOCODE", "NCI/C13346", "SNOMEDCT_US/255560000" ] }, { "entityId": "UMLS/C0795635", "preferredTerm": "insulin, regular, human", "vocabularyCodes": [ "LNC/LP17001-6", "MSH/D061386", "MTH/NOCODE", "NCI/C29125", "RXNORM/253182", "SNOMEDCT_US/126210001", "SNOMEDCT_US/417423002", "SNOMEDCT_US/420609005", "SNOMEDCT_US/96367001", "VANDF/4017559", "VANDF/4017569", "VANDF/4019786" ] }, { "entityId": "UMLS/C1533581", "preferredTerm": "Therapeutic Insulin", "vocabularyCodes": [ "MTH/NOCODE", "NCI/C581" ] }, { "entityId": "UMLS/C3537244", "preferredTerm": "Insulins", "vocabularyCodes": [ "MSH/D061385", "MTH/NOCODE" ] }, { "entityId": "UMLS/C3714501", "preferredTerm": "Insulin Drug Class", "vocabularyCodes": [ "MTH/NOCODE", "VANDF/4021631" ] } ], "relationships": [ { "subjectId": "2", "objectId": "4", "confidence": 0.99827027320861816 }, { "subjectId": "2", "objectId": "5", "confidence": 0.99729859828948975 }, { "subjectId": "3", "objectId": "4", "confidence": 0.80851161479949951 }, { "subjectId": "3", "objectId": "5", "confidence": 0.67507040500640869 } ] }
PowerShell
O exemplo a seguir mostra uma solicitação POST
usando o Windows PowerShell.
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'nlpService':'projects/PROJECT_ID/locations/us-central1/services/nlp', 'documentContent': 'Diabetes. Insulin regimen human 5 units IV administered.', 'licensedVocabularies': ['SNOMEDCT_US','ICD10CM'] }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/services/nlp:analyzeEntities" | Select-Object -Expand Content
Substitua PROJECT_ID pelo ID do projeto do Google Cloud.
A saída é esta: A saída da especificação dos vocabulários licenciados está em negrito:
{ "entityMentions": [ { "mentionId": "1", "type": "PROBLEM", "text": { "content": "Diabetes" }, "linkedEntities": [ { "entityId": "UMLS/C0011847" }, { "entityId": "UMLS/C0011849" }, { "entityId": "UMLS/C0241863" } ], "temporalAssessment": { "value": "CURRENT", "confidence": 0.98781299591064453 }, "certaintyAssessment": { "value": "LIKELY", "confidence": 0.872421145439148 }, "subject": { "value": "PATIENT", "confidence": 0.99975031614303589 }, "confidence": 0.99663406610488892 }, { "mentionId": "2", "type": "MEDICINE", "text": { "content": "Insulin regimen", "beginOffset": 10 }, "linkedEntities": [ { "entityId": "UMLS/C0795635" }, { "entityId": "UMLS/C0021641" }, { "entityId": "UMLS/C3537244" }, { "entityId": "UMLS/C1533581" }, { "entityId": "UMLS/C3714501" } ], "temporalAssessment": { "value": "CURRENT", "confidence": 0.91042423248291016 }, "certaintyAssessment": { "value": "LIKELY", "confidence": 0.99766635894775391 }, "subject": { "value": "PATIENT", "confidence": 0.999998152256012 }, "confidence": 0.716249406337738 }, { "mentionId": "3", "type": "MEDICINE", "text": { "content": "human", "beginOffset": 26 }, "temporalAssessment": { "value": "CURRENT", "confidence": 0.64570724964141846 }, "certaintyAssessment": { "value": "LIKELY", "confidence": 0.90325617790222168 }, "subject": { "value": "PATIENT", "confidence": 0.97613298892974854 }, "confidence": 0.57638454437255859 }, { "mentionId": "4", "type": "MED_DOSE", "text": { "content": "5 units", "beginOffset": 32 }, "confidence": 0.92076742649078369 }, { "mentionId": "5", "type": "MED_ROUTE", "text": { "content": "IV", "beginOffset": 40 }, "linkedEntities": [ { "entityId": "UMLS/C0348016" } ], "confidence": 0.967033863067627 } ], "entities": [ { "entityId": "UMLS/C0011847", "preferredTerm": "Diabetes", "vocabularyCodes": [ "ICD10CM/E11", "LNC/LA10529-8", "LNC/LP128793-9", "LNC/MTHU040702", "MTH/NOCODE", "OMIM/MTHU050182" ] }, { "entityId": "UMLS/C0011849", "preferredTerm": "Diabetes Mellitus", "vocabularyCodes": [ "HPO/HP:0000819", "ICD10CM/E08-E13", "ICD9CM/250", "LNC/LA14291-1", "LNC/LA27539-8", "LNC/MTHU020781", "MEDLINEPLUS/4", "MEDLINEPLUS/45", "MSH/D003920", "MTH/NOCODE", "MTH/U000263", "NCI/C2985", "NCI/OMFAQ", "NCI/TCGA", "OMIM/MTHU036798", "SNOMEDCT_US/73211009" ] }, { "entityId": "UMLS/C0021641", "preferredTerm": "Insulin", "vocabularyCodes": [ "FMA/83365", "LNC/LA15805-7", "LNC/LP14676-8", "LNC/LP16325-0", "LNC/LP32542-0", "LNC/LP70329-5", "LNC/MTHU002108", "LNC/MTHU019392", "MEDLINEPLUS/4935", "MSH/D007328", "MTH/NOCODE", "SNOMEDCT_US/39487003", "SNOMEDCT_US/412222002", "SNOMEDCT_US/67866001" ] }, { "entityId": "UMLS/C0241863", "preferredTerm": "Diabetic", "vocabularyCodes": [ "LNC/LA26134-9" ] }, { "entityId": "UMLS/C0348016", "preferredTerm": "Intravenous", "vocabularyCodes": [ "LNC/LA9437-0", "LNC/LP32453-0", "MTH/NOCODE", "NCI/C13346", "SNOMEDCT_US/255560000" ] }, { "entityId": "UMLS/C0795635", "preferredTerm": "insulin, regular, human", "vocabularyCodes": [ "LNC/LP17001-6", "MSH/D061386", "MTH/NOCODE", "NCI/C29125", "RXNORM/253182", "SNOMEDCT_US/126210001", "SNOMEDCT_US/417423002", "SNOMEDCT_US/420609005", "SNOMEDCT_US/96367001", "VANDF/4017559", "VANDF/4017569", "VANDF/4019786" ] }, { "entityId": "UMLS/C1533581", "preferredTerm": "Therapeutic Insulin", "vocabularyCodes": [ "MTH/NOCODE", "NCI/C581" ] }, { "entityId": "UMLS/C3537244", "preferredTerm": "Insulins", "vocabularyCodes": [ "MSH/D061385", "MTH/NOCODE" ] }, { "entityId": "UMLS/C3714501", "preferredTerm": "Insulin Drug Class", "vocabularyCodes": [ "MTH/NOCODE", "VANDF/4021631" ] } ], "relationships": [ { "subjectId": "2", "objectId": "4", "confidence": 0.99827027320861816 }, { "subjectId": "2", "objectId": "5", "confidence": 0.99729859828948975 }, { "subjectId": "3", "objectId": "4", "confidence": 0.80851161479949951 }, { "subjectId": "3", "objectId": "5", "confidence": 0.67507040500640869 } ] }