Healthcare Natural Language API を使用する

このページでは、Healthcare Natural Language API を有効にして権限を構成し、analyzeEntities メソッドを呼び出して医療テキストから医療分析情報を抽出する方法について説明します。

概要

Healthcare Natural Language API には、医療テキストから分析情報を抽出するための機械学習ソリューションが備わっています。Healthcare Natural Language API は、Cloud Healthcare API の一部です。Healthcare Natural Language API の概要については、Healthcare Natural Language API のコンセプト ドキュメントをご覧ください。

Healthcare Natural Language API は、医療記録や保険請求などの非構造化医療テキストを解析します。その後、ダウンストリーム分析と自動化のために、これらのデータソースに格納されている医療ナレッジ エンティティの構造化データ表現を生成します。たとえば、次のようなことを行えます。

  • 疾患、医薬品、医療機器、医療処置、臨床関連の属性などの医療コンセプトに関する情報を抽出する
  • 医療コンセプトを RxNorm、ICD-10、MeSH、SNOMED CT などの標準的な医療用語にマッピングする(米国のユーザーのみ)
  • テキストから医療分析情報を抽出し、それを Google Cloud のデータ分析プロダクトと統合する

利用できるロケーション

Healthcare Natural Language API は次のロケーションで利用できます。

場所の名称 ロケーションの説明
asia-south1 ムンバイ(インド)
australia-southeast1 シドニー(オーストラリア)
europe-west2 ロンドン(イギリス)
europe-west4 オランダ
northamerica-northeast1 モントリオール(カナダ)
us-central1 アイオワ(米国)

Healthcare Natural Language API を有効にする

Healthcare Natural Language API を使用する前に、Google Cloud プロジェクトで API を有効にする必要があります。Healthcare Natural Language API は、Cloud Healthcare API の機能を有効または無効にすることなく使用できます。

この API を有効にするには、次の操作手順を行います。

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. サービス アカウントを作成します。

    1. Google Cloud コンソールで [サービス アカウントの作成] ページに移動します。

      [サービス アカウントの作成] に移動
    2. プロジェクトを選択します。
    3. [サービス アカウント名] フィールドに名前を入力します。Google Cloud コンソールでは、この名前に基づいて [サービス アカウント ID] フィールドに値が設定されます。

      [サービス アカウントの説明] フィールドに説明を入力します。例: Service account for quickstart

    4. [作成して続行] をクリックします。
    5. サービス アカウントに Project > Owner ロールを付与します。

      ロールを付与するには、[ロールを選択] リストで [Project > Owner] を選択します。

    6. [続行] をクリックします。
    7. [完了] をクリックして、サービス アカウントの作成を完了します。

      ブラウザ ウィンドウは閉じないでください。次のステップでこれを使用します。

  5. サービス アカウント キーを作成します。

    1. Google Cloud コンソールで、作成したサービス アカウントのメールアドレスをクリックします。
    2. [キー] をクリックします。
    3. [鍵を追加]、[新しい鍵を作成] の順にクリックします。
    4. [作成] をクリックします。JSON キーファイルがパソコンにダウンロードされます。
    5. [閉じる] をクリックします。
  6. 環境変数 GOOGLE_APPLICATION_CREDENTIALS を、認証情報を含む JSON ファイルのパスに設定します。この変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定する必要があります。

  7. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  8. Google Cloud プロジェクトで課金が有効になっていることを確認します

  9. サービス アカウントを作成します。

    1. Google Cloud コンソールで [サービス アカウントの作成] ページに移動します。

      [サービス アカウントの作成] に移動
    2. プロジェクトを選択します。
    3. [サービス アカウント名] フィールドに名前を入力します。Google Cloud コンソールでは、この名前に基づいて [サービス アカウント ID] フィールドに値が設定されます。

      [サービス アカウントの説明] フィールドに説明を入力します。例: Service account for quickstart

    4. [作成して続行] をクリックします。
    5. サービス アカウントに Project > Owner ロールを付与します。

      ロールを付与するには、[ロールを選択] リストで [Project > Owner] を選択します。

    6. [続行] をクリックします。
    7. [完了] をクリックして、サービス アカウントの作成を完了します。

      ブラウザ ウィンドウは閉じないでください。次のステップでこれを使用します。

  10. サービス アカウント キーを作成します。

    1. Google Cloud コンソールで、作成したサービス アカウントのメールアドレスをクリックします。
    2. [キー] をクリックします。
    3. [鍵を追加]、[新しい鍵を作成] の順にクリックします。
    4. [作成] をクリックします。JSON キーファイルがパソコンにダウンロードされます。
    5. [閉じる] をクリックします。
  11. 環境変数 GOOGLE_APPLICATION_CREDENTIALS を、認証情報を含む JSON ファイルのパスに設定します。この変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定する必要があります。

  12. Cloud Healthcare API を有効にします。

    API を有効にする

  13. Google Cloud CLI をインストールします。
  14. gcloud CLI を初期化するには:

    gcloud init

