Udostępnij za pośrednictwem


Korzystanie z usług Azure AI z usługą SynapseML w usłudze Microsoft Fabric

Usługi azure AI ułatwiają deweloperom i organizacjom szybkie tworzenie inteligentnych, najnowocześniejszych, gotowych na rynek i odpowiedzialnych aplikacji z wbudowanymi i wstępnie utworzonymi i dostosowywalnymi interfejsami API oraz modelami. W tym artykule użyjesz różnych usług dostępnych w usługach Azure AI, aby wykonywać zadania, takie jak analiza tekstu, tłumaczenie, analiza dokumentów, przetwarzanie obrazów, wyszukiwanie obrazów, zamiana mowy na tekst i tekst na mowę, wykrywanie anomalii i wyodrębnianie danych z internetowych interfejsów API.

Celem usług azure AI jest ułatwienie deweloperom tworzenia aplikacji, które mogą wyświetlać, słyszeć, mówić, rozumieć, a nawet zaczynać rozumować. Katalog usług w ramach usług azure AI można podzielić na pięć głównych filarów: Vision, Speech, Language, Web search i Decision.

Wymagania wstępne

  • Uzyskaj subskrypcję usługi Microsoft Fabric. Możesz też utworzyć konto bezpłatnej wersji próbnej usługi Microsoft Fabric.

  • Zaloguj się do usługi Microsoft Fabric.

  • Użyj przełącznika środowiska po lewej stronie głównej, aby przełączyć się na środowisko usługi Synapse Nauka o danych.

    Screenshot of the experience switcher menu, showing where to select Data Science.

  • Utwórz nowy notes.
  • Dołącz notes do magazynu lakehouse. Po lewej stronie notesu wybierz pozycję Dodaj , aby dodać istniejący magazyn lakehouse lub utworzyć nowy.
  • Uzyskaj klucz usług sztucznej inteligencji platformy Azure, wykonując czynności opisane w przewodniku Szybki start: tworzenie zasobu z wieloma usługami dla usług Azure AI. Skopiuj wartość klucza do użycia w poniższych przykładach kodu.

Przygotowywanie systemu

Aby rozpocząć, zaimportuj wymagane biblioteki i zainicjuj sesję platformy Spark.

from pyspark.sql.functions import udf, col
from synapse.ml.io.http import HTTPTransformer, http_udf
from requests import Request
from pyspark.sql.functions import lit
from pyspark.ml import PipelineModel
from pyspark.sql.functions import col
import os
from pyspark.sql import SparkSession
from synapse.ml.core.platform import *

# Bootstrap Spark Session
spark = SparkSession.builder.getOrCreate()

Zaimportuj biblioteki usług Azure AI i zastąp klucze i lokalizacje w poniższym fragmencie kodu kluczem i lokalizacją usług azure AI.

from synapse.ml.cognitive import *

# A general Azure AI services key for Text Analytics, Vision and Document Intelligence (or use separate keys that belong to each service)
service_key = "<YOUR-KEY-VALUE>" # Replace <YOUR-KEY-VALUE> with your Azure AI service key, check prerequisites for more details
service_loc = "eastus"

# A Bing Search v7 subscription key
bing_search_key =  "<YOUR-KEY-VALUE>" # Replace <YOUR-KEY-VALUE> with your Bing v7 subscription key, check prerequisites for more details

# An Anomaly Detector subscription key
anomaly_key = <"YOUR-KEY-VALUE"> # Replace <YOUR-KEY-VALUE> with your anomaly service key, check prerequisites for more details
anomaly_loc = "westus2"

# A Translator subscription key
translator_key = "<YOUR-KEY-VALUE>" # Replace <YOUR-KEY-VALUE> with your translator service key, check prerequisites for more details
translator_loc = "eastus"

# An Azure search key
search_key = "<YOUR-KEY-VALUE>" # Replace <YOUR-KEY-VALUE> with your search key, check prerequisites for more details

Przeprowadzanie analizy tonacji w tekście

