Cognitive Services
Azure Cognitive Services est une suite d’API, de kits SDK et de services disponibles pour aider les développeurs à créer des applications intelligentes sans avoir de compétences ou de connaissances directes en IA ou en science des données. Elle permet aussi aux développeurs d’ajouter facilement des fonctionnalités cognitives à leurs applications. L’objectif de l’équipe Azure Cognitive Services est d’aider les développeurs à créer des applications capables de voir, d’entendre, de parler, de comprendre et même de commencer à raisonner. Le catalogue des services disponibles au sein de la solution Azure Cognitive Services peut être classé en cinq grands piliers : Vision, Parole (Speech), Langage, Recherche et Décision.
Utilisation
Vision
- Décrire : fournit la description d’une image dans un langage lisible par l’homme (Scala, Python)
- Analyser (couleur, type d’image, visage, contenu pour adultes/osé) : analyse les fonctionnalités visuelles d’une image (Scala, Python)
- OCR : lit le texte d’une image (Scala, Python)
- Reconnaître le texte : lit le texte d’une image (Scala, Python)
- Miniature : génère une miniature de la taille spécifiée par l’utilisateur à partir de l’image (Scala, Python)
- Reconnaître le contenu spécifique à un domaine : reconnaît le contenu spécifique à un domaine (célébrité, point de repère) (Scala, Python)
- Balise : identifie la liste des mots pertinents pour l’image d’entrée (Scala, Python)
- Détecter : détecte les visages humains dans une image (Scala, Python)
- Vérifier : vérifie si deux visages appartiennent à une même personne ou si un visage appartient à une personne (Scala, Python)
- Identifier : trouve les correspondances les plus proches du visage d’une personne d’une requête spécifique dans un groupe de personnes (Scala, Python)
- Rechercher semblables : recherche des visages semblables au visage d’une requête dans une liste de visages (Scala, Python)
- Groupe : divise un groupe de visages en groupes disjoints en fonction de la similarité (Scala, Python)
Voix
- Reconnaissance vocale : transcrit des flux audio (Scala, Python)
- Transcription de conversation : transcrit les flux audio en transcriptions en direct avec des intervenants identifiés. (Scala, Python)
- Synthèse vocale : convertit le texte en audio réaliste (Scala, Python)
Langage
- Détection de langue : détecte la langue du texte d’entrée (Scala, Python)
- Extraction de phrases clés : identifie les points de discussion clés dans le texte d’entrée (Scala, Python)
- Reconnaissance d’entité nommée : identifie les entités connues et les entités nommées générales dans le texte d’entrée (Scala, Python)
- Analyse des sentiments : retourne un score compris entre 0 et 1 indiquant le sentiment dans le texte d’entrée (Scala, Python)
- Extraction d’entités médicales : extrait les entités et les relations médicales du texte. (Scala, Python)
Traduction
- Traduire : traduit un texte. (Scala, Python)
- Transliterate : convertit du texte dans une langue d’un script vers un autre script. (Scala, Python)
- Détecter : identifie la langue d’un texte. (Scala, Python)
- BreakSentence : identifie le positionnement des limites de phrases dans du texte. (Scala, Python)
- Recherche dans le dictionnaire : indique les autres traductions d’un mot et quelques expressions idiomatiques. (Scala, Python)
- Exemples de dictionnaire : fournit des exemples qui illustrent l’utilisation en contexte des termes du dictionnaire. (Scala, Python)
- Document Translation : traduit les documents dans la totalité des langues et dialectes pris en charge tout en préservant la structure des documents et le format des données. (Scala, Python)
Form Recognizer
- Analyser la disposition : extraire des informations de texte et de disposition d’un document donné. (Scala, Python)
- Analyser les reçus : détecte et extrait des données à partir de reçus à l’aide de la reconnaissance optique de caractères (OCR) et de notre modèle de réception, ce qui vous permet d’extraire facilement des données structurées à partir de reçus, telles que le nom du commerçant, le numéro de téléphone du commerçant, la date de transaction, le total de la transaction, etc. (Scala, Python)
- Analyse des cartes de visite : détecte et extrait des données à partir de cartes de visite à l’aide de la reconnaissance optique de caractères (OCR) et notre modèle de carte de visite, ce qui vous permet d’extraire facilement des données structurées à partir de cartes de visite, telles que des noms de contacts, des noms d’entreprise, des numéros de téléphone, des adresses e-mail, etc. (Scala, Python)
- Analyser les factures : détecte et extrait des données à partir de factures à l’aide de la reconnaissance optique de caractères (OCR) et de nos modèles de Deep Learning comprenant des factures, ce qui vous permet d’extraire facilement des données structurées à partir de factures, telles que le client, le fournisseur, l’ID de facture, la date d’échéance de la facture, le total, le montant dû, le montant des taxes, l’adresse de facturation, les éléments de ligne, etc. (Scala, Python)
- Analyser les documents d’identité : détecte et extrait des données à partir de documents d’identification à l’aide de la reconnaissance optique de caractères (OCR) et de notre modèle de document d’identité, ce qui vous permet d’extraire facilement des données structurées à partir de documents d’identité, telles que le prénom, le nom, la date de naissance, le numéro de document, etc. (Scala, Python)
- Analyser un formulaire personnalisé : extrait des informations de formulaires (PDF et images) en données structurées basées sur un modèle créé à partir d’un ensemble de formulaires d’apprentissage représentatifs. (Scala, Python)
- Get Custom Model : obtenir des informations détaillées sur un modèle personnalisé. (Scala, Python)
- Liste de modèles personnalisés : obtenez des informations sur tous les modèles personnalisés. (Scala, Python)
Décision
- État d’anomalie du point le plus récent : génère un modèle à l’aide des points précédents et détermine si le point le plus récent est anormal (Scala, Python)
- Rechercher des anomalies : génère un modèle à l’aide d’une série entière et recherche des anomalies dans la série (Scala, Python)
Rechercher
Prérequis
- Attachez votre bloc-notes à un lakehouse. Sur le côté gauche, sélectionnez Ajouter pour ajouter un lakehouse existant ou créer un lakehouse.
- Clé Cognitive Services. Pour obtenir une clé Cognitive Services, suivez le guide de démarrage rapide.
Code partagé
Pour commencer, nous devons ajouter ce code au projet :
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
Exemple d’Analyse de texte
Le service Analyse de texte fournit plusieurs algorithmes permettant d’extraire des insights intelligents à partir d’un texte. Par exemple, nous pouvons trouver le sentiment d’un texte d’entrée donné. Le service retourne un score compris entre 0.0 et 1.0, où un score faible indique un sentiment négatif et où un score élevé indique un sentiment positif. Cet exemple utilise trois phrases simples et retourne le sentiment pour chacune d’elles.
# 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")
)
)
Analyse de texte pour l’échantillon d’intégrité
Le service Analyse de texte pour la santé extrait et étiquette les informations médicales pertinentes à partir de textes non structurés, tels que les notes du médecin, les bilans de sortie d’hospitalisation, les documents cliniques et les dossiers médicaux électroniques.
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))
Échantillon de Translator
Translator est un service de traduction automatique basé sur le cloud qui fait partie de la famille Azure Cognitive Services des API cognitives utilisées pour créer des applications intelligentes. Il est facile d’intégrer Translator à vos applications, sites web, outils et solutions. Cette interface vous permet d’ajouter des expériences utilisateur multilingues dans plus de 90 langues et dialectes. Elle peut être utilisée pour la traduction de texte avec n’importe quel système d’exploitation. Dans cet exemple, nous effectuons une traduction de texte simple en fournissant les phrases que vous souhaitez traduire et les langues cibles vers lesquelles vous souhaitez effectuer la traduction.
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")
)
Échantillon Form Recognizer
Form Recognizer fait partie d’Azure Applied AI Services qui vous permet de créer des logiciels de traitement de données automatisé à l’aide des technologies du Machine Learning. Identifier et extraire le texte, les paires clé/valeur, les marques de sélection, les tables et la structure de vos documents. Le service génère des données structurées qui incluent les relations dans le fichier d’origine, les cadres englobants, la confiance, etc. Dans cet exemple, nous analysons une image de carte de visite et extrayons ses informations dans des données structurées.
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")
)
API Vision par ordinateur
Le service Vision par ordinateur analyse des images pour identifier une structure comme des visages, des objets et des descriptions en langage naturel. Dans cet exemple, nous ajoutons des étiquettes à une liste d’images. Les étiquettes sont des descriptions en un mot des choses figurant sur l’image, comme des objets, des personnes, un paysage et des actions reconnaissables.
# 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"))
Exemple de Recherche d’images Bing
La Recherche d’images Bing explore le web pour récupérer des images associées à une demande en langage naturel d’un utilisateur. Dans cet exemple, nous utilisons une demande texte qui recherche des images avec des guillemets. Elle retourne une liste d’URL d’images qui contiennent des photos liées à notre demande.
# 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))
Exemple de Reconnaissance vocale
Le service Reconnaissance vocale convertit des flux ou des fichiers de contenu audio en texte. Dans cet exemple, nous transcrivons un fichier audio.
# 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"))
Échantillon de synthèse vocale
Synthèse vocale est un service qui permet de créer des applications et des services qui parlent naturellement, en choisissant parmi plus de 270 voix neuronales dans 119 langues et variantes.
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))
Exemple de Détecteur d’anomalies
Le Détecteur d’anomalies est idéal pour détecter les irrégularités dans vos données de séries chronologiques. Dans cet exemple, nous utilisons le service pour rechercher des anomalies dans l’ensemble de la série chronologique.
# 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")
)
API web arbitraires
Avec HTTP sur Spark, tout service web peut être utilisé dans votre pipeline de Big Data. Dans cet exemple, nous utilisons l’API Banque mondiale pour obtenir des informations sur différents pays du monde entier.
# 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")
)
)