次の方法で共有


REST API と SynapseML で Fabric で Azure AI 言語テキスト分析を使用する (プレビュー)

重要

この機能は、プレビュー 段階にあります。

Azure AI Language は、自然言語処理 (NLP) 機能を使用してテキスト マイニングとテキスト分析を実行できる Azure AI サービス です。

この記事では、Microsoft Fabric で Azure AI 言語サービスを直接使用してテキストを分析する方法について説明します。 この記事の終わりまでに、次のことが可能になります。

  • 文またはドキュメント レベルでセンチメント ラベルを検出する
  • 特定のテキスト入力の言語を識別する
  • テキストからキー フレーズを抽出する
  • テキスト内のさまざまなエンティティを識別し、それらを定義済みのクラスまたは型に分類する

前提 条件

  • 新しいノートブックを作成します
  • ノートブックをレイクハウスにアタッチします。 ノートブックの左側で、[ 追加 ] を選択して既存のレイクハウスを追加するか、新しいレイクハウスを作成します。

この記事では、認証を自動的に処理する Microsoft Fabric の組み込みの事前構築済み AI サービスを使用します。 別の Azure AI サービス キーを取得する必要はありません。認証は Fabric ワークスペースを介して管理されます。 詳細については、 Fabric の事前構築済み AI モデル (プレビュー) を参照してください。

この記事のコード サンプルでは、Microsoft Fabric ノートブックにプレインストールされているライブラリを使用します。

  • SynapseML: 機械学習機能用の Fabric ノートブックにプレインストール
  • PySpark: Fabric Spark コンピューティングで既定で使用可能
  • 標準 Python ライブラリ: jsonuuid は Python 標準ライブラリの一部です

Microsoft Fabric ノートブックには、多くの一般的なライブラリがプレインストールされています。 MLflow 統合機能とテキスト分析機能を提供する SynapseML ライブラリは、Spark 環境で自動的に使用できます。

アプローチを選択する

この記事では、Fabric で Azure AI 言語サービスを使用する 2 つの方法について説明します。

  • REST API アプローチ: サービスへの直接 HTTP 呼び出し (初心者向けに推奨)
  • SynapseML アプローチ: 大規模な処理に Spark DataFrames を使用する

ヒント

新しいユーザーは、理解とデバッグが容易であるため、REST API アプローチから始める必要があります 。 SynapseML アプローチは、Spark で大規模なデータセットを処理する場合に適しています。

認証とエンドポイントを設定する

このコードをコピーして Fabric ノートブックの最初のセルに貼り付けて、Azure AI Language サービスへの接続を設定します。

このコードでは、Fabric の組み込み認証を使用します。 get_fabric_env_config 関数は、ワークスペースの資格情報を自動的に取得し、事前構築済みの AI サービスに接続します。 API キーは必要ありません。

# Get workload endpoints and access token
from synapse.ml.fabric.service_discovery import get_fabric_env_config
from synapse.ml.fabric.token_utils import TokenUtils
import json
import requests

fabric_env_config = get_fabric_env_config().fabric_env_config
auth_header = TokenUtils().get_openai_auth_header()

# Make a RESful request to AI service
prebuilt_AI_base_host = fabric_env_config.ml_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"
print("Service URL: \n" + service_url)

auth_headers = {
    "Authorization" : auth_header
}

def print_response(response):
    if response.status_code == 200:
        print(json.dumps(response.json(), indent=2))
    else:
        print(f"Error: {response.status_code}, {response.content}")

感情分析

センチメント分析機能は、文とドキュメント レベルでセンチメント ラベル ("負"、"ニュートラル"、"肯定的" など) と信頼度スコアを検出する方法を提供します。 また、この機能は、ドキュメントごとに 0 から 1 の信頼度スコアを返し、その中の肯定的、中立的、否定的なセンチメントの場合は文を返します。 有効な言語の一覧については、感情分析とオピニオン マイニング言語のサポート を参照してください。

