Я строю модель, используя керасы, чтобы выучить вложения слов, используя скипграмму с отрицательной выборкой.Мой ввод - это пара слов: (context_word, target_word) и, конечно, метка 1 для позитивов и 0 для негативных пар.Что мне нужно сделать, это добавить смещение к модели.Смещение должно быть только смещением целевого слова для каждого ввода, а не для обоих слов.
До сих пор у меня есть код:
input_u = Input((1,))
input_v = Input((1,))
item_embedding = Embedding(input_dim = items_size,
output_dim = embed_dim,
name = 'item_embedding')
bias_embedding = Embedding(input_dim = items_size,
output_dim = 1,
embeddings_initializer = 'zeros',
name = 'bias_embedding')
u = item_embedding(input_u)
v = item_embedding(input_v)
b_v = bias_embedding(input_v)
dot_p_layer = merge.dot([u, v], axes = 1)
with_bias = merge.add([dot_p_layer, b_v])
flattenned = Flatten()(with_bias)
output_layer = Dense(1,
activation = 'sigmoid',
use_bias = False)(flattenned)
print (output_layer.shape)
model = Model(inputs=[input_u, input_v], outputs=output_layer)
model.compile(loss='binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
Однако я не могу заставить его работать.Код работает , но Я получаю более высокие потери и более низкую точность, чем модель без смещения.Так что я думаю, что я делаю что-то не так.Кроме того, когда я проверяю размеры, я все равно получаю размер моего врезного размера, а не встраивание измерение + 1
Я думал об использовании другого слоя Dense (даже не уверен, логично или правильно), чтобы добавить смещение после точечного продукта, но я не смог заставить его работать.
Мне очень нужна помощь в добавлении смещения в модель.