TAG出自2024年8月的论文《Text2SQL is Not Enough: Unifying AI and Databases with TAG》(github),它是一种结合了text2sql和RAG的用LLM来回答基于数据库的自然语言问题。
论文作者认为现实中用户的业务问题有两种重要的类型:1. 要求世界知识;2. 要求语义理解能力。而现有的text2sql或者RAG方法对于这两类问题的处理都不是很好,于是提出了如论文图1所示意的TAG框架,TAG以自然语言请求R作为输入,以基于数据源的自然语言A作为回答,它定义了三个关键步骤。
- Query Synthesis (syn):将用户的自然语言请求R转换成一个可执行的数据库查询语句Q。个人理解这一步即通常的text2sql要做的事情。
- Query Execution (exec):在数据库系统上执行查询Q并得到相关数据T。
- Answer Generation (gen):让LLM基于自然语言请求R和数据T生成回答;这一步就对应着RAG框架里的生成步骤。在图1的例子里,数据T被编码成了字符串后与问题一起作为LLM的输入。这一步会利用模型的语义推理能力来得到答案。
在提出TAG框架后,论文作者基于BIRD数据集构建了一个测试基准。构建时有两种修改方法:1. 将BIRD原来的问题修改需要世界知识,比如要求查询Bay Area的学校;2. 将问题修改为需要推理能力,比如获取数据集里的top 3讽刺评论。 评估这些修改后的问题依赖于人工标注的金标准。基准一种包括80个修改后的问题,40个要求世界知识,40个要求推理能力,match-based, comparison, ranking, aggregation这四种查询类型均匀分布。
最后,论文基于TAG框架做了试验,结果如下表所示。看完这部分后对试验有两个疑问:1.选择的text2sql的基准不是在BIRD上排名靠前的方法,就是一个很简单的prompt LLM的方法。2. 为什么TAG的实现是Hand-written TAG呢?