我正在开发一个 Bi-LSTM 模型并想为其添加一个注意力层。但我不知道如何添加它。
我当前的模型代码是
model = Sequential()
model.add(Embedding(max_words, 1152, input_length=max_len, weights=[embeddings]))
model.add(BatchNormalization())
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Bidirectional(LSTM(32)))
model.add(BatchNormalization())
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.summary()
Run Code Online (Sandbox Code Playgroud)
模型摘要是
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding_1 (Embedding) (None, 1152, 1152) 278396928
_________________________________________________________________
batch_normalization_1 (Batch (None, 1152, 1152) 4608
_________________________________________________________________
activation_1 (Activation) (None, 1152, 1152) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 1152, 1152) 0
_________________________________________________________________
bidirectional_1 (Bidirection (None, 64) 303360
_________________________________________________________________
batch_normalization_2 (Batch (None, 64) 256
_________________________________________________________________
activation_2 (Activation) (None, 64) 0
_________________________________________________________________
dropout_2 (Dropout) …Run Code Online (Sandbox Code Playgroud) 我想在 LSTM 的嵌入层中使用 BERT 词向量嵌入,而不是通常的默认嵌入层。我有什么办法可以做到吗?
我已经构建了编码器-解码器的 Seq2Seq 模型。我想为其添加一个注意力层。我尝试通过此添加注意力层,但没有帮助。
这是我最初的代码,没有注意
# Encoder
encoder_inputs = Input(shape=(None,))
enc_emb = Embedding(num_encoder_tokens, latent_dim, mask_zero = True)(encoder_inputs)
encoder_lstm = LSTM(latent_dim, return_state=True)
encoder_outputs, state_h, state_c = encoder_lstm(enc_emb)
# We discard `encoder_outputs` and only keep the states.
encoder_states = [state_h, state_c]
# Set up the decoder, using `encoder_states` as initial state.
decoder_inputs = Input(shape=(None,))
dec_emb_layer = Embedding(num_decoder_tokens, latent_dim, mask_zero = True)
dec_emb = dec_emb_layer(decoder_inputs)
# We set up our decoder to return full output sequences,
# and to return internal states …Run Code Online (Sandbox Code Playgroud) 0
我正在使用 BERT Word Embeddings 进行带有 3 个标签的句子分类任务。我正在使用 Google Colab 进行编码。我的问题是,由于我每次重新启动内核时都必须执行嵌入部分,有没有办法在生成这些词嵌入后保存它?因为,生成这些嵌入需要很多时间。
我用来生成 BERT Word Embeddings 的代码是 -
[get_features(text_list[i]) for text_list[i] in text_list]
Run Code Online (Sandbox Code Playgroud)
在这里,gen_features 是一个函数,它为我的列表 text_list 中的每个 i 返回词嵌入。
我读到将嵌入转换为凹凸不平的张量,然后使用 np.save 可以做到。但我实际上不知道如何编码。
请帮忙。