テキストのセンチメントを分析する

このコードをノートブックの新しいセルにコピーして、サンプル テキストのセンチメントを分析します。

payload = {
    "kind": "SentimentAnalysis",
    "parameters": {
        "modelVersion": "latest",
        "opinionMining": "True"
    },
    "analysisInput":{
        "documents":[
            {
                "id":"1",
                "language":"en",
                "text": "The food and service were unacceptable. The concierge was nice, however."
            }
        ]
    }
} 

response = requests.post(service_url, json=payload, headers=auth_headers)


# Output all information of the request process
print_response(response)

ヒント

"text" フィールドのテキストは、分析する独自のコンテンツに置き換えることができます。 サービスはセンチメント スコアを返し、テキストのどの部分が正、負、または中立であるかを識別します。

想定される出力

次のコードを正常に実行すると、次のような出力が表示されます。

{
  "kind": "SentimentAnalysisResults",
  "results": {
    "documents": [
      {
        "id": "1",
        "sentiment": "negative",
        "confidenceScores": {
          "positive": 0.0,
          "neutral": 0.0,
          "negative": 1.0
        },
        "sentences": [
          {
            "sentiment": "negative",
            "confidenceScores": {
              "positive": 0.0,
              "neutral": 0.0,
              "negative": 1.0
            },
            "offset": 0,
            "length": 40,
            "text": "The food and service were unacceptable. ",
            "targets": [
              {
                "sentiment": "negative",
                "confidenceScores": {
                  "positive": 0.01,
                  "negative": 0.99
                },
                "offset": 4,
                "length": 4,
                "text": "food",
                "relations": [
                  {
                    "relationType": "assessment",
                    "ref": "#/documents/0/sentences/0/assessments/0"
                  }
                ]
              },
              {
                "sentiment": "negative",
                "confidenceScores": {
                  "positive": 0.01,
                  "negative": 0.99
                },
                "offset": 13,
                "length": 7,
                "text": "service",
                "relations": [
                  {
                    "relationType": "assessment",
                    "ref": "#/documents/0/sentences/0/assessments/0"
                  }
                ]
              }
            ],
            "assessments": [
              {
                "sentiment": "negative",
                "confidenceScores": {
                  "positive": 0.01,
                  "negative": 0.99
                },
                "offset": 26,
                "length": 12,
                "text": "unacceptable",
                "isNegated": false
              }
            ]
          },
          {
            "sentiment": "neutral",
            "confidenceScores": {
              "positive": 0.22,
              "neutral": 0.75,
              "negative": 0.04
            },
            "offset": 40,
            "length": 32,
            "text": "The concierge was nice, however.",
            "targets": [
              {
                "sentiment": "positive",
                "confidenceScores": {
                  "positive": 1.0,
                  "negative": 0.0
                },
                "offset": 44,
                "length": 9,
                "text": "concierge",
                "relations": [
                  {
                    "relationType": "assessment",
                    "ref": "#/documents/0/sentences/1/assessments/0"
                  }
                ]
              }
            ],
            "assessments": [
              {
                "sentiment": "positive",
                "confidenceScores": {
                  "positive": 1.0,
                  "negative": 0.0
                },
                "offset": 58,
                "length": 4,
                "text": "nice",
                "isNegated": false
              }
            ]
          }
        ],
        "warnings": []
      }
    ],
    "errors": [],
    "modelVersion": "2025-01-01"
  }
}

言語検出機能

Language Detector は、各ドキュメントのテキスト入力を評価し、分析の強度を示すスコアを持つ言語識別子を返します。 この機能は、言語が不明な任意のテキストを収集するコンテンツ ストアに役立ちます。 対応言語の一覧については、言語検出でサポートされている言語に関するページを参照してください。

payload = {
    "kind": "LanguageDetection",
    "parameters": {
        "modelVersion": "latest"
    },
    "analysisInput":{
        "documents":[
            {
                "id":"1",
                "text": "This is a document written in English."
            }
        ]
    }
}

