Cognitive Services

Azure Cognitive Services er en pakke med API-er, SDK-er og tjenester som er tilgjengelige for å hjelpe utviklere med å bygge intelligente programmer uten å ha direkte kunstig intelligens eller datavitenskapsferdigheter eller kunnskap ved å gjøre det mulig for utviklere å enkelt legge til kognitive funksjoner i programmene sine. Målet med Azure Cognitive Services er å hjelpe utviklere med å opprette programmer som kan se, høre, snakke, forstå og til og med begynne å resonnere. Katalogen over tjenester i Azure Cognitive Services kan kategoriseres i fem hovedpilarer – visjon, tale, språk, nettsøk og beslutning.

Bruk

Visuelt

Visuelt innhold

  • Beskriv: gir en beskrivelse av et bilde i lesbart språk (Scala, Python)
  • Analyser (farge, bildetype, ansikt, voksen/rasistisk innhold): analyserer visuelle funksjoner i et bilde (Scala, Python)
  • OCR: leser tekst fra et bilde (Scala, Python)
  • Gjenkjenne tekst: leser tekst fra et bilde (Scala, Python)
  • Miniatyrbilde: genererer et miniatyrbilde av brukerangitt størrelse fra bildet (Scala, Python)
  • Gjenkjenne domenesspesifikkt innhold: gjenkjenner domenespesifikkt innhold (kjendis, landemerke) (Scala, Python)
  • Merke: identifiserer en liste over ord som er relevante for inndatabildet (Scala, Python)

Ansikt

  • Oppdage: oppdager menneskelige ansikter i et bilde (Scala, Python)
  • Bekreft: bekrefter om to ansikter tilhører en samme person, eller et ansikt tilhører en person (Scala, Python)
  • Identifiser: finner de nærmeste samsvarene til den bestemte spørringspersonens ansikt fra en persongruppe (Scala, Python)
  • Finn lignende: finner lignende ansikter som spørringsansiktet i en ansiktsliste (Scala, Python)
  • Gruppe: deler en gruppe ansikter inn i usammenhengende grupper basert på likhet (Scala, Python)

Speech

Taletjenester

  • Tale-til-tekst: transkriberer lydstrømmer (Scala, Python)
  • Samtaleavskrift: transkriberer lydstrømmer til direkte transkripsjoner med identifiserte høyttalere. (Scala, Python)
  • Tekst til tale: Konverterer tekst til realistisk lyd (Scala, Python)

Språk

Tekstanalyse

  • Språkgjenkjenning: oppdager språk for inndatateksten (Scala, Python)
  • Uttrekking av nøkkeluttrykk: identifiserer de viktigste samtalepunktene i inndatateksten (Scala, Python)
  • Navngitt enhetsgjenkjenning: identifiserer kjente enheter og generelle navngitte enheter i inndatateksten (Scala, Python)
  • Sentimentanalyse: returnerer en poengsum mellom 0 og 1 som angir sentimentet i inndatateksten (Scala, Python)
  • Uttrekking av helseenheter: Trekker ut medisinske enheter og relasjoner fra tekst. (Scala, Python)

Oversettelse

Oversetter

  • Oversett: Oversetter tekst. (Scala, Python)
  • Translitterer: Konverterer tekst på ett språk fra ett skript til et annet skript. (Scala, Python)
  • Identifiser: Identifiserer språket for en tekstdel. (Scala, Python)
  • BreakSentence: Identifiserer plasseringen av setningsgrenser i et stykke tekst. (Scala, Python)
  • Ordlisteoppslag: Gir alternative oversettelser for et ord og et lite antall idiomatiske uttrykk. (Scala, Python)
  • Ordlisteeksempler: Inneholder eksempler som viser hvordan termer i ordlisten brukes i kontekst. (Scala, Python)
  • Dokumentoversettelse: Oversetter dokumenter på tvers av alle støttede språk og dialekter samtidig som dokumentstrukturen og dataformatet bevares. (Scala, Python)

Form Recognizer

Form Recognizer

  • Analyser oppsett: Trekk ut tekst- og oppsettinformasjon fra et gitt dokument. (Scala, Python)
  • Analyser kvitteringer: Oppdager og trekker ut data fra kvitteringer ved hjelp av optisk tegngjenkjenning (OCR) og kvitteringsmodellen vår, slik at du enkelt kan trekke ut strukturerte data fra kvitteringer som selgernavn, selgertelefonnummer, transaksjonsdato, transaksjonssum og mer. (Scala, Python)
  • Analyser visittkort: Oppdager og trekker ut data fra visittkort ved hjelp av optisk tegngjenkjenning (OCR) og visittkortmodellen vår, slik at du enkelt kan trekke ut strukturerte data fra visittkort, for eksempel kontaktnavn, firmanavn, telefonnumre, e-postmeldinger og mer. (Scala, Python)
  • Analyser fakturaer: Oppdager og trekker ut data fra fakturaer ved hjelp av optisk tegngjenkjenning (OCR) og fakturaen vår forstår dype læringsmodeller, slik at du enkelt kan trekke ut strukturerte data fra fakturaer som kunde, leverandør, faktura-ID, fakturaforfallsdato, total, forfalt fakturabeløp, avgiftsbeløp, forsendelse til, faktura til, linjeelementer og mer. (Scala, Python)
  • Analyser ID-dokumenter: Oppdager og trekker ut data fra identifikasjonsdokumenter ved hjelp av OCR (optical character recognition) og ID-dokumentmodellen vår, slik at du enkelt kan trekke ut strukturerte data fra ID-dokumenter som fornavn, etternavn, fødselsdato, dokumentnummer og mer. (Scala, Python)
  • Analyser egendefinert skjema: Trekker ut informasjon fra skjemaer (PDF-filer og bilder) til strukturerte data basert på en modell som er opprettet fra et sett med representative opplæringsskjemaer. (Scala, Python)
  • Hent egendefinert modell: Få detaljert informasjon om en egendefinert modell. (Scala, Python)
  • Liste over egendefinerte modeller: Få informasjon om alle egendefinerte modeller. (Scala, Python)

