2020년 9월 28일 월요일

논문 설명 - Sentence-BERT : Sentence Embeddings using Siamese BERT-Networks

 

논문 정보


Introduction

  • BERT 네트워크에 siamese, triplet 구조를 적용했다.
  • 이로 인해 기존의 BERT가 하지 못했던 large-scale의 similarity comparison, clustering, information retrieval 등을 할 수 있다.
  • BERT로 유사한 두 문장을 찾으려면 두 개의 문장을 한 개의 BERT 모델에 넣어야 유사도가 평가된다.
  • 따라서 문장이 10000개 있으면 10000 * 9999 / 2 번의 연산 후에야 랭킹을 할 수 있다.
  • Clustering이나 search에서는 각 문장을 벡터 공간에 매핑하는 작업을 보통 쓰며, BERT를 이용할 때는 출력을 평균내거나 [CLS] 토큰의 출력값을 이용한다.
  • 하지만 이랬을 때의 결과는 각 단어의 GloVe 벡터를 평균낸 것보다 좋지 않다.
  • 이에 siamese 네트워크로 문장을 벡터화할 수 있는 SBERT를 제안한다.
  • SBERT를 NLI 데이터로 fine-tuning 했다.


Model

  • BERT에서 fixed-size sentence embedding을 얻기 위해 풀링을 사용한다.
  • 방법은 총 3가지이며, [CLS]토큰 값 이용, 평균, max-over-time이 있다.
  • SNLI 데이터로 fine-tuning할 때의 구조는 위와 같다.
  • 두 문장의 출력값인 u, v 그리고 element-wise 차이값인 |u-v|를 concatenate한 후 파라미터를 추가하여 학습한다.

  • 실제 inference할 때나, regression 방식의 loss function을 쓸 때는 cosine-similarity를 이용한다. Training할 때, 계산된 cosine similarity와 gold label 간의 MSE를 minimize하는 방식으로 학습했다.
    참고 코드 링크

  • SNLI, MNLI 데이터를 이용하여 학습(fine-tuning)했다.


Evalution - Semantic Textual Similarity

  • 모델의 성능은 STS(Semantic Textual Similarity) task를 통해 평가했다.
  • 그리고 두 문장의 유사도를 계산하기 위해 cosine-similarity를 이용했다.

  1. Unsupervised STS
    • STS 데이터로는 학습하지 않는 상태의 SBERT의 성능을 평가했다.
    • 실험 결과는 cosine-similarity와 label 간의 Spearman's rank를 사용했다.
    • BERT의 출력을 썼을 때 결과가 안 좋았다.
    • Siamese 네트워크를 쓰니 결과가 좋아졌다.
    • RoBERTa 구조는 큰 차이가 없었다.
  2. Supervised STS
  3. SBERT에 사용한 학습 방법은 두가지이다. 하나는 원래 BERT를 STS 학습 데이터에 학습한 경우, 다른 하나는 NLI로 학습한 이후 STS 학습 데이터로 학습한 경우
    • STS 데이터셋의 학습용 데이터를 이용해 SBERT 모델을 학습시켰다.
    • 이 때는, regression 형태의 모델 구조, loss function을 사용했다.
    • SBERT도 성능이 좋아졌지만, BERT의 성능이 가장 많이 좋아졌다(여기서 BERT는 문장 두개를 입력으로 사용한 것 같다).
    • 그래서 성능만을 봤을 때는, 굳이 SBERT 구조를 사용할 필요가 없는 것 같다...?
    • 기여한 점이라면 단지 NLI 데이터로 먼저 학습하면 STS의 결과가 좋아진다 정도?
    • 그런데 이건 거의 당연한 거 아닌가?
    • 4.3, 4.4 생략

Evaluation - SentEval

  • 문장의 embedding을 feature로 하여 logistic regression을 하는 SentEval에 대해서 실험했다.
  • 대체적으로 가장 좋은 성능을 보였다.

Conclusion

  • BERT로 STS를 했을 경우 성능이 좋지 않았다고 한다.
  • 그래서 siamese 구조를 이용하여 fine-tuning할 수 있는 SBERT를 제안했고, significant한 성능 향상이 있었다.
  • 그리고 computationally efficient하며, BERT로 하기 힘들었던 clustering, retrieval 등을 할 수 있게 됐다.

"각 문장에 대한 BERT의 출력을 각각 pooling(avg)해서 layer를 하나 추가하고 NLI로 fine-tuning하면 sentence embedding이 좋아진다." 이다.


댓글 없음:

댓글 쓰기