Я работаю над моделью встраивания, где есть модель BERT, которая принимает текстовые входы и выводит многомерный вектор. Цель модели - найти похожие вложения (высокое косинусное сходство) для похожих текстов и разные вложения (низкое косинусное сходство) для разных текстов.
При обучении в мини-пакетном режиме модель BERT дает N*D
размерный результат, где N
- размер пакета, а D
- выходной размер модели BERT.
Кроме того, у меня есть целевая матрица размерности N*N
, которая содержит 1
в [i, j]
позиции, если sentence[i]
и sentence[j]
похожи по смыслу, и -1
в противном случае.
Что я хочу сделать, так это найти потерю / ошибку для всего пакета, найдя косинусное сходство всех вложений в выводе BERT и сравнив его с целевой матрицей.
Я просто умножил тензор на его транспонирование, а затем взял поэлементный сигмоид.
scores = torch.matmul(document_embedding, torch.transpose(document_embedding, 0, 1))
scores = torch.sigmoid(scores)
loss = self.bceloss(scores, targets)
Но это, похоже, не работает.
Есть ли другой способ сделать это?
P.S. Я хочу сделать аналогично методу, описанному в этой статье.