Когнитивные сервисы Microsoft – API текстовой аналитики

Привет. Очень хочется поговорить о когнитивных сервисах Microsoft. Это очень передовая тема и мне очень удивительно, как мало информации о ней в сети, помимо самого Microsoft, мало кто это освещает. А очень зря, придётся устранять эту несправедливость.

Когнитивные сервисы от Microsoft позволяют создавать приложения с искусственным интеллектом, используя для вычислений API Microsoft. Почему это так круто, да потому, что затронута огромная область машинного обучения, сейчас есть возможность работать с распознаванием изображений, распознаванием эмоций, распознаванием лиц, распознаванием речи, распознаванием говорящего, множество различных вариантов работы с текстами (проверка орфографии, лингвистический анализ) и многое другое. И теперь не нужно быть профессионалом в области машинного обучения чтобы создать что-то по-настоящему классное. Для разработчиков это экономит много времени, для компаний, соответственно, много ресурсов.

Для начала работы, необходимо зайти на https://azure.microsoft.com/ru-ru/try/cognitive-services и авторизоваться. Мы сразу можем увидеть API, с которым мы можем начать работать. Ниже можно увидеть список всего что есть на данным момент, согласитесь, выглядит внушительно.

Для начала работы доступен бесплатный вариант использования (с ограничением количества транзакций), что позволяет испытать технологию перед принятием решения о приобретении.

Для начала испытаем API для анализа текста. Нажимаем на «Получение ключа API» и получаем адрес конечной точки и 2 ключа. Также сразу даётся ссылка с информацией для быстрого старта.

Быстрый старт позволяет получить документацию по API и 10-минутные руководства по началу работы. Кстати, руководства сейчас есть для шести языков: C#, Java, Node, Python, PHP, Ruby.

Приступим к использованию. Создадим консольный проект, через NuGet подключим библиотеку Microsoft.Azure.CognitiveServices.Language

После этого перейдём к коду:

ITextAnalyticsAPI client = new TextAnalyticsAPI();
client.AzureRegion = AzureRegions.Westcentralus;
client.SubscriptionKey = "key";

В AzureRegion необходимо указать регион, к которому относятся выданные ключи для API. Его можно увидеть в адресе для конечной точки.

Сейчас API для анализа текста может делать 3 основные функции:

  1. Определять язык текста
  2. Выделять ключевые фразы в тексте
  3. Делать анализ тональности текста

Определение языка текста:

За определение языка отвечает функция client.DetectLanguage (либо client. DetectLanguageAsync) Передаётся всё в таком виде:

LanguageBatchResult result = client.DetectLanguage(
    new BatchInput(
        new List<Input>()
        {
            new Input("1", "This is a document written in English."),
            new Input("2", "Este es un document escrito en Español."),
            new Input("3", "А этот текст написан на русском, сможет ли определить?"),
            new Input("4", "中文文字")
        }));


foreach (var document in result.Documents)
{
    Console.WriteLine("ID: {0} , Язык: {1}", document.Id, document.DetectedLanguages[0].Name);
}

Результат работы будет следующий:

Точность определения очень хорошая. В наборе для распознавания порядка двух десятков языков.

Это очень удобно для проектов, которым приходится работать с пользователями из различных стран. Например, обращения, поступившие в службу поддержки, могут автоматически определять язык и перенаправлять их целевым сотрудникам компании. Также это может быть полезно при анализе различных старых архивов данных, в которых материалы могут быть на разных языках, для их первичной обработки и передачи целевым сотрудникам. В общем область применения огромна, куда шире чем моя фантазия для данной статьи.

Выделение ключевых фраз в тексте.

К сожалению, данный функционал на русском языке сейчас не работает. Если для вас это не критично, то использовать это можно следующим образом (функция KeyPhrases/KeyPhrasesAsync):

KeyPhraseBatchResult result2 = client.KeyPhrases(
    new MultiLanguageBatchInput(
        new List<MultiLanguageInput>()
        {
            new MultiLanguageInput("en", "1", "Text Analytics API can detect up to 120 different languages."),
            new MultiLanguageInput("en", "2", "For sentiment analysis and key phrase extraction, the list of supported languages is more selective as we refine the analyzers to accommodate the linguistic rules of additional languages.")
        }));

foreach (var document in result2.Documents)
{
    Console.WriteLine("ID: {0} ", document.Id);

    Console.WriteLine("\t Ключевые фразы:");

    foreach (string keyphrase in document.KeyPhrases)
    {
        Console.WriteLine("\t\t" + keyphrase);
    }
}

В MultiLanguageInput необходимо передавать язык текста, его идентификатор и сам текст для обработки.

Результат при этот будет таким:

Выделение ключевых фраз незаменимый инструмент если вам нужно обрабатывать большие объёмы текстом. При этом это может быть полезно при работе и в автоматическом режиме, и в ручном, ведь получение ключевых фраз может значительно сократить время обработки при любом варианте.

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

Анализ тональности позволяет получить оценку вашего текста от 0 – негативно до 1 – позитивно. (функция Sentiment/SentimentAsync) Русский язык поддерживается в пробном режиме.

Вызов происходит следующим образом.

SentimentBatchResult result3 = client.Sentiment(
    new MultiLanguageBatchInput(
        new List<MultiLanguageInput>()
        {
            new MultiLanguageInput("ru", "0", "C# определённо наиболее удобный язык программирования."),
            new MultiLanguageInput("ru", "1", "Машинное обучение позволяет создавать очень сложные приложения."),
            new MultiLanguageInput("ru", "2", "В этом тексте пишем про 1С программирование.")
        }));
foreach (var document in result3.Documents)
{
    Console.WriteLine("ID: {0} , Оценка тональности: {1:0.00}", document.Id, document.Score);
}

Результат:

Сейчас немного об ограничениях, они есть, но вполне разумные:

  • Максимальная длина одного документа – 5000 символов
  • Максимально количество передаваемых документов – 1000
  • Максимальный размер всего запроса - 1 MB

API анализа текста, наверное, самый простой из когнитивных сервисов Microsoft. Но даже он даёт очень ценные инструменты, аналогов которым, с соответствующими цена/качество, на рынке просто нет.

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

Приятного программирования.

Комментарии (1) -

Дмитрий 07.11.2017 3:27:58

Спасибо! Не знал о таком API.

Добавить комментарий