Utilize Análise de Texto para recipientes de saúde

Os contentores permitem-lhe hospedar o Análise de Texto para a API de saúde na sua própria infraestrutura. Se você tem requisitos de segurança ou de governação de dados que não podem ser cumpridos chamando Análise de Texto para a saúde remotamente, então os recipientes podem ser uma boa opção.

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Pré-requisitos

Deve encontrar os seguintes pré-requisitos antes de utilizar Análise de Texto para recipientes de saúde. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

  • Docker instalado num computador anfitrião. O Docker deve ser configurado para permitir que os contentores se conectem e enviem dados de faturação para a Azure.
    • No Windows, o Docker também deve ser configurado para suportar os contentores Linux.
    • Devias ter uma compreensão básica dos conceitos do Docker.
  • Um recurso linguístico com o nível de preços gratuito (F0) ou standard (S).

Recolher os parâmetros necessários

São necessários três parâmetros primários para todos os recipientes dos Serviços Cognitivos. Os Termos da Licença de Software da Microsoft devem estar presentes com um valor de aceitação. Também são necessárias uma chave Endpoint URI e API.

Endpoint URI

O {ENDPOINT_URI} valor está disponível na página portal do Azure visão geral do recurso correspondente dos Serviços Cognitivos. Vá à página 'Vista Geral ', paire sobre o ponto final e aparece um ícone copy to clipboard . Copiar e utilizar o ponto final sempre que necessário.

Screenshot that shows gathering the endpoint URI for later use.

Chaves

O {API_KEY} valor é utilizado para iniciar o contentor e está disponível na página Chaves do portal do Azure do recurso correspondente dos Serviços Cognitivos. Vá à página 'Chaves' e selecione o ícone Copy para clipboard .

Screenshot that shows getting one of the two keys for later use.

Importante

Estas chaves de subscrição são usadas para aceder à API dos Serviços Cognitivos. Não partilhem as chaves. Guarde-os em segurança. Por exemplo, utilize o Azure Key Vault. Recomendamos também que regenerar estas chaves regularmente. Apenas uma chave é necessária para fazer uma chamada da API. Ao regenerar a primeira chave, pode utilizar a segunda chave para o acesso continuado ao serviço.

Requisitos e recomendações de computador de anfitrião

O hospedeiro é um computador baseado em X64 que gere o contentor Docker. Pode ser um computador nas suas instalações ou um serviço de hospedagem Docker em Azure, tais como:

O quadro a seguir descreve as especificações mínimas e recomendadas para o Análise de Texto para os recipientes de saúde. Cada núcleo cpu deve ser pelo menos 2,6 gigahertz (GHz) ou mais rápido. As transações admissíveis por segundo (TPS) também estão listadas.

Especificações mínimas de anfitrião Especificações recomendadas do anfitrião TPS mínimos TPS máximo
1 documento/pedido 4 núcleo, memória de 10GB 6 núcleo, 12GB de memória 15 30
10 documentos/pedido 6 núcleo, 16GB de memória 8 núcleo, 20GB de memória 15 30

O núcleo e a memória do CPU correspondem às --cpus definições e --memory configurações, que são utilizadas como parte do docker run comando.

Obtenha a imagem do recipiente com docker pull

Utilize o docker pull comando para descarregar esta imagem do contentor do registo público do contentor da Microsoft.

docker pull mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare:latest

Dica

Pode utilizar o comando de imagens docker para listar as imagens do seu contentor descarregado. Por exemplo, o seguinte comando lista o ID, repositório e etiqueta de cada imagem de recipiente descarregado, formatado como tabela:

docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

IMAGE ID         REPOSITORY                TAG
<image-id>       <repository-path/name>    <tag-name>

Executar o recipiente com docker run

Uma vez que o recipiente esteja no computador anfitrião, utilize o comando de execução do estivador para executar os recipientes. O contentor continuará a funcionar até o parar.

Importante

  • Os comandos do estivador nas seguintes secções usam o corte traseiro, \como um personagem de continuação de linha. Substitua ou remova isto com base nos requisitos do seu sistema operativo anfitrião.
  • As Eulaopções , Billinge ApiKey opções devem ser especificadas para executar o recipiente; caso contrário, o recipiente não arranca. Para mais informações, consulte Billing.
    • O reconhecimento responsável da IA (RAI) também deve estar presente com um valor de accept.
  • Os recipientes de análise de sentimento e de deteção de linguagem utilizam v3 da API, e estão geralmente disponíveis. O recipiente de extração de frase-chave utiliza v2 da API e está em pré-visualização.

Existem várias formas de instalar e executar o Análise de Texto para recipiente de saúde.

  • Use o portal do Azure para criar um recurso language, e use o Docker para obter o seu recipiente.
  • Utilize um Azure VM com o Docker para executar o contentor. Consulte Docker em Azure.
  • Utilize os seguintes scripts PowerShell e Azure CLI para automatizar a implementação de recursos e a configuração do contentor.

Quando utiliza o Análise de Texto para recipiente de saúde, os dados contidos nos seus pedidos e respostas da API não são visíveis para a Microsoft, e não são utilizados para treinar o modelo aplicado aos seus dados.

Executar o contentor localmente

Para executar o recipiente no seu próprio ambiente depois de descarregar a imagem do recipiente, execute o seguinte docker run comando. Substitua os espaços reservados abaixo pelos seus próprios valores:

Marcador de posição Valor Formato ou exemplo
{API_KEY} A chave para o seu recurso Language. Pode encontrá-lo na página Chave e ponta final do seu recurso, na portal do Azure. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{ENDPOINT_URI} O ponto final para aceder à API. Pode encontrá-lo na página Chave e ponta final do seu recurso, na portal do Azure. https://<your-custom-subdomain>.cognitiveservices.azure.com
docker run --rm -it -p 5000:5000 --cpus 6 --memory 12g \
mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare:latest \
Eula=accept \
rai_terms=accept \
Billing={ENDPOINT_URI} \
ApiKey={API_KEY} 

Este comando:

  • Executa o Análise de Texto para recipiente de saúde a partir da imagem do recipiente
  • Atribui 6 núcleos de CPU e 12 gigabytes (GB) de memória
  • Expõe a porta TCP 5000 e atribui um pseudo-TTY para o contentor
  • Aceita o contrato de licença de utilizador final (EULA) e os termos de IA (RAI) responsáveis
  • Remove automaticamente o recipiente depois de sair. A imagem do recipiente ainda está disponível no computador anfitrião.

Demo UI para visualizar a saída

O contentor fornece APIs de ponto final de predição de consulta com base em REST. Também fornecemos uma ferramenta de visualização no recipiente que é acessível por apesturação /demo ao ponto final do recipiente. Por exemplo:

http://<serverURL>:5000/demo

Utilize o pedido de cURL de exemplo abaixo para submeter uma consulta ao recipiente que implementou substituindo a serverURL variável pelo valor adequado.

curl -X POST 'http://<serverURL>:5000/text/analytics/v3.1/entities/health' --header 'Content-Type: application/json' --header 'accept: application/json' --data-binary @example.json

Instale o recipiente utilizando a Azure Web App para contentores

A azure Web App for Containers é um recurso Azure dedicado a executar contentores na nuvem. Traz capacidades fora da caixa, tais como autoscaling, suporte para contentores de estiva e composição de estiva, suporte HTTPS e muito mais.

Nota

Utilizando a Azure Web App, obterá automaticamente um domínio sob a forma de <appservice_name>.azurewebsites.net

Execute este script PowerShell utilizando o CLI Azure para criar uma Aplicação Web para Contentores, utilizando a sua subscrição e a imagem do recipiente em HTTPS. Aguarde que o script esteja completo (aproximadamente 25-30 minutos) antes de submeter o primeiro pedido.

$subscription_name = ""                    # THe name of the subscription you want you resource to be created on.
$resource_group_name = ""                  # The name of the resource group you want the AppServicePlan
                                           #    and AppSerivce to be attached to.
$resources_location = ""                   # This is the location you wish the AppServicePlan to be deployed to.
                                           #    You can use the "az account list-locations -o table" command to
                                           #    get the list of available locations and location code names.
$appservice_plan_name = ""                 # This is the AppServicePlan name you wish to have.
$appservice_name = ""                      # This is the AppService resource name you wish to have.
$TEXT_ANALYTICS_RESOURCE_API_KEY = ""      # This should be taken from the Language resource.
$TEXT_ANALYTICS_RESOURCE_API_ENDPOINT = "" # This should be taken from the Language resource.
$DOCKER_IMAGE_NAME = "mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare:latest"

az login
az account set -s $subscription_name
az appservice plan create -n $appservice_plan_name -g $resource_group_name --is-linux -l $resources_location --sku P3V2
az webapp create -g $resource_group_name -p $appservice_plan_name -n $appservice_name -i $DOCKER_IMAGE_NAME 
az webapp config appsettings set -g $resource_group_name -n $appservice_name --settings Eula=accept rai_terms=accept Billing=$TEXT_ANALYTICS_RESOURCE_API_ENDPOINT ApiKey=$TEXT_ANALYTICS_RESOURCE_API_KEY

# Once deployment complete, the resource should be available at: https://<appservice_name>.azurewebsites.net

Instale o recipiente utilizando a instância do contentor Azure

Também pode utilizar uma Instância de Contentores Azure (ACI) para facilitar a implantação. O ACI é um recurso que permite executar contentores Docker a pedido num ambiente Azure gerido e sem servidor.

Veja como utilizar Azure Container Instances para etapas na implementação de um recurso ACI utilizando o portal do Azure. Também pode utilizar o script abaixo do PowerShell utilizando o Azure CLI, que criará um ACI na sua subscrição utilizando a imagem do recipiente. Aguarde que o script esteja completo (aproximadamente 25-30 minutos) antes de submeter o primeiro pedido. Devido ao limite do número máximo de CPUs por recurso ACI, não selecione esta opção se espera submeter mais de 5 documentos grandes (aproximadamente 5000 caracteres cada) por pedido. Consulte o artigo de apoio regional da ACI para obter informações sobre a disponibilidade.

Nota

Azure Container Instances não incluem suporte HTTPS para os domínios incorporados. Se precisar de HTTPS, terá de o configurar manualmente, incluindo a criação de um certificado e o registo de um domínio. Pode encontrar instruções para o fazer com o NGINX abaixo.

$subscription_name = ""                    # The name of the subscription you want you resource to be created on.
$resource_group_name = ""                  # The name of the resource group you want the AppServicePlan
                                           # and AppService to be attached to.
$resources_location = ""                   # This is the location you wish the web app to be deployed to.
                                           # You can use the "az account list-locations -o table" command to
                                           # Get the list of available locations and location code names.
$azure_container_instance_name = ""        # This is the AzureContainerInstance name you wish to have.
$TEXT_ANALYTICS_RESOURCE_API_KEY = ""      # This should be taken from the Language resource.
$TEXT_ANALYTICS_RESOURCE_API_ENDPOINT = "" # This should be taken from the Language resource.
$DNS_LABEL = ""                            # This is the DNS label name you wish your ACI will have
$DOCKER_IMAGE_NAME = "mcr.microsoft.com/azure-cognitive-services/textanalytics/healthcare:latest"

az login
az account set -s $subscription_name
az container create --resource-group $resource_group_name --name $azure_container_instance_name --image $DOCKER_IMAGE_NAME --cpu 4 --memory 12 --port 5000 --dns-name-label $DNS_LABEL --environment-variables Eula=accept rai_terms=accept Billing=$TEXT_ANALYTICS_RESOURCE_API_ENDPOINT ApiKey=$TEXT_ANALYTICS_RESOURCE_API_KEY

# Once deployment complete, the resource should be available at: http://<unique_dns_label>.<resource_group_region>.azurecontainer.io:5000

Conectividade ACI segura

Por predefinição, não existe qualquer garantia quando se utiliza ACI com API de contentores. Isto porque normalmente os contentores funcionam como parte de uma cápsula que é protegida do exterior por uma ponte de rede. No entanto, pode modificar um recipiente com um componente frontal, mantendo o ponto final do recipiente em privado. Os exemplos a seguir usam o NGINX como porta de entrada para suportar a autenticação HTTPS/SSL e o certificado de cliente.

Nota

NGINX é um servidor HTTP de código aberto e de alto desempenho e procuração. Um recipiente NGINX pode ser utilizado para pôr termo a uma ligação TLS para um único recipiente. São também possíveis soluções de rescisão TLS baseadas em ingresss em NGINX mais complexas.

Configurar o NGINX como um portal de entrada

O NGINX utiliza ficheiros de configuração para ativar funcionalidades em tempo de execução. Para permitir a rescisão de TLS para outro serviço, deve especificar um certificado SSL para encerrar a ligação TLS e proxy_pass especificar um endereço para o serviço. Uma amostra é fornecida abaixo.

Nota

ssl_certificate espera que um caminho seja especificado dentro do sistema de ficheiros local do contentor NGINX. O endereço especificado proxy_pass deve estar disponível dentro da rede do contentor NGINX.

O recipiente NGINX carregará todos os ficheiros no _.conf_ que são montados no /etc/nginx/conf.d/ caminho de configuração HTTP.

server {
  listen              80;
  return 301 https://$host$request_uri;
}
server {
  listen              443 ssl;
  # replace with .crt and .key paths
  ssl_certificate     /cert/Local.crt;
  ssl_certificate_key /cert/Local.key;

  location / {
    proxy_pass http://cognitive-service:5000;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP  $remote_addr;
  }
}

Exemplo Docker compor arquivo

O exemplo abaixo mostra como um ficheiro de composição de estiva pode ser criado para implantar NGINX e recipientes de saúde:

version: "3.7"
services:
  cognitive-service:
    image: {IMAGE_ID}
    ports:
      - 5000:5000
    environment:
      - eula=accept
      - billing={ENDPOINT_URI}
      - apikey={API_KEY}
    volumes:
        # replace with path to logs folder
      - <path-to-logs-folder>:/output
  nginx:
    image: nginx
    ports:
      - 443:443
    volumes:
        # replace with paths for certs and conf folders
      - <path-to-certs-folder>:/cert
      - <path-to-conf-folder>:/etc/nginx/conf.d/

Para iniciar este ficheiro de composição do Docker, execute o seguinte comando a partir de uma consola ao nível da raiz do ficheiro:

docker-compose up

Para mais informações, consulte a documentação da NGINX sobre a rescisão do NGINX SSL.

Executar vários recipientes no mesmo hospedeiro

Se pretender executar vários recipientes com portas expostas, certifique-se de que funciona cada recipiente com uma porta exposta diferente. Por exemplo, executar o primeiro contentor no porto 5000 e o segundo contentor no porto 5001.

Você pode ter este recipiente e um recipiente diferente Azure Cognitive Services funcionando no HOST juntos. Também pode ter vários contentores do mesmo recipiente dos Serviços Cognitivos em funcionamento.

Consultar o ponto final de predição do contentor

O contentor fornece APIs de ponto final de predição de consulta com base em REST.

Utilize o anfitrião, http://localhost:5000, para APIs de contentor.

Validar que um contentor está a funcionar

Há várias formas de validar que o contentor está a funcionar. Localize o endereço IP externo e a porta exposta do recipiente em questão e abra o seu navegador web favorito. Utilize os vários URLs de pedido que se seguem para validar o recipiente em funcionamento. O exemplo de pedido URLs listados aqui são http://localhost:5000, mas o seu recipiente específico pode variar. Certifique-se de que confia no endereço IP externo do seu recipiente e na porta exposta.

URL do Pedido Objetivo
http://localhost:5000/ O contentor fornece uma home page.
http://localhost:5000/ready Solicitado com GET, este URL fornece uma verificação de que o recipiente está pronto para aceitar uma consulta contra o modelo. Este pedido pode ser usado para sondas kubernetes de vida e prontidão.
http://localhost:5000/status Também solicitado com GET, este URL verifica se a chave api utilizada para iniciar o contentor é válida sem causar uma consulta de ponto final. Este pedido pode ser usado para sondas kubernetes de vida e prontidão.
http://localhost:5000/swagger O contentor fornece um conjunto completo de documentação para os pontos finais e uma funcionalidade Experimentar. Com esta funcionalidade, pode introduzir as suas definições num formulário HTML baseado na Web e fazer a consulta sem ter de escrever qualquer código. Após o retorno da consulta, é fornecido um comando CURL de exemplo para demonstrar os cabeçalhos HTTP e o formato corporal que é necessário.

Container's home page

Estruturar o pedido da API para o contentor

Pode utilizar o Carteiro ou o pedido de cURL de exemplo abaixo para submeter uma consulta ao contentor que implementou, substituindo a serverURL variável pelo valor adequado. Note que a versão da API no URL para o recipiente é diferente da API hospedada.

