guided_summarization icon indicating copy to clipboard operation
guided_summarization copied to clipboard

关于代码的问题

Open Sunjc234 opened this issue 2 years ago • 9 comments

您好,我在运行BERT部分代码的时候,将mode参数设为Oracle时这个函数会因为cal_lead为FALSE,selected_ids未被初始化而报错,请问lead、和oracle分别对应您论文中的哪部分呢,方便的话请您告知,非常感谢 ` def test(self, test_iter, step, cal_lead=False, cal_oracle=False):

    # Set model in validating mode.
    def _get_ngrams(n, text):
        ngram_set = set()
        text_length = len(text)
        max_index_ngram_start = text_length - n
        for i in range(max_index_ngram_start + 1):
            ngram_set.add(tuple(text[i:i + n]))
        return ngram_set

    def _block_tri(c, p):
        tri_c = _get_ngrams(3, c.split())
        for s in p:
            tri_s = _get_ngrams(3, s.split())
            if len(tri_c.intersection(tri_s))>0:
                return True
        return False

    if (not cal_lead and not cal_oracle):
        self.model.eval()
    stats = Statistics()

    can_path = '%s_step%d.candidate'%(self.args.result_path,step)
    gold_path = '%s_step%d.gold' % (self.args.result_path, step)
    with open(can_path, 'w') as save_pred:
        with open(gold_path, 'w') as save_gold:
            with torch.no_grad():
                for batch in test_iter:
                    gold = []
                    pred = []
                    if (cal_lead):
                        selected_ids = [list(range(batch.clss.size(1)))] * batch.batch_size
                    for i, idx in enumerate(selected_ids):
                        _pred = []
                        if(len(batch.src_str[i])==0):
                            continue
                        for j in selected_ids[i][:len(batch.src_str[i])]:
                            if(j>=len( batch.src_str[i])):
                                continue
                            candidate = batch.src_str[i][j].strip()
                            _pred.append(candidate)

                            if ((not cal_oracle) and (not self.args.recall_eval) and len(_pred) == 3):
                                break`

Sunjc234 avatar Apr 28 '22 07:04 Sunjc234

你好,lead和oracle在PreSumm里有汇报,我们没有用过这个代码。在我们的文章里面,对于BART,我们用的这个脚本提的oracle并且在Table 4/5汇报的结果。

zdou0830 avatar Apr 28 '22 16:04 zdou0830

非常感谢您的回复,请问你在训练BERTABS+Guidance Signals的模型时用的是BERT文件夹下面的代码吗。我在使用highligted_sentence_data.py对训练集进行处理后,使用了下面的命令,但是测试结果的rouge分数很低,我不清楚是否是命令行参数有误。如果您能帮我看一下参数,我会非常感激。 训练命令 python z_train.py -task abs -mode train -bert_data_path /clusters/data_1080Ti_0/LCSTS/guided_summarization-master/bert/data/cnndm -dec_dropout 0.2 -model_path /clusters/data_1080Ti_0/LCSTS/guided_summarization-master/bert/save_models -sep_optim true -lr_bert 0.002 -lr_dec 0.2 -save_checkpoint_steps 2000 -batch_size 60 -train_steps 200000 -report_every 50 -accum_count 5 -use_bert_emb true -use_interval true -warmup_steps_bert 20000 -warmup_steps_dec 10000 -max_pos 512 -visible_gpus 0,1 -log_file /clusters/data_1080Ti_0/LCSTS/guided_summarization-master/bert/logs/abs_bert_cnndm 测试命令 python -W ignore z_train.py -task abs -mode test -batch_size 3000 -test_batch_size 1500 -bert_data_path /clusters/data_1080Ti_0/LCSTS/PreSumm-master/bert_data/bert_data_cnndm_final/cnndm -log_file logs/test.logs -test_start_from 2000 -sep_optim true -use_interval true -visible_gpus 0 -max_pos 512 -max_length 200 -alpha 0.95 -min_length 50 -result_path /clusters/data_1080Ti_0/LCSTS/guided_summarization-master/bert/results/cnndm_

Sunjc234 avatar May 05 '22 14:05 Sunjc234

是用的BERT文件夹的代码。我现在能看到的你的参数和https://github.com/neulab/guided_summarization/blob/master/bert/train.sh不一样的地方主要是batch_size,特别是只用了2张卡,而我用了4张,所以accum_count可能要提高。问一下你的rouge score最后是多少,还有测试阶段的guidance signal是怎么得到的?