Usługa analiza tekstu udostępnia kilka algorytmów do wyodrębniania inteligentnych szczegółowych informacji z tekstu. Na przykład możesz użyć usługi, aby znaleźć tonację tekstu wejściowego. Usługa zwróci ocenę z zakresu od 0,0 do 1,0, gdzie niskie wyniki wskazują negatywną tonację i wysokie wyniki wskazują na pozytywną tonację.

Poniższy przykładowy kod zwraca tonację dla trzech prostych zdań.

# 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 cognitive services on spark aint bad", "en-US"),
    ],
    ["text", "language"],
)

# Run the Text Analytics service with options
sentiment = (
    TextSentiment()
    .setTextCol("text")
    .setLocation(service_loc)
    .setSubscriptionKey(service_key)
    .setOutputCol("sentiment")
    .setErrorCol("error")
    .setLanguageCol("language")
)

# Show the results of your text query in a table format
display(
    sentiment.transform(df).select(
        "text", col("sentiment.document.sentiment").alias("sentiment")
    )
)

Wykonywanie analizy tekstu na potrzeby danych dotyczących kondycji

Analiza tekstu dla Usługa kondycji wyodrębnia i oznacza odpowiednie informacje medyczne z tekstu bez struktury, takie jak uwagi lekarza, podsumowania wypisu, dokumenty kliniczne i elektroniczne dokumenty zdrowotne.

Poniższy przykładowy kod analizuje i przekształca tekst z notatek lekarzy w dane ustrukturyzowane.

df = spark.createDataFrame(
    [
        ("20mg of ibuprofen twice a day",),
        ("1tsp of Tylenol every 4 hours",),
        ("6-drops of Vitamin B-12 every evening",),
    ],
    ["text"],
)

healthcare = (
    AnalyzeHealthText()
    .setSubscriptionKey(service_key)
    .setLocation(service_loc)
    .setLanguage("en")
    .setOutputCol("response")
)

display(healthcare.transform(df))

Tłumaczenie tekstu w innym języku

Translator to oparta na chmurze usługa tłumaczenia maszynowego i jest częścią rodziny usług Azure AI usług cognitive API używanych do tworzenia inteligentnych aplikacji. Translator jest łatwy do zintegrowania z aplikacjami, witrynami internetowymi, narzędziami i rozwiązaniami. Umożliwia dodawanie środowisk użytkownika w wielu językach w 90 językach i dialektach i może służyć do tłumaczenia tekstu w dowolnym systemie operacyjnym.

Poniższy przykładowy kod wykonuje proste tłumaczenie tekstu, podając zdania, na które chcesz przetłumaczyć, i języki docelowe, na które chcesz je przetłumaczyć.

from pyspark.sql.functions import col, flatten

# Create a dataframe including sentences you want to translate
df = spark.createDataFrame(
    [(["Hello, what is your name?", "Bye"],)],
    [
        "text",
    ],
)

# Run the Translator service with options
translate = (
    Translate()
    .setSubscriptionKey(translator_key)
    .setLocation(translator_loc)
    .setTextCol("text")
    .setToLanguage(["zh-Hans"])
    .setOutputCol("translation")
)

# Show the results of the translation.
display(
    translate.transform(df)
    .withColumn("translation", flatten(col("translation.translations")))
    .withColumn("translation", col("translation.text"))
    .select("translation")
)

Wyodrębnianie informacji z dokumentu do danych strukturalnych

Azure AI Document Intelligence to część usług azure AI, która umożliwia tworzenie zautomatyzowanego oprogramowania do przetwarzania danych przy użyciu technologii uczenia maszynowego. Dzięki usłudze Azure AI Document Intelligence można identyfikować i wyodrębniać tekst, pary klucz/wartość, znaczniki wyboru, tabele i strukturę z dokumentów. Usługa generuje dane ustrukturyzowane, które zawierają relacje w oryginalnym pliku, pola ograniczenia, pewność siebie i nie tylko.

Poniższy przykładowy kod analizuje obraz wizytówki i wyodrębnia informacje na dane ustrukturyzowane.

from pyspark.sql.functions import col, explode

# Create a dataframe containing the source files
imageDf = spark.createDataFrame(
    [
        (
            "https://mmlspark.blob.core.windows.net/datasets/FormRecognizer/business_card.jpg",
        )
    ],
    [
        "source",
    ],
)