Nota

A funcionalidade Fast Healthcare Interoperability Resources (FHIR) está disponível no recipiente mais recente e está exposta através da nova API rest.

curl -i -X POST 'http://<serverURL>:5000/language/analyze-text/jobs?api-version=2022-04-01-preview' --header 'Content-Type: application/json' --header --data-binary @example.json

O seguinte JSON é um exemplo de um ficheiro JSON anexado ao corpo POST do pedido de idioma:

example.json

{
    "analysisInput": {
        "documents": [
            {
                "text": "The doctor prescried 200mg Ibuprofen.",
                "language": "en",
                "id": "1"
            }
        ]
    },
    "tasks": [
        {
            "taskName": "analyze 1",
            "kind": "Healthcare",
            "parameters": {
                "fhirVersion": "4.0.1"
            }
        }
    ]
}

Corpo de resposta ao recipiente

O seguinte JSON é um exemplo do corpo de resposta linguística da chamada sincronizada contentorizada:

{
  "jobId": "{JOB-ID}",
  "lastUpdateDateTime": "2022-04-18T15:50:16Z",
  "createdDateTime": "2022-04-18T15:50:14Z",
  "expirationDateTime": "2022-04-19T15:50:14Z",
  "status": "succeeded",
  "errors": [],
  "tasks": {
    "completed": 1,
    "failed": 0,
    "inProgress": 0,
    "total": 1,
    "items": [
      {
        "kind": "HealthcareLROResults",
        "taskName": "analyze 1",
        "lastUpdateDateTime": "2022-04-18T15:50:16.7046515Z",
        "status": "succeeded",
        "results": {
          "documents": [
            {
              "id": "1",
              "entities": [
                {
                  "offset": 4,
                  "length": 6,
                  "text": "doctor",
                  "category": "HealthcareProfession",
                  "confidenceScore": 0.76
                },
                {
                  "offset": 21,
                  "length": 5,
                  "text": "200mg",
                  "category": "Dosage",
                  "confidenceScore": 0.99
                },
                {
                  "offset": 27,
                  "length": 9,
                  "text": "Ibuprofen",
                  "category": "MedicationName",
                  "confidenceScore": 1.0,
                  "name": "ibuprofen",
                  "links": [
                    { "dataSource": "UMLS", "id": "C0020740" },
                    { "dataSource": "AOD", "id": "0000019879" },
                    { "dataSource": "ATC", "id": "M01AE01" },
                    { "dataSource": "CCPSS", "id": "0046165" },
                    { "dataSource": "CHV", "id": "0000006519" },
                    { "dataSource": "CSP", "id": "2270-2077" },
                    { "dataSource": "DRUGBANK", "id": "DB01050" },
                    { "dataSource": "GS", "id": "1611" },
                    { "dataSource": "LCH_NW", "id": "sh97005926" },
                    { "dataSource": "LNC", "id": "LP16165-0" },
                    { "dataSource": "MEDCIN", "id": "40458" },
                    { "dataSource": "MMSL", "id": "d00015" },
                    { "dataSource": "MSH", "id": "D007052" },
                    { "dataSource": "MTHSPL", "id": "WK2XYI10QM" },
                    { "dataSource": "NCI", "id": "C561" },
                    { "dataSource": "NCI_CTRP", "id": "C561" },
                    { "dataSource": "NCI_DCP", "id": "00803" },
                    { "dataSource": "NCI_DTP", "id": "NSC0256857" },
                    { "dataSource": "NCI_FDA", "id": "WK2XYI10QM" },
                    { "dataSource": "NCI_NCI-GLOSS", "id": "CDR0000613511" },
                    { "dataSource": "NDDF", "id": "002377" },
                    { "dataSource": "PDQ", "id": "CDR0000040475" },
                    { "dataSource": "RCD", "id": "x02MO" },
                    { "dataSource": "RXNORM", "id": "5640" },
                    { "dataSource": "SNM", "id": "E-7772" },
                    { "dataSource": "SNMI", "id": "C-603C0" },
                    { "dataSource": "SNOMEDCT_US", "id": "387207008" },
                    { "dataSource": "USP", "id": "m39860" },
                    { "dataSource": "USPMG", "id": "MTHU000060" },
                    { "dataSource": "VANDF", "id": "4017840" }
                  ]
                }
              ],
              "relations": [
                {
                  "relationType": "DosageOfMedication",
                  "entities": [
                    {
                      "ref": "#/results/documents/0/entities/1",
                      "role": "Dosage"
                    },
                    {
                      "ref": "#/results/documents/0/entities/2",
                      "role": "Medication"
                    }
                  ]
                }
              ],
              "warnings": [],
              "fhirBundle": {
                "resourceType": "Bundle",
                "id": "bae9d4e0-191e-48e6-9c24-c1ff6097c439",
                "meta": {
                  "profile": [
                    "http://hl7.org/fhir/4.0.1/StructureDefinition/Bundle"
                  ]
                },
                "identifier": {
                  "system": "urn:ietf:rfc:3986",
                  "value": "urn:uuid:bae9d4e0-191e-48e6-9c24-c1ff6097c439"
                },
                "type": "document",
                "entry": [
                  {
                    "fullUrl": "Composition/9044c2cc-dcec-4b9d-b005-bfa8be978aa8",
                    "resource": {
                      "resourceType": "Composition",
                      "id": "9044c2cc-dcec-4b9d-b005-bfa8be978aa8",
                      "status": "final",
                      "type": {
                        "coding": [
                          {
                            "system": "http://loinc.org",
                            "code": "11526-1",
                            "display": "Pathology study"
                          }
                        ],
                        "text": "Pathology study"
                      },
                      "subject": {
                        "reference": "Patient/5c554347-4290-4b05-83ac-6637ff3bfb40",
                        "type": "Patient"
                      },
                      "encounter": {
                        "reference": "Encounter/6fe12f5b-e35c-4c92-a492-96feda5a1a3b",
                        "type": "Encounter",
                        "display": "unknown"
                      },
                      "date": "2022-04-18",
                      "author": [
                        {
                          "reference": "Practitioner/fb5da4d8-e0f0-4434-8d29-4419b065c4d7",
                          "type": "Practitioner",
                          "display": "Unknown"
                        }
                      ],
                      "title": "Pathology study",
                      "section": [
                        {
                          "title": "General",
                          "code": {
                            "coding": [
                              {
                                "system": "",
                                "display": "Unrecognized Section"
                              }
                            ],
                            "text": "General"
                          },
                          "text": {
                            "div": "<div>\r\n\t\t\t\t\t\t\t<h1>General</h1>\r\n\t\t\t\t\t\t\t<p>The doctor prescried 200mg Ibuprofen.</p>\r\n\t\t\t\t\t</div>"
                          },
                          "entry": [
                            {
                              "reference": "List/db388912-b5fb-4073-a74c-2751fd3374dd",
                              "type": "List",
                              "display": "General"
                            }
                          ]
                        }
                      ]
                    }
                  },
                  {
                    "fullUrl": "Practitioner/fb5da4d8-e0f0-4434-8d29-4419b065c4d7",
                    "resource": {
                      "resourceType": "Practitioner",
                      "id": "fb5da4d8-e0f0-4434-8d29-4419b065c4d7",
                      "extension": [
                        {
                          "extension": [
                            { "url": "offset", "valueInteger": -1 },
                            { "url": "length", "valueInteger": 7 }
                          ],
                          "url": "http://hl7.org/fhir/StructureDefinition/derivation-reference"
                        }
                      ],
                      "name": [{ "text": "Unknown", "family": "Unknown" }]
                    }
                  },
                  {
                    "fullUrl": "Patient/5c554347-4290-4b05-83ac-6637ff3bfb40",
                    "resource": {
                      "resourceType": "Patient",
                      "id": "5c554347-4290-4b05-83ac-6637ff3bfb40",
                      "gender": "unknown"
                    }
                  },
                  {
                    "fullUrl": "Encounter/6fe12f5b-e35c-4c92-a492-96feda5a1a3b",
                    "resource": {
                      "resourceType": "Encounter",
                      "id": "6fe12f5b-e35c-4c92-a492-96feda5a1a3b",
                      "meta": {
                        "profile": [
                          "http://hl7.org/fhir/us/core/StructureDefinition/us-core-encounter"
                        ]
                      },
                      "status": "finished",
                      "class": {
                        "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
                        "display": "unknown"
                      },
                      "subject": {
                        "reference": "Patient/5c554347-4290-4b05-83ac-6637ff3bfb40",
                        "type": "Patient"
                      }
                    }
                  },
                  {
                    "fullUrl": "MedicationStatement/24e860ce-2fdc-4745-aa9e-7d30bb487c4e",
                    "resource": {
                      "resourceType": "MedicationStatement",
                      "id": "24e860ce-2fdc-4745-aa9e-7d30bb487c4e",
                      "extension": [
                        {
                          "extension": [
                            { "url": "offset", "valueInteger": 27 },
                            { "url": "length", "valueInteger": 9 }
                          ],
                          "url": "http://hl7.org/fhir/StructureDefinition/derivation-reference"
                        }
                      ],
                      "status": "active",
                      "medicationCodeableConcept": {
                        "coding": [
                          {
                            "system": "http://www.nlm.nih.gov/research/umls",
                            "code": "C0020740",
                            "display": "Ibuprofen"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/aod",
                            "code": "0000019879"
                          },
                          {
                            "system": "http://www.whocc.no/atc",
                            "code": "M01AE01"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/ccpss",
                            "code": "0046165"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/chv",
                            "code": "0000006519"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/csp",
                            "code": "2270-2077"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/drugbank",
                            "code": "DB01050"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/gs",
                            "code": "1611"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/lch_nw",
                            "code": "sh97005926"
                          },
                          { "system": "http://loinc.org", "code": "LP16165-0" },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/medcin",
                            "code": "40458"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/mmsl",
                            "code": "d00015"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/msh",
                            "code": "D007052"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/mthspl",
                            "code": "WK2XYI10QM"
                          },
                          {
                            "system": "http://ncimeta.nci.nih.gov",
                            "code": "C561"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/nci_ctrp",
                            "code": "C561"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/nci_dcp",
                            "code": "00803"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/nci_dtp",
                            "code": "NSC0256857"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/nci_fda",
                            "code": "WK2XYI10QM"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/nci_nci-gloss",
                            "code": "CDR0000613511"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/nddf",
                            "code": "002377"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/pdq",
                            "code": "CDR0000040475"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/rcd",
                            "code": "x02MO"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/rxnorm",
                            "code": "5640"
                          },
                          {
                            "system": "http://snomed.info/sct",
                            "code": "E-7772"
                          },
                          {
                            "system": "http://snomed.info/sct/900000000000207008",
                            "code": "C-603C0"
                          },
                          {
                            "system": "http://snomed.info/sct/731000124108",
                            "code": "387207008"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/usp",
                            "code": "m39860"
                          },
                          {
                            "system": "http://www.nlm.nih.gov/research/umls/uspmg",
                            "code": "MTHU000060"
                          },
                          {
                            "system": "http://hl7.org/fhir/ndfrt",
                            "code": "4017840"
                          }
                        ],
                        "text": "Ibuprofen"
                      },
                      "subject": {
                        "reference": "Patient/5c554347-4290-4b05-83ac-6637ff3bfb40",
                        "type": "Patient"
                      },
                      "context": {
                        "reference": "Encounter/6fe12f5b-e35c-4c92-a492-96feda5a1a3b",
                        "type": "Encounter",
                        "display": "unknown"
                      },
                      "dosage": [
                        {
                          "text": "200mg",
                          "doseAndRate": [{ "doseQuantity": { "value": 200 } }]
                        }
                      ]
                    }
                  },
                  {
                    "fullUrl": "List/db388912-b5fb-4073-a74c-2751fd3374dd",
                    "resource": {
                      "resourceType": "List",
                      "id": "db388912-b5fb-4073-a74c-2751fd3374dd",
                      "status": "current",
                      "mode": "snapshot",
                      "title": "General",
                      "subject": {
                        "reference": "Patient/5c554347-4290-4b05-83ac-6637ff3bfb40",
                        "type": "Patient"
                      },
                      "encounter": {
                        "reference": "Encounter/6fe12f5b-e35c-4c92-a492-96feda5a1a3b",
                        "type": "Encounter",
                        "display": "unknown"
                      },
                      "entry": [
                        {
                          "item": {
                            "reference": "MedicationStatement/24e860ce-2fdc-4745-aa9e-7d30bb487c4e",
                            "type": "MedicationStatement",
                            "display": "Ibuprofen"
                          }
                        }
                      ]
                    }
                  }
                ]
              }
            }
          ],
          "errors": [],
          "modelVersion": "2022-03-01"
        }
      }
    ]
  }
}

