Closed li-aolong closed 1 year ago
我们的代码在训练前会自动转换huggingface格式到fairseq https://github.com/HillZhang1999/SynGEC/blob/main/bash/chinese_exp/train_syngec_bart.sh#L28
好的,还想问一下如果只想训练一个bart baseline,不带有syngec的,应该怎么调整脚本呢
好的,非常感谢
你好,还想问下,训练bart模型之前的预处理,只需要对原始文本preprocess就行么,还是需要专门用bart的dict进行处理一下
好的,多谢
我用bash/chinese_exp/generate_syngec_bart.sh去生成结果,但这个是需要逐句输入的
然后我改用generate.py去生成,又有报错
这是生成脚本 CUDA_VISIBLE_DEVICES=7 python -u ${FAIRSEQ_DIR}/generate.py $data_bin \ --user-dir ../../src/src_syngec/syngec_model \ --task syntax-enhanced-translation \ --path ${MODEL_DIR}/checkpoint_best.pt \ --beam ${BEAM} \ --nbest ${N_BEST} \ --gen-subset test \ -s src \ -t tgt \ --batch-size 32 \ --num-workers 12 \ --remove-bpe \ --fp16 \ --results-path $OUTPUT_DIR
generate.py没有适配我们的模型,可能有问题。
interactive.py可以使用<
命令,对整个文件进行推理,不需要手动逐行输入。
好的,我再试试
还有想问一下评测nlpcc_test用的gold m2文件是哪个呢,test_gold.01,test_gold.0,test_gold.1
一般都是两位标注者的,test_gold.01 记得用pkuseg分词,具体可以参考我的MuCGEC仓库:https://github.com/HillZhang1999/MuCGEC/tree/main/tools/segment
好的,我用bart跑了一个nplcc的baseline结果,P: 53.07, R: 28.59, F: 45.31,这个结果已经和论文里syngec的45.32相当了
一开始我看loss以为跑出问题了,但是结果挺高
正如我们论文里汇报的,使用BART后再加入句法,确实效果比较微弱(~0.5),一方面是基线太高了,另一方面是预训练模型很有可能已经学会了很多句法信息。 不过虽然F0.5结果接近,你的Precision/Recall和我跑出来的差异还挺大的,估计是参数的原因,可以再探索探索。
嗯是,这个结果是baseline的还没有加句法信息,论文里是44.64,加句法的还没跑
你好,想再问一下,训练transformer和训练bart前对数据的preprocess是一样的吧,也就是可以共用同一个data-bin文件
对的
问一下,训练transformer对数据的preprocess所用的ditct也是chinese_vocab.count.txt这个么,还是要自动生成的
我跑transformer_big,验证集上的loss不降反升,因为--patience=5,在6个epoch就停了。用跑了6个epoch的ckpt去generate,结果还是乱句,这是因为还跑的不够么
preprocess:
python $FAIRSEQ_DIR/preprocess.py --source-lang src --target-lang tgt \
--user-dir ../../src/src_syngec/syngec_model \
--task syntax-enhanced-translation \
--trainpref ${data_path}/train/train.char \
--validpref ${data_path}/valid/valid.char \
--testpref ${data_path}/test/test.char \
--destdir $data_bin \
--workers $WORKER_NUM \
--labeldict ../../data/dicts/syntax_label_gec.dict \
--srcdict ../../data/dicts/chinese_vocab.count.txt \
--tgtdict ../../data/dicts/chinese_vocab.count.txt
train:
CUDA_VISIBLE_DEVICES=8 python -u $FAIRSEQ_CLI_PATH/train.py $data_bin \
--save-dir $model_dir \
--tensorboard-logdir $log_dir \
--user-dir ../../src/src_syngec/syngec_model \
--task syntax-enhanced-translation \
--arch syntax_enhanced_transformer_big \
--skip-invalid-size-inputs-valid-test \
--max-tokens 8192 \
--optimizer adam \
--max-source-positions 256 \
--max-target-positions 256 \
--lr 5e-04 \
--warmup-init-lr 1e-07 \
--warmup-updates 4000 \
-s src \
-t tgt \
--lr-scheduler inverse_sqrt \
--clip-norm 1.0 \
--criterion label_smoothed_cross_entropy \
--label-smoothing 0.1 \
--max-epoch 60 \
--share-all-embeddings \
--adam-betas '(0.9,0.98)' \
--log-format tqdm \
--log-interval 500 \
--find-unused-parameters \
--fp16 \
--keep-last-epochs 10 \
--patience 5 \
--seed $SEED
generate:
CUDA_VISIBLE_DEVICES=8 python -u ${FAIRSEQ_DIR}/interactive.py $data_bin \
--user-dir ../../src/src_syngec/syngec_model \
--task syntax-enhanced-translation \
--path ${MODEL_DIR}/checkpoint6.pt \
--beam $BEAM \
--nbest 1 \
-s src \
-t tgt \
--buffer-size 10000 \
--batch-size $batch_size \
--num-workers 12 \
--log-format tqdm \
--remove-bpe \
--fp16 \
--output_file $output_file \
< $input_file
results:
朝菜是。
首先,,,,,,,。
这是我你人人。
另外,,人欢。
这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这这
不是是。
随国国国国国国。
用chinese_vocab.count.txt; 这个问题我没有遇见过,因为我是8卡训练的,可能参数和你不一样,我这里重新调参了下,如下的设置在单卡训练可以取得和论文中较为接近的结果:
CUDA_VISIBLE_DEVICES=6 nohup python -u $FAIRSEQ_CLI_PATH/train.py $PROCESSED_DIR_STAGE1/bin \
--save-dir $MODEL_DIR_STAGE1 \
--user-dir ../../src/src_syngec/syngec_model \
--task syntax-enhanced-translation \
--arch syntax_enhanced_transformer_big \
--skip-invalid-size-inputs-valid-test \
--max-tokens 10240 \
--optimizer adam \
--max-source-positions 128 \
--max-target-positions 128 \
--lr 8e-05 \
--warmup-init-lr 1e-08 \
--warmup-updates 4000 \
-s src \
-t tgt \
--lr-scheduler inverse_sqrt \
--clip-norm 1.0 \
--criterion label_smoothed_cross_entropy \
--label-smoothing 0.1 \
--max-epoch 100 \
--share-all-embeddings \
--adam-betas '(0.9,0.98)' \
--log-format tqdm \
--find-unused-parameters \
--fp16 \
--keep-last-epochs 10 \
--patience 5 \
--seed $SEED >${MODEL_DIR_STAGE1}/nohup.log 2>&1 &
CPT给的chinese bart是基于huggingface的,要用fairseq跑的话是需要转化一下吗,想问下有没有转换好的模型