Reimers, Nils, and Iryna Gurevych. "Sentence-bert: Sentence embeddings using siamese bert-networks." arXiv preprint arXiv:1908.10084 (2019).
BERT는 masked word prediction과 next sentence prediction와 같은 unsupervised task로 학습됩니다. 그렇기 때문에 BERT의 출력 embedding vector는 sentence clustering에 적합하지 않습니다. Next sentence prediction task로 모든 문장을 pair로 입력할 수 있긴 하지만, 문장의 개수가 n개이면 n(n-1)/2개의 comparison을 하기 때문에 비효율적입니다.본 논문에서는 siamese and triplets networks를 활용한 SBERT(Sentence BERT)를 제안합니다. 이를 통해 semantically meaningful(With semantically meaningful we mean that semantically similar sentences are close in vector space.)한 sentence emedding을 얻을 수 있게 합니다.고정된 크기의 sentence embedding을 출력하기 위하여 SBERT에서는 BERT 위에 pooling을 적용합니다.
그리고 SBERT를 fine-tune하기 위하여 siamese and triplets network를 만들었습니다. 본 글에서는 triplet loss에 대하여만 설명합니다. 학습 시 세 벡터가 필요합니다:기준이 되는 anchor, anchor와 유사한 positive 그리고 유사하지 않는 negative 입니다. Triplet loss는 비슷한 것들을 가까이, 그렇지 않은 것들은 멀리 위치하도록 만듭니다.
참고
Sentence clustering 관련하여 읽을 거리
1. https://stackoverflow.com/questions/55619176/how-to-cluster-similar-sentences-using-bert
2. sentence-transformer: https://github.com/UKPLab/sentence-transformers/blob/master/examples/applications/clustering/fast_clustering.py
3. sentence-transformer docs: https://www.sbert.net/
4. I was wondering what your thoughts were on why BERT underperforms at sentence embeddings: https://github.com/UKPLab/sentence-transformers/issues/80