如上图所示,我需要创建一个混合编码器 - 解码器网络(seq2seq),它将单词和字符嵌入作为输入。 如图所示,考虑一下句子:
一只可爱的猫
假设词汇中的单词是:
a,cat
和词汇单词是:
可爱
我们将 a,cat 这些词作为各自的嵌入词 但由于可爱超出了词汇量,我们通常会通过嵌入通用令牌来提供它。
但是在这种情况下,我需要通过另一个seq2seq图层逐个字符传递那个独特的单词(可爱的,这是词汇外),以生成其嵌入在飞。
两个seq2seq层必须端到端地共同训练。 以下是我的代码片段,其中我尝试了主编码器解码器网络,该网络在 Keras
中采用基于字的输入model=Sequential()
model.add(Embedding(X_vocab_len+y_vocab_len, 300,weights=[embedding_matrix], input_length=X_max_len, mask_zero=True))
for i in range(num_layers):
return_sequences = i != num_layers-1
model.add(LSTM(hidden_size,return_sequences=return_sequences))
model.add(RepeatVector(y_max_len))
# Creating decoder network
for _ in range(num_layers):
model.add(LSTM(hidden_size, return_sequences=True))
model.add(TimeDistributed(Dense(y_vocab_len)))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
这里X是我的输入句子,y是要生成的句子,词汇量大小是我固定的由频繁的词组成的词汇,根据词汇量大小,词汇量被认为是词汇量不足
这里我在Keras创建了一个顺序模型,我在其中添加了由GloVe生成的预训练矢量的嵌入(embedding_matrix)
如何建模输入来实现这样的服务?