Как обрабатывать запросы на естественном языке?

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, например: сколько => количество, книги => книга, продано => продажи, месяц => sales_date (интервал) и так далее.

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

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

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

neone4373
источник
1

Превращение простых вопросов в ответы не так просто .

Первая технология, которая сделает это так же широко и точно, станет большим победителем.

Тем не менее, есть некоторые, заполняющие пробелы «ответами на вопросы» с помощью искусственного интеллекта (например, IBM Watson и Amazon Alexa). Это требует решения языковых сложностей, связанных с рассматриваемыми данными, что находится в хранилищах данных, и что такое существительные, глаголы и местоимения.

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

Языки структурированных запросов (SQL) и тому подобное, SOQL, MDX, Hive, Impala и более новые версии используют устаревший SQL. Многое еще не заменили, все эти кусочки являются небольшими исправлениями для грандиозной «Конечной цели», которая заключается в искусственном интеллекте (ИИ), в частности, в машинном обучении.

Вопрос в том, что:

«Может компьютер, разберись, что ты хочешь».

Еще нет. Требуются лингвисты, математики, инженеры и многие другие, чтобы внести свой кусок пирога, чтобы мы могли насладиться этим сладким пирогом с искусственным интеллектом и машинным обучением.

трещотка
источник
0

Существует несколько подходов к созданию парсера, который бы анализировал текстовые сообщения в SQL. Например, вы можете создать синтаксический анализатор на основе грамматики и использовать алгоритм NLP для построения структурированного запроса. Если у вас уже есть много проанализированных сообщений из одного домена (например, электронная коммерция) - вы можете попробовать подход «Машинное обучение» и использовать его для дальнейшего анализа.

Тем не менее, я думаю, что лучший подход - это объединить синтаксический анализатор на основе грамматики для перевода текста в SQL и ML для дополнения грамматики на основе правил путем исправления синтаксиса, устранения опечаток и т. Д.

Узнайте больше о различных подходах здесь .

MicRum
источник