Cognitive Services & LUIS: Введення в розпізнавання природної мови

У цій статті ми поговоримо про розуміння мови (про лінгвістичних обчисленнях, таких як призначення міток, синтаксичний аналіз і так далі) і звернемо особливу увагу на два API: Linguistic Analysis API і інтелектуальну службу розпізнавання мови (LUIS). Якщо ви любите англійську мову так само, як російська і захоплюєтеся навчанням штучного інтелекту, ласкаво просимо під кат.



Для початку невеличка довідка. Служби Microsoft Cognitive Services (розроблені підрозділом Microsoft Research) полегшують роботу з інтелектуальними алгоритмами. Навіть фахівці, незнайомі з теорією дослідження даних, зможуть без проблем використовувати готові API для аналітики додатків.

Обробка лінгвістичної інформації охоплює розпізнавання мови, переклад, аналіз емоційного забарвлення висловлювань, резюмування (можливо також в Microsoft Word), формування мови і так далі. Служби Microsoft Cognitive Services пропонують понад 20 API, призначених для вирішення цих завдань.

Сподіваємося, що ця стаття допоможе вам зрозуміти, як працюють технології розпізнавання мови Microsoft Cognitive Services.

Примітка В статті не пояснюється, як використовувати ці інтерфейси. Відповідні інструкції наведені в офіційній документації (Linguistic Analysis API, LUIS).

Linguistic Analysis API
Цей API надає фундаментальні можливості синтаксичного аналізу мови. Він повертає результат синтаксичного аналізу вихідних пропозицій у форматі json після виконання наступних операцій.

  1. Пошук доступних аналізаторів (виклик REST API).
  2. Виконання аналізу (синтаксичного аналізу) за допомогою обраного аналізатора (виклик REST API).
В даний час доступні три типи лінгвістичних аналізаторів.

Аналізатор лексем (PennTreebank3 — регулярні вирази)

Це самий простий аналізатор, який розбиває пропозиції на лексеми.
Нижче представлений результат призначення лексем у реченніI want a sweet-smelling flower with a red flowerbot («Мені потрібен ароматний квітка у червоному горщику»).

У ньому втрачена маса корисної інформації, але цей аналізатор можна використовувати разом з іншими (вказавши кілька аналізаторів в одному виклику API) та з загальних результатів отримати дані.

{
"analyzerId": "08ea174b-bfdb-4e64-987e-602f85da7f72",
"result": [
{
"Len": 52,
"Offset": 0,
"Tokens": [
{
"Len": 1,
"NormalizedToken": "І",
"Offset": 0,
"RawToken": "І"
},
{
"Len": 4,
"NormalizedToken": "want",
"Offset": 2,
"RawToken": "want"
},
{
"Len": 1,
"NormalizedToken": "a",
"Offset": 7,
"RawToken": "a"
},
{
"Len": 14,
"NormalizedToken": "sweet-smelling",
"Offset": 9,
"RawToken": "sweet-smelling"
},
{
"Len": 6,
"NormalizedToken": "flower",
"Offset": 24,
"RawToken": "flower"
},
{
"Len": 4,
"NormalizedToken": "з",
"Offset": 31,
"RawToken": "з"
},
{
"Len": 1,
"NormalizedToken": "a",
"Offset": 36,
"RawToken": "a"
},
{
"Len": 3,
"NormalizedToken": "red",
"Offset": 38,
"RawToken": "red"
},
{
"Len": 9,
"NormalizedToken": "flowerbot",
"Offset": 42,
"RawToken": "flowerbot"
},
{
"Len": 1,
"NormalizedToken": ".",
"Offset": 51,
"RawToken": "."
}
]
}
]
}


Пропозиція не тільки поділяється пробілами і пунктуаційними знаками, але і ділиться на лексеми згідно контексту. Наприклад, API може правильно розбити на лексеми фразу what's your name? (те ж саме, що і what is your name?), Mr. Williams (це не пунктуаційний знак) і так далі.

