Cognitive Services

Azure Cognitive Services jsou sada rozhraní API, sad SDK a služeb, které vývojářům pomáhají vytvářet inteligentní aplikace bez přímých dovedností a znalostí umělé inteligence nebo datových věd. Vývojáři tak mohou do svých aplikací snadno přidávat kognitivní funkce. Cílem služeb Azure Cognitive Services je pomoct vývojářům vytvářet aplikace, které můžou vidět, slyšet, mluvit, rozumět a dokonce začít logicky myslet. Katalog služeb Azure Cognitive Services je možné rozdělit do kategorií podle pěti hlavních pilířů – zpracování obrazu, zpracování řeči, zpracování jazyka, vyhledávání na webu a rozhodování.

Využití

Obraz

Počítačové zpracování obrazu

  • Popis: poskytuje popis obrázku v čitelném jazyce (Scala, Python).
  • Analýza (barva, typ obrázku, obličej, obsah pro dospělé/nevhodný obsah): Analyzuje vizuální rysy 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, landmark) (Scala, Python)
  • Značka: Identifikuje seznam slov, která jsou relevantní pro vstupní obrázek (Scala, Python).

Rozpoznávání tváře

  • Detekce: detekuje lidské tváře na obrázku (Scala, Python)
  • Ověření: ověří, jestli dvě tváře patří stejné osobě nebo jestli tvář patří určité osobě (Scala, Python).
  • Identifikace: Najde nejbližší shody konkrétní osoby s dotazem ze skupiny osob (Scala, Python).
  • Najít podobné: najde podobné tváře jako tvář dotazu v seznamu tváří (Scala, Python).
  • Skupina: Rozdělí skupinu tváří do oddělených skupin na základě podobnosti (Scala, Python).

Řeč

Služby Speech

  • Převod řeči na text: Přepis zvukových streamů (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

Analýza textu

  • Rozpoznávání jazyka: Rozpozná jazyk vstupního textu (Scala, Python)
  • Extrakce klíčových frází: Identifikuje klíčové body 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 z textu lékařské entity a vztahy. (Scala, Python)

Překlad

Translator

  • Přeložit: Přeloží text. (Scala, Python)
  • Transkripce: Převede text v jednom jazyce z jednoho skriptu do jiného. (Scala, Python)
  • Rozpoznat: Identifikuje jazyk části textu. (Scala, Python)
  • BreakSentence: Určuje umístění hranic vět v části textu. (Scala, Python)
  • Vyhledávání slovníku: Poskytuje alternativní překlady pro slovo a malý počet idiomatický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 při zachování struktury dokumentu a formátu dat. (Scala, Python)

Rozpoznávání formulářů

Rozpoznávání formulářů

  • Analyzovat rozložení: Extrahuje 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ž vám umožní snadno extrahovat strukturovaná data z účtenek, jako je jméno obchodníka, telefonní číslo obchodníka, datum transakce, celková částka transakce 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ž vám umožní 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: Detekuje a extrahuje data z faktur pomocí optického rozpoznávání znaků (OCR) a našich modelů hlubokého učení pro faktury, což vám umožní snadno extrahovat strukturovaná data z faktur, jako jsou zákazník, dodavatel, ID faktury, datum splatnosti faktury, celková částka faktury, částka splatné faktury, částka daně, příjemce, faktura do, řádkové položky a další. (Scala, Python)
  • Analýza dokumentů 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ž vám umožní 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ázky) do strukturovaných dat na základě modelu vytvořeného ze sady reprezentativních trénovacích formulářů. (Scala, Python)
  • Získání vlastního modelu: 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í

Detektor anomálií

  • Stav anomálie posledního bodu: Vygeneruje model pomocí předchozích bodů a určí, jestli je nejnovější bod neobvyklý (Scala, Python).
  • Hledání anomálií: Vygeneruje model pomocí celé řady a vyhledá anomálie v řadě (Scala, Python).

Požadavky

  • Připojte poznámkový blok k Lakehouse. Na levé straně vyberte Přidat a přidejte existující lakehouse nebo vytvořte lakehouse.
  • Klíč služeb Cognitive Services. Pokud chcete získat klíč služeb Cognitive Services, postupujte podle pokynů v rychlém startu.

Sdílený kód

Abychom mohli začít, budeme muset do projektu přidat tento kód:

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

ukázka Analýza textu

Služba Analýza textu poskytuje několik algoritmů pro extrakci inteligentních přehledů z textu. Můžeme například zjistit mínění dané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 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 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")
    )
)

Analýza textu pro ukázku stavu

Analýza textu pro službu Health Service extrahuje a označuje relevantní lékařské informace z nestrukturovaných textů, jako jsou poznámky lékaře, přehledy o propuštění, klinické dokumenty a elektronické zdravotní záznamy.

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

Ukázka služby Translator

Translator je cloudová služba strojového překladu, která je součástí řady kognitivních rozhraní API azure Cognitive Services, která slouží 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 v libovolném operačním systému. V této ukázce provedeme jednoduchý překlad textu tím, že poskytneme věty, které chcete přeložit, a cílové jazyky, do které 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")
)

ukázka Rozpoznávání formulářů

Rozpoznávání formulářů je součástí služeb Azure Applied AI Services, které umožňují vytvářet software pro automatizované zpracování dat pomocí technologie strojového učení. Identifikujte a extrahujte 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ší. V této ukázce analyzujeme obrázek vizitky a extrahujeme 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

Počítačové zpracování obrazu analyzuje obrázky a identifikuje strukturu, jako jsou tváře, objekty a popisy v přirozeném jazyce. V této ukázce označíme seznam obrázků. Značky jsou jednoslovné popisy věcí na obrázku, jako jsou rozpoznatelné objekty, lidé, krajina 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"))

Ukázka vyhledávání obrázků Bingu

Vyhledávání obrázků Bingem prohledává web a načítá obrázky související s dotazem uživatele v přirozeném jazyce. V této ukázce použijeme textový dotaz, který hledá obrázky s uvozovkami. Vrátí seznam adres URL obrázků, které obsahují fotky související s naším 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))

Ukázka převodu řeči na text

Služba Převod řeči na text převádí streamy nebo soubory mluveného zvuku na text. V této ukázce přepíšeme jeden zvukový soubor.

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

Ukázka převodu textu na řeč

Převod textu na řeč je služba, která umožňuje vytvářet aplikace a služby, které mluví přirozeně, a vybrat si z více než 270 neurálních hlasů ve 119 jazycích a variantách.

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

ukázka Detektor anomálií

Detektor anomálií se skvěle hodí k detekci nesrovnalostí v datech časových řad. V této ukázce použijeme službu k vyhledání anomálií v celé č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
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")
)

Libovolná webová rozhraní API

S HTTP ve Sparku je možné v kanálu pro velké objemy dat použít libovolnou webovou službu. V tomto příkladu používáme rozhraní API Světové banky k získání informací o různých zemích 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 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")
    )
)

Další kroky