Cognitive Services
Az Azure Cognitive Services olyan API-k, SDK-k és -szolgáltatások csomagja, amelyek segítenek a fejlesztőknek intelligens alkalmazások létrehozásában anélkül, hogy közvetlen AI- vagy adatelemzési készségekkel vagy ismeretekkel rendelkeznek, lehetővé téve a fejlesztők számára, hogy könnyen hozzáadjanak kognitív funkciókat az alkalmazásaikhoz. Az Azure Cognitive Services célja, hogy a segítségével a fejlesztők olyan alkalmazásokat hozhassanak létre, amelyek látnak, hallanak, beszélnek, értenek, és még érvelni is kezdenek. Az Azure Cognitive Services szolgáltatáskatalógusa öt alappilléréből tevődik össze: Látás, Beszéd, Nyelv, Webes keresés és Döntés.
Használat
Látás
- Leírás: egy kép leírását adja meg az emberi olvasási nyelven (Scala, Python)
- Elemzés (szín, képtípus, arc, felnőtt/kényes 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öveget olvas be egy 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: a bemeneti kép szempontjából releváns szavak listáját azonosítja (Scala, Python)
- É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)
Speech
Beszédfelismerési szolgáltatások
- 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: Valósághű hanggá alakítja a szöveget (Scala, Python)
Nyelv
- Nyelvfelismerés: észleli a bemeneti szöveg nyelvét (Scala, Python)
- Kulcskifejezések kinyerése: azonosítja a bemeneti szövegben lévő fő beszédpontokat (Scala, Python)
- Nevesített entitásfelismerés: azonosítja az ismert entitásokat és az általános 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 kapcsolatokat a szövegből. (Scala, Python)
Fordítás
- 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: Egy szöveg nyelvét azonosítja. (Scala, Python)
- BreakSentence: Egy szövegrész mondathatárainak elhelyezkedését azonosítja. (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 dialektusra, miközben megőrzi a dokumentumszerkezetet és az adatformátumot. (Scala, Python)
Form Recognizer
- Elrendezés elemzése: Szöveges és elrendezési információk kinyerve egy adott dokumentumból. (Scala, Python)
- Visszaigazolások elemzése: Optikai karakterfelismeréssel (OCR) és a visszaigazolási modellünkkel észleli és kinyeri az adatokat a nyugtákból, így könnyen kinyerheti a strukturált adatokat a nyugtákból, például a kereskedő nevét, a kereskedő telefonszámát, a tranzakció dátumát, a tranzakció végösszegét 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 kinyeri az adatokat a számlákból, és a számla mélytanulási modelljeit használva lehetővé teszi strukturált adatok kinyerését olyan számlákból, mint az ügyfél, a szállító, a számlaazonosító, a számla esedékes dátuma, végösszeg, esedékes számla összege, adóösszeg, szállítási, számlázási és sorelemek. (Scala, Python)
- Azonosító dokumentumok elemzése: Optikai karakterfelismeréssel (OCR) és azonosítódokumentum-modellünkkel észleli és kinyeri az adatokat az azonosító dokumentumokból, így könnyen kinyerhet 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-ekből és képekből) strukturált adatokba 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
- 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 modellt generál egy teljes sorozat használatával, és megkeresi a sorozat rendellenességeit (Scala, Python)
Keresés
Előfeltételek
- Csatolja a jegyzetfüzetet egy tóházhoz. A bal oldalon válassza a Hozzáadás lehetőséget egy meglévő tóház hozzáadásához vagy egy tóház létrehozásához.
- Cognitive Services-kulcs. A Cognitive Services-kulcs beszerzéséhez kövesse a rövid útmutatót.
Megosztott kód
Az első lépésekhez hozzá kell adnunk ezt a kódot a projekthez:
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()
from synapse.ml.cognitive import *
# A general Cognitive Services key for Text Analytics, Computer Vision and Form Recognizer (or use separate keys that belong to each service)
service_key = find_secret("cognitive-api-key") # Replace it with your cognitive service key, check prerequisites for more details
service_loc = "eastus"
# A Bing Search v7 subscription key
bing_search_key = find_secret("bing-search-key") # Replace it with your cognitive service key, check prerequisites for more details
# An Anomaly Detector subscription key
anomaly_key = find_secret("anomaly-api-key") # Replace it with your cognitive service key, check prerequisites for more details
anomaly_loc = "westus2"
# A Translator subscription key
translator_key = find_secret("translator-key") # Replace it with your cognitive service key, check prerequisites for more details
translator_loc = "eastus"
# An Azure search key
search_key = find_secret("azure-search-key") # Replace it with your cognitive service key, check prerequisites for more details
Text Analytics minta
A Text Analytics szolgáltatás számos algoritmust biztosít az intelligens megállapítások szövegből való kinyeréhez. Megtalálhatjuk például a megadott beviteli szöveg hangulatát. A szolgáltatás 0,0 és 1,0 közötti pontszámot ad vissza, ahol az alacsony pontszám negatív hangulatot, a magas pontszám pedig pozitív hangulatot jelez. 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 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")
)
)
Text Analytics állapotmintához
Az egészségügyi szolgáltatás Text Analytics strukturálatlan szövegekből, például orvosi feljegyzésekből, mentesítési összefoglalókból, klinikai dokumentumokból és elektronikus egészségügyi nyilvántartásokból nyeri ki és címkézi fel a releváns orvosi információkat.
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))
Translator-minta
A Translator egy felhőalapú gépi fordítási szolgáltatás, amely az intelligens alkalmazások létrehozásához használt Kognitív API-k Azure Cognitive Services-családjának része. A Translator könnyen integrálható az alkalmazásokba, webhelyekbe, eszközökbe és megoldásokba. Lehetővé teszi, hogy több nyelvű felhasználói élményt adjon hozzá 90 nyelven és dialektusban, és bármilyen operációs rendszerrel használható szövegfordításhoz. Ebben a példában egyszerű szövegfordítást hajtunk végre a lefordítani kívánt mondatok megadásával és a lefordítani kívánt nyelvek célnyelveinek megadásával.
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")
)
Form Recognizer minta
Form Recognizer az Azure Applied AI Services része, amely lehetővé teszi automatizált adatfeldolgozási szoftverek létrehozását gépi tanulási technológiával. A dokumentumokból azonosíthatja és kinyerheti a szöveget, a kulcs-/értékpárokat, a kijelölési jeleket, a táblázatokat é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. Ebben a mintában egy névjegykártya-rendszerképet elemezünk, és strukturált adatokba nyerjük 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
Computer Vision képeket elemez az olyan szerkezetek azonosításához, mint az arcok, az objektumok és a természetes nyelvű leírások. Ebben a példában a rendszerképek listáját címkézzük meg. A címkék egyszavas leírást tartalmaznak a képen lévő dolgokról, például felismerhető objektumokról, személyekről, tájakról és műveletekről.
# 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-minta
A Bing Image Search az interneten keres a felhasználó természetes nyelvi lekérdezéséhez kapcsolódó képek lekéréséhez. Ebben a példában egy szöveges lekérdezést használunk, amely idézőjeleket tartalmazó képeket keres. Visszaadja a lekérdezéshez kapcsolódó fényképeket tartalmazó kép URL-címeinek listáját.
# 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))
Szövegfelolvasási minta
A Speech-to-text szolgáltatás szöveggé alakítja a beszélt hang streameit vagy fájljait. Ebben a mintában egy hangfájlt írunk át.
# 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övegfelolvasási minta
A szövegfelolvasás egy olyan szolgáltatás, amely lehetővé teszi, hogy olyan alkalmazásokat és szolgáltatásokat hozzon létre, amelyek természetes módon beszélnek, és több mint 270 neurális hang közül választhatnak 119 nyelven és változatban.
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))
anomáliadetektor minta
anomáliadetektor kiválóan alkalmas az idősoradatokban előforduló szabálytalanságok észlelésére. Ebben a példában a szolgáltatással a teljes idősor rendellenességeit keressük.
# 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")
)
Tetszőleges webes API-k
A Sparkon futó HTTP-vel bármely webszolgáltatás használható a big data-folyamatban. Ebben a példában a Világbank API-t használjuk a világ különböző országaival kapcsolatos információk lekérésére.
# 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")
)
)