Выделение смысла с помощью Yandex SpeechKit Cloud

Материал из Oktell
Перейти к: навигация, поиск

Наверх    [Oktell 2.7+]

Введение

Yandex SpeechKit Cloud — это облачный сервис, открывающий разработчикам доступ к речевым технологиям Яндекса. В этой статье мы поговорим про выделение смысловых структур из текста.

Технология выделения смысловых объектов позволяет позволяет найти смысловые объекты в тексте и получить от сервера размеченную распознанную структуру. С помощью сервиса возможно анализировать контекст фразы, к примеру, система понимает, что во фразе "Позвони мне завтра" есть информация про время, а во фразе "Соедините меня со Ивановым Иваном" - фамилия и имя. В системе Oktell этот сервис удобно применять для анализа распознанных голосовых выражений и электронных писем.

На момент написания статьи сервис умеет распознавать следующие структуры:

  • Дата и время.
  • Фамилия, имя и отчество.
  • Адреса
  • Морфемы - существительные преобразуются в именительный падеж, глаголы в инфинитив

Документация по API выделения смысла Yandex SpeechKit доступна на сайте https://tech.yandex.ru/speechkit/cloud/doc/dg/concepts/speechkit-dg-nlu-docpage/


Быстрый старт

Для использования системы выделения смысла Yandex SpeechKit Cloud выполните следующие действия:

Шаг 1. Получите API-ключ на использование сервиса в кабинете разработчика.


Шаг 2. Для использования сервиса используйте компонент "Web-запрос" в сценариях. В свойствах компонента выберите:

  • URL - используется выражение:
'https://vins-markup.voicetech.yandex.net/markup/0.x/?text='+[Text]+'&layers=Fio,Morph,GeoAddr,Date&key='+[key]

где

  • [Text] - переменная Text (строковая), анализируемое выражение
  • [key] - переменная key (строковая), API-ключ, полученный на шаге 1
  • Метод - GET
  • Режим работы - Ожидание результата
  • Тип ответа - Текст
  • Ответ в переменную - переменная ЯндексОтвет (строковая), содержит размеченный текст
  • Кодировка ответа - UTF-8
  • Код ошибки в переменную - переменная "Код ошибки" (строковая), нужна для вывода администратору в случае возникновения проблем.
Выделение смысла Yandex 001.png


Шаг 3. После выполнения web-запроса в переменной ЯндексОтвет содержится размеченный текст в виде JSON-структуры. Для получения конкретных значений используйте компонент "Парсер". Подробнее про работу с компонентом читайте в статье: Компонент Парсер.


Описание сценария

В этом параграфе описывается демонстрационный пример использования сервиса выделения смысла Yandex SpeechKit Cloud. Сценарий выглядит следующим образом:


Выделение смысла Yandex 002.png


Компонент "SpeechKit Key". Определяет API-ключ для выполнения Web-запроса на сервисы Yandex.

  • переменной key (строковая) присваивается значение API-ключа.


Компонент "Text". Предназначен для ввода демонстрационного текста.

  • переменной Text (строковая) присваивается текст для анализа: "Здравствуйте меня зовут Александр Сергеев. Я живу на Проспекте Победы, дом 55 квартира 890. Позвоните мне завтра". Вы можете опробовать любой другой текст.


Компонент "Выделение смысла". Отправляет текст на сервис Yandex SpeechKit для анализа и сохраняет разметку в переменную.

  • URL - используется выражение:
'https://vins-markup.voicetech.yandex.net/markup/0.x/?text='+[Text]+'&layers=Fio,Morph,GeoAddr,Date&key='+[key]
  • Метод - GET
  • Режим работы - Ожидание результата
  • Тип ответа - Текст
  • Ответ в переменную - переменная ЯндексОтвет (строковая), содержит размеченный текст
  • Кодировка ответа - UTF-8
  • Код ошибки в переменную - переменная "Код ошибки" (строковая), нужна для вывода администратору в случае возникновения проблем.


Компонент "Вывод разметки". Выводит размеченную структуру на экран.

  • Текст - переменная ЯндексОтвет
  • Адресат - укажите вашего пользователя


Компонент "Ошибка". В случае неудачного выполнения web-запроса выводит код ошибки на экран

  • Текст - выражение 'Ошибка '+[Код ошибки]
  • Адресат - укажите вашего пользователя


Результаты работы

Здравствуйте меня зовут Александр Сергеев. Я живу на Проспекте Победы, дом 55 квартира 890. Позвоните мне завтра


{
    "Date": [
        {
            "Day": 1,
            "RelativeDay": true,
            "Tokens": {
                "Begin": 16,
                "End": 17
            }
        }
    ],
    "Fio": [
        {
            "FirstName": "александр",
            "LastName": "сергеев",
            "Tokens": {
                "Begin": 3,
                "End": 5
            },
            "Type": "finame"
        }
    ],
    "GeoAddr": [
        {
            "Fields": [
                {
                    "Name": "проспект победы",
                    "Tokens": {
                        "Begin": 8,
                        "End": 10
                    },
                    "Type": "Street"
                },
                {
                    "Name": "дом 55 квартира 890",
                    "Tokens": {
                        "Begin": 10,
                        "End": 14
                    },
                    "Type": "HouseNumber"
                }
            ],
            "Tokens": {
                "Begin": 7,
                "End": 14
            }
        }
    ],
    "Morph": [
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "V pl imper 2p ipf intr"
                    ],
                    "Language": "ru",
                    "Text": "здравствовать"
                }
            ],
            "Tokens": {
                "Begin": 0,
                "End": 1
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "SPRO gen sg 1p",
                        "SPRO acc sg 1p"
                    ],
                    "Language": "ru",
                    "Text": "я"
                }
            ],
            "Tokens": {
                "Begin": 1,
                "End": 2
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "V inpraes pl indic 3p ipf tran"
                    ],
                    "Language": "ru",
                    "Text": "звать"
                }
            ],
            "Tokens": {
                "Begin": 2,
                "End": 3
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "S persn nom sg m anim"
                    ],
                    "Language": "ru",
                    "Text": "александр"
                },
                {
                    "Grammems": [
                        "S persn gen pl f anim",
                        "S persn acc pl f anim"
                    ],
                    "Language": "ru",
                    "Text": "александра"
                }
            ],
            "Tokens": {
                "Begin": 3,
                "End": 4
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "S persn gen pl m anim",
                        "S persn acc pl m anim"
                    ],
                    "Language": "ru",
                    "Text": "сергей"
                },
                {
                    "Grammems": [
                        "S famn nom sg m anim"
                    ],
                    "Language": "ru",
                    "Text": "сергеев"
                }
            ],
            "Tokens": {
                "Begin": 4,
                "End": 5
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "S abbr nom sg",
                        "S abbr nom pl",
                        "S abbr gen sg",
                        "S abbr gen pl",
                        "S abbr dat sg",
                        "S abbr dat pl",
                        "S abbr acc sg",
                        "S abbr acc pl",
                        "S abbr ins sg",
                        "S abbr ins pl",
                        "S abbr abl sg",
                        "S abbr abl pl"
                    ],
                    "Language": "ru",
                    "Text": "я"
                },
                {
                    "Grammems": [
                        "SPRO nom sg 1p"
                    ],
                    "Language": "ru",
                    "Text": "я"
                }
            ],
            "Tokens": {
                "Begin": 5,
                "End": 6
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "V inpraes sg indic 1p ipf intr"
                    ],
                    "Language": "ru",
                    "Text": "жить"
                }
            ],
            "Tokens": {
                "Begin": 6,
                "End": 7
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "PART"
                    ],
                    "Language": "ru",
                    "Text": "на"
                },
                {
                    "Grammems": [
                        "PR"
                    ],
                    "Language": "ru",
                    "Text": "на"
                }
            ],
            "Tokens": {
                "Begin": 7,
                "End": 8
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "S abl sg m inan"
                    ],
                    "Language": "ru",
                    "Text": "проспект"
                }
            ],
            "Tokens": {
                "Begin": 8,
                "End": 9
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "S nom pl f inan",
                        "S gen sg f inan",
                        "S acc pl f inan"
                    ],
                    "Language": "ru",
                    "Text": "победа"
                }
            ],
            "Tokens": {
                "Begin": 9,
                "End": 10
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "S nom sg m inan",
                        "S acc sg m inan"
                    ],
                    "Language": "ru",
                    "Text": "дом"
                }
            ],
            "Tokens": {
                "Begin": 10,
                "End": 11
            }
        },
        {
            "Lemmas": [
                {
                    "Text": "00000000055"
                }
            ],
            "Tokens": {
                "Begin": 11,
                "End": 12
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "S nom sg f inan"
                    ],
                    "Language": "ru",
                    "Text": "квартира"
                }
            ],
            "Tokens": {
                "Begin": 12,
                "End": 13
            }
        },
        {
            "Lemmas": [
                {
                    "Text": "00000000890"
                }
            ],
            "Tokens": {
                "Begin": 13,
                "End": 14
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "V inpraes pl indic 2p pf intr",
                        "V pl imper 2p pf intr"
                    ],
                    "Language": "ru",
                    "Text": "позвонить"
                }
            ],
            "Tokens": {
                "Begin": 14,
                "End": 15
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "SPRO dat sg 1p",
                        "SPRO abl sg 1p"
                    ],
                    "Language": "ru",
                    "Text": "я"
                }
            ],
            "Tokens": {
                "Begin": 15,
                "End": 16
            }
        },
        {
            "Lemmas": [
                {
                    "Grammems": [
                        "ADV"
                    ],
                    "Language": "ru",
                    "Text": "завтра"
                },
                {
                    "Grammems": [
                        "S nom sg n inan",
                        "S nom pl n inan",
                        "S gen sg n inan",
                        "S gen pl n inan",
                        "S dat sg n inan",
                        "S dat pl n inan",
                        "S acc sg n inan",
                        "S acc pl n inan",
                        "S ins sg n inan",
                        "S ins pl n inan",
                        "S abl sg n inan",
                        "S abl pl n inan"
                    ],
                    "Language": "ru",
                    "Text": "завтра"
                }
            ],
            "Tokens": {
                "Begin": 16,
                "End": 17
            }
        }
    ]
}