# Run the Form Recognizer service
analyzeBusinessCards = (
    AnalyzeBusinessCards()
    .setSubscriptionKey(service_key)
    .setLocation(service_loc)
    .setImageUrlCol("source")
    .setOutputCol("businessCards")
)

# Show the results of recognition.
display(
    analyzeBusinessCards.transform(imageDf)
    .withColumn(
        "documents", explode(col("businessCards.analyzeResult.documentResults.fields"))
    )
    .select("source", "documents")
)

Analizowanie i tagowanie obrazów

przetwarzanie obrazów analizuje obrazy, aby identyfikować strukturę, taką jak twarze, obiekty i opisy języka naturalnego.

Poniższy przykładowy kod analizuje obrazy i oznacza je tagami. Tagi to jeden wyraz opis elementów na obrazie, takich jak rozpoznawalne obiekty, osoby, sceneria i akcje.

# Create a dataframe with the image URLs
base_url = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/"
df = spark.createDataFrame(
    [
        (base_url + "objects.jpg",),
        (base_url + "dog.jpg",),
        (base_url + "house.jpg",),
    ],
    [
        "image",
    ],
)

# Run the Computer Vision service. Analyze Image extracts information from/about the images.
analysis = (
    AnalyzeImage()
    .setLocation(service_loc)
    .setSubscriptionKey(service_key)
    .setVisualFeatures(
        ["Categories", "Color", "Description", "Faces", "Objects", "Tags"]
    )
    .setOutputCol("analysis_results")
    .setImageUrlCol("image")
    .setErrorCol("error")
)

# Show the results of what you wanted to pull out of the images.
display(analysis.transform(df).select("image", "analysis_results.description.tags"))

Wyszukiwanie obrazów Bing wyszukuje w Internecie w celu pobrania obrazów powiązanych z zapytaniem w języku naturalnym użytkownika.

Poniższy przykładowy kod używa zapytania tekstowego, które wyszukuje obrazy z cudzysłowami. Dane wyjściowe kodu to lista adresów URL obrazów zawierających zdjęcia związane z zapytaniem.

# Number of images Bing will return per query
imgsPerBatch = 10
# A list of offsets, used to page into the search results
offsets = [(i * imgsPerBatch,) for i in range(100)]
# Since web content is our data, we create a dataframe with options on that data: offsets
bingParameters = spark.createDataFrame(offsets, ["offset"])

# Run the Bing Image Search service with our text query
bingSearch = (
    BingImageSearch()
    .setSubscriptionKey(bing_search_key)
    .setOffsetCol("offset")
    .setQuery("Martin Luther King Jr. quotes")
    .setCount(imgsPerBatch)
    .setOutputCol("images")
)

# Transformer that extracts and flattens the richly structured output of Bing Image Search into a simple URL column
getUrls = BingImageSearch.getUrlTransformer("images", "url")

# This displays the full results returned, uncomment to use
# display(bingSearch.transform(bingParameters))

# Since we have two services, they are put into a pipeline
pipeline = PipelineModel(stages=[bingSearch, getUrls])

# Show the results of your search: image URLs
display(pipeline.transform(bingParameters))

Przekształcanie mowy na tekst

Usługa zamiany mowy na tekst konwertuje strumienie lub pliki dźwięku mówionego na tekst. Poniższy przykładowy kod transkrybuje jeden plik audio do tekstu.

# Create a dataframe with our audio URLs, tied to the column called "url"
df = spark.createDataFrame(
    [("https://mmlspark.blob.core.windows.net/datasets/Speech/audio2.wav",)], ["url"]
)

# Run the Speech-to-text service to translate the audio into text
speech_to_text = (
    SpeechToTextSDK()
    .setSubscriptionKey(service_key)
    .setLocation(service_loc)
    .setOutputCol("text")
    .setAudioDataCol("url")
    .setLanguage("en-US")
    .setProfanity("Masked")
)

# Show the results of the translation
display(speech_to_text.transform(df).select("url", "text.DisplayText"))

