210819 Diary BERT
최근 회사에서 비슷한 의미의 문장들을 Clustering하는 연구를 맡게 되었다. 처음에 들었던 생각은 "일단 BERT를 사용하면 되겠다"와 "그런데 Sentence 레벨에서 BERT를 직접 사용하는 것은 좋지 않다는데 어떡하지?"였다.
엄밀히 말해서 Sentence-Level Task들에서 BERT의 성능이 좋지 않은 것은 아니다. 실제로, STS 혹은 NLI 등의 Benchmark에서 BERT 계열의 모델들이 상위권을 휩쓸고 있는 모습을 확인할 수 있다. 다만, 이 모델들은 해당 Task의 Labeled 데이터로 Supervised하게 학습된 것인데, 바로 이 점이 내가 하려는 Clustering에서 문제를 야기한다.
(Sentence BERT의 내용을 일부 발췌하면..) 주어진 두 문장의 유사도를 계산하는 STS Task에서 BERT는 일반적으로 [CLS] Sentence1 [SEP] Sentence2 [SEP] 형태의 입력을 받아, 마지막 Hidden State의 CLS Token으로부터 유사도를 Pooling하도록 학습된다. (이상 Cross-Encoder 방식). 이 때, 내가 가진 문장의 개수가 100만이라면 총 "100만C2"개의 조합 수 만큼 Inference를 수행해야 한다.
문장의 수가 많아질수록 위와 같은 방식은 현실적으로 수행 불가하므로, 우리는 각각의 문장을 BERT로 임베딩하여 이들 간의 Cosine Similarity를 계산하는 등의 방안을 생각할 수 있다. 그러나 Masked LM 방식으로 학습된 Pre-Trained BERT 모델들은 "문장"을 임베딩하는 데에 약점을 노출한다. (글을 쓰다 SpanBERT나 PMI-Masking과 같은 경우는 어떨까 궁금해졌다). Sentence BERT는 이러한 문제를 해결할 수 있는 Fine-Tuning 방안을 제시하지만, 여전히 Expensive한 Labeled 데이터 or Supervision을 필요로 한다.