Как тренировать сходство по косинусу с помощью функции Keras Dot?

Я хочу использовать косинусное сходство в модели Кераса при сравнении встраиваний двух документов.

  • Как мне установить цели своего обучения? В каком диапазоне значений может быть результат функции точки? Следует установить целевое значение отрицательных образцов на -1 или 0? Целевое значение положительного образца будет установлено на 1.
  • Что в данном контексте означает параметр оси? Правильно ли ставить ось =1?

Я построил свою модель следующим образом:

from tensorflow.python.keras.layers import Dot
from tensorflow.keras import Input, Model
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential

input_document1 = Input(200)
model_1 = Sequential()
model_1.add(Dense(100, activation='relu'))
encoded_document1 = model_1(input_document1)

input_document2 = Input(200)
model_2 = Sequential()
model_2.add(Dense(100, activation='relu'))
encoded_document2 = model_2(input_document2)

distance_layer = Dot(axes=1, normalize=True) # cosine similarity
prediction = distance_layer([encoded_document1, encoded_document2])

siamese_net = Model(inputs=[input_document1, input_document2], outputs=prediction)

В документации говорится:

Следует ли L2-нормализовать выборки по оси скалярного произведения перед взятием скалярного произведения. Если установлено значение True, то результатом скалярного произведения является косинусная близость между двумя выборками.

0 ответов

Сходство косинуса между выходными значениями между [-1,1], где -1 означает, что векторы полностью противоположны, а 1 означает полное перекрытие / сходство.

Вы можете посмотреть здесь, как вычислить косинусное сходство в Keras: Вычисление косинусного сходства между двумя тензорами в Keras

Что касается объяснения axex / оси, документация здесь хорошо справляется: https://www.tensorflow.org/guide/tensor

Другие вопросы по тегам