Samouczek: analiza tekstu z usługami Azure AI

analiza tekstu to usługi sztucznej inteligencji platformy Azure, które umożliwiają wykonywanie wyszukiwania tekstu i analizy tekstu za pomocą funkcji przetwarzania języka naturalnego (NLP). Z tego samouczka dowiesz się, jak używać analiza tekstu do analizowania tekstu bez struktury w usłudze Azure Synapse Analytics.

W tym samouczku przedstawiono używanie analizy tekstu z usługą SynapseML do:

  • Wykrywanie etykiet tonacji na poziomie zdania lub dokumentu
  • Identyfikowanie języka dla danego tekstu wejściowego
  • Rozpoznawanie jednostek z tekstu za pomocą linków do dobrze znanego baza wiedzy
  • Wyodrębnianie faz kluczy z tekstu
  • Identyfikowanie różnych jednostek w tekście i kategoryzowanie ich w wstępnie zdefiniowanych klas lub typów
  • Identyfikowanie i redagowanie poufnych jednostek w danym tekście

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Wymagania wstępne

Rozpoczęcie pracy

Otwórz Synapse Studio i utwórz nowy notes. Aby rozpocząć pracę, zaimportuj plik SynapseML.

import synapse.ml
from synapse.ml.cognitive import *
from pyspark.sql.functions import col

Konfigurowanie analizy tekstu

Użyj połączonej analizy tekstu skonfigurowanej w krokach wstępnej konfiguracji .

ai_service_name = "<Your linked service for text analytics>"

Tonacja tekstu

Analiza tonacji tekstu umożliwia wykrywanie etykiet tonacji (takich jak "negatywne", "neutralne" i "pozytywne") oraz wyniki ufności na poziomie zdania i dokumentu. Aby uzyskać listę obsługiwanych języków, zobacz obsługiwane języki w interfejsie API analiza tekstu.


# Create a dataframe that's tied to it's column names
df = spark.createDataFrame([
  ("I am so happy today, its sunny!", "en-US"),
  ("I am frustrated by this rush hour traffic", "en-US"),
  ("The Azure AI services on spark aint bad", "en-US"),
], ["text", "language"])

# Run the Text Analytics service with options
sentiment = (TextSentiment()
    .setLinkedService(linked_service_name)
    .setTextCol("text")
    .setOutputCol("sentiment")
    .setErrorCol("error")
    .setLanguageCol("language"))

# Show the results of your text query in a table format
results = sentiment.transform(df)

display(results
    .withColumn("sentiment", col("sentiment").getItem("document").getItem("sentences")[0].getItem("sentiment"))
    .select("text", "sentiment"))

Oczekiwane wyniki

tekst Sentyment
Jestem dziś bardzo szczęśliwy, jego słoneczny! positive
Jestem sfrustrowany tym ruchem godzin szczytu negative
Usługi sztucznej inteligencji platformy Azure na platformie Spark są złe positive

Detektor języka

Detektor języka ocenia wprowadzanie tekstu dla każdego dokumentu i zwraca identyfikatory języka z wynikiem wskazującym siłę analizy. Ta możliwość jest przydatna w przypadku magazynów zawartości przechowujących dowolne teksty, których język nie jest znany. Aby uzyskać listę obsługiwanych języków, zobacz obsługiwane języki w interfejsie API analiza tekstu.

# Create a dataframe that's tied to it's column names
df = spark.createDataFrame([
  ("Hello World",),
  ("Bonjour tout le monde",),
  ("La carretera estaba atascada. Había mucho tráfico el día de ayer.",),
  ("你好",),
  ("こんにちは",),
  (":) :( :D",)
], ["text",])

# Run the Text Analytics service with options
language = (LanguageDetector()
    .setLinkedService(linked_service_name)
    .setTextCol("text")
    .setOutputCol("language")
    .setErrorCol("error"))

# Show the results of your text query in a table format
display(language.transform(df))

Oczekiwane wyniki

Oczekiwane wyniki narzędzia do wykrywania języka w wersji 3.1

Detektor jednostek

Funkcja Entity Detector zwraca listę rozpoznanych jednostek z linkami do dobrze znanego baza wiedzy. Aby uzyskać listę obsługiwanych języków, zobacz obsługiwane języki w interfejsie API analiza tekstu.

df = spark.createDataFrame([
    ("1", "Microsoft released Windows 10"),
    ("2", "In 1975, Bill Gates III and Paul Allen founded the company.")
], ["if", "text"])

