Як обробити природні мовні запити?


11

Мені цікаво запитувати природну мову. У Стенфорді є складний набір програмного забезпечення для обробки природних мов . Я також бачив бібліотеку Apache OpenNLP та загальну архітектуру текстової інженерії .

Існує неймовірна кількість використань для обробки природних мов, що робить документацію цих проектів важкою для швидкого засвоєння.

Чи можете ви трохи спростити мені речі та на високому рівні окреслити завдання, необхідні для виконання базового перекладу простих питань у SQL?

Перший прямокутник на моїй схемі потоків - трохи таємниця.

введіть тут опис зображення

Наприклад, я, можливо, хочу знати:

How many books were sold last month?

І я хотів би, щоб це було перекладено на

Select count(*) 
  from sales 
  where 
   item_type='book' and 
   sales_date >= '5/1/2014' and 
   sales_date <= '5/31/2014'

Відповіді:


6

Запит на природну мову створює дуже багато тонкощів, які можна узагальнити дуже важко. Я б почав із високого рівня, намагаючись придумати речі через іменники та дієслова.

Отож до речення: Скільки книг було продано минулого місяця?

Ви б почали з розбиття речення за допомогою аналізатора, який поверне дерево у такому форматі:

введіть тут опис зображення

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

Ми можемо додатково розділити тему для модифікаторів: "скільки" для книг і "останній" за місяць.

Після розбиття речення вам потрібно зіставити ці елементи на мову sql, наприклад: скільки => рахувати, книги => книга, продати => продажі, місяць => продаж_дату (інтервал) тощо.

Нарешті, щойно у вас є елементи мови, вам просто потрібно придумати набір правил щодо взаємодії різних сутностей один з одним, який залишає вас із:

Виберіть кількість (*) від продажів, де item_type = 'книга' та sales_date> = '5/1/2014' та sales_date <= '31.05.2014'

Це на високому рівні, як я б почав, хоча майже кожен крок, про який я згадував, нетривіальний, і справді кроляча нора може бути нескінченною, це повинно дати вам багато крапок для підключення.


1

Перетворювати прості запитання у відповіді не просто .

Перша технологія, яка зробила це якнайширше за всіма технологіями та точно, стане великим переможцем.

Однак є деякі, які заповнюють прогалини "відповідями на питання" за допомогою Штучного інтелекту (наприклад, IBM Watson та Amazon Alexa). Це вимагає вирішення мовних складностей, пов’язаних із розглянутими даними, що є у сховищах даних, а що таке іменники, дієслова та займенники.

Microsoft вирушив сюди з англійською запитом, але потім зупинився. Kueri.me - платформа на основі Python, яка робить приблизно те ж саме.

Структуровані мови запитів (SQL) тощо, SOQL, MDX, Hive, Impala та новіші версії переймаються старомодним SQL. Ще не замінили багато нічого, всі ці фрагменти - це невеликі виправлення до грандіозної "Кінцевої мети", що полягає у штучному інтелекті (AI), зокрема, у машинному навчанні.

Питання:

"Чи можете комп'ютер розібратися, що ви хочете."

Ще ні. Лінгвісти, математики, інженери та інші вимагають, щоб вони все-таки подавали свій шматок пирога, щоб ми могли насолоджуватися частиною цього солодкого торта «Штучний інтелект та машинне навчання».


0

Існує кілька підходів до створення аналізатора, який би розбирав звичайне текстове повідомлення в SQL. Наприклад, ви можете створити граматичний аналізатор і використовувати алгоритм NLP для побудови структурованого запиту. Якщо у вас вже є багато проаналізованих повідомлень з одного домену (наприклад, електронна комерція) - ви можете спробувати підхід до машинного навчання та використовувати його для подальшого розбору.

Однак я вважаю, що найкращим підходом є комбінування граматичного аналізатора для перекладу тексту в SQL, а ML для доповнення граматики на основі правил шляхом виправлення синтаксису, викорінення помилок друку тощо.

Дізнайтеся більше про різні підходи тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.