我创建了两个相同的编码器来训练两个不同的文本 job_description 和 resume,以余弦相似度作为损失函数。
encoder_input1 = Input(shape= (None,),name='encoder1')
embed_dim = 200
embedded_seq_encoder1 = Embedding(input_dim = 9000, output_dim = embed_dim)(encoder_input1)
encoder1 = LSTM(256, return_state=True)
encoder_output1, state_h,state_c = encoder1(embedded_seq_encoder1)
encoder_input2 = Input(shape= (None,),name='encoder2')
embed_dim = 200
embedded_seq_encoder2 = Embedding(input_dim = 9000, output_dim = embed_dim)(encoder_input2)
encoder2 = LSTM(256, return_state=True)
encoder_output2, state_h,state_c = encoder2(embedded_seq_encoder2)
encoder_dense = tf.keras.layers.Dense(1, activation='softmax', name='Final-Output-Dense')
encoder_outputs = encoder_dense(merged_Encoder_layer)
model = Model([encoder_input1,encoder_input2],[encoder_outputs])
model.compile(optimizer='rmsprop', loss = tf.keras.losses.BinaryCrossentropy())
model.summary()
然后我将两个编码器都转换为自定义层,我计划用这些编码器和一些密集层构建一个顺序模型
class Custom_Encoder_Layer1(tf.keras.layers.Layer):
def __init__(self,shape,embed_dim,input_dim,n_units):
super(Custom_Encoder_Layer1, self).__init__()
self.shape = shape
self.embed_dim = embed_dim
self.input_dim = input_dim
self.n_units = n_units
def Encoder1(self):
encoder_input1 = Input(shape= shape,name='encoder_layer1')
embed_dim = embed_dim
embedded_seq_encoder1 = Embedding(input_dim = input_dim, output_dim = embed_dim)(encoder_input1)
encoder1 = LSTM(n_units, return_state=True)
encoder_output1, state_h,state_c = encoder1(embedded_seq_encoder1)
return encoder_input1,encoder_output1
class Custom_Encoder_Layer2(tf.keras.Model):
def __init__(self,shape,embed_dim,input_dim,n_units):
super(Custom_Encoder_Layer2, self).__init__()
self.shape = shape
self.embed_dim = embed_dim
self.input_dim = input_dim
self.n_units = n_units
def Encoder2(self):
encoder_input2 = Input(shape= shape,name='encoder_layer2')
embed_dim = embed_dim
embedded_seq_encoder2 = Embedding(input_dim = input_dim, output_dim = embed_dim)(encoder_input2)
encoder2 = LSTM(n_units, return_state=True)
encoder_output2, state_h,state_c = encoder2(embedded_seq_encoder2)
return encoder_input2,encoder_output2
model = tf.keras.models.Sequential([
Custom_Encoder_Layer1((None,),200,9000,256),
Model.layers[4],
Custom_Encoder_Layer2((None,),200,9000,256),
Model.layers[5],
Model.layers[7]
])
现在我的问题是如何训练这个序列模型并获得输入文本的嵌入