Sdílet prostřednictvím


Použití analýzy textu jazyka Azure AI v prostředcích infrastruktury s rozhraním REST API a SynapseML (Preview)

Důležitý

Tato funkce je ve verzi Preview.

Azure AI Language je služba Azure AI , která umožňuje provádět dolování textu a analýzu textu pomocí funkcí NLP (Natural Language Processing).

V tomto článku se dozvíte, jak pomocí služeb Azure AI Language přímo v Microsoft Fabric analyzovat text. Na konci tohoto článku můžete:

  • Rozpoznání popisků mínění na úrovni věty nebo dokumentu
  • Identifikace jazyka pro daný textový vstup
  • Extrakce klíčových frází z textu
  • Identifikace různých entit v textu a jejich kategorizace do předdefinovaných tříd nebo typů

Požadavky

  • Vytvořte nový poznámkový blok.
  • Připojte poznámkový blok k jezeru. Na levé straně poznámkového bloku vyberte Přidat a přidejte existující jezero nebo vytvořte nový.

Poznámka:

Tento článek používá předdefinované služby AI microsoft Fabric, které zpracovávají ověřování automaticky. Nepotřebujete získat samostatný klíč služeb Azure AI – ověřování se spravuje prostřednictvím pracovního prostoru Prostředky infrastruktury. Další informace najdete v tématu Předem připravené modely AI v Prostředcích infrastruktury (Preview).

Ukázky kódu v tomto článku používají knihovny, které jsou předinstalované v poznámkových blocích Microsoft Fabric:

  • SynapseML: Předinstalované v poznámkových blocích Fabric pro možnosti strojového učení
  • PySpark: Ve výchozím nastavení je k dispozici ve výpočetních prostředcích Fabric Spark
  • Standardní knihovny Pythonu: jsou json součástí standardní knihovny Pythonu. uuid

Poznámka:

Poznámkové bloky Microsoft Fabric jsou předinstalované s mnoha běžnými knihovnami. Knihovna SynapseML, která poskytuje funkce integrace MLflow a analýzy textu, je automaticky dostupná v prostředí Sparku.

Volba přístupu

Tento článek obsahuje dva způsoby použití služeb Azure AI Language v prostředcích infrastruktury:

  • Přístup k rozhraní REST API: Přímé volání HTTP do služby (doporučeno pro začátečníky)
  • Přístup SynapseML: Použití datových rámců Sparku pro rozsáhlejší zpracování

Tip

Noví uživatelé by měli začít s přístupem k rozhraní REST API , protože je jednodušší porozumět a ladit. Přístup SynapseML je lepší pro zpracování velkých datových sad pomocí Sparku.

Nastavení ověřování a koncových bodů

Zkopírujte a vložte tento kód do první buňky poznámkového bloku Fabric a nastavte připojení ke službám Azure AI Language:

Poznámka:

Tento kód používá integrované ověřování Fabric. Funkce get_fabric_env_config automaticky načte přihlašovací údaje vašeho pracovního prostoru a připojí se k předem připraveným službám AI. Nevyžaduje se žádný klíč rozhraní 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}")

Analýza mínění

Funkce Analýza mínění poskytuje způsob, jak detekovat popisky mínění (například negativní, neutrální a pozitivní) a skóre spolehlivosti na úrovni věty a dokumentu. Tato funkce také vrací skóre spolehlivosti mezi 0 a 1 pro každý dokument a věty v něm pro pozitivní, neutrální a negativní mínění. Seznam povolených jazyků najdete v podpoře jazyka pro Sentiment Analysis and Opinion Mining.

Analýza mínění v textu

Zkopírujte tento kód do nové buňky v poznámkovém bloku a analyzujte mínění ukázkového textu:

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)

Tip

Text v poli "text" můžete nahradit vlastním obsahem, který chcete analyzovat. Služba vrátí skóre mínění a identifikuje, které části textu jsou kladné, záporné nebo neutrální.

Očekávaný výstup

Když úspěšně spustíte následující kód, měl by se zobrazit výstup podobný tomuto:

{
  "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"
  }
}

Detektor jazyka

Detektor jazyka vyhodnocuje textový vstup pro každý dokument a vrací identifikátory jazyka se skóre, které označuje sílu analýzy. Tato funkce je užitečná pro úložiště obsahu, která shromažďují libovolný text, kde jazyk není znám. Seznam povolených jazyků najdete v podporovaných jazycích pro rozpoznávání jazyka.

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)

Výstup

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

Extrakce klíčových frází

Extrakce klíčových frází vyhodnocuje nestrukturovaný text a vrátí seznam klíčových frází. Tato funkce je užitečná, pokud potřebujete rychle identifikovat hlavní body v kolekci dokumentů. Seznam povolených jazyků najdete v podporovaných jazycích pro extrakci klíčových frází.

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)

Výstup

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

Rozpoznávání pojmenovaných entit (NER)

Pojmenované rozpoznávání entit (NER) je schopnost identifikovat různé entity v textu a kategorizovat je do předdefinovaných tříd nebo typů, jako jsou například osoba, umístění, událost, produkt a organizace. Podívejte se na jazykovou podporu NER pro seznam povolených jazyků.

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)

Výstup

{
  "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"
  }
}


Propojení entit

V této části nejsou žádné kroky pro rozhraní REST API.