entity = (EntityDetector()
    .setLinkedService(linked_service_name)
    .setLanguage("en")
    .setOutputCol("replies")
    .setErrorCol("error"))

display(entity.transform(df).select("if", "text", col("replies").getItem("document").getItem("entities").alias("entities")))

Oczekiwane wyniki

Oczekiwane wyniki narzędzia do wykrywania jednostek w wersji 3.1


Wyodrębnianie kluczowych fraz

Wyodrębnianie fraz kluczowych ocenia tekst bez struktury i zwraca listę kluczowych fraz. Ta możliwość jest przydatna, jeśli chcesz szybko zidentyfikować główne tematy w kolekcji dokumentów. Aby uzyskać listę obsługiwanych języków, zobacz obsługiwane języki w interfejsie API analiza tekstu.

df = spark.createDataFrame([
    ("en", "Hello world. This is some input text that I love."),
    ("fr", "Bonjour tout le monde"),
    ("es", "La carretera estaba atascada. Había mucho tráfico el día de ayer.")
], ["lang", "text"])

keyPhrase = (KeyPhraseExtractor()
    .setLinkedService(linked_service_name)
    .setLanguageCol("lang")
    .setOutputCol("replies")
    .setErrorCol("error"))

display(keyPhrase.transform(df).select("text", col("replies").getItem("document").getItem("keyPhrases").alias("keyPhrases")))

Oczekiwane wyniki

tekst keyPhrases
Cześć ludzie. To jest trochę tekstu wejściowego, który kocham. "["Hello world","input text"]"
Bonjour tout le monde "["Bonjour","monde"]"
La carretera estaba atascada. Había mucho tráfico el día de ayer. "["mucho tráfico","día","carretera","ayer"]"

Rozpoznawanie nazwanych jednostek (NER)

Nazwane rozpoznawanie jednostek (NER) to możliwość identyfikowania różnych jednostek w tekście i kategoryzowania ich w wstępnie zdefiniowanych klas lub typów, takich jak: osoba, lokalizacja, zdarzenie, produkt i organizacja. Aby uzyskać listę obsługiwanych języków, zobacz obsługiwane języki w interfejsie API analiza tekstu.

df = spark.createDataFrame([
    ("1", "en", "I had a wonderful trip to Seattle last week."),
    ("2", "en", "I visited Space Needle 2 times.")
], ["id", "language", "text"])

ner = (NER()
    .setLinkedService(linked_service_name)
    .setLanguageCol("language")
    .setOutputCol("replies")
    .setErrorCol("error"))

display(ner.transform(df).select("text", col("replies").getItem("document").getItem("entities").alias("entities")))

Oczekiwane wyniki

Oczekiwane wyniki dla nazwanego rozpoznawania jednostek w wersji 3.1


Dane osobowe (PII) w wersji 3.1

Funkcja NER jest częścią funkcji NER i może identyfikować i redagować poufne jednostki w tekście skojarzonym z osobą, taką jak: numer telefonu, adres e-mail, adres e-mail, numer paszportu. Aby uzyskać listę obsługiwanych języków, zobacz obsługiwane języki w interfejsie API analiza tekstu.

df = spark.createDataFrame([
    ("1", "en", "My SSN is 859-98-0987"),
    ("2", "en", "Your ABA number - 111000025 - is the first 9 digits in the lower left hand corner of your personal check."),
    ("3", "en", "Is 998.214.865-68 your Brazilian CPF number?")
], ["id", "language", "text"])

pii = (PII()
    .setLinkedService(linked_service_name)
    .setLanguageCol("language")
    .setOutputCol("replies")
    .setErrorCol("error"))

display(pii.transform(df).select("text", col("replies").getItem("document").getItem("entities").alias("entities")))

Oczekiwane wyniki

Oczekiwane wyniki danych osobowych w wersji 3.1


Czyszczenie zasobów

Aby upewnić się, że wystąpienie platformy Spark zostanie zamknięte, zakończ wszystkie połączone sesje (notesy). Pula zostanie zamknięta po osiągnięciu czasu bezczynności określonego w puli platformy Apache Spark. Możesz również wybrać pozycję Zatrzymaj sesję na pasku stanu w prawym górnym rogu notesu.

Zrzut ekranu przedstawiający przycisk Zatrzymaj sesję na pasku stanu.

Następne kroki