zdou0830 avatar May 06 '22 02:05 zdou0830

是用的BERT文件夹的代码。我现在能看到的你的参数和https://github.com/neulab/guided_summarization/blob/master/bert/train.sh不一样的地方主要是batch_size,特别是只用了2张卡,而我用了4张,所以accum_count可能要提高。问一下你的rouge score最后是多少,还有测试阶段的guidance signal是怎么得到的? 非常感谢您的仔细回复,我的训练集和测试集都直接运行highligted_sentence_data.py文件进行的处理,不知道是不是我在添加信号时步骤不对。在训练6400步后的rouge分数依然为 `--------------------------------------------- 1 ROUGE-1 Average_R: 0.01776 (95%-conf.int. 0.01753 - 0.01797) 1 ROUGE-1 Average_P: 0.20982 (95%-conf.int. 0.20801 - 0.21165) 1 ROUGE-1 Average_F: 0.03241 (95%-conf.int. 0.03202 - 0.03280) 1 ROUGE-2 Average_R: 0.00000 (95%-conf.int. 0.00000 - 0.00000) 1 ROUGE-2 Average_P: 0.00000 (95%-conf.int. 0.00000 - 0.00000) 1 ROUGE-2 Average_F: 0.00000 (95%-conf.int. 0.00000 - 0.00000) 1 ROUGE-L Average_R: 0.01775 (95%-conf.int. 0.01753 - 0.01797) 1 ROUGE-L Average_P: 0.20981 (95%-conf.int. 0.20801 - 0.21165) 1 ROUGE-L Average_F: 0.03241 (95%-conf.int. 0.03202 - 0.03279)

[2022-05-06 23:48:18,045 INFO] Rouges at step 64000

ROUGE-F(1/2/3/l): 3.24/0.00/3.24 ROUGE-R(1/2/3/l): 1.78/0.00/1.77`

在未在训练集中添加guidance signal时(BERTABS)的训练结果一切正常,可以达到四十分左右。但在测试集与训练集均加入guidance signal后分数脱离了正常值。不知道是否是我测试集或者训练集添加guidance signal有误。在训练集添加guidance signal而测试集未添加guidance signal时分数也类似地脱离了正常值。所以也可能是我在训练集中添加guidance signal有误。我是直接在presumm中下载的已经预处理后的数据集,然后直接在这个数据集上运行了highligted_sentence_data.py文件。不知道我是不是操作有误。期待您的回复

Sunjc234 avatar May 06 '22 16:05 Sunjc234

好像有人说训练的时候acc有的时候会突然变得很低,不知道你有没有遇到这种情况。可能把decoder的lr调小会好(0.2->0.1)。但是我没有遇到过这种问题。

zdou0830 avatar May 07 '22 00:05 zdou0830

你好,我也遇到了rouge评分很低的问题,预测出来的句子全是,请问有什么解决办法吗

daidaiwu115 avatar Jul 03 '22 06:07 daidaiwu115

你好,我也遇到了rouge评分很低的问题,预测出来的句子全是,请问有什么解决办法吗 就是编解码器学习率的问题,我的理解改成双编码器之后应该提高编码器学习率或者降低解码器学习率,但是具体数值要根据数据集处理的来确定,但主要修改方向就是提高编码器学习率或者降低解码器学习率

Sunjc234 avatar Jul 03 '22 06:07 Sunjc234

好的 感谢回复 我去修改试试

daidaiwu115 avatar Jul 03 '22 06:07 daidaiwu115

就是编解码器学习率的问题,我的理解改成双编码器之后应该提高编码器学习率或者降低解码器学习率,但是具体数值要根据数据集处理的来确定,但主要修改方向就是提高编码器学习率或者降低解码器学习率

---- 回复的原邮件 ---- | 发件人 | @.> | | 日期 | 2022年07月03日 14:18 | | 收件人 | @.> | | 抄送至 | @.@.> | | 主题 | Re: [neulab/guided_summarization] 关于代码的问题 (Issue #46) |

你好,我也遇到了rouge评分很低的问题,预测出来的句子全是,请问有什么解决办法吗

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

Sunjc234 avatar Oct 11 '22 07:10 Sunjc234