Аналізатор частеречной розмітки (PennTreebank3 – cmm)

Щоб витягти ключові слова і проаналізувати пропозицію, зазвичай потрібно ідентифікувати частини мови (іменник, дієслово і так далі). Наприклад, якщо потрібно виділити ключові слова з емоційним забарвленням і оцінити емоційний фон, ключовим словом має бути прикметник.

Аналізатор частеречной розмітки визначає дані теги. Нижче представлений результат обробки аналізатором введеного пропозиції I want a sweet-smelling flower with a red flowerbot.

{
"analyzerId": "4fa79af1-f22c-408d-98bb-b7d7aeef7f04",
"result": [
[
"PRP",
"VBP",
"DT",
"JJ",
"NN",
"IN",
"DT",
"JJ",
"NN",
"."
]
]
}


PRP: особисте займенник.
VBP: дієслово.
DT: визначальне слово.
JJ: прикметник.
NN: іменник в однині або множині.
IN: привід або підрядний союз.
Докладніше можна дізнатися в статті «Теги частин мови Penn Treebank – Penn (Університет Пенсільванії)».

Тег призначається не тільки словами, але і за контекстом. Наприклад, слово dog зазвичай виступає в ролі іменника, але використовується як дієслово у наступному реченні (приклад взято з розділу Вікіпедії «Частеречная розмітка»). Аналізатор розмітки підходить для цього прикладу. В аналізі розмітки допускаються прості помилки.

The sailor dogs the hatch («Моряк задраивает люк»).

Аналізатор граматики складових (PennTreebank3 – SplitMerge)

Припустимо, вам належить квітковий інтернет-магазин і в ньому налаштована інтелектуальна пошукова система. Покупці можуть ввести наступні запити.

«Мені потрібен червоний ароматний квітка» (I want a red and sweet-smelling flower).
«Мені потрібен ароматний квітка, але не червоний» (I want a sweet-smelling flower except for red flowers).
«Мені потрібен ароматний квітка у червоному горщику» (I want a sweet-smelling flower with a red flowerbot).


Ми бачимо, що в кожному реченні описується зовсім різні об'єкти. Але якщо ви використовуєте аналізатор частеречной розмітки (попередній), то не помітите різниці. У цьому випадку знадобиться аналізатор граматики складових. Нижче представлений результат обробки аналізатором того ж самого пропозиції I want a sweet-smelling flower with a red flowerbot («Мені потрібен ароматний квітка у червоному горщику»).

{
"analyzerId": "22a6b758-420f-4745-8a3c-46835a67c0d2",
"result": [
"(TOP (S (NP (PRP I)) (VP (VBP want) (NP (NP (DT a) (JJ sweet-smelling) (NN flower)) (PP (IN with) (NP (DT a) (JJ red) (NN flowerbot))))) (. .)))"
]
}


S: просте оповідний пропозицію.
NP: іменне словосполучення.
VP: дієслівне словосполучення.
PRP: особисте займенник.
VBP: дієслово.
PP: предложное словосполучення.
DT: визначальне слово.
JJ: прикметник.
NN: іменник в однині або множині.
IN: привід або підрядний союз.
Докладніше можна дізнатися в статті «Penn Treebank II Tags – MIT».

Як ми бачимо, в результаті виходить деревовидна структура. Наприклад, «у червоному горщику» — це подчинительное словосполучення для «запашної квітки».

Інтелектуальна служба розпізнавання мови (LUIS)
Аналізатор граматичних складових (попередній) видає багато корисної інформації, але вам як і раніше буде складно зрозуміти деревовидну структуру у програмному коді.

Інтелектуальна служба розпізнавання мови (LUIS) призначена не тільки для синтаксичного аналізу, як API лінгвістичного аналізу. Вона дає пряму відповідь на деякі сценарії додатки, пов'язані з розумінням мови, і дозволяє використовувати ваш програмний код в бізнес-логікою програми.

