allennlp 允许seq2seq模型使用多个解码器层,

jdzmm42g  于 6个月前  发布在  其他
关注(0)|答案(8)|浏览(64)

你好,
我正在使用allennlp-model进行一些生成任务。
我发现在seq2seq中的所有模型都使用LSTMCell进行解码。这使得我很难使用2(或更多)层LSTM。但是,Transformer解码器可以很容易地扩展到更多层。
我在不知道的情况下想知道这种设置在某些情况下是否有意义?

fwzugrvs

fwzugrvs1#

@schmmd 我将Allennlp与Open-NMT进行了比较,似乎我们在训练和验证中使用相同的代码进行生成。这使得很难使用多层解码器。有什么解决方法吗?

sf6xfgos

sf6xfgos2#

抱歉打扰,您能给我一些关于如何在allennlp-model中构建一个两层LSTM解码器的方法吗?我尝试过但失败了。

iq3niunx

iq3niunx3#

我对这段代码不太熟悉,但在我看来,你需要修改 LstmCellDecoderNet ,以便使用两个 LSTMCell 而不是一个。你可以修改 previous_state 来携带来自这两个单元格的输出,可以作为连接后的Tensor,也可以分开。也许 @epwalsh 对这方面更了解?

ttisahbt

ttisahbt4#

你可以在此处查看我们在语义解析代码中是如何处理这个问题的:https://github.com/allenai/allennlp-semparse/blob/c8bbe4e9fdf4fcb82af4e7c5360e80d51e0898eb/allennlp_semparse/state_machines/transition_functions/basic_transition_function.py#L80-L85。如果你想提交一个PR,那么在seq2seq代码中做类似的更改将会很好。

kuarbcqp

kuarbcqp5#

你好,
我为这个功能添加了两个新的PR,一个是针对allennlp-models的#90,另一个是针对allennlp的#4462
在allenlp-models中的更改很容易。但是我不确定我在#4462(beam_search)中的更改是否正确。状态接受类似于(batch, *)的Tensor,但多层次解码器的解码器状态是(num_layers, batch_size, *)。所以我在这些相关状态中添加了一个新维度。
由于我不熟悉beam_search中的代码,你能帮我判断这些代码吗?@matt-gardner

pokxtpni

pokxtpni6#

你好,

我只是想在这个帖子后面加上一句话,因为我目前正在使用copynet_seq2seq,并且希望添加多层解码器功能,因为我想要使用多层双向LSTM编码器。这个功能在计划中吗?我猜这与上面提到的实现类似。谢谢!

wtzytmuj

wtzytmuj7#

你好,@shimengfeng,将这个功能添加到CopyNet的近期路线图上并不是我们的首要任务,但我认为这是一个很棒的功能。我们非常欢迎对此做出贡献。

xmjla07d

xmjla07d8#

太棒了,我这个周末会试一试。谢谢你的确认。

相关问题