Executar o recipiente com suporte à biblioteca do cliente

Começando pela versão 3.0.017010001-onprem-amd64 do recipiente (ou se utilizar o latest recipiente), pode executar o Análise de Texto para recipiente de saúde utilizando a biblioteca do cliente. Para tal, adicione o seguinte parâmetro ao docker run comando:

enablelro=true

Depois, quando autenticar o objeto do cliente, utilize o ponto final em que o seu recipiente está em funcionamento:

http://localhost:5000

Por exemplo, se estiver a usar C# utilizará o seguinte código:

var client = new TextAnalyticsClient("http://localhost:5000", "your-text-analytics-key");

Parar o contentor

Para desligar o recipiente, no ambiente da linha de comando onde o recipiente está em funcionamento, selecione Ctrl+C.

Resolução de problemas

Se executar o recipiente com um suporte de saída e um registo ativado, o recipiente gera ficheiros de registo que são úteis para resolver problemas que ocorrem durante o arranque ou execução do recipiente.

Dica

Para obter mais informações e orientações sobre resolução de problemas, consulte os recipientes dos Serviços Cognitivos frequentemente questionados (FAQ).

Faturação

Análise de Texto para recipientes de saúde enviar informações de faturação para a Azure, utilizando um recurso linguístico na sua conta Azure.