権限を設定する

このガイドの機能を使用するには、healthcare.nlpServiceViewer ロールに含まれる healthcare.nlpservice.analyzeEntities 権限が必要です。

このロールを割り当てるには、gcloud projects add-iam-policy-binding コマンドを実行します。

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:SERVICE_ACCOUNT_ID \
    --role roles/healthcare.nlpServiceViewer

エンティティ、リレーション、コンテキスト属性を抽出する

Healthcare Natural Language API は、コンテキスト認識モデルを使用して、医療エンティティ、リレーション、コンテキスト属性を抽出します。各テキスト エンティティは、医療辞書エントリに抽出されます。このレベルの医療情報を医療テキストから抽出するには、projects.locations.services.nlp.analyzeEntities メソッドを使用します。

エンティティへの言及に SNOMED CT の認可された用語を含めるには、認可された用語を含めるをご覧ください。

Healthcare Natural Language API を使用して医療テキストから医療分析情報を抽出するには、POST リクエストを作成し、documentContent フィールドにターゲット テキストを指定します。医療テキストの最大サイズは 20,000 Unicode 文字です。

次のサンプルは、analyzeEntities メソッドを使用して、医療テキスト「インスリン投与法 5 ユニット IV は糖尿病のために管理されます」の医療分析情報を抽出する方法を示しています。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所

JSON 本文のリクエスト:

{
  "documentContent": "Insulin regimen 5 units IV will be administered for diabetes."
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  "documentContent": "Insulin regimen 5 units IV will be administered for diabetes."
}
EOF

その後、次のコマンドを実行して REST リクエストを送信します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/services/nlp:analyzeEntities"

PowerShell

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  "documentContent": "Insulin regimen 5 units IV will be administered for diabetes."
}
'@  | Out-File -FilePath request.json -Encoding utf8

その後、次のコマンドを実行して REST リクエストを送信します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/services/nlp:analyzeEntities" | Select-Object -Expand Content

リクエストが成功すると、レスポンスには次の情報が含まれます。

  • 認識済みの医療ナレッジ エンティティ
  • 機能
  • 認識されたエンティティ間のリレーション
  • コンテキスト属性
  • 医療ナレッジ エンティティの標準的な用語へのマッピング

サポートされているエンティティ、属性、リレーション タイプの一覧については、Healthcare Natural Language API の機能をご覧ください。

次のレスポンスにより、NSI 用語システムのコード C581 を持つエンティティである治療用インスリンが薬剤として識別されます。このレスポンスには、レスポンスに割り当てられた信頼スコアも含まれます。レスポンス フィールドの詳細については、analyzeEntities のドキュメントをご覧ください。

認可された用語を含める

デフォルトでは、Healthcare Natural Language API レスポンスにサポートされている医療用語が含まれます。

