Nlp 如何在Keras上的seq2seq模型中添加注意层

Nlp 如何在Keras上的seq2seq模型中添加注意层,nlp,deep-learning,keras,lstm,attention-model,Nlp,Deep Learning,Keras,Lstm,Attention Model,根据这篇文章,我写了这个模型: enc_in=Input(shape=(None,in_alphabet_len)) lstm=LSTM(lstm_dim,return_sequences=True,return_state=True,use_bias=False) enc_out,h,c=lstm(enc_in) dec_in=Input(shape=(None,in_alphabet_len)) decoder,_,_=LSTM(decoder_dim,return_sequences=Tr

根据这篇文章,我写了这个模型:

enc_in=Input(shape=(None,in_alphabet_len))
lstm=LSTM(lstm_dim,return_sequences=True,return_state=True,use_bias=False)
enc_out,h,c=lstm(enc_in)
dec_in=Input(shape=(None,in_alphabet_len))
decoder,_,_=LSTM(decoder_dim,return_sequences=True,return_state=True)(dec_in,initial_state=[h,c])
decoder=Dense(units=in_alphabet_len,activation='softmax')(decoder)
model=Model([enc_in,dec_in],decoder) 
如何在解码器之前向该模型添加注意层?

您可以使用

  • 您需要
    pip安装keras self-attention
  • 从keras_self_attention导入层
    ,导入SeqSelfAttention
    • 如果要使用tf.keras而不是keras,请在导入之前添加以下内容
    • 确保您正在使用keras忽略上一个标志,因为它会导致不一致
  • 因为您使用的是keras函数API

    enc_out, h, c = lstm()(enc_in)
    att = SeqSelfAttention()(enc_out)
    dec_in = Input(shape=(None, in_alphabet_len))(att)
    
    我希望这能回答你的问题,以及未来的读者


  • 这是自我关注。然而,对于seq2seq,您通常希望在编码器和解码器状态之间引起注意。那么,您有什么建议?我不知道Bahdanau或Luong attention是否有Keras包装器,但是有一个简洁的TensorFlow 2.0教程,用于seq2seq的翻译。这里有一个简单的方法来增加注意力: