Share via


Azure AI services

Az Azure AI-szolgáltatások segítségével a fejlesztők és szervezetek gyorsan hozhatnak létre intelligens, élvonalbeli, piackész és felelős alkalmazásokat beépített, előre összeállított és testre szabható API-kkal és modellekkel.

A SynapseML lehetővé teszi, hogy hatékony és nagy mértékben skálázható prediktív és elemzési modelleket hozzon létre különböző Spark-adatforrásokból. A Synapse Spark beépített SynapseML-kódtárakat biztosít, beleértve a synapse.ml.services szolgáltatást is.

Fontos

2023. szeptember 20-tól nem hozhat létre új anomáliadetektor erőforrásokat. A anomáliadetektor szolgáltatás 2026. október 1-jén megszűnik.

Az Azure Synapse Analytics előfeltételei

Az Azure AI-szolgáltatások Azure Synapse-ban való használatának előfeltételei című oktatóanyag végigvezeti az Azure AI-szolgáltatások Synapse Analyticsben való használatához szükséges lépéseken.

Az Azure AI-szolgáltatások OLYAN API-k, SDK-k és szolgáltatások csomagja, amelyekkel a fejlesztők intelligens funkciókat adhatnak alkalmazásukhoz. Az AI-szolgáltatások akkor is lehetővé teszik a fejlesztők számára, ha nem rendelkeznek közvetlen AI- vagy adatelemzési ismeretekkel vagy ismeretekkel. Az Azure AI-szolgáltatások segítségével a fejlesztők olyan alkalmazásokat hozhatnak létre, amelyek látják, hallják, beszélik, megértik, és akár okokat is elkezdhetnek. Az Azure AI-szolgáltatások szolgáltatáskatalógusa öt fő pillérre sorolható: Vision, Speech, Language, Web Search és Decision.

Használat

Látás

Computer Vision

  • Leírás: egy kép leírása olvasható nyelven (Scala, Python)
  • Elemzés (szín, képtípus, arc, felnőtt/racy tartalom): egy kép vizuális funkcióinak elemzése (Scala, Python)
  • OCR: szöveget olvas be egy képből (Scala, Python)
  • Szöveg felismerése: szöveg beolvasása képből (Scala, Python)
  • Miniatűr: létrehoz egy felhasználó által megadott méretű miniatűrt a képből (Scala, Python)
  • Tartományspecifikus tartalom felismerése: felismeri a tartományspecifikus tartalmakat (híresség, nevezetesség) (Scala, Python)
  • Címke: azonosítja a bemeneti kép szempontjából releváns szavak listáját (Scala, Python)

Face

  • Észlelés: emberi arcokat észlel egy képen (Scala, Python)
  • Ellenőrzés: ellenőrzi, hogy két arc ugyanahhoz a személyhez tartozik-e, vagy egy arc egy személyhez tartozik (Scala, Python)
  • Azonosítás: megkeresi az adott lekérdezési személy arcának legközelebbi egyezéseit egy személycsoportból (Scala, Python)
  • Hasonló keresés: hasonló arcokat keres a lekérdezési archoz egy arclistában (Scala, Python)
  • Csoport: az arcok egy csoportját a hasonlóság alapján különálló csoportokra osztja (Scala, Python)

Beszédfelismerés

Speech Services

  • Beszédfelolvasás: hangstreamek átírása (Scala, Python)
  • Beszélgetés átírása: a hangstreameket élő átiratokba alakítja át azonosított hangszórókkal. (Scala, Python)
  • Szöveg beszédgé alakítása: Szöveg átalakítása valósághű hanggá (Scala, Python)

Nyelv