As consultas ao contentor são cobradas no nível de preços do recurso Azure que é usado para o ApiKey parâmetro.

Os recipientes Azure Cognitive Services não estão licenciados para funcionar sem estarem ligados ao ponto final de medição ou faturação. Deve permitir que os recipientes comuniquem sempre informações de faturação com o ponto final de faturação. Os contentores dos Serviços Cognitivos não enviam dados dos clientes, como a imagem ou texto que está a ser analisado, para a Microsoft.

Ligar ao Azure

O contentor precisa que os valores do argumento da faturação corram. Estes valores permitem que o recipiente se conecte ao ponto final de faturação. O recipiente relata o uso a cada 10 a 15 minutos. Se o recipiente não ligar ao Azure dentro da janela de tempo permitida, o recipiente continua a funcionar, mas não serve consultas até que o ponto final de faturação seja restaurado. A ligação é tentada 10 vezes ao mesmo tempo de 10 a 15 minutos. Se não conseguir ligar-se ao ponto final de faturação dentro dos 10 tentativas, o recipiente deixa de servir os pedidos. Consulte o contentor de serviços cognitivos FAQ para um exemplo das informações enviadas à Microsoft para faturação.

Argumentos de faturação

O docker run comando iniciará o contentor quando as três opções forem fornecidas com valores válidos:

