你们中的一些人可能熟悉FactEngine(www.factengine.ai)。FactEngine旨在彻底改变人们对数据库和数据库查询的看法。这似乎是一个大胆的举动,但数据库行业已经陷入困境一段时间了,直到最近人们还在要求更多并得到它。从1990年代初开始,我记得人们尝试使用自然语言查询来让普通人更容易访问数据库。那时,结构化查询语言(SQL)风靡一时,他们使用的关系型数据库已经成为行业的主导。关系数据库的主要问题是SQL编写起来冗长且逆向工程耗时。也就是说,如果您有一个不成文的SQL查询,有时很难理解它的含义。例如,上面的SQL查询看起来像这样:[时间表预订].WeekDay,[时间表预订].PeriodNr,[时间表预订].RoomRoomNr,[讲师].EmailAddress,[时间表预订].ClassIdFROMLecturer,School,Faculty,TimetableBooking,Room,Position,TimeslotWHERELecturer.SchoolId=School.SchoolIdANDSchool.FacultyId=FacultyFacultyIdANDTimetableBooking.FacultyId=Faculty.FacultyIdANDTimetableBooking.RoomRoomNr=Room.RoomRoomNrANDLecturer.PositionId=Position.PositionIdANDTimetableBooking.Semester=Timeslot.SemesterANDTimetableBooking.WeekDay=Timeslot.WeekDayANDTimetableBooking.PeriodNr=Timeslot.PeriodNrANDRoom.RoomName='A1'我知道,对吧?那是什么意思?因此,长期以来,人们一直在寻找用自然语言查询数据库的方法,以使他们的生活更轻松。所谓图形数据库出现的部分原因是查询语言更自然地容纳所述实体之间的谓词。这更侧重于自然语言。例如,如果某人是我们数据库中其他人的朋友,我们可能会编写如下图查询*:MATCH(p1:person)-[:FRIEND-WITH]-(p2:person)WHEREp1.name="Jack"RETURNp2.name我知道,对吧?所有的点和破折号、大写字母、冒号都有含义。使用FactEngine,您只需编写:>一个简单的自然语言查询。图片由作者提供。FactEngine的美妙之处在于它具有底层语言架构(受控的自然语言),无论您是在图形数据库还是关系数据库上运行都无关紧要。在之前的一篇文章中我解释了为什么任何关系型数据库都可以认为是图数据库,而所有的数据库都是多模型的吧,他们的想法不一样。通俗地说,就是任何数据库都可以用自然语言查询,即使是被控制的。任何数据库也可以作为图数据库进行查询。原因是主要的两类数据库(图形数据库和关系数据库)在概念上是同构的。通俗地说,这意味着它们在概念上可以被认为是相同的。但是让我们回到自然语言查询和受控自然语言。什么是受控自然语言?顾名思义,受控自然语言是一种自然语言语法,可以在一定程度上控制你说什么和怎么说。足够优雅的受控自然语言看起来像普通自然语言,因为自然语言当然是其核心。由FactEngine控制的自然语言之所以有效,是因为它与其他语言同构。就是说……您不必担心您是在关系数据库还是专用图形数据库上操作……您需要知道的是,所有数据库都可以被视为一种图形数据库。这样您就可以在任何数据库上使用一种语言。FactEngine自然语言查询之旅以前被誉为“万灵药”。这样做的原因是,大多数自然语言查询(NLQ)尝试都依赖某种形式的推理来将自然语言映射到查询语言和数据库结构,而不是始终保证所需结果的纯算法方法。NLQ中常用的推理引擎依赖于消除自然语言句子的歧义,就像人脑消除复杂的、有时是模棱两可的句子的歧义一样。在这方面,NLQ推理引擎有可能像误解自然语言一样误解自然语言查询。事实上,如果你想象一个人工智能将军(AGI)和任何活着的人一样聪明,你的人工智能将不会比那个人提供更好的消歧机会。这是一个查询数据库的问题,您需要在其中准确回答结构良好的查询。受控的自然语言提供了一种解决方案,至少在AGI可以提出问题来消除句子歧义并自行解决查询之前是这样。即便如此,即使AGI做到了......AGI仍然能够解析查询吗?答案必须是某种结构化查询,首先可能是受控的自然语言查询。因此,要达到FactEngine今天的水平,FactEngine需要一个允许构建受控自然语言查询的基础设施。我之前的公司Viev为实现这一目标努力了11年,开发了一种波士顿概念建模工具,该工具可帮助用户开发包含自然语言结构的数据模型,并使用对象角色建模作为模型开发的基础。但FactEngine也需要一个理由。除了自然语言概念查询的明显优势外,推动市场发展的是市场上现有技术的现状。图查询在易读性方面是SQL的飞跃,而要达到自然语言查询让今天的图查询语言相比之下显得原始的地步,我们需要另一个层面的突破性技术。FactEngine的主要动机是当作者第一次看到数据库Grakn的查询语言时。一个典型的Grakn查询看起来像这样:$m)isacontains;$p2isaperson;$p!=$p2;$ass($i,$p2$)isaassignment;$commisacomment;$t($i,$comm)isaperson;$p3isaperson;$p2!=$p3;$auth2($comm,$p3)isaauthorship;$i2isaissue;$dep($i,$i2)isadependency;limit5;offset0;get;我知道,对吧?这是什么意思Grakn称其为“高级查询语言”。说得够多了……FactEngine中的相同查询如下所示:>图片由作者提供。话虽如此,Grakn是通过将其他语言贬低为原始语言来挑战其他语言的,所以接受这个挑战是为了阐明一种高级查询语言应该是什么样子。自然语言查询有什么好处?受控的自然语言查询提供与可比较的SQL和图形查询相同的实用程序,真正的好处是让软件真正帮助您首先编写查询的实用程序。下面是帮助人们在FactEngine中编写自然语言查询的软件的快照:>FactEngine协助编写数据库查询。图片由作者提供。易于编写查询已成为人工智能时代的热门话题。人们对他们的数据库和伴随的查询语言有更多的期望。人们不希望成为一名IT专家来从数据库中获取结果。提供自然语言查询允许面向客户的应用程序将查询数据库的工具直接交到客户手中,而无需将工作交给更多的技术人员。事实上,如果你看看现有的SQL和图形数据库技术,它几乎就像是为了让生活变得困难和限制技术头脑的访问而设计的。这会浪费时间和资源。数据和技术的民主化主要是通过让普通人更容易获得技术市场来扩大技术市场。另一个好处是自然语言很容易被人类阅读。一旦写好,自然语言查询就可以很容易地与其他人共享,他们一读就会知道查询是什么。SQL等技术上现存的查询语言和当前的图形查询语言(FactEngine知识语言除外)都来自于一切都太困难的时代。这个想法是''(空格)字符很难被视为一个字符,所以我们将使用MATCH(p1:person)-[:FRIEND-WITH]-(p2:person)而不是WHICHPersonisafriendWHICHPerson2的。或者,很难让计算机将自己的diff变量分配给实体,所以我们最终得到$p3isaperson。$p2!=$p3;代替人3不是人2。虽然让事情变得困难并且没有计算机为您完成工作可能会让技术人员继续工作,但这并不是很有帮助或以客户为中心。它还嘲笑艺术的感知和优雅。让计算机为您完成繁重的工作也需要时间,因此将产品推向市场会给客户提供不太熟练的解决方案。因此,FactEngine拥有13年的对象角色建模软件研发和超过30年的对象角色建模和基于事实的建模研究。基于事实的建模将自然语言(包括空格和短语)视为数据库中概念建模问题的一部分。典型的对象角色模型如下所示:>对象角色模型。图片由作者提供。对象角色建模(ORM)软件很难编写,这就是市场上没有太多ORM软件的原因。基于事实的建模(FBM)也是如此。然而,一旦拥有合适的ORM/FBM软件,就有可能实现非凡的事情。例如,很容易将模型可视化为关系数据库的实体关系图(ERD)或图形数据库的属性图模式(PGS)。例如:>同构映射:对象角色建模、实体关系图、属性图模式。因此,从技术上讲,您需要一个适当的基于事实的建模元模型,您就可以开始了。涉及的内容更多,但这是专有的。不用说,您的客户不必担心他们是在图形数据库还是关系数据库上操作,他们需要关心的只是能够简单轻松地在该数据库上编写查询。我们在哪里FactEngine是一种新型的商业数据库查询语言技术。对于直接到SQL的1:1映射,该技术相当成熟和不断发展。Neo4j等图形查询语言具有SQLO/JDBC驱动程序,因此使用SQL和图形数据库进行概念验证是既成事实。世界其他地方在哪里?好吧……我们知道一个,这就是FactEngine的诞生方式;)