Beslutning

Avviksdetektor

  • Avviksstatus for siste punkt: genererer en modell ved hjelp av foregående punkter og bestemmer om det siste punktet er uregelmessig (Scala, Python)
  • Finn avvik: genererer en modell ved hjelp av en hel serie og finner avvik i serien (Scala, Python)

Forutsetninger

  • Legg ved notatblokken i et lakehouse. Velg Legg til på venstre side for å legge til et eksisterende lakehouse eller opprette et lakehouse.
  • Cognitive Services Key. Hvis du vil ha en Cognitive Services-nøkkel, følger du hurtigstarten.

Delt kode

For å komme i gang må vi legge til denne koden i prosjektet:

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

tekstanalyse eksempel

Tekstanalyse-tjenesten inneholder flere algoritmer for å trekke ut intelligent innsikt fra tekst. Vi kan for eksempel finne følelsen av gitt inndatatekst. Tjenesten returnerer en poengsum mellom 0,0 og 1,0 der lave poengsummer indikerer negativ sentiment og høy poengsum indikerer positiv sentiment. Dette eksemplet bruker tre enkle setninger og returnerer sentimentet for hver.

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

tekstanalyse for eksempel på tilstand

Den tekstanalyse for Health Service trekker ut og merker relevant medisinsk informasjon fra ustrukturerte tekster som legenotater, utslippssammendrag, kliniske dokumenter og elektroniske helsejournaler.

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

Eksempel på oversetter

Translator er en skybasert maskinoversettelsestjeneste og er en del av Azure Cognitive Services-familien av kognitive API-er som brukes til å bygge intelligente apper. Oversetter er enkelt å integrere i programmer, nettsteder, verktøy og løsninger. Den lar deg legge til flerspråklige brukeropplevelser på 90 språk og dialekter, og kan brukes til tekstoversettelse med hvilket som helst operativsystem. I dette eksemplet gjør vi en enkel tekstoversettelse ved å angi setningene du vil oversette og målrette språk du vil oversette til.

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 eksempel

Form Recognizer er en del av Azure Applied AI Services som lar deg bygge automatisert databehandlingsprogramvare ved hjelp av maskinlæringsteknologi. Identifiser og trekk ut tekst, nøkkel-/verdipar, markeringsmerker, tabeller og struktur fra dokumentene dine. Tjenesten sender strukturerte data som inkluderer relasjonene i den opprinnelige filen, grensebokser, konfidens og mer. I dette eksemplet analyserer vi et visittkortbilde og trekker ut informasjonen i strukturerte data.

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

visuelt innhold eksempel

visuelt innhold analyserer bilder for å identifisere struktur som ansikter, objekter og beskrivelser av naturlig språk. I dette eksemplet merker vi en liste over bilder. Koder er beskrivelser av ting på ett ord i bildet, for eksempel gjenkjennelige objekter, personer, landskap og handlinger.

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

Eksempel på Bing-bildesøk

Bing-bildesøk søker på nettet for å hente bilder relatert til en brukers spørring for naturlig språk. I dette eksemplet bruker vi en tekstspørring som ser etter bilder med anførselstegn. Den returnerer en liste over nettadresser for bilder som inneholder bilder relatert til spørringen.

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

Eksempel på tale til tekst

Speech-to-text-tjenesten konverterer strømmer eller filer med talt lyd til tekst. I dette eksemplet transkriberer vi én lydfil.

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

Eksempel på tekst-til-tale

Tekst til tale er en tjeneste som gjør det mulig å bygge apper og tjenester som snakker naturlig, ved å velge mellom mer enn 270 nevrale stemmer på tvers av 119 språk og varianter.

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

avviksdetektor eksempel

avviksdetektor er flott for å oppdage uregelmessigheter i tidsseriedataene. I dette eksemplet bruker vi tjenesten til å finne avvik i hele tidsserien.

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

Tilfeldige nett-API-er

Med HTTP på Spark kan alle nettjenester brukes i datasamlebåndet for store data. I dette eksemplet bruker vi World Bank API til å få informasjon om ulike land rundt om i verden.

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

Neste trinn