Opção Descrição
ApiKey A chave API do recurso Serviços Cognitivos que é usado para rastrear a informação de faturação.
O valor desta opção deve ser definido como uma chave API para o recurso provisionado especificado em Billing.
Billing O ponto final do recurso dos Serviços Cognitivos que é usado para rastrear a informação de faturação.
O valor desta opção deve ser definido como URI do ponto final de um recurso Azure provisionado.
Eula Indica que aceitou a licença para o contentor.
O valor desta opção deve ser definido para ser aceite.

Resumo

Neste artigo, aprendeu conceitos e fluxo de trabalho para descarregar, instalar e executar Análise de Texto para recipientes de saúde. Em resumo:

  • Análise de Texto para a saúde fornece um recipiente Linux para Docker
  • As imagens do contentor são descarregadas a partir do Microsoft Container Registry (MCR).
  • Imagens de contentores são executadas em Docker.
  • Pode utilizar a API REST ou a SDK para ligar para as operações em Análise de Texto para recipientes de saúde, especificando o URI hospedeiro do recipiente.
  • Deve especificar as informações de faturação ao instantaneamente um recipiente.

Importante

Os recipientes de Serviços Cognitivos não estão licenciados para funcionar sem estarem ligados ao Azure para a medição. Os clientes precisam de permitir que os contentores comuniquem informações de faturação com o serviço de medição em todos os momentos. Os recipientes de Serviços Cognitivos não enviam dados do cliente (por exemplo, texto que está a ser analisado) para a Microsoft.

Passos seguintes