def _get_encoded_sentence_variables(self, sent1_input_layer, sent2_input_layer, dropout,
embedding_file, tune_embedding):
if embedding_file is None:
if not tune_embedding:
print >>sys.stderr, "Pretrained embedding is not given. Setting tune_embedding to True."
tune_embedding = True
embedding = None
else:
# Put the embedding in a list for Keras to treat it as initiali weights of the embeddign layer.
embedding = [self.data_processor.get_embedding_matrix(embedding_file, onto_aware=False)]
vocab_size = self.data_processor.get_vocab_size(onto_aware=False)
embedding_layer = Embedding(input_dim=vocab_size, output_dim=self.embed_dim, weights=embedding,
trainable=tune_embedding, mask_zero=True, name="embedding")
embedded_sent1 = embedding_layer(sent1_input_layer)
embedded_sent2 = embedding_layer(sent2_input_layer)
if "embedding" in dropout:
embedded_sent1 = Dropout(dropout["embedding"])(embedded_sent1)
embedded_sent2 = Dropout(dropout["embedding"])(embedded_sent2)
if self.shared_memory:
encoder = MultipleMemoryAccessNSE(output_dim=self.embed_dim, return_mode="output_and_memory",
name="encoder")
mmanse_sent1_input = InputMemoryMerger(name="merge_sent1_input")([embedded_sent1, embedded_sent2])
encoded_sent1_and_memory = encoder(mmanse_sent1_input)
encoded_sent1 = OutputSplitter("output", name="get_sent1_output")(encoded_sent1_and_memory)
shared_memory = OutputSplitter("memory", name="get_shared_memory")(encoded_sent1_and_memory)
mmanse_sent2_input = InputMemoryMerger(name="merge_sent2_input")([embedded_sent2, shared_memory])
encoded_sent2_and_memory = encoder(mmanse_sent2_input)
encoded_sent2 = OutputSplitter("output", name="get_sent2_output")(encoded_sent2_and_memory)
else:
encoder = NSE(output_dim=self.embed_dim, name="encoder")
encoded_sent1 = encoder(embedded_sent1)
encoded_sent2 = encoder(embedded_sent2)
if "encoder" in dropout:
encoded_sent1 = Dropout(dropout["encoder"])(encoded_sent1)
encoded_sent2 = Dropout(dropout["encoder"])(encoded_sent2)
return encoded_sent1, encoded_sent2
评论列表
文章目录