如何处理自然语言查询?

数据挖掘 nlp
2021-09-26 04:34:10

我对自然语言查询很好奇。斯坦福大学拥有一套用于处理自然语言的强大软件我还看到了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'
4个回答

自然语言查询带来了许多难以概括的复杂性。从高层次上讲,我会从尝试用名词和动词来思考事物开始。

所以对于这句话:上个月卖了多少本书?

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

在此处输入图像描述

你可以看到有一个主题书,一个复合动词短语表示过去的卖出动作,然后是一个名词短语,你有一个月的时间焦点。

我们可以进一步分解修饰符的主题:书籍的“多少”和月份的“最后”。

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

最后,一旦你掌握了语言的元素,你只需要为不同的实体如何相互交互提出一组规则,这样你就可以:

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

这是我将如何开始的高层次,虽然我提到的几乎每一步都不是微不足道的,而且兔子洞真的是无穷无尽的,这应该会给你很多点来连接。

将简单的问题变成答案并不简单

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

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

微软在这里冒险使用English Query,但后来停止了。Kueri.me是一个基于 Python 的平台,做同样的事情。

结构化查询语言 (SQL) 等,SOQL、MDX、Hive、Impala 和较新的采用老式 SQL。还没有取代任何东西,所有这些都是对更宏大的“最终目标”的小修复,它在于人工智能 (AI),特别是机器学习。

问题是:

“电脑能不能,弄清楚你想要什么。”

还没有。语言学家、数学家、工程师和更多人都需要贡献自己的一份力量,这样我们才能享受到人工智能和机器学习的甜蜜蛋糕。

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

但是,我认为最好的方法是结合基于语法的解析器进行文本到 SQL 的翻译,以及通过修复语法、消除拼写错误等来补充基于规则的语法。

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