AI nyelv

  • Nyelvfelismerés: észleli a bemeneti szöveg nyelvét (Scala, Python)
  • Kulcskifejezések kinyerése: azonosítja a beviteli szöveg főbb beszélő pontjait (Scala, Python)
  • Elnevezett entitásfelismerés: azonosítja az ismert entitásokat és az általánosan elnevezett entitásokat a bemeneti szövegben (Scala, Python)
  • Hangulatelemzés: 0 és 1 közötti pontszámot ad vissza, amely a bemeneti szöveg hangulatát jelzi (Scala, Python)
  • Egészségügyi entitás kinyerése: Kinyeri az orvosi entitásokat és a kapcsolatokat a szövegből. (Scala, Python)

Fordítás

Fordító

  • Fordítás: Szöveg fordítása. (Scala, Python)
  • Átírás: Az egyik nyelven lévő szöveget egy szkriptből egy másik szkriptbe konvertálja. (Scala, Python)
  • Észlelés: Azonosítja egy szöveg nyelvét. (Scala, Python)
  • BreakSentence: A mondathatárok elhelyezkedését azonosítja egy szövegrészben. (Scala, Python)
  • Szótárkeresés: Alternatív fordításokat biztosít egy szóhoz és néhány idiomatikus kifejezéshez. (Scala, Python)
  • Szótári példák: Példákat tartalmaz, amelyek bemutatják, hogyan használják a szótárban lévő kifejezéseket a kontextusban. (Scala, Python)
  • Dokumentumfordítás: Lefordítja a dokumentumokat az összes támogatott nyelvre és nyelvjárásra, miközben megőrzi a dokumentumszerkezetet és az adatformátumot. (Scala, Python)

Dokumentumintelligencia

Dokumentumintelligencia

  • Elrendezés elemzése: Szöveg- és elrendezésinformációk kinyerve egy adott dokumentumból. (Scala, Python)
  • Visszaigazolások elemzése: Optikai karakterfelismeréssel (OCR) és a nyugtamodellünkkel észleli és kinyeri az adatokat a nyugtákból, így könnyen kinyerheti a strukturált adatokat olyan nyugtákból, mint a kereskedő neve, a kereskedő telefonszáma, a tranzakció dátuma, a tranzakció összege stb. (Scala, Python)
  • Névjegykártyák elemzése: Optikai karakterfelismeréssel (OCR) és névjegykártya-modellünkkel észleli és kinyeri a névjegykártyák adatait, így könnyen kinyerhet strukturált adatokat névjegykártyákból, például névjegyek, cégnevek, telefonszámok, e-mailek stb. (Scala, Python)
  • Számlák elemzése: Optikai karakterfelismeréssel (OCR) észleli és nyeri ki a számlák adatait, valamint a mélytanulási modelleket ismerő számláink segítségével könnyen kinyerheti a strukturált adatokat olyan számlákból, mint az ügyfél, a szállító, a számlaazonosító, a számla esedékes dátuma, az összeg, a számla esedékes összege, az adó összege, a szállítás, a számla, a sorelemek stb. (Scala, Python)
  • Azonosító dokumentumok elemzése: Optikai karakterfelismeréssel (OCR) és azonosító dokumentummodellünkkel észleli és kinyeri az azonosító dokumentumok adatait, így könnyen kinyerheti a strukturált adatokat az azonosító dokumentumokból, például a vezetéknévből, a vezetéknévből, a születési dátumból, a dokumentumszámból stb. (Scala, Python)
  • Egyéni űrlap elemzése: Adatokat nyer ki űrlapokból (PDF-fájlokból és képekből) strukturált adatokká a reprezentatív betanítási űrlapok készletéből létrehozott modell alapján. (Scala, Python)
  • Egyéni modell lekérése: Részletes információk az egyéni modellről. (Scala, Python)
  • Egyéni modellek listázása: Az összes egyéni modell adatainak lekérése. (Scala, Python)

Döntés

anomáliadetektor

  • A legújabb pont anomáliája: létrehoz egy modellt az előző pontok használatával, és meghatározza, hogy a legújabb pont rendellenes-e (Scala, Python)
  • Anomáliák keresése: egy teljes sorozatot használó modellt hoz létre, és megkeresi a sorozat rendellenességeit (Scala, Python)

