jiacheng-ye / kg_one2set

[ACL 2021] Code for our ACL 2021 paper "One2Set: Generating Diverse Keyphrases as a Set"
https://arxiv.org/abs/2105.11134
74 stars 13 forks source link

a bug about [dec_layers] #1

Closed yuanyihan closed 3 years ago

yuanyihan commented 3 years ago

大佬,您好,我是小白 代码通过-dec_layers参数来制定模块的解码器的层数,但是,实际上没有作用。 因为Decoder代码文件的

self.input_fc = nn.Linear(self.embed.embedding_dim, d_model)
self.layer_stacks = nn.ModuleList([TransformerSeq2SeqDecoderLayer(d_model, n_head, dim_ff, dropout, layer_idx,  fix_kp_num_len, max_kp_num)  for layer_idx in range(6)])
self.embed_scale = math.sqrt(d_model)

里面直接给定了参数 ( for layer_idx in range(6)])),所以使得,至少出现以下bugs:

  1. state【初始化采用def init_state(self, encoder_output, encoder_mask)函数】严格按照num_layers,即-dec_layers,但是实际层数为6,当dec_layers小于6时,会提示state访问越界 File "d:\code\【study-see】\【源码】kg_one2set-master\pykp\modules\multi_head_attn.py", line 57, in forward prev_k = state.decoder_prev_key[self.layer_idx] IndexError: list index out of range
  2. 当-dec_layers不等于6时,参数不起作用。

另外,对于decoder代码里面出现num_layers=opt.enc_layers,我觉得不妥,您可以试着提取一个基类,使得decoder,encoder继承于他。

【这个项目,包括您的论文,我收益非常大,很感谢您的工作,我还在继续拜读您的论文和代码,十分感谢】

jiacheng-ye commented 3 years ago

您好,感谢关注,这部分代码确实不妥,已修改~

yuanyihan commented 3 years ago

嗯,感谢您的回复,您的工作,我收益颇大,再次感谢。 因为问题已修改,我就主动关闭issue了。 再次感谢您的工作。