cubenlp / ChatSQL

自然语言转SQL,直接连接数据库查询
Apache License 2.0
365 stars 48 forks source link

关注下 #1

Open danger-dream opened 1 year ago

danger-dream commented 1 year ago

之前有用NL2SQL、DuSQL数据集Ptuning过ChatGLM,泛化效果并不好。后来我也自己建模板生成领域内训练集测试,也不行。

几个原因

1是通常我们建表都会做拆分,比如净收益率、损失率、进球次数这类值基本都是多表实时计算来的,像数据集那样统计类型的表很少

2是比如你代码中prompt.py#L44的这个例子 用户在问"问题"时通常不会知道表里都有哪些表和字段。比如"矿泉水是从那进的货",了解sql的话应该都知道是查cargo、supply_company,但llm没法把矿泉水和cargo_name关联(训练集足够的话可以,但如果在换成“干脆面”就又不行了),也没法把"从那进"和supply_company关联

liaoxingjian commented 1 year ago

in-context的例子似乎是针对特定数据库的,如果用户处理自己的数据库怎么办

yysirs commented 1 year ago

之前有用NL2SQL、DuSQL数据集Ptuning过ChatGLM,泛化效果并不好。后来我也自己建模板生成领域内训练集测试,也不行。

几个原因

1是通常我们建表都会做拆分,比如净收益率、损失率、进球次数这类值基本都是多表实时计算来的,像数据集那样统计类型的表很少

2是比如你代码中prompt.py#L44的这个例子 用户在问"问题"时通常不会知道表里都有哪些表和字段。比如"矿泉水是从那进的货",了解sql的话应该都知道是查cargo、supply_company,但llm没法把矿泉水和cargo_name关联(训练集足够的话可以,但如果在换成“干脆面”就又不行了),也没法把"从那进"和supply_company关联

对的,我感觉这个问题可能需要使用 问句改写的方法 去解决

yysirs commented 1 year ago

in-context的例子似乎是针对特定数据库的,如果用户处理自己的数据库怎么办

这个倒是提醒我了,我后续研究一下动态的in-context 的prompt

danger-dream commented 1 year ago

之前有用NL2SQL、DuSQL数据集Ptuning过ChatGLM,泛化效果并不好。后来我也自己建模板生成领域内训练集测试,也不行。 几个原因 1是通常我们建表都会做拆分,比如净收益率、损失率、进球次数这类值基本都是多表实时计算来的,像数据集那样统计类型的表很少 2是比如你代码中prompt.py#L44的这个例子 用户在问"问题"时通常不会知道表里都有哪些表和字段。比如"矿泉水是从那进的货",了解sql的话应该都知道是查cargo、supply_company,但llm没法把矿泉水和cargo_name关联(训练集足够的话可以,但如果在换成“干脆面”就又不行了),也没法把"从那进"和supply_company关联

对的,我感觉这个问题可能需要使用 问句改写的方法 去解决

我试过做prompt的数据增强,一开始用paddlenlp,增强后我都看不懂。然后用chatgpt-3.5来生成,ptuning了几次,效果都不算好,也是泛化能力问题以及语义跟表、字段、字典间关联的问题。

训练集大概3千多条,做完增强在4万条左右,加上表名、字段名、字典的问答,4.4万。

chatglm-6b做这个看不到希望了,抽空试试moss,用插件的思路来做,只是没想好咋构建数据集

yysirs commented 1 year ago

in-context的例子似乎是针对特定数据库的,如果用户处理自己的数据库怎么办

这个也可以配置成yaml文件,外挂出来,我后续也搞一下

yysirs commented 1 year ago

之前有用NL2SQL、DuSQL数据集Ptuning过ChatGLM,泛化效果并不好。后来我也自己建模板生成领域内训练集测试,也不行。 几个原因 1是通常我们建表都会做拆分,比如净收益率、损失率、进球次数这类值基本都是多表实时计算来的,像数据集那样统计类型的表很少 2是比如你代码中prompt.py#L44的这个例子 用户在问"问题"时通常不会知道表里都有哪些表和字段。比如"矿泉水是从那进的货",了解sql的话应该都知道是查cargo、supply_company,但llm没法把矿泉水和cargo_name关联(训练集足够的话可以,但如果在换成“干脆面”就又不行了),也没法把"从那进"和supply_company关联

对的,我感觉这个问题可能需要使用 问句改写的方法 去解决

我试过做prompt的数据增强,一开始用paddlenlp,增强后我都看不懂。然后用chatgpt-3.5来生成,ptuning了几次,效果都不算好,也是泛化能力问题以及语义跟表、字段、字典间关联的问题。

训练集大概3千多条,做完增强在4万条左右,加上表名、字段名、字典的问答,4.4万。

chatglm-6b做这个看不到希望了,抽空试试moss,用插件的思路来做,只是没想好咋构建数据集

可以滴,我后续也打算加入MOSS,毕竟MOSS是16B,生成能力可能更强点。针对SQL领域内的Fine-tuning,如:LORA,这些,后续我也会尝试去做,到时候可以一起交流讨论。

highroom commented 1 year ago

关注下,大佬些有好的方法了也分享一下

highroom commented 1 year ago

推荐可以看看 https://github.com/csunny/DB-GPT/tree/main

yysirs commented 1 year ago

推荐可以看看 https://github.com/csunny/DB-GPT/tree/main

这个也有看到,学习一波👍