На рисунке ниже показана простая архитектура глубокого обучения, способная изучать вложения для предложений. Обучающий набор состоит из пар предложений [[sentence_a],[sentence_b]]
, имеющих одинаковую семантику.
![enter image description here](https://i.stack.imgur.com/Px8hL.png)
Цель состоит в том, чтобы точно настроить вложения предложений быть похожим (поскольку предложения в паре имеют одинаковую семантику). Следовательно, возможной функцией потерь будет CosineSimilarity
потеря.
Encoder 1
и Encoder 2
имеют одно и то же определение:
from tensorflow.keras import layers
class LSTMEncoder(layers.Layer):
def __init__(self,
units, # dimensionality of the output space
input_dim, # vocab of size
output_dim, # embedding dimension
name='encoder',
**kwargs):
super(Encoder, self).__init__(name=name, **kwargs)
self.embedding = layers.Embedding(input_dim=input_dim, output_dim=output_dim)
self.lstm = layers.LSTM(units=units)
def call(self, inputs):
emb = self.embedding(inputs)
return self.lstm(emb)
И модель представлений SEntence (SERModel)
выглядит следующим образом :
import tensorflow as tf
from source.layer.rnn_encoder import LSTMEncoder
class SERModel(tf.keras.Model):
"""
Defines a SEntence Representations Model
"""
def __init__(self,
units, # dimensionality of the output space
input_dim, # vocab of size
output_dim, # embedding dimension
name='SEntence Representations Model',
**kwargs):
super(SERModel, self).__init__(name=name, **kwargs)
self.encoder = LSTMEncoder(units=units, input_dim=input_dim, output_dim=output_dim)
def call(self, inputs):
sentence_a, sentence_b = inputs
return self.encoder(sentence_a), self.encoder(sentence_b)
Чтобы обучить модель, можно просто сделать, как показано ниже:
from source.model.SERModel import SERModel
import tensorflow as tf
def run_test():
# load train data
train_data = load_data()
ser = SERModel(units=128, input_dim=10000, output_dim=64)
optimizer = tf.keras.optimizers.Adam(learning_rate=1e-3)
ser.compile(optimizer, loss=tf.keras.losses.CosineSimilarity())
ser.fit(train_data, epochs=3, batch_size=64)
if __name__ == '__main__':
run_test()
На данный момент мне нужна помощь. Потеря требует y_true
и y_pred
, но, как видно, это неконтролируемая тренировка и y_true
нет. Итак, есть ли у вас подход, который позволил бы мне обучить вышеупомянутую архитектуру, используя CosineSimilarity
убыток?
Заранее большое спасибо.