Jaa


Azure-tekoälypalveluiden käyttäminen SynapseML:n kanssa Microsoft Fabricissa

Azuren tekoälypalveluiden avulla kehittäjät ja organisaatiot voivat nopeasti luoda älykkäitä, huippuluokan, markkinavalmiita ja vastuullisia sovelluksia valmiiden sekä valmiiden ja mukautettavien ohjelmointirajapintojen ja mallien avulla. Tässä artikkelissa käytetään Azuren tekoälypalveluissa käytettävissä olevia eri palveluja tehtävien suorittamiseen. Tällaisia tehtäviä ovat muun muassa tekstianalyysi, käännös, asiakirjatiedot, näkö, kuvahaku, puhe tekstiksi ja teksti muunto, poikkeamien tunnistaminen ja tietojen poimiminen verkon ohjelmointirajapinnoista.

Azuren tekoälypalveluiden tavoitteena on auttaa kehittäjiä luomaan sovelluksia, jotka näkevät, kuulevat, puhuvat, ymmärtävät ja jopa alkavat järkeillä. Azuren tekoälypalveluiden palveluhakemisto voidaan luokitella viiteen pääpilarian: visio, puhe, kieli, verkkohaku ja päätös.

Edellytykset

Järjestelmän valmisteleminen

Aloita tuomisen pakolliset kirjastot ja alusta Spark-istuntosi.

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

Tuo Azure-tekoälypalveluiden kirjastoja ja korvaa seuraavan koodikatkelman avaimet ja sijainnit Azure-tekoälypalveluiden avaimella ja sijainnilla.

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

Asenneanalyysin suorittaminen tekstille

Tekstianalyysi -palvelu tarjoaa useita algoritmeja älykkäiden merkityksellisten tietojen poimimiseen tekstistä. Palvelun avulla voit esimerkiksi löytää syötetekstin asenteen. Palvelu palauttaa pistemäärän 0,0–1,0, jossa alhaiset pistemäärät ilmaisevat negatiivisen asenteen ja korkeat pistemäärät ilmaisevat myönteisen asenteen.

Seuraava koodiesimerkki palauttaa asenteen kolmelle yksinkertaiselle lauseelle.

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

Suorita tekstianalyysi kuntotietoja varten

Health Service -Tekstianalyysi poimii ja otsikoi olennaiset lääketieteelliset tiedot rakenteettomasta tekstistä, kuten lääkärin muistiinpanot, päästöyhteenvedot, kliiniset asiakirjat ja sähköiset terveystiedot.

Seuraava koodiesimerkki analysoi ja muuntaa lääkärien muistiinpanojen tekstin jäsennellyksi tiedoksi.

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

Tekstin kääntäminen toiselle kielelle

Kääntäjä on pilvipohjainen konekäännöspalvelu, ja se on osa Azure AI -palveluiden perhettä, jonka kognitiivisia ohjelmointirajapintoja käytetään älykkäiden sovellusten rakentamiseen. Kääntäjä on helppo integroida sovelluksiin, sivustoihin, työkaluihin ja ratkaisuihin. Sen avulla voit lisätä monikielisiä käyttökokemuksia 90 kielellä ja murreella, ja sitä voidaan käyttää tekstin kääntämiseen missä tahansa käyttöjärjestelmässä.

Seuraava koodiesimerkki tekee yksinkertaisen tekstin käännöksen antamalla lauseet, jotka haluat kääntää, ja kohdekielille, joille haluat kääntää ne.

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

Tietojen poimiminen asiakirjasta jäsennettyihin tietoihin

Azure aI Document Intelligence on osa Azuren tekoälypalveluita, joiden avulla voit luoda automatisoituja tietojenkäsittelyohjelmistoja koneoppimisteknologiaa käyttämällä. Azuren tekoälyn asiakirjatietojen avulla voit tunnistaa ja poimia asiakirjoista tekstiä, avain-/arvopareja, valintamerkkejä, taulukoita ja rakennetta. Palvelu tulostaa jäsennettyjä tietoja, jotka sisältävät alkuperäisen tiedoston yhteydet, rajaavat ruutuja, luottamuksen ja paljon muuta.

Seuraava koodiesimerkki analysoi käyntikortin kuvan ja poimii sen tiedot jäsennettyihin tietoihin.

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

Kuvien analysoiminen ja merkitseminen

Konenäkö analysoi kuvia tunnistaakseen rakenteen, kuten kasvot, objektit ja luonnollisen kielen kuvaukset.

Seuraava koodiesimerkki analysoi kuvat ja otsikoi ne tunnisteilla. Tunnisteet ovat yhden sanan kuvauksia kuvan asioista, kuten tunnistettavat objektit, ihmiset, maisemat ja toiminnot.

# 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-kuvahaku hakee verkosta käyttäjän luonnollisen kielen kyselyyn liittyviä kuvia.

Seuraava koodiesimerkki käyttää tekstikyselyä, joka hakee kuvia lainausmerkeillä. Koodin tulos on luettelo kuvien URL-osoitteista, jotka sisältävät kyselyyn liittyviä valokuvia.

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

Muunna puhe tekstiksi

Puhe tekstiksi -palvelu muuntaa puhutun äänen virrat tai tiedostot tekstiksi. Seuraava koodiesimerkki kuvaa yhden äänitiedoston tekstiksi.

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

Muunna teksti puheeksi

Teksti puheeksi on palvelu, jonka avulla voit luoda sovelluksia ja palveluita, jotka puhuvat luonnollisesti, valitsemalla yli 270 hermoääntä 119 kielessä ja variantissa.

Seuraava koodiesimerkki muuntaa tekstin äänitiedostoksi, joka sisältää tekstin sisällön.

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

Poikkeamien tunnistaminen aikasarjatiedoissa

Poikkeamien tunnistus on kätevää aikasarjatietojen epäsäännöllisyyksien havaitsemisessa. Seuraavassa koodiesimerkissä käytetään Poikkeamien tunnistus-palvelua poikkeamien löytämiseen koko aikasarjatiedoista.

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

Tietojen hankkiminen satunnaisista verkon ohjelmointirajapinnoista

HTTP on Sparkin avulla voit käyttää mitä tahansa verkkopalvelua massadataputkessa. Seuraava koodiesimerkki käyttää Maailmanpankin ohjelmointirajapintaa saadakseen tietoja eri maista ympäri maailmaa.

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