Przekształcanie tekstu na mowę

Zamiana tekstu na mowę to usługa, która umożliwia tworzenie aplikacji i usług, które mówią naturalnie, wybierając spośród ponad 270 neuronowych głosów w 119 językach i wariantach.

Poniższy przykładowy kod przekształca tekst w plik audio zawierający zawartość tekstu.

from synapse.ml.cognitive import TextToSpeech

fs = ""
if running_on_databricks():
    fs = "dbfs:"
elif running_on_synapse_internal():
    fs = "Files"

# Create a dataframe with text and an output file location
df = spark.createDataFrame(
    [
        (
            "Reading out loud is fun! Check out aka.ms/spark for more information",
            fs + "/output.mp3",
        )
    ],
    ["text", "output_file"],
)

tts = (
    TextToSpeech()
    .setSubscriptionKey(service_key)
    .setTextCol("text")
    .setLocation(service_loc)
    .setVoiceName("en-US-JennyNeural")
    .setOutputFileCol("output_file")
)

# Check to make sure there were no errors during audio creation
display(tts.transform(df))

Wykrywanie anomalii w danych szeregów czasowych

Narzędzie do wykrywania anomalii doskonale nadaje się do wykrywania nieprawidłowości w danych szeregów czasowych. Poniższy przykładowy kod używa usługi Narzędzie do wykrywania anomalii do znajdowania anomalii w danych serii czasowych.

# Create a dataframe with the point data that Anomaly Detector requires
df = spark.createDataFrame(
    [
        ("1972-01-01T00:00:00Z", 826.0),
        ("1972-02-01T00:00:00Z", 799.0),
        ("1972-03-01T00:00:00Z", 890.0),
        ("1972-04-01T00:00:00Z", 900.0),
        ("1972-05-01T00:00:00Z", 766.0),
        ("1972-06-01T00:00:00Z", 805.0),
        ("1972-07-01T00:00:00Z", 821.0),
        ("1972-08-01T00:00:00Z", 20000.0),
        ("1972-09-01T00:00:00Z", 883.0),
        ("1972-10-01T00:00:00Z", 898.0),
        ("1972-11-01T00:00:00Z", 957.0),
        ("1972-12-01T00:00:00Z", 924.0),
        ("1973-01-01T00:00:00Z", 881.0),
        ("1973-02-01T00:00:00Z", 837.0),
        ("1973-03-01T00:00:00Z", 9000.0),
    ],
    ["timestamp", "value"],
).withColumn("group", lit("series1"))

# Run the Anomaly Detector service to look for irregular data
anamoly_detector = (
    SimpleDetectAnomalies()
    .setSubscriptionKey(anomaly_key)
    .setLocation(anomaly_loc)
    .setTimestampCol("timestamp")
    .setValueCol("value")
    .setOutputCol("anomalies")
    .setGroupbyCol("group")
    .setGranularity("monthly")
)

# Show the full results of the analysis with the anomalies marked as "True"
display(
    anamoly_detector.transform(df).select("timestamp", "value", "anomalies.isAnomaly")
)

Pobieranie informacji z dowolnych internetowych interfejsów API

Za pomocą protokołu HTTP na platformie Spark możesz użyć dowolnej usługi internetowej w potoku danych big data. Poniższy przykładowy kod używa interfejsu API Banku Światowego do uzyskiwania informacji o różnych krajach na całym świecie.

# Use any requests from the python requests library


def world_bank_request(country):
    return Request(
        "GET", "http://api.worldbank.org/v2/country/{}?format=json".format(country)
    )


# Create a dataframe with specifies which countries we want data on
df = spark.createDataFrame([("br",), ("usa",)], ["country"]).withColumn(
    "request", http_udf(world_bank_request)(col("country"))
)

# Much faster for big data because of the concurrency :)
client = (
    HTTPTransformer().setConcurrency(3).setInputCol("request").setOutputCol("response")
)

# Get the body of the response


def get_response_body(resp):
    return resp.entity.content.decode()


# Show the details of the country data returned
display(
    client.transform(df).select(
        "country", udf(get_response_body)(col("response")).alias("response")
    )
)