response = requests.post(service_url, json=payload, headers=auth_headers)

# Output all information of the request process
print_response(response)

アウトプット

{
  "kind": "LanguageDetectionResults",
  "results": {
    "documents": [
      {
        "id": "1",
        "warnings": [],
        "detectedLanguage": {
          "name": "English",
          "iso6391Name": "en",
          "confidenceScore": 0.95
        }
      }
    ],
    "errors": [],
    "modelVersion": "2024-11-01"
  }
}

キー フレーズエクストラクター

キー フレーズ抽出は、非構造化テキストを評価し、キー フレーズの一覧を返します。 この機能は、ドキュメントのコレクション内の主要なポイントをすばやく識別する必要がある場合に便利です。 有効な言語の一覧については、キー フレーズ抽出 サポートされている言語を参照してください。

payload = {
    "kind": "KeyPhraseExtraction",
    "parameters": {
        "modelVersion": "latest"
    },
    "analysisInput":{
        "documents":[
            {
                "id":"1",
                "language":"en",
                "text": "Dr. Smith has a very modern medical office, and she has great staff."
            }
        ]
    }
}

response = requests.post(service_url, json=payload, headers=auth_headers)

# Output all information of the request process
print_response(response)

アウトプット

{
  "kind": "KeyPhraseExtractionResults",
  "results": {
    "documents": [
      {
        "id": "1",
        "keyPhrases": [
          "modern medical office",
          "Dr. Smith",
          "great staff"
        ],
        "warnings": []
      }
    ],
    "errors": [],
    "modelVersion": "2022-10-01"
  }
}

名前付きエンティティ認識 (NER)

名前付きエンティティ認識 (NER) は、テキスト内のさまざまなエンティティを識別し、ユーザー、場所、イベント、製品、組織などの定義済みのクラスまたは型に分類する機能です。 有効な言語の一覧については、NER 言語サポートの を参照してください。

payload = {
    "kind": "EntityRecognition",
    "parameters": {
        "modelVersion": "latest"
    },
    "analysisInput":{
        "documents":[
            {
                "id":"1",
                "language": "en",
                "text": "I had a wonderful trip to Seattle last week."
            }
        ]
    }
}

response = requests.post(service_url, json=payload, headers=auth_headers)

# Output all information of the request process
print_response(response)

アウトプット

{
  "kind": "EntityRecognitionResults",
  "results": {
    "documents": [
      {
        "id": "1",
        "entities": [
          {
            "text": "trip",
            "category": "Event",
            "offset": 18,
            "length": 4,
            "confidenceScore": 0.66
          },
          {
            "text": "Seattle",
            "category": "Location",
            "subcategory": "City",
            "offset": 26,
            "length": 7,
            "confidenceScore": 1.0
          },
          {
            "text": "last week",
            "category": "DateTime",
            "subcategory": "DateRange",
            "offset": 34,
            "length": 9,
            "confidenceScore": 1.0
          }
        ],
        "warnings": []
      }
    ],
    "errors": [],
    "modelVersion": "2025-02-01"
  }
}


エンティティリンク

このセクションでは、REST API の手順はありません。

  • SynapseML で Fabric で事前構築済みの Text Analytics を使用する
  • REST API で Fabric で事前構築済みの Azure AI Translator を使用する
  • SynapseML で Fabric で事前構築済みの Azure AI Translator を使用する
  • REST API で Fabric で事前構築済みの Azure OpenAI を使用する
  • Python SDK で Fabric で事前構築済みの Azure OpenAI を使用する
  • SynapseML で Fabric で事前構築済みの Azure OpenAI を使用する
  • SynapseML GitHub リポジトリ - SynapseML のソース コードとドキュメント
  • Azure AI 言語のドキュメント - Azure AI 言語サービスの完全なリファレンス