A rendszer előkészítése

Először importálja a szükséges kódtárakat, és inicializálja a Spark-munkamenetet.

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álja az Azure AI-szolgáltatások kódtárait, és cserélje le a következő kódrészlet kulcsait és helyeit az Azure AI-szolgáltatások kulcsára és helyére.

from synapse.ml.services import *
from synapse.ml.core.platform import *

# A general AI services key for AI Language, Computer Vision and Document Intelligence (or use separate keys that belong to each service)
service_key = find_secret(
    secret_name="ai-services-api-key", keyvault="mmlspark-build-keys"
)  # Replace the call to find_secret with your key as a python string. e.g. service_key="27snaiw..."
service_loc = "eastus"

# A Bing Search v7 subscription key
bing_search_key = find_secret(
    secret_name="bing-search-key", keyvault="mmlspark-build-keys"
)  # Replace the call to find_secret with your key as a python string.

# An Anomaly Detector subscription key
anomaly_key = find_secret(
    secret_name="anomaly-api-key", keyvault="mmlspark-build-keys"
)  # Replace the call to find_secret with your key as a python string. If you don't have an anomaly detection resource created before Sep 20th 2023, you won't be able to create one.
anomaly_loc = "westus2"

# A Translator subscription key
translator_key = find_secret(
    secret_name="translator-key", keyvault="mmlspark-build-keys"
)  # Replace the call to find_secret with your key as a python string.
translator_loc = "eastus"

# An Azure search key
search_key = find_secret(
    secret_name="azure-search-key", keyvault="mmlspark-build-keys"
)  # Replace the call to find_secret with your key as a python string.

Hangulatelemzés végrehajtása szövegen

Az AI Language szolgáltatás számos algoritmust biztosít az intelligens elemzések szövegből való kinyeréhez. Megtalálhatjuk például az adott bemeneti szöveg hangulatát. A szolgáltatás 0,0 és 1,0 közötti pontszámot ad vissza, ahol az alacsony pontszámok negatív hangulatot, a magas pontszám pedig pozitív hangulatot jeleznek. Ez a minta három egyszerű mondatot használ, és mindegyikhez visszaadja a hangulatot.

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

# Run the Text Analytics service with options
sentiment = (
    AnalyzeText()
    .setKind("SentimentAnalysis")
    .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.documents.sentiment").alias("sentiment")
    )
)

Állapotadatok szövegelemzése

A Text Analytics Állapotfigyelő szolgáltatás strukturálatlan szövegekből nyeri ki és címkézi a releváns orvosi információkat, például az orvosi jegyzeteket, a kibocsátási összefoglalókat, a klinikai dokumentumokat és az elektronikus egészségügyi nyilvántartásokat.

Az alábbi kódminta az orvosok jegyzeteiből származó szöveget strukturált adatokká elemzi és alakítja át.

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

Szöveg fordításra más nyelvre

A Translator egy felhőalapú gépi fordítási szolgáltatás, amely az intelligens alkalmazások létrehozásához használt AI API-k Azure AI-szolgáltatáscsaládjának része. A Translator könnyen integrálható az alkalmazásokba, webhelyekbe, eszközökbe és megoldásokba. Lehetővé teszi, hogy 90 nyelven és dialektusban több nyelvű felhasználói élményt adjon hozzá, és a saját algoritmus használata nélkül is lefordíthatja a szöveget.

Az alábbi kódminta egyszerű szövegfordítást végez a lefordítani kívánt mondatok megadásával, és megcélozza a lefordítani kívánt nyelveket.

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

Információk kinyerése egy dokumentumból strukturált adatokba

