Cognitive Services
Azure Cognitive Services — это набор API, пакетов SDK и служб, которые помогают разработчикам создавать интеллектуальные приложения, не имея прямых навыков и знаний в области искусственного интеллекта или обработки и анализа данных, позволяя разработчикам легко добавлять когнитивные функции в свои приложения. Задача Azure Cognitive Services — помочь разработчикам создавать приложения, которые умеют видеть, слышать, разговаривать и даже в некоторой степени размышлять. Службы Azure Cognitive Services можно разделить на пять категорий, которые связаны со зрением, речью, языком, поиском в Интернете и принятием решений.
Использование
Зрение
- Описание: описание изображения на понятном языке (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)
Решение
- Состояние аномалии последней точки: создает модель с использованием предыдущих точек и определяет, является ли последняя точка аномальной (Scala, Python).
- Поиск аномалий: создает модель с использованием всего ряда и находит аномалии в ряде (Scala, Python)
Поиск
Предварительные требования
- Вложите записную книжку в lakehouse. В левой части щелкните Добавить , чтобы добавить существующий lakehouse или создать lakehouse.
- Ключ Cognitive Services. Чтобы получить ключ Cognitive Services, выполните инструкции из краткого руководства.
Общий код
Чтобы приступить к работе, необходимо добавить следующий код в проект.
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
Пример для службы "Анализ текста"
Служба Анализ текста предоставляет несколько алгоритмов для извлечения интеллектуальной аналитики из текста. Например, можно определить тональность заданного входного текста. Служба вернет оценку между 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 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")
)
)
Пример Анализ текста для работоспособности
Анализ текста для службы здравоохранения извлекает и маркирует соответствующую медицинскую информацию из неструктурированных текстов, таких как заметки врача, выписки, клинические документы и электронные медицинские записи.
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))
Пример переводчика
Переводчик — это облачная служба машинного перевода, которая входит в семейство когнитивных API Azure Cognitive Services, используемых для создания интеллектуальных приложений. Служба 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, которые позволяют создавать автоматизированное программное обеспечение для обработки данных с помощью технологии машинного обучения. Выявление и извлечение текста, пар "ключ — значение", меток выбора, таблиц и структуры из документов. Эта служба выводит структурированные данные, которые включают в себя связи в исходном файле, ограничивающие прямоугольники, уровень достоверности и др. В этом примере мы анализируем изображение бизнес-карта и извлекаем его сведения в структурированные данные.
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")
)
Пример для службы "Компьютерное зрение"
Служба Компьютерное зрение анализирует изображения для выявления таких структур, как лица, объекты и описания на естественном языке. В этом примере мы отметим тегами список изображений. Теги — это описания вещей, выраженные одним словом, например распознаваемых объектов, людей, пейзажей и действий.
# 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"
Поиск изображений 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.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))
Пример для службы "Детектор аномалий"
Детектор аномалий — удобное средство для обнаружения несоответствующих данных во временных рядах. В этом примере мы используем службу для поиска аномалий во всех временных рядах.
# 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
Благодаря поддержке HTTP в Spark вы можете использовать любую веб-службу в конвейере больших данных. В этом примере мы используем API World Bank для получения сведений о разных странах мира.
# 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")
)
)