Closed 290251949 closed 3 months ago
您指的是生成式的大模型?让语言模型生成哪些表和列会被用到?
对的,我看到一些文章有用deepseek 或者一些其他代码大模型做schema filter操作,https://arxiv.org/pdf/2402.01117。所以想问下您这边有对比过生成式大模型的效果会比roberta效果好吗?
我碰巧读过这篇文章,我明白你的疑惑是什么,让我来分析一下。
生成式模型能不能做schema filter? 毋庸置疑,生成式模型绝对能做schema filter。正如T5论文里传达的想法,绝大部分任务都能被建模成“序列到序列”的生成式范式,包括很多自然语言理解任务(NLU tasks)。因此将schema filter这个任务建模成“序列到序列”交给大模型是绝对可以的。输入是完整的database schema + question,输出是过滤后的database schema。
我为什么不考虑使用生成式模型? 这个问题在2022年做RESDSQL的时候就被问过。为什么?1. 响应用户请求的效率。生成式模型的一个明显缺点就是token-by-token的生成,本身text-to-SQL这个任务就需要生成式模型来生成SQL查询,这个过程已经很占用时间了(如果SQL的tokens很多的话),如果说这时候schema filter也是生成式的,那么我们的pipeline中就需要额外引入生成“过滤后的database schema”的时间;2. 难以控制top-k的选取。schema filter在本质上是一个ranking任务,根据对问题的相关程度对表和列进行排序。如果建模成生成式任务,那么当模型的输出缺少一些重要的表和列,我们是完全没办法进行补救的。
判别式模型(也就是RoBERTa)的好处是什么? 针对以上提到的问题,我在RESDSQL这篇文章里将schema filter做成了一个判别式模型(backbone是RobERTa),它的好处就很明显了。1. 高效。判别式模型只需要一次前向传播即可拿到tables和columns的相关性分数,不需要token-by-token的生成(对于生成式模型而言,每生成一个token都是一次前向传播)。2. 更好控制top-k的选取,因为判别式模型的输出是相关性分数,因此我们可以排序后按照top-k进行筛选,k的取值对我们来讲是自由的,我们可以手动把k选的比较大,从而覆盖一些重要的表和列。
DTS-SQL这篇文章做了什么事情?和RESDSQL有什么联系和区别? 在我看来,DTS-SQL是把RESDSQL里的提出的schema filter从一个判别式模型换成了生成式模型(Deepseek-Coder),然后把RESDSQL里的用到的生成式模型T5也换成了更强大的Deepseek-Coder。它们背后的思想和目标是一样的,只不过在实践的时候用了不同的“工具”而已。
至于你的说的效果,如果我们抛开效率不谈,在参数量一样的情况下,我猜测他们的效果应该是差不多的,毕竟背后都是Transformer,核心还是question和schema之间的语义相似度。当然这也只是我个人的猜测,需要更多实验来佐证这一观点。
好的。感谢您的回复,看完有了清晰的理解,获益匪浅。
请问schema filter有试过用大模型微调吗,效果会比Roberta效果好吗?