Поделиться через


Службы ИИ Azure

Службы искусственного интеллекта Azure помогают разработчикам и организациям быстро создавать интеллектуальные, передовые, готовые к рынкам и ответственные приложения с готовыми и предварительно созданными и настраиваемыми API и моделями.

SynapseML позволяет создавать мощные и масштабируемые прогнозные и аналитические модели на основе разных источников данных Spark. Synapse Spark предоставляет встроенные библиотеки SynapseML, включая synapse.ml.services.

Внимание

Начиная с 20 сентября 2023 г. вы не сможете создавать новые Детектор аномалий ресурсы. Служба Детектор аномалий отменяется 1 октября 2026 года.

Предварительные требования для Azure Synapse Analytics

В этом руководстве описаны предварительные требования для использования служб ИИ Azure в Azure Synapse. В этом руководстве описано несколько шагов, которые необходимо выполнить перед использованием служб ИИ Azure в Synapse Analytics.

Службы искусственного интеллекта Azure — это набор API, пакетов SDK и служб, которые разработчики могут использовать для добавления интеллектуальных функций в свои приложения. Службы ИИ позволяют разработчикам даже в том случае, если у них нет прямых навыков ИИ или знаний. Службы искусственного интеллекта Azure помогают разработчикам создавать приложения, которые могут видеть, слышать, говорить, понимать и даже начинать причину. Каталог служб в службах ИИ Azure можно разделить на пять основных основных принципов: Визуальное распознавание, речь, язык, поиск в Интернете и решение.

Использование

Зрение

Компьютерное зрение

  • Описание изображения на языке, доступном для чтения человека (Scala, Python)
  • Анализ (цвет, тип изображения, лицо, содержимое для взрослых или рэйтов): анализирует визуальные функции изображения (Scala, Python)
  • OCR: считывает текст из изображения (Scala, Python)
  • Распознавание текста: считывает текст из изображения (Scala, Python)
  • Эскиз: создает эскиз указанного пользователем размера на основе изображения (Scala, Python)
  • Распознавание содержимого для конкретного домена: распознает содержимое для конкретного домена (знаменитость, ориентир) (Scala, Python)
  • Тег: определяет список слов, относящихся к входным изображениям (Scala, Python)

Распознавание лиц

  • Обнаружение: обнаружение человеческих лиц на изображении (Scala, Python)
  • Проверка: проверяет, принадлежат ли два лица одному и тому же человеку или лицу принадлежит человеку (Scala, Python)
  • Определение: находит ближайшие совпадения конкретного лица запроса из группы пользователей (Scala, Python)
  • Поиск похожих: поиск похожих лиц на лицо запроса в списке лиц (Scala, Python)
  • Группа: делит группу лиц на несвязанные группы на основе сходства (Scala, Python)

Речь

Служба "Речь"

  • Преобразование речи в текст: транскрибирование аудиопотоков (Scala, Python)
  • Транскрибирование бесед: транскрибирование аудиопотоков в динамические расшифровки с идентифицированными динамиками. (Scala, Python)
  • Текст в речь: преобразует текст в реалистичный звук (Scala, Python)

Язык

Язык ИИ

  • Обнаружение языка: обнаруживает язык входного текста (Scala, Python)
  • Извлечение ключевых фраз: определяет ключевые точки разговора в входном тексте (Scala, Python)
  • Распознавание именованных сущностей: определяет известные сущности и общие именованные сущности в входном тексте (Scala, Python)
  • Анализ тональности: возвращает оценку от 0 до 1, указывающую тональность во входном тексте (Scala, Python)
  • Извлечение сущностей здравоохранения: извлекает медицинские сущности и связи из текста. (Scala, Python)

Перевод текста

Переводчик

  • Перевод: перевод текста. (Scala, Python)
  • Транслитерация: преобразует текст на одном языке из одного скрипта в другой скрипт. (Scala, Python)
  • Обнаружение: определяет язык фрагмента текста. (Scala, Python)
  • BreakSentence: определяет расположение границ предложения в фрагменте текста. (Scala, Python)
  • Поиск словаря: предоставляет альтернативные переводы для слова и небольшого количества идиоматических фраз. (Scala, Python)
  • Примеры словаря: приведены примеры, показывающие, как термины в словаре используются в контексте. (Scala, Python)
  • Перевод документов: перевод документов на все поддерживаемые языки и диалекты при сохранении структуры документов и формата данных. (Scala, Python)

Интеллектуальный анализ документов

