일종의 거리의 문제로, 간단하게 Positive와의 거리는 가깝게, Negative와의 거리는 멀게 만든다.
가장 간단하게 생각할 수 있는 방법이다.
MultipleNegativesRankingLoss
여기서는 로그-우도를 작게 만드는 문제로 변한다.
정답 I를 제외한 나머지는 모두 Random하게 추출된 Negative 항이다.
이들을 작아지도록 만드는 것이 목표이다.
MultipleNegativesSymmetricRankingLoss
Given a list of (anchor, positive) pairs, this loss sums the following two losses:
Forward loss: Given an anchor, find the sample with the highest similarity out of all positives in the batch. This is equivalent toMultipleNegativesRankingLoss.
Backward loss: Given a positive, find the sample with the highest similarity out of all anchors in the batch.
앞선 Loss의 변형이다.
지금까지 본 것은 입력된 [문장] 에 대해 [Positive]와 [Negative]를 이용한 것이다.
즉, 입력 문장에 대해 적절한 [Positive]를 찾는 것을 목표로 했던 것이다.
그러면 [Positive]에 적절한 입력 문장은 무엇인가? 이것을 강화하는 Loss Function인 것이다.
이 Loss Function에서는 추가적으로
[Positive]에 대해 적절한 [문장] 하나와, [나머지 문장]을 동일한 방식으로 사용한다.
이렇게 함으로써 [문장] - [Positive]의 관계를 더욱 강화하는 것이다.
GISTEmbedLoss
그런데 과연 나머지 문장을 Negative로 생각하는 것이 옳은가?
랜덤하게 뽑아지는 문제는 분명하게 무조건 Negative는 아닐 가능성이 존재한다.
이를 보정하는 방법이 바로 GIST(Guided In-sample Selection of Training Negatives)라는 방법이다.
말 그대로 일종의 Guide 모델을 통해, 뽑아진 Random Negative가 실제 True Negative인지 검증하는 것이다.
이런 방식을 통해 더욱 정교하게 Triplet 형태의 학습을 진행하게 되는 것이다.
간단하게 Sentence Transformer의 Loss Function들에 대해 알아보았다.
실제로는 단순 Triplet보다 Multi Negative를 활용한 방식이 훨씬 효과가 좋고.
이러한 Multi Negative의 크기가 크면 클 수록 효과가 더 좋다고 알려져있다.
(*In-Batch의 크기를 미친듯이 늘리기 위해 보통은 Cache를 활용한 방식을 많이 사용한다.)
때문에 Sentence-Transformer에서는 이러한 기능이 내장된 Cache ~ Loss Function들이 많이 존재한다.