Partager via


Services d'IA Azure

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, pré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

Depuis le 20 septembre 2023, vous ne pouvez 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 pour utiliser 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 dans leurs applications. AI services permet d’autonomiser les 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, Parole, Langage, Recherche web et Décision.

Usage

Vision

Vision par ordinateur

  • Décrire : fournit la description d’une image dans un langage que peut lire un être humain (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)
  • Étiqueter : identifie la liste des mots appropriés à 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)
  • Regrouper : divise un groupe de visages en groupes disjoints en fonction de la ressemblance (Scala, Python)

Parole

Speech Services

  • Reconnaissance vocale : transcrit des flux audio (Scala, Python)
  • Transcription de conversation : transcrit des flux audio en transcriptions en direct avec identification des orateurs. (Scala, Python)
  • Synthèse vocale : convertit du texte en contenu audio réaliste (Scala, Python)

Langage

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 des entités médicales : extrait les entités et les relations médicales du texte. (Scala, Python)

Traduction

Traducteur

  • Traduire : traduit du texte. (Scala, Python)
  • Transcrire : 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)
  • Segmenter les phrases : identifie le début et la fin des phrases dans un texte. (Scala, Python)
  • Recherche dans le dictionnaire : indique des traductions alternatives 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)
  • Traduction de documentation : traduit des documents dans l’ensemble des langues et dialectes pris en charge tout en préservant la structure et le format des données des documents. (Scala, Python)

Intelligence des documents

Document Intelligence

  • Analyser la disposition : extrait le texte et les informations 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 reçu, ce qui vous permet d’extraire facilement les données structurées 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 les données structurées de cartes de visite, telles que les noms de contacts, les noms d’entreprise, les numéros de téléphone, les 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 Deep Learning de compréhension des factures, ce qui vous permet d’extraire facilement les données structurées de factures, telles que le client, le fournisseur, le numéro de facture, la date d’échéance de la facture, le total, le montant dû, le montant des taxes, l’adresse de facturation, les articles, etc. (Scala, Python)
  • Analyser les pièces d’identité : détecte et extrait des données à partir de pièces d’identité à l’aide de la reconnaissance optique de caractères (OCR) et de notre modèle de pièce d’identité, ce qui vous permet d’extraire facilement les données structurées de pièces d’identité, telles que le prénom, le nom, la date de naissance, le numéro de la pièce d’identité, etc. (Scala, Python)
  • Analyser un formulaire personnalisé : extrait des informations de formulaires (PDF et images) sous la forme de données structurées basées sur un modèle créé à partir d’un ensemble de formulaires d’entraînement représentatifs. (Scala, Python)
  • Obtenir un modèle personnalisé : obtenir des informations détaillées sur un modèle personnalisé. (Scala, Python)
  • Lister les modèles personnalisés : obtenir 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 Azure AI services et remplacez les clés et les emplacements dans l’extrait de code suivant par votre clé et votre emplacement Azure AI services.

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 une analyse de texte sur des données de santé

L’Analyse de texte pour service de santé extrait et étiquette les informations médicales pertinentes à partir de textes non structurés tels que les notes du médecin, les comptes rendus d’hospitalisation, les documents cliniques et les dossiers médicaux électroniques.

L'exemple de code suivant analyse et transforme le texte des notes de médecin 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

Traducteur est un service de traduction automatique basé sur le cloud, qui fait partie de la famille Azure AI services d’API IA et qui permet de créer des applications intelligentes. Il est facile d’intégrer le Traducteur à 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 et vous permet de créer des logiciels de traitement de données automatisé à l’aide de la technologie de machine learning. Avec Azure AI Intelligence documentaire, vous pouvez identifier et extraire le texte, les paires de clé/valeur, les marques de sélection, les tableaux 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.

L'exemple de code suivant analyse une image de carte de visite et extrait ses informations sous forme de 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")
)

Exemple Vision par ordinateur

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

L'exemple de code suivant analyse les images et les libellés avec des étiquettes. Les étiquettes sont des descriptions en un mot des éléments que composent une 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 de l’utilisateur.

L'exemple de code suivant utilise une requête de texte qui recherche des images avec des citations. La sortie du code est une liste d’URL d’image contenant des photos liées à la 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))

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 de façon naturelle, en choisissant parmi plus de 270 voix neuronales 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 des 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
anomaly_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(
    anomaly_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 World Bank pour obtenir des informations sur différents pays/régions 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/regions 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/region data returned
display(
    client.transform(df).select(
        "country", udf(get_response_body)(col("response")).alias("response")
    )
)

Exemple de 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",
)