我需要为结构化数据库开发自然语言查询工具。我尝试了两种方法。
在第一种情况下,我做了一些 NLP 步骤,通过删除停用词、词干提取、最后使用特征语法映射来映射关键字来格式化自然查询。这种方法适用于简单的场景。
然后我转向第二种方法。在 JSON 中查找数据并获取对应的列名和表名,然后构建 sql 查询。对于这个,我还实现了删除停用词,使用 javascript 进行词干提取。
这两种技术都有局限性。我想实现语义搜索方法。
任何人都可以建议我更好的方法来做到这一点..
NLIDB(数据库的自然语言接口)的语义解析是一个非常发达的领域,有许多技术:基于规则的方法(涉及语法)或机器学习技术。它们涵盖了大范围的查询输入,并提供了比纯 NL 处理或正则表达式方法更多的结果。
我喜欢的技术是基于基于特征的上下文无关语法FCFG。对于初学者,在 NTLK 书中可在线获取,查找字符串“sql0.fcfg”。代码示例显示了如何通过特征“SEM”或 FCFG 的语义将 NL 短语结构查询“What cities are located in China”映射到 SQL 查询“SELECT City FROM city_table WHERE Country="china”。
我推荐卡文顿的书
他们会帮助你走得更远。这些 PDF 可从他的 site.
下载正如我评论的那样,我认为您应该添加一些代码,因为不是每个人都读过这本书。
无论如何,我的结论是,是的,正如你所说,它有很多限制,实现更复杂查询的唯一方法是编写非常广泛和完整的语法产品,这是一项非常艰苦的工作。
更现代的答案是我们需要使用大型语言模型,例如https://openai.com或https://text-generator.io 一个接受过文本和 SQL 培训,然后是一个提示,例如 https://text-generator.io/use-cases/sql-code-generation
在处理它返回的输出时要小心,它可能在各种方面都是错误的并且需要清理,而且给出的提示需要列/表名称来知道如何查询数据库以及类似查询的其他示例。
对于验证,您可能必须构建类似于 ide 自动修复语法的验证,例如例如错过任何右大括号