赞
踩
Text2SQL是将自然语言文本(Text)转换成结构化查询语言SQL的过程,属于自然语言处理-语义分析(Semantic Parsing)领域的子任务。通过该技术,可以简化查询创建过程,一般适用于简单的选择查询和复杂的查询操作,如级联查询等等。
自然语言转换: 轻松将文本转换为结构化的SQL查询语句,方便不熟悉SQL的人员进行应用。
友好的交互方式: 落地时可以通过语音交互或者文本输入完成查询操作。
假设有以下数据表, 如: table_name=product_item_table:
用户输入: query = 查询近七日点击率大于0.1并且商品销量大于1000的商品名称。
返回结果: SELECT item_name FROM product_item_table WHERE item_ctr_7_days > 0.1 AND item_sales_cnt > 1000;
(2023-International Conference on Very Large Data Bases,VLDB,CCF-A)A survey on deep learning approaches for text-to-SQL
(2022-IEEE Transactions on Knowledge and Data Engineering,TKDE,CCF-A) A Survey on Text-to-SQL Parsing: Concepts, Methods, and Future Directions
(2022-International Conference on Computational Linguistics,COLOING,CCF-B) Recent Advances in Text-to-SQL: A Survey of What We Have and What We Expect
(2022-arXiv)Deep Learning Driven Natural Languages Text to SQL Query Conversion: A Survey
我们可以将Text2SQL任务拆解为2个大的部分,第一是利用LLM对用户的输入进行语义理解,然后结合数据库中表的结构信息,抽取出相关的字段信息。第二是利用抽取的字段信息生成结构化的SQL语句。对于SQL语句的执行,这部分的工作交给了应用层的服务。
Llama
2023年2月,Meta AI提出开源大模型Llama,有7b、13b、33b、65b共4种规模。
2023年7月,Meta AI提出第二代Llama系列开源大模型Llama 2,和Llama 1相比,训练数据多40%,上下文长度翻倍,模型有7b、13b、34b、70b共4种规格,但是34b没有开源。
ChatGLM
2023年3月,清华大学提出了开源的双语大模型ChatGLM,基于GLM框架,参数规格为6b。
2023年6月,清华大学提出了ChatGLM的第二代版本ChatGLM 2,规范为6b,具有更强的性能、更长的上下文、更高效的推理和更开放的许可。
Alpaca
2023年3月,斯坦福大学提出基于Llama 7b模型微调的开源大模型Alpaca,有7b共1种规格,训练更简单和便宜。
Vicuna
2023年3月,UC伯克利大学联合CMU、斯坦福大学提出的开源大模型Vicuna,有7b、13b共2种规格。
WizardLM
2023年4月,北京大学和微软提出进化指令大模型WizardLM,有7b、13b、30b共3种规格,2023年6月,提出了数学领域的大模型WizardMath,2023年8月提出了代码领域的大模型WizardCoder。
Falcon
2023年6月, 阿联酋提出了大模型Falcon,这是一种仅在网络数据集上训练的开源大模型,具有 1b、7b、40b和180b四个参数规范。值得注意的是,其中Falcon 40B的性能超过了LLaMA 65B。
BaiChuan
2023年9月,百川智能发布了百川2大模型,支持7b和13b两种规格。
Qwen
2023年4月,阿里云发布的大模型,支持7b和18b规格。
InternLM
2023年8月,上海AI实验室发布的大模型,支持7B和14B规格。
这里的信息抽取是根据用户的输入信息,抽取相关表的字段信息和对应的参数值。首先需要设置对应的prompt。
对于信息抽取的任务,我们可以简单的抽取相关的数据信息,在设置prompt信息时,可以简单地设计为如下格式:
通过第一步抽取到的schema信息和用户的输入,可以构建SQL生成的prompt,可以参考如下格式:
至此,LLM已经可以根据用户的描述生成对应的SQL语句了。
如果你采用上述的流程进行Text2SQL推理,流程上是可以跑通的,但是体验不怎么好,你可能会遇到下列问题:
1.回复的内容不是纯SQL语言,可能包含对生成内容的解释和说明。
解决方法: 优化对应的prompt结构,示例中仅给出了简单的instruction指令部分和每个子任务的输入和输出的结构,可以在此基础上进一步优化。
2. 子任务的拆解,便于LLM学习到因果关系。
示例中的子任务拆解,还可以进一步优化,并且优化后的效果在我们的对比实验上要更好,因为该操作可以让LLM更容易学习到具体的推理逻辑。
3.大模型幻觉问题。如: 查找近七日点击率大于5%的商品名称。
对于的数据的处理,可以适当地做下归一化处理,如将5%处理成0.05,就可以避免上述问题。
4.SFT优化,设计prompt时增加few-shot exsamples会比较zero-shot好。
5.LLM的fine-turning,条件允许,可以利用自己的数据集进行微调,以适配更复杂的业务场景,在上述的示例中,LLM能支持简单的SQL查询和简单的级联查询操作。对于复杂的SQL查询场景,需要对prompt进行更详细的设计和有监督训练。
6. LLM数据安全问题,一般数据库的数据会涉及到安全性问题,用本地化模块部署比GPT好。
这里直接上图(这里仅展示了2个case),测试的结果还是相对可以的。
这里的测试case2的输出结果是正确的,可以参考2张图一起看。从上述结果可以看出,LLM是支持简单的查询和级联查询。
文章中只是给出了Text2SQL业务的整体建模的方法,需要进行工业落地,还是有大量的工程问题要解决的,博主在此任务上,为众多创业公司提供了技术支持,在对应的业务场景下进行业务落地,有相关的业务合作可以联系作者哦。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。