Služby Azure AI
Služby Azure AI pomáhají vývojářům a organizacím rychle vytvářet inteligentní, nejmodernější, připravené a zodpovědné aplikace s předem připravenými a předem připravenými a přizpůsobitelnými rozhraními API a modely.
SynapseML umožňuje vytvářet výkonné a vysoce škálovatelné prediktivní a analytické modely z různých zdrojů dat Sparku. Synapse Spark poskytuje integrované knihovny SynapseML včetně synapse.ml.services.
Důležité
Od 20. září 2023 nebudete moct vytvářet nové Detektor anomálií prostředky. Služba Detektor anomálií se 1. října 2026 vyřadí z provozu.
Požadavky ve službě Azure Synapse Analytics
Tento kurz, předpoklady pro používání služeb Azure AI v Azure Synapse, vás provede několika kroky, které je potřeba provést před použitím služeb Azure AI ve službě Synapse Analytics.
Služby Azure AI jsou sadou rozhraní API, sad SDK a služeb, které můžou vývojáři použít k přidání inteligentních funkcí do svých aplikací. Služby AI umožňují vývojářům i v případě, že nemají přímé dovednosti nebo znalosti umělé inteligence nebo datové vědy. Služby Azure AI pomáhají vývojářům vytvářet aplikace, které můžou vidět, slyšet, mluvit, rozumět a dokonce začít zdůvodnit. Katalog služeb v rámci služeb Azure AI je možné zařadit do pěti hlavních pilířů: Vision, Speech, Language, Web Search a Decision.
Využití
Pohled
- Popis: poskytuje popis obrázku v jazyce čitelném pro člověka (Scala, Python)
- Analýza (barva, typ obrázku, tvář, obsah pro dospělé araci): analyzuje vizuální funkce obrázku (Scala, Python).
- OCR: čte text z obrázku (Scala, Python)
- Rozpoznávání textu: čte text z obrázku (Scala, Python)
- Miniatura: vygeneruje z obrázku miniaturu uživatelem zadané velikosti (Scala, Python).
- Rozpoznávání obsahu specifického pro doménu: rozpozná obsah specifický pro doménu (celebrity, orientační bod) (Scala, Python)
- Značka: identifikuje seznam slov, která jsou relevantní pro vstupní obrázek (Scala, Python).
- Detekce: detekuje lidské tváře na obrázku (Scala, Python)
- Ověření: Ověřuje, jestli dvě tváře patří stejné osobě nebo tvář patří osobě (Scala, Python).
- Identifikace: Najde nejbližší shody konkrétní osoby dotazu ze skupiny osob (Scala, Python).
- Najít podobné: najde podobné tváře jako dotaz v seznamu tváří (Scala, Python).
- Skupina: Rozdělí skupinu tváří do oddělených skupin na základě podobnosti (Scala, Python).
Řeč
- Převod řeči na text: přepisuje zvukové streamy (Scala, Python)
- Přepis konverzace: přepisuje zvukové streamy do živých přepisů s identifikovanými mluvčími. (Scala, Python)
- Převod textu na řeč: Převede text na realistický zvuk (Scala, Python)
Jazyk
- Rozpoznávání jazyka: rozpozná jazyk vstupního textu (Scala, Python)
- Extrakce klíčových frází: identifikuje klíčové body mluvení ve vstupním textu (Scala, Python)
- Rozpoznávání pojmenovaných entit: identifikuje známé entity a obecné pojmenované entity ve vstupním textu (Scala, Python)
- Analýza mínění: Vrátí skóre mezi 0 a 1 označující mínění ve vstupním textu (Scala, Python).
- Extrakce zdravotnických entit: Extrahuje zdravotnické entity a vztahy z textu. (Scala, Python)
Překlad
- Překlad: Přeloží text. (Scala, Python)
- Transkripce: Převede text v jednom jazyce z jednoho skriptu na jiný. (Scala, Python)
- Zjistit: Identifikuje jazyk části textu. (Scala, Python)
- BreakSentence: Identifikuje umístění hranic vět v části textu. (Scala, Python)
- Slovníkové vyhledávání: Poskytuje alternativní překlady slova a malý počet idiomaticických frází. (Scala, Python)
- Příklady slovníku: Poskytuje příklady, které ukazují, jak se termíny ve slovníku používají v kontextu. (Scala, Python)
- Překlad dokumentů: Překládá dokumenty napříč všemi podporovanými jazyky a dialekty a zachovává strukturu dokumentů a formát dat. (Scala, Python)
Analýza dokumentů
- Analyzovat rozložení: Extrahujte text a informace o rozložení z daného dokumentu. (Scala, Python)
- Analýza účtenek: Detekuje a extrahuje data z účtenek pomocí optického rozpoznávání znaků (OCR) a našeho modelu účtenek, což umožňuje snadno extrahovat strukturovaná data z účtenek, jako je název obchodníka, telefonní číslo obchodníka, datum transakce, celkový počet transakcí a další. (Scala, Python)
- Analýza vizitek: Detekuje a extrahuje data z vizitek pomocí optického rozpoznávání znaků (OCR) a našeho modelu vizitek, což umožňuje snadno extrahovat strukturovaná data z vizitek, jako jsou jména kontaktů, názvy společností, telefonní čísla, e-maily a další. (Scala, Python)
- Analýza faktur: Zjišťuje a extrahuje data z faktur pomocí optického rozpoznávání znaků (OCR) a našich modelů hlubokého učení, které umožňují snadno extrahovat strukturovaná data z faktur, jako je zákazník, dodavatel, ID faktury, termín splatnosti faktury, celková částka faktury, částka daně, expedice, faktura, faktura, řádkové položky a další. (Scala, Python)
- Analyzovat dokumenty ID: Detekuje a extrahuje data z identifikačních dokumentů pomocí optického rozpoznávání znaků (OCR) a našeho modelu dokumentů ID, což umožňuje snadno extrahovat strukturovaná data z dokumentů ID, jako je jméno, příjmení, datum narození, číslo dokumentu a další. (Scala, Python)
- Analýza vlastního formuláře: Extrahuje informace z formulářů (PDF a obrázků) do strukturovaných dat na základě modelu vytvořeného ze sady reprezentativních trénovacích formulářů. (Scala, Python)
- Získat vlastní model: Získejte podrobné informace o vlastním modelu. (Scala, Python)
- Výpis vlastních modelů: Získejte informace o všech vlastních modelech. (Scala, Python)
Rozhodnutí
- Stav anomálií nejnovějšího bodu: vygeneruje model pomocí předchozích bodů a určuje, jestli je nejnovější bod neobvyklý (Scala, Python)
- Vyhledání anomálií: Vygeneruje model pomocí celé řady a vyhledá anomálie v řadě (Scala, Python).
Hledání
- Vyhledávání obrázků Bingu (Scala, Python)
- Azure Cognitive Search (Scala, Python)
Příprava systému
Začněte importem požadovaných knihoven a inicializací relace Sparku.
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
Importujte knihovny služeb Azure AI a nahraďte klíče a umístění v následujícím fragmentu kódu klíčem a umístěním služeb Azure AI.
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.
Analýza mínění u textu
Služba AI Language poskytuje několik algoritmů pro extrakci inteligentních přehledů z textu. Můžeme například najít mínění zadaného vstupního textu. Služba vrátí skóre mezi 0,0 a 1,0, kde nízké skóre značí negativní mínění a vysoké skóre indikuje pozitivní mínění. Tato ukázka používá tři jednoduché věty a vrací mínění pro každou z nich.
# 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")
)
)
Analýza textu pro data o stavu
Analýza textu pro službu Health Service extrahuje a označí relevantní lékařské informace z nestrukturovaného textu, jako jsou poznámky lékaře, souhrny propuštění, klinické dokumenty a elektronické zdravotní záznamy.
Následující ukázka kódu analyzuje a transformuje text od lékařů do strukturovaných dat.
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))
Přeložení textu do jiného jazyka
Translator je cloudová služba strojového překladu a je součástí řady služeb Azure AI rozhraní API používaných k vytváření inteligentních aplikací. Translator se snadno integruje do vašich aplikací, webů, nástrojů a řešení. Umožňuje přidat vícejazyčná uživatelská prostředí v 90 jazycích a dialektech a dá se použít k překladu textu bez hostování vlastního algoritmu.
Následující ukázka kódu provede jednoduchý překlad textu tím, že poskytne věty, na které chcete přeložit a cílové jazyky, na které je chcete přeložit.
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")
)
Extrahování informací z dokumentu do strukturovaných dat
Azure AI Document Intelligence je součástí Aplikace Azure lied AI Services, která umožňuje vytvářet automatizovaný software pro zpracování dat pomocí technologie strojového učení. Díky funkci Document Intelligence v Azure AI můžete identifikovat a extrahovat text, páry klíč/hodnota, značky výběru, tabulky a strukturu z dokumentů. Služba vypíše strukturovaná data, která zahrnují relace v původním souboru, ohraničující rámečky, spolehlivost a další.
Následující ukázka kódu analyzuje obrázek vizitky a extrahuje jeho informace do strukturovaných dat.
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")
)
ukázka Počítačové zpracování obrazu
Azure AI Vision analyzuje obrázky za účelem identifikace struktury, jako jsou tváře, objekty a popisy přirozeného jazyka.
Následující ukázka kódu analyzuje obrázky a označí je značkami. Značky jsou jednoslovné popisy věcí na obrázku, jako jsou rozpoznatelné objekty, lidé, scenérie a akce.
# 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"))
Hledání obrázků souvisejících s dotazem v přirozeném jazyce
Vyhledávání obrázků Bingu prohledá na webu a načte obrázky související s dotazem přirozeného jazyka uživatele.
Následující ukázka kódu používá textový dotaz, který hledá obrázky s uvozovkami. Výstupem kódu je seznam adres URL obrázků, které obsahují fotky související s dotazem.
# 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))
Transformace řeči na text
Služba Převod řeči na text převádí streamy nebo soubory mluveného zvuku na text. Následující ukázka kódu přepisuje jeden zvukový soubor na text.
# 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"))
Transformace textu na řeč
Převod textu na řeč je služba, která umožňuje vytvářet aplikace a služby, které přirozeně mluví, a vybírat si z více než 270 neurálních hlasů ve 119 jazycích a variantách.
Následující ukázka kódu transformuje text na zvukový soubor, který obsahuje obsah textu.
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))
Detekce anomálií v datech časových řad
Pokud nemáte prostředek detekce anomálií vytvořený před 20. 20. 2023, nebudete ho moct vytvořit. Tuto část možná budete chtít přeskočit.
Detektor anomálií je skvělá pro detekci nesrovnalostí v datech časových řad. Následující ukázka kódu používá službu Detektor anomálií k vyhledání anomálií v časové řadě.
# 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
anomaly_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(
anomaly_detector.transform(df).select("timestamp", "value", "anomalies.isAnomaly")
)
Získání informací z libovolných webových rozhraní API
S PROTOKOLem HTTP ve Sparku je možné použít jakoukoli webovou službu ve vašem kanálu pro velké objemy dat. V tomto příkladu používáme rozhraní API světové banky k získání informací o různých zemích/oblastech po celém světě.
# 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/regions 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/region data returned
display(
client.transform(df).select(
"country", udf(get_response_body)(col("response")).alias("response")
)
)
Ukázka vyhledávání Azure AI
V tomto příkladu si ukážeme, jak můžete obohatit data pomocí kognitivních dovedností a zapisovat do indexu Azure Search pomocí SynapseML.
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",
)