Az Azure AI Document Intelligence a Azure-alkalmazás lied AI-szolgáltatások része, amely lehetővé teszi automatizált adatfeldolgozási szoftverek gépi tanulási technológia használatával történő kiépítését. Az Azure AI-dokumentumintelligencia segítségével azonosíthatja és kinyerheti a dokumentumaiból a szöveget, a kulcs-/érték párokat, a kijelölési jeleket, a táblákat és a szerkezetet. A szolgáltatás strukturált adatokat ad ki, amelyek tartalmazzák az eredeti fájl kapcsolatait, a határolókereteket, a megbízhatóságot és egyebeket.

Az alábbi kódminta elemzi a névjegykártya-rendszerképeket, és strukturált adatokba bontja ki az információkat.

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

Computer Vision-minta

Az Azure AI Vision képeket elemez az arcok, objektumok és természetes nyelvű leírások azonosításához.

Az alábbi kódminta elemzi a képeket, és címkékkel címkézi őket. A címkék a képen szereplő dolgok egyszavas leírásai, például felismerhető objektumok, személyek, tájképek és műveletek.

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

A Bing Image Search a weben keres a felhasználó természetes nyelvi lekérdezéséhez kapcsolódó képek lekéréséhez.

Az alábbi kódminta egy szöveges lekérdezést használ, amely idézőjeleket tartalmazó képeket keres. A kód kimenete a lekérdezéshez kapcsolódó fényképeket tartalmazó kép URL-címek listája.

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

Beszéd átalakítása szöveggé

A Speech-to-text szolgáltatás szöveggé alakítja a beszélt hang streameit vagy fájljait. Az alábbi kódminta egy hangfájlt ír át szöveggé.

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

Szöveg átalakítása beszédté

A szövegfelolvasás egy olyan szolgáltatás, amely lehetővé teszi a természetes beszédet használó alkalmazások és szolgáltatások készítését, több mint 270 neurális hang közül választva 119 nyelven és változatban.

Az alábbi kódminta a szöveget hangfájllá alakítja, amely a szöveg tartalmát tartalmazza.

from synapse.ml.services.speech 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))

Idősoradatok rendellenességeinek észlelése

Ha 2023. szeptember 20. előtt még nem hozott létre anomáliadetektálási erőforrást, nem fog tudni létrehozni egyet. Érdemes kihagyni ezt a részt.

anomáliadetektor kiválóan alkalmas az idősoradatok szabálytalanságainak észlelésére. Az alábbi kódminta a anomáliadetektor szolgáltatás használatával keres rendellenességeket egy idősorban.

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

Információk lekérése tetszőleges webes API-kból

A Sparkon futó HTTP-vel bármilyen webszolgáltatás használható a big data-folyamatokban. Ebben a példában a Világbank API-t használjuk, hogy információkat szerezzünk a világ különböző országairól.

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

Azure AI-keresési minta

Ebben a példában bemutatjuk, hogyan bővítheti az adatokat a Cognitive Skills használatával, és hogyan írhat egy Azure Search-indexbe a SynapseML használatával.

search_service = "mmlspark-azure-search"
search_index = "test-33467690"

df = spark.createDataFrame(
    [
        (
            "upload",
            "0",
            "https://mmlspark.blob.core.windows.net/datasets/DSIR/test1.jpg",
        ),
        (
            "upload",
            "1",
            "https://mmlspark.blob.core.windows.net/datasets/DSIR/test2.jpg",
        ),
    ],
    ["searchAction", "id", "url"],
)

tdf = (
    AnalyzeImage()
    .setSubscriptionKey(service_key)
    .setLocation(service_loc)
    .setImageUrlCol("url")
    .setOutputCol("analyzed")
    .setErrorCol("errors")
    .setVisualFeatures(
        ["Categories", "Tags", "Description", "Faces", "ImageType", "Color", "Adult"]
    )
    .transform(df)
    .select("*", "analyzed.*")
    .drop("errors", "analyzed")
)

tdf.writeToAzureSearch(
    subscriptionKey=search_key,
    actionCol="searchAction",
    serviceName=search_service,
    indexName=search_index,
    keyCol="id",
)