🐕

Microsoft Fabric の組み込みの AI モデルを使ってみる-【NER編】

2024/02/07に公開

やってみること

OpenAI Python SDKを使用して、Fabric の Azure OpenAI を使用してNERを行う

NER(固有表現認識)とは?

テキスト形式のさまざまなエンティティを識別し、それらを人、場所、イベント、製品、組織などの事前に定義されたクラスまたは種類に分類する機能です。

↓言語サポート一覧
https://learn.microsoft.com/ja-jp/azure/ai-services/language-service/named-entity-recognition/language-support?tabs=ga-api

手順

  1. Microsoft Fabric(https://app.fabric.microsoft.com/home)にアクセス
  2. 「Synapse Data Engineering」をクリック
  3. 「ワークスペース」をクリック
  4. 作業を行うワークスペースをクリック
  5. 「+新規」をクリック
  6. 「ノートブック」をクリック
  7. ノートブックが開くことを確認
  8. 下記のコードを実行し、AIサービスに接続する
# Get workload endpoints and access token

from synapse.ml.mlflow import get_mlflow_env_config
import json

mlflow_env_configs = get_mlflow_env_config()
access_token = access_token = mlflow_env_configs.driver_aad_token
prebuilt_AI_base_host = mlflow_env_configs.workload_endpoint + "cognitive/textanalytics/"
print("Workload endpoint for AI service: \n" + prebuilt_AI_base_host)

service_url = prebuilt_AI_base_host + "language/:analyze-text?api-version=2022-05-01"

# Make a RESful request to AI service

post_headers = {
    "Content-Type" : "application/json",
    "Authorization" : "Bearer {}".format(access_token)
}

def printresponse(response):
    print(f"HTTP {response.status_code}")
    if response.status_code == 200:
        try:
            result = response.json()
            print(json.dumps(result, indent=2, ensure_ascii=False))
        except:
            print(f"pasre error {response.content}")
    else:
        print(response.headers)
        print(f"error message: {response.content}")

  1. 下記のコードを実行する
post_body = {
    "kind": "EntityRecognition",
    "parameters": {
        "modelVersion": "latest"
    },
    "analysisInput":{
        "documents":[
            {
                "id":"1",
                "language":"ja",
                "text": "先週、素晴らしい東京旅行を楽しみました。"
            }
        ]
    }
}

post_headers["x-ms-workload-resource-moniker"] = str(uuid.uuid1())
response = requests.post(service_url, json=post_body, headers=post_headers)

# Output all information of the request process
printresponse(response)
  1. 出力結果を確認
HTTP 200
{
  "kind": "EntityRecognitionResults",
  "results": {
    "documents": [
      {
        "id": "1",
        "entities": [
          {
            "text": "先週",
            "category": "DateTime",
            "subcategory": "DateRange",
            "offset": 0,
            "length": 2,
            "confidenceScore": 0.91
          },
          {
            "text": "東京旅行",
            "category": "Event",
            "offset": 8,
            "length": 4,
            "confidenceScore": 0.68
          }
        ],
        "warnings": []
      }
    ],
    "errors": [],
    "modelVersion": "2023-09-01"
  }
}

※出力結果の解説 by ChatGPT

この出力結果は、指定されたテキストから抽出された実体(エンティティ)を示しています。以下に、各フィールドの説明を記載します。

HTTP 200: リクエストが正常に完了したことを示しています。
"kind": "EntityRecognitionResults": この結果が実体認識の結果であることを示しています。
"documents": テキストの集合に対する分析結果が含まれています。ここでは1つのテキスト("id": "1")の結果のみが含まれています。
"id": "1": テキストに対して指定した一意の識別子です。
"entities": テキストから抽出された実体のリストです。
"text": "先週" や "東京旅行": 実体のテキスト表現です。
"category": "DateTime" や "Event": 実体のカテゴリです。"DateTime"は日時を、"Event"はイベントを示しています。
"subcategory": "DateRange": 実体のサブカテゴリです。"DateRange"は日付範囲を示しています。
"offset": 実体がテキスト内で始まる位置を示すインデックスです。
"length": 実体のテキスト表現の長さです。
"confidenceScore": 実体認識モデルがこの実体を確定した確信度を示すスコアです。1.0は最高スコアで、モデルがこの実体に非常に自信を持っていることを示します。
"warnings": このリストには警告が含まれますが、今回は空です。これは分析中に問題が発生しなかったことを示しています。
"errors": このリストにはエラーが含まれますが、今回は空です。これは分析中にエラーが発生しなかったことを示しています。
"modelVersion": "2023-09-01": 使用されたモデルのバージョンを示しています。
この結果から、提供されたテキスト("先週、素晴らしい東京旅行を楽しみました。")から「先週」が日時を示す実体、そして「東京旅行」がイベントを示す実体として認識されたことがわかります。
ヘッドウォータース

Discussion