Del via


Brug Azure AI-tjenester med SynapseML i Microsoft Fabric

Azure AI-tjenester hjælpe udviklere og organisationer med hurtigt at skabe intelligente, banebrydende, markedsklare og ansvarlige programmer med indbyggede og færdigbyggede og tilpassede API'er og modeller. I denne artikel skal du bruge de forskellige tjenester, der er tilgængelige i Azure AI-tjenester, til at udføre opgaver, der omfatter: tekstanalyse, oversættelse, dokumentintelligens, vision, billedsøgning, tale til tekst og tekst til talekonvertering, registrering af uregelmæssigheder og dataudtrækning fra web-API'er.

Målet med Azure AI-tjenester er at hjælpe udviklere med at oprette programmer, der kan se, høre, tale, forstå og endda begynde at ræsonnere. Kataloget over tjenester i Azure AI-tjenester kan kategoriseres i fem hovedsøjler: Vision, Speech, Language, Web searchog Decision.

Forudsætninger

Forbered dit system

For at begynde skal du importere påkrævede biblioteker og initialisere din Spark-session.

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

Importér azure AI-tjenestebiblioteker, og erstat nøgler og placeringer i følgende kodestykke med din Azure AI-tjenestenøgle og -placering.

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

Udfør synspunktsanalyse på tekst

Tjenesten Text Analytics indeholder flere algoritmer til udtrækning af intelligent indsigt fra tekst. Du kan f.eks. bruge tjenesten til at finde synspunktet for noget inputtekst. Tjenesten returnerer en score mellem 0,0 og 1,0, hvor lave scorer angiver negative synspunkter, og høje scorer angiver et positivt synspunkt.

Følgende kodeeksempel returnerer synspunktet for tre enkle sætninger.

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

Udfør tekstanalyse for tilstandsdata

Text Analytics for Health Service udtrække og mærke relevante medicinske oplysninger fra ustruktureret tekst, f.eks. lægenoter, dechargeoversigter, kliniske dokumenter og elektroniske sundhedsjournaler.

I følgende kodeeksempel analyseres og transformeres tekst fra lægers noter til strukturerede 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))

Oversæt tekst til et andet sprog

Translator er en cloudbaseret maskinoversættelsestjeneste og er en del af Azure AI-tjenestefamilien af kognitive API'er, der bruges til at bygge intelligente apps. Translator er let at integrere i dine programmer, websteder, værktøjer og løsninger. Det giver dig mulighed for at tilføje brugeroplevelser med flere sprog på 90 sprog og dialekter og kan bruges til tekstoversættelse med et hvilket som helst operativsystem.

Følgende kodeeksempel udfører en simpel tekstoversættelse ved at angive de sætninger, du vil oversætte, og målsprog, du vil oversætte 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")
)

Udtræk oplysninger fra et dokument til strukturerede data

Azure AI Document Intelligence- er en del af Azure AI-tjenester, der giver dig mulighed for at bygge automatiseret databehandlingssoftware ved hjælp af teknologi til maskinel indlæring. Med Azure AI Document Intelligence kan du identificere og udtrække tekst, nøgle-/værdipar, markeringsmærker, tabeller og struktur fra dine dokumenter. Tjenesten opretter strukturerede data, der indeholder relationerne i den oprindelige fil, afgrænsningsfelter, tillid og meget mere.

I følgende kodeeksempel analyseres et visitkortbillede og dets oplysninger ud i strukturerede 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")
)

Analysér og mærk billeder

Computer Vision- analyserer billeder for at identificere struktur som ansigter, objekter og beskrivelser af naturligt sprog.

I følgende kodeeksempel analyseres billeder og mærkater med mærker. Tags er beskrivelser af ting på billedet med ét ord, f.eks. genkendelige objekter, personer, landskaber 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 Image Search søger på internettet for at hente billeder, der er relateret til en brugers forespørgsel på et naturligt sprog.

I følgende kodeeksempel bruges en tekstforespørgsel, der søger efter billeder med anførselstegn. Outputtet af koden er en liste over billed-URL-adresser, der indeholder fotos, der er relateret til forespørgslen.

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

Transformér tale til tekst

Tjenesten Tale til tekst konverterer streams eller filer med talt lyd til tekst. Følgende kodeeksempel transskriberer é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"))

Transformér tekst til tale

Tekst til tale- er en tjeneste, der giver dig mulighed for at bygge apps og tjenester, der taler naturligt, ved at vælge mellem mere end 270 neurale stemmer på tværs af 119 sprog og varianter.

Følgende kodeeksempel transformerer tekst til en lydfil, der indeholder indholdet af 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))

Registrer uregelmæssigheder i tidsseriedata

uregelmæssigheder er velegnet til at registrere uregelmæssigheder i dine tidsseriedata. I følgende kodeeksempel bruges tjenesten Anomaly Detector til at finde uregelmæssigheder 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")
)

Hent oplysninger fra vilkårlige web-API'er

Med HTTP på Spark kan du bruge en hvilken som helst webtjeneste i din big data-pipeline. I følgende kodeeksempel bruges API'en Verdensbanken til at få oplysninger om forskellige lande 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")
    )
)