Аналитика документов

  • Анализ макета: извлечение текста и сведений о макете из данного документа. (Scala, Python)
  • Анализ квитанций: обнаруживает и извлекает данные из квитанций с помощью оптического распознавания символов (OCR) и нашей модели квитанций, что позволяет легко извлекать структурированные данные из квитанций, таких как название продавца, номер телефона продавца, дата транзакции, общая сумма транзакций и многое другое. (Scala, Python)
  • Анализ визитных карточек: обнаруживает и извлекает данные из визитных карточек с помощью оптического распознавания символов (OCR) и нашей модели визитных карточек, что позволяет легко извлекать структурированные данные из визитных карточек, таких как имена контактов, имена компаний, номера телефонов, электронные письма и многое другое. (Scala, Python)
  • Анализ счетов: обнаруживает и извлекает данные из счетов с помощью оптического распознавания символов (OCR) и моделей глубокого обучения счета, что позволяет легко извлекать структурированные данные из счетов, таких как клиент, поставщик, идентификатор счета, дата выполнения счета, сумма налога, доставка, выставление счетов в, элементы строки и многое другое. (Scala, Python)
  • Анализ документов идентификаторов: обнаружение и извлечение данных из документов идентификации с помощью оптического распознавания символов (OCR) и модели документов идентификатора, что позволяет легко извлекать структурированные данные из документов идентификаторов, таких как имя, фамилия, дата рождения, номер документа и многое другое. (Scala, Python)
  • Анализ пользовательской формы: извлекает информацию из форм (PDF-файлов и изображений) в структурированные данные на основе модели, созданной из набора репрезентативных форм обучения. (Scala, Python)
  • Получение пользовательской модели: получение подробных сведений о пользовательской модели. (Scala, Python)
  • Вывод списка пользовательских моделей: получение сведений обо всех пользовательских моделях. (Scala, Python)

Decision

Детектор аномалий

  • Состояние аномалии последней точки: создает модель с помощью предыдущих точек и определяет, является ли последняя точка аномальной (Scala, Python)
  • Поиск аномалий: создает модель с помощью всей серии и находит аномалии в серии (Scala, Python)

Подготовка системы

Чтобы начать, импортируйте необходимые библиотеки и инициализировать сеанс 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

Импортируйте библиотеки служб ИИ Azure и замените ключи и расположения в следующем фрагменте кода ключом и расположением служб ИИ Azure.

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.

Анализ тональности для текста

Служба языка ИИ предоставляет несколько алгоритмов извлечения интеллектуальной аналитики из текста. Например, можно определить тональность заданного входного текста. Служба вернет оценку между 0,0 и 1,0: низкий показатель указывает на отрицательную тональность, а высокий — на положительную. В этом примере используются три простых предложения. Для каждого из них возвращается тональность.

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

Выполнение анализа текста для данных о работоспособности

Анализ текста для служба работоспособности извлечения и меток соответствующих медицинских сведений из неструктурированного текста, таких как заметки врача, сводки, клинические документы и электронные медицинские записи.

Следующий пример кода анализирует и преобразует текст из заметок врачей в структурированные данные.

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

Перевод текста на другой язык

Переводчик — это облачная служба машинного перевода и является частью семейства служб искусственного интеллекта Azure API, используемых для создания интеллектуальных приложений. Служба Translator легко интегрируется в приложения, веб-сайты, инструменты и решения. Он позволяет добавлять многоязычные интерфейсы пользователей на 90 языках и диалектах и использовать для перевода текста без размещения собственного алгоритма.

В следующем примере кода выполняется простой перевод текста, предоставляя предложения, которые необходимо перевести и на целевые языки, на которые они нужно перевести.

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

Извлечение сведений из документа в структурированные данные

Аналитика документов Azure является частью приложение Azure лиированных служб ИИ, которые позволяют создавать автоматизированное программное обеспечение обработки данных с помощью технологии машинного обучения. С помощью Аналитики документов ИИ Azure вы можете определять и извлекать текст, пары "ключ-значение", "выделения", "таблицы" и "Структура" из документов. Эта служба выводит структурированные данные, которые включают в себя связи в исходном файле, ограничивающие прямоугольники, уровень достоверности и др.

В следующем примере кода анализируется изображение визитной карточки и извлекается его информация в структурированные данные.

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

Пример для службы "Компьютерное зрение"

Azure AI Vision анализирует изображения, чтобы определить структуру, например лица, объекты и описания естественного языка.

В следующем примере кода анализируются изображения и метки с тегами. Теги — это одно слово описания вещей в изображении, такие как узнаваемые объекты, люди, пейзажи и действия.

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

Поиск изображений Bing — поиск в Интернете изображений, соответствующих запросу пользователя на естественном языке.

В следующем примере кода используется текстовый запрос, который ищет изображения с кавычками. Выходные данные кода — это список URL-адресов изображений, содержащих фотографии, связанные с запросом.

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

Преобразование речи в текст

Служба Преобразование речи в текст преобразует потоки или файлы с речью в текст. В следующем примере кода выполняется транскрибирование одного звукового файла в текст.

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

Преобразование текста в речь

Текст речи — это служба, которая позволяет создавать приложения и службы, которые естественно говорят, выбирая из более чем 270 нейронных голосов на 119 языках и вариантах.

В следующем примере кода текст преобразуется в звуковой файл, содержащий содержимое текста.

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

Обнаружение аномалий в данных временных рядов

Если у вас нет ресурса обнаружения аномалий, созданного до 20 сентября 2023 г., вы не сможете создать его. Может потребоваться пропустить эту часть.

Детектор аномалий — удобное средство для обнаружения несоответствующих данных во временных рядах. В следующем примере кода служба Детектор аномалий используется для поиска аномалий в временных рядах.

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

Получение сведений из произвольных веб-API

Благодаря поддержке HTTP в Spark вы можете использовать любую веб-службу в конвейере больших данных. В этом примере мы используем API Всемирного банка для получения информации о различных странах или регионах по всему миру.

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

Пример поиска в Azure AI

В этом примере показано, как можно обогащение данных с помощью Cognitive Skills и записи в индекс поиска Azure с помощью 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",
)