如果我们要满足数据库的普通用户的需求,我们必须突破目前阻碍这些用户自由使用他们的母语的障碍。------Ted Codd
这段评论是在谈论1974年的情境下提出的,当时Ted Codd构想了一种名为Rendezvous的基于对话的系统,旨在让普通用户能够有效地与结构化数据库进行交流。这个项目是在他提出关系模型用于数据库管理之后开始的,这也为他赢得了图灵奖。然而,当时这个项目缺乏完全的资源支持,自然语言处理领域处于萌芽阶段,数字化文本和计算资源也十分匮乏。在过去的50年里取得了巨大进步,特别是在自然语言处理领域,计算资源的成本也显著降低。这样的进步将Codd对Rendezvous的愿景推到了当前研究和发展的前沿。
本章通过与ChatGPT进行的短期会话介绍了这个主题,展示了该领域取得的进展。介绍之后将讨论在实际部署自然语言界面到数据库时面临的挑战,以及本书将涵盖的内容。
一个与ChatGPT的对话
ChatGPT是由OpenAI开发的聊天机器人,建立在一系列大型语言模型(LLMs)之上,包括GPT-3.5和GPT-4。该聊天机器人使用一组大型语言模型来模仿人类对话,每个模型都针对一些特定任务进行训练。使用这些语言模型使得聊天机器人能够撰写文章、回答问题、创作音乐和编写代码。ChatGPT能够记住同一对话中的先前提示,使对话更加自然。
考虑一个包含在图1.1中显示的模式的数据库。数据库有一个名为teams的表,记录了团队名称及其所在城市,还有一个名为games的表,记录了不同团队之间的比赛情况。每场比赛都有一个主队和一个客队,对于每场比赛,主队和客队的得分分别用hscore和vscore表示。
假设我们想找出所有与Oilers进行比赛的团队,并且我们想要用SQL来表达这个查询。有了ChatGPT的帮助,我们将表定义和查询作为提示提供给ChatGPT。表1.1显示了给出的提示,而聊天机器人的响应显示在红色字体中。在没有提供任何额外信息的情况下,聊天机器人确定hscore指的是主队的得分,vscore指的是客队的得分,并生成了一个正确的SQL查询。我们的提示以冒号而不是分号结束第一个表定义,但聊天机器人简单地忽略了这个拼写错误。我们在提示中进一步输入了另外三个查询,聊天机器人在每种情况下都返回了正确的SQL查询,如表1.2所示。这里可以做出几点观察。首先,聊天机器人记住了上下文,并假设这是前一个会话的延续,因此使用了先前给出的表来编写查询。其次,在输入中对拼写错误不太敏感。例如,查询"Write a SQLite query to teams.. . ."缺少了"find"一词,但聊天机器人仍然给出了正确的SQL查询。第三,聊天机器人对提示格式不太敏感。我们的最后一个查询以英语中的查询开头,没有前面查询中给出的前缀。聊天机器人从上下文中知道需要一个SQL查询,并提供了该查询。最后,所有生成的SQL查询将计算出正确的结果,尽管有些生成的SQL查询会给出额外的未被要求的信息。例如,最后两个查询只询问了团队名称,但生成的SQL查询不仅会给出团队的名称,还会给出他们的胜负次数。此外,对于最后一个查询,条件"losses = 0"是多余的。
ChatGPT并非孤立开发的。它建立在自然语言处理和代码生成领域许多先前模型和技术的基础上,包括对数据库的自然语言接口(NLIDBs)的过去工作。对ChatGPT发展做出贡献的一些关键创新包括神经网络架构的进步,比如Transformer模型,以及利用大量的训练数据来改进语言理解能力。此外,诸如迁移学习和微调等技术已帮助模型适应更广泛的领域和任务。
NLIDBs in the Wild
随着我们目睹的NLIDB模型,特别是基于LLM的聊天机器人如ChatGPT的重大进展,预计这些新模型将被纳入许多商业产品和数据库接口中。微软已经开始将ChatGPT添加到其Office 365产品中,包括Word和Powerpoint,以及其Bing搜索引擎。没有理由不将ChatGPT添加到Microsoft SQL Server和其他商业数据库系统中。
甚至在强大的基于LLM的聊天机器人出现之前,越来越多的商业产品以某种形式支持自然语言查询,以便业务用户以自然语言提问并查询数据。例如,在2022年Gartner Analytics和BI平台魔力象限报告中提到的20家供应商中,超过一半在某种程度上提供NLIDB支持。在本节中,我们将从现有商业产品中提供具体示例,讨论NLIDB支持的关键方面。我们的目标是帮助读者全面了解野外NLIDB的关键设计决策,并获得评估和比较此类产品所需的必要知识和框架。
语言支持
我们可以将一个NLIDB分为支持受控自然语言(CNLs)和支持(任意)自然语言两种类型,如果它限制了输入的语法和词汇,则属于支持CNLs;如果没有限制,则属于支持(任意)自然语言。使用CNLs的好处在于通过语法上的约束减少或消除歧义,并减少理解完整自然语言的复杂性。表1.3展示了对CNL的关键词汇和格式的部分全面文档。许多商业产品没有明确强加这种约束,并选择帮助系统能够理解的查询输入。
我们还可以根据是否支持一个自然语言来将NLIDB分为单语言或多语言。许多商业产品中的NLIDB是单语言的(通常是英语)。与此同时,少数产品提供多语言支持:例如,Oracle Analytics支持多达28种语言。
辅助查询输入
在商业产品中,NLIDB支持通常提供以下常见的辅助功能,以加快查询的制定过程并减少输入错误:
-
自动完成(Autocomplete):自动完成(也称为输入提示)在用户输入时预测其余部分。它引导用户提供系统已经理解的关键词和术语。例如,当用户在查询中输入"sales"时,NLIDB可能会提供几种可能的方式来完成查询,都以字符串"sales"开头。
-
自动更正(Autocorrect):自动更正会自动纠正常见的拼写或打字错误,并提供首字母缩写和同义词匹配。例如,NLIDB可以将拼写错误的"cafilornia"自动更正为"california",并将"revenue"匹配到其同义词"sales"。
-
查询建议(Query Suggestion):查询建议提供用户在输入过程中可以从中选择的可能查询列表,以减少查询输入的工作量,并帮助用户找到系统能够理解的查询。
-
查询推荐(Query Recommendation):查询推荐建议根据预先确定的数据集自动确定或手动指定的查询。它通过引导用户提出哪些类型的查询,以及为有限了解系统或数据的用户提供更有趣的结果或难以表述的查询方向,来促进数据探索过程。
我们将在第7章中更详细地讨论这些功能。
表达能力
我们可以按照以下维度对NLIDB的表达能力进行分类:
- 查询复杂度:NLIDB支持的查询复杂度取决于它能够将问题转化为的查询语言类型和特定子集。最流行的底层查询语言包括SQL和SPARQL。一些系统支持特定于底层数据存储的自定义查询语言(例如,阿里云TableStore)。一些系统可能支持跨多个具有不同查询语言的数据存储的问题。几乎所有系统都支持简单的选择(例如,"显示收入")、过滤(例如,"在美国")、聚合(例如,"过去5年")、以及排名/排序(例如,"按金额排序")。然而,通常不支持需要嵌套查询的更复杂情况(例如,"显示按销售总额排序的国家")。
- 数据功能:NLIDB可以允许用户指定除了查询之外的其他类型的数据功能。数据功能可以是内置函数或用户定义的函数。图1.2显示了一个示例问题"未来6周的成本",对应于内置的预测函数。
- 可视化控制:NLIDB可以允许用户在问题中指定用于结果显示的可视化方式。
定制性
为了确保NLIDB支持能够在特定客户数据上正常工作,NLIDB需要使用户能够通过定制或通过与用户交互学习隐式地进行支持定制化。支持定制性的常见功能包括:
-
同义词:同义词支持是实现定制性的最常见功能。它允许底层NLIDB扩展其词汇容量并理解更多术语。NLIDB可以允许用户显式地指定同义词,从用户交互(例如查询重构)中学习,并利用外部知识库(如WordNet)。
-
领域支持:NLIDB也可以事先定制以理解其客户重要领域中的语言。例如,图1.3中所示的NLIDB理解"best-selling"在"加利福尼亚州的畅销类别是什么?"中意味着最高收入,并具有对销售、营销和零售领域的内置支持。
未来展望
本书全面审视了自然语言与数据库接口的关键概念,包括查询理解和意义表示、将查询转化为结构化形式、数据模型和查询语言、评估指标和基准、将结构化数据转化为文本以及与交互性相关的问题。相关主题分布在多个研究领域,包括数据库系统、自然语言处理、机器学习、人机交互和可视化,我们的目标是充分涵盖这些主题,可能填补一些可能阻碍进一步发展的差距和脱节。本书涵盖了导致更强大NLIDB接口的一些技术进展。它还突出了关键的基本概念和一些挑战与研究机会。本书的其余部分分为以下三个部分。
第一部分由第2章和第3章组成,介绍了NLIDB和数据库的关键概念。具体而言,第2章介绍了NLIDB的解剖,讨论了传统基于管道的方法的关键组件以及构建基本管道的一些常见方法。第3章介绍了数据模型和查询语言,重点介绍了在行业和研究社区中占主导地位的关系模型。它突出了SQL的关键组件,从功能和引入的难度级别的角度,以及优化和评估查询时的一些问题。
本书的第二部分涵盖了NLIDB的核心部分:从文本到数据和从数据到文本。第4章介绍了第一部分-从文本到数据。这个组件将自然语言表达映射到诸如SQL之类的形式查询语言。我们全面审视了相关概念和关键组件。评估预期能够跨领域和不同数据库方案工作的文本到数据模型一直是一个挑战。第5章回顾了一些已经发展的评估方法,包括新兴的评估指标和基准。一个NLIDB不仅局限于将自然语言表达映射到可以执行以从数据库中提取数据的形式语言。它通常包括将以表格形式返回的结果转化或描述为自然语言。第6章全面审视了数据到文本生成的这一主题。
最后,第7章介绍了交互性,这是NLIDB的一个关键方面,影响其有效性和实用性。在本章中,我们介绍了交互的不同维度,并讨论了从拼写纠正到会话式NLIDB等相关的适用技术。