Del via


Bruke Azure AI-tjenester med SynapseML i Microsoft Fabric

Azure AI-tjenester hjelpe utviklere og organisasjoner med å raskt opprette intelligente, banebrytende, markedsklare og ansvarlige programmer med out-of-the-box og forhåndsbygde og tilpassbare API-er og modeller. I denne artikkelen skal du bruke de ulike tjenestene som er tilgjengelige i Azure AI-tjenester til å utføre oppgaver som omfatter: tekstanalyse, oversettelse, dokumentintelligens, visjon, bildesøk, tale til tekst og tekst til talekonvertering, avviksgjenkjenning og datauthenting fra nett-API-er.

Målet med Azure AI-tjenester er å hjelpe utviklere med å opprette programmer som kan se, høre, snakke, forstå og til og med begynne å resonnere. Katalogen over tjenester i Azure AI-tjenester kan kategoriseres i fem hovedpilarer: Vision, Speech, Language, Web searchog Decision.

Forutsetninger

Klargjøre systemet

Hvis du vil begynne, importerer du nødvendige biblioteker og initialiserer Spark-økten.

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()

Importer Biblioteker for Azure AI-tjenester og erstatt nøklene og plasseringene i kodesnutten nedenfor med azure AI-tjenestenøkkelen og -plasseringen.

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

Utfør sentimentanalyse på tekst

Tjenesten Tekstanalyse gir flere algoritmer for å trekke ut intelligent innsikt fra tekst. Du kan for eksempel bruke tjenesten til å finne følelsen av noe inndatatekst. Tjenesten returnerer en poengsum mellom 0,0 og 1,0, der lave poengsummer indikerer negativ sentiment og høye poengsummer indikerer positiv sentiment.

Følgende kodeeksempel returnerer sentimentet for tre enkle setninger.

# 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")
    )
)

Utfør tekstanalyse for tilstandsdata

Den Text Analytics for Health Service trekker ut og merker relevant medisinsk informasjon fra ustrukturert tekst som legenotater, utskrivningssammendrag, kliniske dokumenter og elektroniske helsejournaler.

Følgende kodeeksempel analyserer og transformerer tekst fra legenotater til strukturerte data.

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))

Oversette tekst til et annet språk

Translator er en skybasert maskinoversettelsestjeneste og er en del av Azure AI-tjenestefamilien av kognitive API-er som brukes til å bygge intelligente apper. Oversetter er enkelt å integrere i programmer, nettsteder, verktøy og løsninger. Den lar deg legge til flerspråklige brukeropplevelser på 90 språk og dialekter og kan brukes til tekstoversettelse med alle operativsystemer.

Følgende kodeeksempel gjør en enkel tekstoversettelse ved å angi setningene du vil oversette og målrette språk du vil oversette dem til.

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")
)

Trekke ut informasjon fra et dokument til strukturerte data

Azure AI Document Intelligence er en del av Azure AI-tjenester som lar deg bygge automatisert databehandlingsprogramvare ved hjelp av maskinlæringsteknologi. Med Azure AI Document Intelligence kan du identifisere og trekke ut tekst, nøkkel-/verdipar, merkemerker, tabeller og struktur fra dokumentene dine. Tjenesten sender strukturerte data som inkluderer relasjonene i den opprinnelige filen, grensebokser, tillit og mer.

Følgende kodeeksempel analyserer et visittkortbilde og trekker ut informasjonen i strukturerte data.

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")
)

Analysere og merke bilder

Computer Vision analyserer bilder for å identifisere struktur som ansikter, objekter og beskrivelser av naturlig språk.

Følgende kodeeksempel analyserer bilder og merker dem med koder. Koder er beskrivelser på ett ord av ting i bildet, for eksempel gjenkjennelige objekter, personer, landskap og handlinger.

# 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"))

Bing-bildesøk søker på nettet for å hente bilder relatert til brukerens naturlige språkspørring.

Følgende kodeeksempel bruker en tekstspørring som ser etter bilder med anførselstegn. Utdataene for koden er en liste over nettadresser for bilder som inneholder bilder relatert til spørringen.

# 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))

Transformer tale til tekst

Tjenesten tale-til-tekst- konverterer strømmer eller filer med talt lyd til tekst. Følgende kodeeksempel transkriberer én lydfil til tekst.

# 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"))

Transformer tekst til tale

Tekst til tale er en tjeneste som lar deg bygge apper og tjenester som snakker naturlig, og velge mellom mer enn 270 nevrale stemmer på tvers av 119 språk og varianter.

Følgende kodeeksempel transformerer tekst til en lydfil som inneholder innholdet i teksten.

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))

Oppdage avvik i tidsseriedata

avviksdetektoren er flott for å oppdage uregelmessigheter i tidsseriedataene. Følgende kodeeksempel bruker avviksdetektortjenesten til å finne avvik i hele tidsseriedata.

# 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")
)

Få informasjon fra tilfeldige nett-API-er

Med HTTP på Spark kan du bruke en hvilken som helst nettjeneste i datasamlebåndet. Følgende kodeeksempel bruker World Bank API- for å få informasjon om ulike land rundt om i verden.

# 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")
    )
)