如何处理自然语言查询?


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'

Answers:


6

自然语言查询带来了许多复杂的问题,可能很难一概而论。从高层次上讲,我将从尝试用名词和动词来思考事物开始。

所以说一句话:上个月售出了几本书?

您将首先使用解析器将句子分解,该解析器将返回类似于以下的树格式:

在此处输入图片说明

您会看到其中有一本主题书,一个复合的口头短语表示过去的卖盘行为,然后是一个名词短语,您将焦点放在一个月的时间上。

我们可以进一步细分修饰词的主题:“多少”代表书籍,“最后”代表月份。

将句子分解后,需要将这些元素映射到sql语言,例如:多少=>计数,书籍=>书籍,已售=>销售,月份=> sales_date(间隔),等等。

最后,掌握了语言的要素之后,您只需要针对不同实体之间的交互方式制定一套规则,就可以做到:

从sales中选择count(*),其中item_type ='book'和sales_date> ='5/1/2014'和sales_date <='5/31/2014'

这是我的一个较高的起点,尽管我提到的几乎每个步骤都是不平凡的,实际上兔子洞可能是无穷无尽的,这应该给您提供了很多连接点。


1

至于简单的问题到答案不是简单的任何责任。

广泛且准确地做到这一点的第一项技术将是一个大赢家。

但是,仍然存在一些问题,用人工智能(例如IBM Watson和Amazon Alexa)“回答问题”来填补空白。这就要求解决与所讨论数据有关的语言复杂性,数据存储中的内容以及名词,动词和代词。

微软冒险用English Query在这里,但是后来停了下来。Kueri.me是一个基于Python的平台,几乎可以完成相同的工作。

SOQL,MDX,Hive,Impala和结构化查询语言(SQL)等更新版本采用老式SQL。尚未取代任何东西,所有这些都是对宏伟的“最终目标”的小修正,而这正是人工智能(AI),特别是机器学习。

问题是:

“计算机可以弄清楚您想要什么吗?”

还没。语言学家,数学家,工程师等都需要贡献自己的一份力量,以便我们可以品尝到一些甜美的人工智能和机器学习蛋糕。


0

有几种方法可以创建将纯文本消息解析为SQL的解析器。例如,您可以创建基于语法的解析器,并使用NLP算法来构建结构化查询。如果您已经有来自某个域(例如电子商务)的大量已解析消息,则可以尝试使用机器学习方法并将其用于进一步解析。

但是,我认为最好的方法是将基于语法的解析器用于文本到SQL的翻译,并将ML结合在一起,通过固定语法,消除拼写错误等来补充基于规则的语法。

在此处了解更多有关不同方法的信息

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.