Closed lmolhw5252 closed 1 year ago
您好, 我们团队目前没有在Cspider上进行过测试(未来会做这件事),您可以先尝试使用多语言RoBERTa和T5重新训练一个支持中文的RESDSQL。我们在之前issues中也进行过相关讨论,请参考 #7 和 #11 。此外,由于Text2SQL部分使用的是seq2seq(T5)模型,因此它支持多表查询。
好的谢谢
您好, 我们团队目前没有在Cspider上进行过测试(未来会做这件事),您可以先尝试使用多语言RoBERTa和T5重新训练一个支持中文的RESDSQL。我们在之前issues中也进行过相关讨论,请参考 #7 和 #11 。此外,由于Text2SQL部分使用的是seq2seq(T5)模型,因此它支持多表查询。
替换为对应的mt5,进行微调所需要的算力大概是多少
@694344851 以我的经验,在默认float32精度下微调参数,T5-Base和T5-Large可以在一张24G的GPU(如3090)上进行训练,T5-3B则需要一张至少40G的GPU(如A6000)。当然,您可以尝试使用Deepspeed等工具包来节省训练时显存占用。
我测试过不使用natsql的,mt5-base,classifier 用xlm-roberta-base,bs = 6,其他没改 { "ckpt": "./models/text2sql-mt5-base/checkpoint-23324", "EM": 0.6692456479690522, "EXEC": 0.7195357833655706 }
@LightWind1 十分感谢您在CSpider上的测试!!您让我们团队看到RESDSQL在中文上表现出较好的跨语言能力 (Cross-lingual ability),同时展示出RESDSQL还有进一步挖掘的潜力,特别是对比了官方的leaderboard (https://taolusi.github.io/CSpider-explorer) 之后。从我们的论文中可以看到,增大模型(Base->Large->3B)参数规模可以进一步带来性能提升。因此,请问您后续打算在更大的mT5上训练吗,比如Large?3B?除此之外,Spider的natsql是否能和Cspider对应上呢?如果能,也许您可以尝试训练natsql版本的RESDSQL。
最后,再次感谢您对RESDSQL中文迁移能力的测试!
@lihaoyang-ruc 您客气。虽然我没尝试过mt5-Large,但是测试过mt5-small,base对比small是能够观察到性能提升的。这部分数据我没留存,我记得small的EM不到60。 目前正在尝试训练natsql版本,后续计划尝试利用DeepSpeed测试mt5-Large,我这里的算力资源比较有限,3B这个尺寸的模型就完全没办法尝试了。
@LightWind1 好的,明白。 算力的确是训练3B模型的一大阻碍,鉴于此,经过讨论,我们计划在后续推出CSpider上微调好的3B模型供大家使用。
我测试过不使用natsql的,mt5-base,classifier 用xlm-roberta-base,bs = 6,其他没改 { "ckpt": "./models/text2sql-mt5-base/checkpoint-23324", "EM": 0.6692456479690522, "EXEC": 0.7195357833655706 }
@LightWind1 大佬,直接跑preprocessing.py不报错吗? 另外能不能问下训练了多久
@LightWind1 好的,明白。 算力的确是训练3B模型的一大阻碍,鉴于此,经过讨论,我们计划在后续推出CSpider上微调好的3B模型供大家使用。
谢谢!那真的是太好了!请问大概什么时候发布
@liaoxingjian 计划在半个月内(5月15号之前)完成 ; )
跑了一下mt5+natsql,跑了十几个epoch内存炸了,但EXEC也有74,为什么在CSpider上也能得到这么高的EXEC呢,value在问题中都没有提到应该预测不出来吧
@xwt0016 你好,NatSQL提供的标注数据目前仅和Spider对齐,NatSQL在某些cases下并没有和CSpider进行对齐(大概有300多个),而且我发现大多数没有对齐的部分来自SQL中的values。我不建议在CSpider上直接使用我们的代码训练NatSQL版本。
这里是一些未对齐的例子:
NatSQL: select ref_feature_types.feature_type_name from other_available_features where other_available_features.feature_name = "AirCon"
Spider: SELECT T2.feature_type_name FROM Other_Available_Features AS T1 JOIN Ref_Feature_Types AS T2 ON T1.feature_type_code = T2.feature_type_code WHERE T1.feature_name = "AirCon"
CSpider: SELECT T2.feature_type_name FROM Other_Available_Features AS T1 JOIN Ref_Feature_Types AS T2 ON T1.feature_type_code = T2.feature_type_code WHERE T1.feature_name = "春秋航空公司"
----------------------------------------------------
NatSQL: select max ( performance.Share ) , min ( performance.Share ) from performance where performance.Type != "Live final"
Spider: SELECT max(SHARE) , min(SHARE) FROM performance WHERE TYPE != "Live final"
CSpider: SELECT max(SHARE) , min(SHARE) FROM performance WHERE TYPE != "决赛直播"
想在CSpider上训练RESDSQL的NatSQL版本,我们需要先针对CSpider修复未对齐的cases(因为我目前还没找到和CSpider对齐后的NatSQL数据集)。
除此之外,对于你的问题(EXEC为什么这么高?),我认为原因有很多。首先,在CSpider的大部分数据中,value会出现在问题中,mT5只需要从输入复制过来即可。另一个原因是EXEC这个指标可能出现false positives的情况,会导致EXEC偏高,详情可参考这篇文章:https://arxiv.org/pdf/2010.02840.pdf
@lihaoyang-ruc 感谢解答,我会再尝试一下sql版本的。但CSpider没有翻译数据库文件,数据库中的值还是英文的,从中文问题中复制得到值是不能得到正确的执行结果的,并且我查看了预测得到的pred.sql文件,其中的value确实是英文的,如:
select avg(singer.age) , min(singer.age) , max(singer.age) from singer where singer.country = "France"
select student.fname from Has_Pet join Student on Has_Pet.StuID = Student.StuID join Pets on Has_Pet.PetID = Pets.PetID where pets.pettype = "Cat"
我不知道模型是如何生成这些值的,France,Cat这些词应该没有在问题中出现过。
@xwt0016 这是因为NatSQL的value是英文的,因此模型学到生成value需要是英文的,模型可能在这个过程中隐式地做了“翻译”任务(中翻英)。
了解,
还想问一下如果要做和CSpider对齐的NatSQL数据集,是否将train_spider-natsql.json
和dev-natsql.json
中的NatSQL项中的value值替换为CSpider中的值就行了?
@xwt0016 是的,但在实际做的时候肯定会遇到一些“坑”,比如:
train_spider-natsql.json
只提供了Spider中标注的7000条数据的natsql,并没有包含其他single-domain数据集(比如Restaurants, GeoQuery, Scholar等)提供的1659条数据,而CSpider的训练集(也就是CSpider的train.json
)包含了完整的7000+1659=8659条数据。因此想获得CSpider对齐的NatSQL,需要把CSpider多余的1659条数据丢掉。dev_gold.sql
和train_gold.sql
依然是Spider中标注的英文SQL,因此不能直接用他们做模型评估。这两个问题也只是我目前遇到的,总之,将本项目迁移到CSpider上请务必注意各种细节。
最后,我们训练好3B模型(包括SQL和NatSQL两个版本)后会第一时间更新数据集,代码和模型 :)
我知道为啥CSpider上EXEC这么高了,因为只要值有中文,查询返回值就是空,评估的时候这部分应该都算作正确了
@xwt0016 是的,这就是EXEC指标中经常出现的false positives问题,但EM同样存在false negatives问题。关于Text2SQL评价指标的讨论和分析,可以参考Semantic Evaluation for Text-to-SQL with Distilled Test Suites。
3
请问你是用的哪个模型啊,我这里用的hfl/chinese-roberta-wwm-ext-large + google/mt5-base 跑出来的效果没有这么好呀
@LmrZER0 我这边观察到的结果一样,我使用的是xlm-roberta-large+mT5。base规模的mT5并没有跑出 @LightWind1 这么好的效果。 在我们的实验中,mT5-3B+NatSQL才能在development set上取得不错的性能:
Best EM+EXEC ckpt: {
'ckpt': './models/text2natsql-mt5-xl-cspider/checkpoint-167433',
'EM': 0.6634429400386848,
'EXEC': 0.811411992263056
}
一个有趣的发现是,在CSpider上,xlm-roberta-large在跨语言上的schema items classification表现很好,但是mT5的跨语言生成能力似乎没有想象中的那么好。
BTW,我们会在下周更新代码和训练好的模型。😉
@LmrZER0 我这边观察到的结果一样,我使用的是xlm-roberta-large+mT5。base规模的mT5并没有跑出 @LightWind1 这么好的效果。 在我们的实验中,mT5-3B+NatSQL才能在development set上取得不错的性能:
Best EM+EXEC ckpt: { 'ckpt': './models/text2natsql-mt5-xl-cspider/checkpoint-167433', 'EM': 0.6634429400386848, 'EXEC': 0.811411992263056 }
一个有趣的发现是,在CSpider上,xlm-roberta-large在跨语言上的schema items classification表现很好,但是mT5的跨语言生成能力似乎没有想象中的那么好。
BTW,我们会在下周更新代码和训练好的模型。😉
期待你的更新,想问一下你那边知道SQL转NatSQL吗?
@LmrZER0 这个问题我在一开始了解NatSQL的时候就有关注,但是目前还没有找到。NatSQL似乎没有公开SQL->NatSQL代码,只公开了NatSQL->SQL代码。
相似的问题也在这里被讨论过:https://github.com/ygan/NatSQL/issues/2
@LmrZER0 我这边观察到的结果一样,我使用的是xlm-roberta-large+mT5。base规模的mT5并没有跑出 @LightWind1 这么好的效果。 在我们的实验中,mT5-3B+NatSQL才能在development set上取得不错的性能:
Best EM+EXEC ckpt: { 'ckpt': './models/text2natsql-mt5-xl-cspider/checkpoint-167433', 'EM': 0.6634429400386848, 'EXEC': 0.811411992263056 }
一个有趣的发现是,在CSpider上,xlm-roberta-large在跨语言上的schema items classification表现很好,但是mT5的跨语言生成能力似乎没有想象中的那么好。
BTW,我们会在下周更新代码和训练好的模型。😉
非常期待新代码和训练好的模型了🤗🤗🤗
@@我后来做了一些与模型架构无关的调整,用mt5-large跑出来了这个数据。但是第一遍mt5-base的数据我自己也复现不出来了,现在这个能复现。我需要详细确认一下我都改了些啥,然后再与各位讨论。也许我的评估准确率有问题 { "ckpt": "./models/text2sql-mt5-large/checkpoint-249975", "EM": 0.7485493230174082, "EXEC": 0.7678916827852998 } { "ckpt": "./models/text2sql-mt5-large/checkpoint-669933", "EM": 0.7243713733075435, "EXEC": 0.7524177949709865 }
@LightWind1 你好,你能上传一下你那边mt5-large在CSpider上预测出的SQL吗(文本文件),我这边也跑一下评估脚本,看是否是评估准确率的问题。
@LightWind1 你好,你能上传一下你那边mt5-large在CSpider上预测出的SQL吗(文本文件),我这边也跑一下评估脚本,看是否是评估准确率的问题。
https://drive.google.com/file/d/1ERJLnTqLOOCT2BuKorsUXDCNfSR7Z08B/view?usp=share_link
@LightWind1 感谢配合。 我观察到生成SQL的WHERE语句的值很多都还是英文,但是CSpider把它们都翻译成中文了吧? 这是CSpider dev set的gold SQL文件:https://drive.google.com/file/d/1viyGC8f3HUWGizMrbkqUw-m_WVYOJwb2/view?usp=sharing 是不是在数据准备时出现了一些问题?因为CSpider确实有一些需要独特注意的地方。比如上面讨论过的这些:
@xwt0016 是的,但在实际做的时候肯定会遇到一些“坑”,比如:
train_spider-natsql.json
只提供了Spider中标注的7000条数据的natsql,并没有包含其他single-domain数据集(比如Restaurants, GeoQuery, Scholar等)提供的1659条数据,而CSpider的训练集(也就是CSpider的train.json
)包含了完整的7000+1659=8659条数据。因此想获得CSpider对齐的NatSQL,需要把CSpider多余的1659条数据丢掉。- 从CSpider官方网站下载的文件中,
dev_gold.sql
和train_gold.sql
依然是Spider中标注的英文SQL,因此不能直接用他们做模型评估。这两个问题也只是我目前遇到的,总之,将本项目迁移到CSpider上请务必注意各种细节。
最后,我们训练好3B模型(包括SQL和NatSQL两个版本)后会第一时间更新数据集,代码和模型 :)
@@我后来做了一些与模型架构无关的调整,用mt5-large跑出来了这个数据。但是第一遍mt5-base的数据我自己也复现不出来了,现在这个能复现。我需要详细确认一下我都改了些啥,然后再与各位讨论。也许我的评估准确率有问题 { "ckpt": "./models/text2sql-mt5-large/checkpoint-249975", "EM": 0.7485493230174082, "EXEC": 0.7678916827852998 } { "ckpt": "./models/text2sql-mt5-large/checkpoint-669933", "EM": 0.7243713733075435, "EXEC": 0.7524177949709865 }
这也太高了,看着像英文数据集上的结果 我跑mt5-large+natsql的结果: { "ckpt": "./models/text2natsql-t5-large/checkpoint-27489", "EM": 0.6508704061895552, "EXEC": 0.8075435203094777 }
@LightWind1 感谢配合。 我观察到生成SQL的WHERE语句的值很多都还是英文,但是CSpider把它们都翻译成中文了吧? 这是CSpider dev set的gold SQL文件:https://drive.google.com/file/d/1viyGC8f3HUWGizMrbkqUw-m_WVYOJwb2/view?usp=sharing 是不是在数据准备时出现了一些问题?因为CSpider确实有一些需要独特注意的地方。比如上面讨论过的这些:
@xwt0016 是的,但在实际做的时候肯定会遇到一些“坑”,比如:
train_spider-natsql.json
只提供了Spider中标注的7000条数据的natsql,并没有包含其他single-domain数据集(比如Restaurants, GeoQuery, Scholar等)提供的1659条数据,而CSpider的训练集(也就是CSpider的train.json
)包含了完整的7000+1659=8659条数据。因此想获得CSpider对齐的NatSQL,需要把CSpider多余的1659条数据丢掉。- 从CSpider官方网站下载的文件中,
dev_gold.sql
和train_gold.sql
依然是Spider中标注的英文SQL,因此不能直接用他们做模型评估。这两个问题也只是我目前遇到的,总之,将本项目迁移到CSpider上请务必注意各种细节。 最后,我们训练好3B模型(包括SQL和NatSQL两个版本)后会第一时间更新数据集,代码和模型 :)
确实是这个地方有问题,非常感谢您帮我指出问题。
代码和模型检查点已经更新,有任何问题欢迎在issue提出。
因为显卡的限制,作者提供的3B模型我无法直接使用,但是我用作者提供的xlm_roberta模型处理数据后然后用mt5-base模型训练出来的结果,感觉也还蛮不错的诶!(由于显存的限制,在训练模型的时候我的bs是3。)训练好的模型分享如下,希望可以给大家节省训练的时间。 链接: https://pan.baidu.com/s/1_e1vqlS2YuuZet8yS-flDA?pwd=fjr8 提取码: fjr8
@fz5400 感谢感谢,我这边也刚训练完base和large规模的mT5,代码和模型参数会在这两天更新的😊
@@我后来做了一些与模型架构无关的调整,用mt5-large跑出来了这个数据。但是第一遍mt5-base的数据我自己也复现不出来了,现在这个能复现。我需要详细确认一下我都改了些啥,然后再与各位讨论。也许我的评估准确率有问题 { "ckpt": "./models/text2sql-mt5-large/checkpoint-249975", "EM": 0.7485493230174082, "EXEC": 0.7678916827852998 } { "ckpt": "./models/text2sql-mt5-large/checkpoint-669933", "EM": 0.7243713733075435, "EXEC": 0.7524177949709865 }
我跑了一下,xlm-roberta-large
+ google/mt5-base
, batch_size=4
, 比你这个低不少,
{'ckpt': './models/text2sql-mt5-base-cspider/checkpoint-40196',
'EM': 0.5125725338491296, 'EXEC': 0.6992263056092843}
@lihaoyang-ruc 您客气。虽然我没尝试过mt5-Large,但是测试过mt5-small,base对比small是能够观察到性能提升的。这部分数据我没留存,我记得small的EM不到60。 目前正在尝试训练natsql版本,后续计划尝试利用DeepSpeed测试mt5-Large,我这里的算力资源比较有限,3B这个尺寸的模型就完全没办法尝试了。
请问您现在跑这个模型算力资源是咋样的
您好,请问有尝试过在Cspider数据集上进行测试吗? 可否实现多表查询呢?