无对抗训练训练SST2数据集LSTM模型后缺失model.py及复现问题求助
TextAttack训练LSTM模型后缺失model.py导致攻击失败的问题
问题概述
无对抗训练场景下,使用TextAttack训练基于SST2数据集的LSTM模型后,best_model目录未生成预期的model.py文件,导致无法加载模型执行后续攻击操作。
复现步骤
- 执行训练命令:
textattack train --model lstm --dataset sst2 --epochs 20 --early-stopping-epochs 3
- 执行攻击命令:
textattack attack --model-from-file ./outputs/2024-11-28-11-41-55-920215/best_model/model.py \ --dataset-from-huggingface sst2 \ --attack-recipe deepwordbug \ --log-to-txt results_deepwordbug.txt
- 触发错误,回溯信息如下:
textattack: Loading datasets dataset sst2, split train. textattack: Loading model and tokenizer from file: ./outputs/2024-11-28-11-41-55-920215/best_model/model.py textattack: Loading module from `./outputs/2024-11-28-11-41-55-920215/best_model/model.py`. Traceback (most recent call last): File "/Users/skywarrior/Desktop/texattack/textattack-env-310/lib/python3.10/site-packages/textattack/model_args.py", line 192, in _create_model_from_args model_module = load_module_from_file(args.model_from_file) File "/Users/skywarrior/Desktop/texattack/textattack-env-310/lib/python3.10/site-packages/textattack/shared/utils/importing.py", line 63, in load_module_from_file spec.loader.exec_module(module) File "<frozen importlib._bootstrap_external>", line 879, in exec_module File "<frozen importlib._bootstrap_external>", line 1016, in get_code File "<frozen importlib._bootstrap_external>", line 1073, in get_data FileNotFoundError: [Errno 2] No such file or directory: '/Users/skywarrior/Desktop/texattack/./outputs/2024-11-28-11-41-55-920215/best_model/model.py'
二次异常:
Traceback (most recent call last): File "/Users/skywarrior/Desktop/texattack/textattack-env-310/bin/textattack", line 8, in <module> sys.exit(main()) File "/Users/skywarrior/Desktop/texattack/textattack-env-310/lib/python3.10/site-packages/textattack/commands/textattack_cli.py", line 49, in main func.run(args) File "/Users/skywarrior/Desktop/texattack/textattack-env-310/lib/python3.10/site-packages/textattack/commands/attack_command.py", line 31, in run model_wrapper = ModelArgs._create_model_from_args(attack_args) File "/Users/skywarrior/Desktop/texattack/textattack-env-310/lib/python3.10/site-packages/textattack/model_args.py", line 194, in _create_model_from_args raise ValueError(f"Failed to import file {args.model_from_file}.") ValueError: Failed to import file ./outputs/2024-11-28-11-41-55-920215/best_model/model.py.
预期行为
训练完成后,best_model目录应生成model.py文件,支持加载模型执行攻击操作。
额外需求
希望复现TextAttack论文中的对抗训练图表,但训练+攻击流程未走通,需协助完成复现并理解结果可复现性。
系统信息:
- 操作系统:MacOS
- 相关库版本:待补充(如torch、transformers等)
- TextAttack版本:待补充
解决方案建议
1. 修正模型加载方式
TextAttack训练LSTM模型时,默认生成的是权重文件model.pt而非model.py。--model-from-file参数用于加载自定义Python模型文件,加载预训练权重应使用--model-path参数。修正后的攻击命令:
textattack attack --model lstm \ --model-path ./outputs/2024-11-28-11-41-55-920215/best_model/model.pt \ --dataset-from-huggingface sst2 \ --attack-recipe deepwordbug \ --log-to-txt results_deepwordbug.txt
2. 检查训练输出与依赖版本
- 先查看
best_model目录下的文件,确认模型保存的格式和文件名; - 补充TextAttack、torch、transformers等依赖的具体版本,不同版本的模型保存逻辑可能存在差异;
- 查看训练日志,确认模型是否成功保存,以及保存路径是否正确。
3. 复现对抗训练图表的步骤
- 执行对抗训练:运行带对抗训练的命令,示例:
textattack train --model lstm --dataset sst2 --epochs 20 --early-stopping-epochs 3 --attack-recipe deepwordbug --num-train-adv-examples 1000 --seed 42
- 对比攻击测试:分别用相同攻击方式测试普通训练模型和对抗训练模型,记录攻击成功率、模型准确率、置信度变化等指标;
- 生成图表:用Matplotlib或Seaborn将收集到的数据绘制成对比图表(如攻击成功率柱状图、模型性能变化曲线);
- 验证可复现性:固定随机种子(上述命令中的
--seed 42),重复多次训练和攻击实验,确认结果的稳定性。
内容的提问来源于stack exchange,提问作者SAHBAAZ ANSARI
相关产品推荐
相关产品推荐

