LLM在中文Text2SQL任务上的优化V2.0
LLM在中文Text2SQL任务上的优化V2.0
2024年8月26日修改
作者:王大锤
一.前言
背景
本文是根据Text2SQL的任务做的深度优化,主要是从中文Text2SQL任务中发现的问题进行总结归纳,然后根据业务问题提出候选的解决方案,并给出作者在此解决方案上的效果。
基线任务
基线任务是实现了2023年ACL上State of the Art一篇文章,文中提到DIN-SQL模型在中文Text2SQL任务上对比其他开源模型效果要好。作者在复现该文章的代码时,已经在prompt侧做了适当的优化,如加入了人设角色的信息,对 中文数据库 表schema的描述进行了优化等等。作者之前针对这个问题做了一版优化,有兴趣的读者可以阅读下面的文章,本文的实验是做V1.0任务上的进一步探索,欢迎各路大神留言指点。
附件不支持打印
二.问题
这期优化工作,主要围绕着业务中的三个问题来展开,相关的问题描述如下:
2.1 数据库描述问题
作者的实验的数据库Demo,为参考服务企业的业务功能,简化构建的中文数据集。该数据集对比开源的数据集增加了一些业务落地时的字段描述。示例如下:
代码块
//示例表(Demo版)
//作者这里主要增加了optional字段和primary_key字段信息
/*
table: 表名定义
columns:表中包含的列的描述信息,实践中一般会比较多,这里Demo版是用于debug的,相对简洁。
column中的字段描述如下:
name: 列名的定义
optional: 是否非空,取值为False时,表示该字段的属性值对应NOT NULL
data_type: 字段的数据类型,Demo版用的JAVA的类型表示的,可以改成数据库中的(string, int32等数据类型)
desc: 字段的中文描述,这里是对该列的中文解释
primary_key: 表示字段是否为主键,取值为True表示这个字段为主键
references: 表中涉及到的外键关系, table1.item_id = table2.item_id
references中的字段描述如下:
key: 当前表中的外键的字段名
foreign_table: 外键相关的表名
foreign_key: 外键相关的列名
desc: 外键的描述,格式为SQL中外键的定义格式,如示例中表示product_item_table.item_id
和store_info_table.item_id为外键关系
*/
{
"table": "product_item_table",
"columns": [
{"name": "item_id", "optional": False, "data_type": "String", "desc": "商品id", "primary_key": True},
{"name": "item_name", "optional": False, "data_type": "String", "desc": "商品名称", "primary_key": False},
{"name": "item_price", "optional": False, "data_type": "Float", "desc": "商品价格", "primary_key": False},
{"name": "item_sales_cnt", "optional": False, "data_type": "Integer", "desc": "商品销量", "primary_key": False},
{"name": "item_stock_cnt", "optional": False, "data_type": "Integer", "desc": "商品库存", "primary_key": False},
{"name": "item_ctr_7_days", "optional": True, "data_type": "Float", "desc": "商品七日点击率", "primary_key": False}
],
"references": [
{
"key": "item_id",
"foreign_table": "store_info_table",
"foreign_key": "item_id",
"desc": "FOREIGN KEY (item_id) REFERENCES store_info_table(item_id)"
}
]
}