Partager via


Azure AI services

Azure AI services aide les développeurs et les organisations à créer rapidement des applications intelligentes, de pointe, prêtes à être commercialisées et responsables avec des API et des modèles prêts à l’emploi, intégrés et personnalisables.

SynapseML vous permet de créer des modèles analytiques et prédictifs puissants et hautement scalables à partir de diverses sources de données Spark. Synapse Spark fournit des bibliothèques SynapseML intégrées, dont synapse.ml.services.

Important

À partir du 20 septembre 2023, vous ne pourrez plus créer de ressources Détecteur d’anomalies. Le service Détecteur d’anomalies sera mis hors service le 1er octobre 2026.

Prérequis pour Azure Synapse Analytics

Le tutoriel Prérequis de l’utilisation d’Azure AI services dans Azure Synapse vous guide tout au long de la procédure à suivre avant d’utiliser Azure AI services dans Synapse Analytics.

Azure AI services est une suite d’API, de kits SDK et de services que les développeurs peuvent utiliser pour ajouter des fonctionnalités intelligentes à leurs applications. AI Services offre des avantages aux développeurs, même s'ils n'ont pas de compétences ou de connaissances directes en IA ou en science des données. Azure AI services aide les développeurs à créer des applications qui peuvent voir, entendre, parler, comprendre et même commencer à raisonner. Le catalogue de services d'Azure AI Services peut être classé en cinq piliers principaux : Vision, Discours, Langage, Recherche Web et Décision.

Utilisation

Vision

Vision par ordinateur

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

Visage

  • 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

Speech Services

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

Langue

AI Language

  • 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

Traducteur

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

Document Intelligence

Document Intelligence

  • 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

Détecteur d’anomalies

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

Préparer votre système

Pour commencer, importez les bibliothèques requises et initialisez votre session Spark.

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

Importez les bibliothèques des services Azure AI et remplacez les clés et les emplacements dans l'extrait de code suivant par votre clé et votre emplacement des services 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.

Effectuer une analyse des sentiments sur le texte

Le service AI Language 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 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")
    )
)

Effectuer des analyses de texte pour les données de santé

Le service d'Analyse de texte pour le Service de contrôle d’intégrité extrait et étiquette les informations médicales pertinentes à partir de textes non structurés tels que les notes du médecin, les résumés de congé, les documents cliniques et les dossiers de santé électroniques.

L'exemple de code suivant analyse et transforme le texte des notes des médecins en données structurées.

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

Traduire un texte dans une autre langue

Translator est un service de traduction automatique basé sur le cloud. Il fait partie de la famille d’API IA Azure AI services, qui permet de créer des applications intelligentes. Il est facile d’intégrer Translator à vos applications, sites web, outils et solutions. Il vous permet d’ajouter des expériences utilisateur multilingues dans 90 langues et dialectes, et peut être utilisé pour traduire du texte sans héberger votre propre algorithme.

L'exemple de code suivant effectue une traduction de texte simple en fournissant les phrases que vous souhaitez traduire et les langues cibles dans lesquelles vous souhaitez les traduire.

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

Extraire les informations d'un document en données structurées

Azure AI Intelligence documentaire fait partie d’Azure Applied AI Services, qui vous permet de créer des logiciels de traitement de données automatisé à l’aide de la technologie Machine Learning (apprentissage automatique). Avec Azure AI Intelligence documentaire, vous pouvez identifier et extraire du texte, des paires de clé/valeur, des marques de sélection, des tableaux et une 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.

L'exemple de code suivant analyse une image de carte de visite et extrait 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

Azure AI Vision analyse les images pour identifier la structure telles que les visages et les objets ainsi que les descriptions en langage naturel.

L'exemple de code suivant analyse les images et les étiquette avec des balises. Les balises sont des descriptions en un mot des éléments de l'image, tels que des objets reconnaissables, des personnes, des paysages et des actions.

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

La Recherche d’images Bing explore le web pour récupérer des images associées à une demande en langage naturel d’un utilisateur.

L'exemple de code suivant utilise une requête de texte qui recherche des images avec des guillemets. La sortie du code est une liste d'URL d'images contenant des photos liées à la requête.

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

Transformer la reconnaissance vocale

Le service Reconnaissance vocale convertit des flux ou des fichiers de contenu audio en texte. L'exemple de code suivant transcrit un fichier audio en texte.

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

Transformer la synthèse vocale

La synthèse vocale est un service qui vous permet de créer des applications et des services qui parlent naturellement, en choisissant parmi plus de 270 voix neural dans 119 langues et variantes.

L'exemple de code suivant transforme le texte en un fichier audio qui contient le contenu du texte.

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

Détecter les anomalies dans les données de séries chronologiques

Si vous ne disposez pas d’une ressource de détection d’anomalie créée avant le 20 septembre 2023, vous ne pourrez pas en créer une. Vous pouvez ignorer cette partie.

Le Détecteur d’anomalies est idéal pour détecter les irrégularités dans vos données de séries chronologiques. L’exemple de code suivant utilise le service Détecteur d’anomalies pour rechercher des anomalies dans une 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")
)

Obtenir des informations à partir d'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")
    )
)

Exemple basé sur le service Recherche Azure AI

Dans cet exemple, nous montrons comment enrichir des données à l’aide de compétences cognitives et comment écrire dans un index de recherche Azure à l’aide de 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",
)