Припустимо, наприклад, що у вас є додаток для бронювання авіаквитків. Його інтерфейс містить форму з полями «Пункт відправлення», «Пункт прибуття» та «Дата/час». З допомогою LUIS ви можете витягти введені значення речень природною мовою (наприклад, «Мені потрібний рейс з Єкатеринбурга в Москву на 23 липня»). LUIS прекрасно підходить для вирішення завдань на розуміння мови. Наприклад, ця служба дозволяє безпосередньо отримати наступні значення (пункт відправлення, пункт прибуття, дата/час), укладені в дужки.

  • Забронювати рейс з {Одеса} {Москва} на {29.10.2016}.
  • Забронюйте мені рейс до {Москва} на {29 жовтня}.
  • Мені потрібний рейс з {Одеса} до {Москва} {наступна субота}.
  • І так далі.
Примітка Як ми бачимо, у другому прикладі не введено «пункт відправлення». Але в цьому випадку можна зрозуміти, яких не вистачає (їх потрібно ввести) для обробки за допомогою LUIS, і попросити користувача додати потрібні відомості.

При використанні LUIS спочатку потрібно зареєструвати сценарії («намір»), наприклад «Забронювати рейс», «Дізнатись погоду» і так далі. Далі для кожного наміри слід зареєструвати зразки речень («вираження») і навчити результат. (Коли ви натискаєте кнопку «Навчити», LUIS вивчає шаблон.)

Тепер можна використовувати кінцеву точку виклику REST LUIS. REST видасть у форматі jason результат, що збігається з зареєстрованим наміром.

Примітка LUIS активно навчається, завдяки чому можна коригувати без тегів пропозиції.

LUIS розуміє не тільки слова, але і контекст пропозиції. Наприклад, якщо ввести «Забронюйте рейс «туди-то» на 29 жовтня», слово «туди-то» буде проаналізовано як пункт призначення. У LUIS потрібно заздалегідь отримати зареєстроване намір. Тому дана служба не підходить для вирішення специфічних завдань, наприклад пошуку по природному мові, відповідей на особливі питання (особливі листування) і так далі. Більш того, LUIS тільки витягує цільові ключові фрази, але не аналізує їх. Розглянемо наступний приклад.

«Мені потрібен червоний горщик, який поєднується з червоними квітами для моєї мами».

LUIS може вилучити фразу «горщик, який поєднується з червоними квітами» як ключову, але це не те ж саме, що «горщик і червоні квіти». Якщо ви хочете проаналізувати цю фразу, тобто вивчити потреби конкретного клієнта, використовуйте API лінгвістичного аналізу.

Примітка Назва API аналізу тексту в службах Microsoft Cognitive Services нагадує про синтаксичному аналізі мови, але цей API просто оцінює емоційну забарвлення (задоволеність або незадоволеність людини). Пам'ятайте, що цей інтерфейс не аналізує емоції (радість, смуток, злість і так далі), як це робить API емоцій (теж з Microsoft Cognitive Services), і в результаті ми отримуємо скалярний значення (ступінь емоційного забарвлення). Також ви можете витягти ключову фразу, яка впливає на емоційну забарвлення. Наприклад, якщо ви запишете голос клієнта і захочете з'ясувати, що йому не подобається у ваших послугах, то зможете дізнатися ймовірні причини невдоволення, виділивши ключові фрази («приміщення», «співробітники» і так далі).

До речі, кілька днів тому вийшла новина про поновлення у Cognitive Services і два кейса їх застосування: Human Interact використовує CRIS і LUIS, для того, щоб люди могли спілкуватися у віртуальному світі; Prism Skylab використовує Computer Vision API для аналізу зображень з камер безпеки для визначення специфічних подій.

Останні статті
1. Розробка на R: таємниці циклів.
2. Як вибирати алгоритми машинного навчання Microsoft Azure (нагадуємо, щоAzure можна спробувати безкоштовно).
3. Цикл статей «Deep Learning».

Якщо ви побачили неточність перекладу, повідомте, будь ласка, про це в особисті повідомлення.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.