リクエストが次の要件を満たしている場合は、レスポンスに SNOMED 臨床用語、米国版(SNOMEDCT_US)の用語を含めることができます。

  • API リクエストは米国で発信されます。
  • リクエスト本文の licensedVocabularies フィールドの値は SNOMEDCT_US です。

SNOMED CT の用語が不要な場合、これらの制限は適用されません。

次のサンプルでは、SNOMED CT の認可された用語を LicensedVocabularies オブジェクトに含めて、医療テキスト「インスリン投与法 5 ユニット IV は糖尿病のために管理されます」から医療分析情報を抽出する方法を示しています。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所

JSON 本文のリクエスト:

{
  "documentContent": "Insulin regimen 5 units IV will be administered for diabetes.",
  "licensedVocabularies": [
    "SNOMEDCT_US",
    "ICD10CM"
  ]
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  "documentContent": "Insulin regimen 5 units IV will be administered for diabetes.",
  "licensedVocabularies": [
    "SNOMEDCT_US",
    "ICD10CM"
  ]
}
EOF

その後、次のコマンドを実行して REST リクエストを送信します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/services/nlp:analyzeEntities"

PowerShell

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  "documentContent": "Insulin regimen 5 units IV will be administered for diabetes.",
  "licensedVocabularies": [
    "SNOMEDCT_US",
    "ICD10CM"
  ]
}
'@  | Out-File -FilePath request.json -Encoding utf8

その後、次のコマンドを実行して REST リクエストを送信します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/services/nlp:analyzeEntities" | Select-Object -Expand Content
リクエストが成功すると、レスポンスには認可された用語 SNOMEDCT_US および ICD10CM の語彙コードが含まれます。出力は次のようになります。リクエストされた認可された用語コードは太字になっています。

出力を FHIR R4 バンドルとして抽出する

テキストからエンティティを抽出し、FHIR R4 リソースと要素にマッピングできます。結果の FHIR R4 バンドルには、すべてのエンティティ、エンティティへの言及、JSON 形式の関係が含まれます。たとえば、Healthcare Natural Language API は、基本エンティティ PROBLEMCondition FHIR R4 リソースにマッピングし、エンティティ PROBLEM.ANATOMICAL_STRUCTURECondition.bodySite FHIR 要素にマッピングします。他のマッピングの一覧については、FHIR バンドルとしての Healthcare Natural Language API の出力をご覧ください。

次のサンプルは、FHIR R4 バンドル内の医療テキスト「インスリン投与法 5 ユニット IV は糖尿病のために管理されます」の医療分析情報を抽出する方法を示しています。詳しくは、AlternativeOutputFormat オブジェクトをご覧ください。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所

JSON 本文のリクエスト:

{
  "documentContent": "Insulin regimen 5 units IV will be administered for diabetes.",
  "alternativeOutputFormat": "FHIR_BUNDLE"
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  "documentContent": "Insulin regimen 5 units IV will be administered for diabetes.",
  "alternativeOutputFormat": "FHIR_BUNDLE"
}
EOF

その後、次のコマンドを実行して REST リクエストを送信します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/services/nlp:analyzeEntities"

PowerShell

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  "documentContent": "Insulin regimen 5 units IV will be administered for diabetes.",
  "alternativeOutputFormat": "FHIR_BUNDLE"
}
'@  | Out-File -FilePath request.json -Encoding utf8

その後、次のコマンドを実行して REST リクエストを送信します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/services/nlp:analyzeEntities" | Select-Object -Expand Content
リクエストが成功すると、レスポンスに次のエントリを含む JSON オブジェクトが含まれます。
  • 認識されたエンティティでは、エンティティ、リレーション、コンテキスト属性を抽出するでの出力と同様の形式で、エンティティとその関係が言及されます。
  • 文字列形式の FHIR バンドル リソースを含む fhirBundle キー。 FHIR バンドルには、すべてのエンティティ、エンティティへの言及、JSON 形式の関係が含まれます。