作者:黄思行与李亮,灵感来自 Maruthi Prithivirajan Lokananthan。
1 尝试一种新的 Doctor.ai 实现方式
1.1 知识图谱是语义化的图数据库。
我们将学科知识转化为一系列的“主谓宾”并导入到图数据库中。知识图谱能够整合多个来源的知识。它们能够为应用程序提供上下文和深度,从而提升用户体验。从谷歌的 Infoboxs 到亚马逊音乐,我们都可以看到知识图谱的身影。
在庞大的医疗行业,知识图谱能够让医疗知识和病历数据的存取变得更容易。
一方面,医生们能更好的知道病人的情况,凭借数据去进行诊断和制定治疗方案,接触到最新的医疗发展。
另一方面,病人能够得到更多精准的医疗建议和了解更多的医疗方案。然而,我们要编写 SPARQL 或 Cypher 来查询知识图谱。就是说,目前程序员们垄断了知识图谱的操作。
我们作者想要改变这一现象。我们要开发一个机器人,它能够将英文,德语或中文问题变成查询语句并且用它们来查询知识图谱来得出问题的答案。有了它,每个人都可以自由地畅游知识图谱和知识本身。
1.2 我们的解决方案是 Doctor.ai。
在我们先前的文章中详细描述了 Doctor.ai。它由三个部分组成:一个包括了四个公共数据库的 Neo4j 的知识图谱,一个自然语言处理引擎和一个 React 的前端。
所有的组件都是可以用不同的软件实现,不受任何单一软件厂商的牵制。开始的时候,我们用 AWS Lex 来作为我们的自然语言处理引擎,但后来我们转而使用 GPT-3。我们用 Alan AI 提高了语音识别的正确率。我们甚至可以更改图里的数据,从而将 Doctor.ai 改变为 HR.ai,Forestry.ai 或 Logistics.ai。
通过逐步的优化,现在的 Doctor.ai 已是一个非常实用的机器人。当然,它还有很大的改进空间。
首先,当前基于的 GTP-3 的 Doctor.ai 将查询输出直接发给用户,没有进行任何语言上的修饰。所以答案是非常的粗糙的。就像这个例子,当我们询问:“引起牛痘的病原体是什么?”,Doctor.ai 只能简单地说:”牛痘病毒“。如果它能说“牛痘病原体的病毒是牛痘“就更好了。
第二,这个机器人是个文字机器人。比起来自日本的漂亮BEBOT,Doctor.ai 只能展示文字和表格,目前还不支持多媒体。
这些都不是什么大碍。我们已经想出了简单的解决方法。例如,为了解决第一个问题,我们可以用完整的 Alan Studio 来作为自然语言处理的引擎。
Alan Studio 是一个聊天机器人全套解决方案。像 AWS Lex,我们可以在 Alan 中,对每个不同类型的问题设计一些回答套路。这样,回答就会显得更丰富更人性化。
至于第二点,我们可以编写一些自定义的 React 组件来进行多媒体的展示。
在这篇文章,我们将向你展示这两个方案。确切的说,我们将用 Alan Studio 作为自然语言处理引擎来处理自然语言。并且我们将使用 Neovis.js 在聊天栏中以网络图的方式来展示 Neo4j 的查询结果。
本文的代码可以在我们的 GitHub 仓库找到。