[논문리뷰] SimCSE: Simple Contrastive Learning of Sentence

hyo._.op·2026년 8월 6일

논문리뷰

목록 보기
16/16

Overview

논문명: SimCSE: Simple Contrastive Learning of Sentence Embeddings
학회(출판연도): EMNLP 2021
연구분야: NLP, Sentence Embedding, Contrastive Learning, Representation Learning


Abstract

  • SimCSE(Simple Contrastive Sentence Embedding)이라는 새로운 문장 임베딩 학습 방법 제안
    • 당시 최고 수준의 Sentence Embedding 성능을 크게 향상 시킴
  • 비지도 학습
    • 입력 문장을 받아서 대조학습 목적 함수 안에서 자기 자신을 예측하고 일반적인 Dropout만을 노이즈로 사용함

      ⇒ 이 방법은 기존의 지도학습 기반 방법들과 동등한 성능을 보임!!

  • 본 연구에서 Dropout이 최소한의 데이터 증강 역할을 하고, 이를 제거하면 표현이 붕괴되는 현상이 발생된다는 것을 발견함
  • NLI(자연어 추론) 데이터세트의 라벨이 달린 문장쌍을 활용한 지도학습 버전도 제안
    • Entailment쌍 → Positive Pair
    • Contradiction쌍 → Hard Negative pair로 사용
  • SimCSE를 표준 의미적 유사도(STS) 과제에서 평가하였고, BERT-base를 사용한 비지도 모델과 지도 모델은 각각 평균 76.3%와 81.6%의 Spearman 상관계수 달성 ⇒ Contrastive Learning은 BERT 임베딩 공간이 특정 방향으로 몰려 있는 비등방성 문제를 완화하여 임베딩을 더 균등하게 분포시키고,
    지도학습에서는 의미가 같은 문장들을 더욱 가깝게 하여 배치한다는 사실도 확인함

1. Introduction

  • 범용적인 문장 임베딩(universal sentence embedding)을 학습하는 것은 자연어 처리에 있어서 핵심 연구 주제이고, 지금까지 많은 연구가 이루어져 왔음 → 본 논문에서는 BERT나 RoBERTa와 Contrastive Learning(대조학습)을 결합하면 Sentence Embedding 성능을 크게 향상시킬 수 있음을 보여줌
    • 또한, 이 방법은 비지도, 지도 데이터 모두에서 사용할 수 있고 두 경우 모두 뛰어는 Sentence Embedding을 학습할 수 있는 프레임워크임

Unsupervised SimCSE

  • Dropout만을 노이즈로 사용하여 입력 문장 자기 자신을 예측함
    • 즉, 같은 문장을 2번 입력하고, Dropout도 2번 적용하여 서로 다른 임베딩을 얻고 이 차이만 이용해서 대조학습을 수행한다는 것 → Positive Pair로 사용
    • 그리고 같은 미니배치 안의 문장들은 Negative로 사용하여, 여러 Negative 중에서 Positive를 맞추도록 학습
  • 이 방법은 단순해보이지만, 다음 문장 예측, 단어 삭제, 단어 교체와 같은 기존 학습 방법보다 큰 폭으로 더 좋은 성능을 보이고, 심지어 기존 지도학습과 맞먹는 성능을 냄
    • Dropout이 hidden Representation에 대한 최소한의 데이터 증강 역할을 하고, 이를 제거하면 모든 문장이 비슷해지는 Representation Collapse가 발생함을 확인

Supervised SimCSE

  • 최근 Sentence Embedding에서 성공적으로 사용된 NLI 데이터세트를 기반으로 라벨이 있는 문장쌍을 대조학습에 포함시킴
    • 기존 연구들은 Entailment, Neutral, Contradiction 3개의 클래스를 분류하는 문제로 다루었음
      ↔ 본 연구는 Entailment Pair가 Positive Sample로 사용될 수 있음을 활용함
      - 또한, 대응되는 Contradiction Pair를 Hard Negative로 추가하면 성능이 더욱 향상됨을 발견

또한, 우리는 SimCSE가 왜 뛰어난 성능을 보이는지 확인하기 위해 Wang&Isola가 제안한 평가 기준을 차용함.

→ 의미적으로 연결되어 있는 ① Positive Pair가 얼마나 잘 모여있는지(Alignment)와 ② 전체 임베딩 공간이 얼마나 균등하게 퍼져 있는지(Uniformity)를 함께 측정하여 임베딩 품질을 평가함

⇒ [분석 결과]

  • NLI 학습 신호는 Positive Pair 사이의 Alignment를 더욱 향상시키고, 더 좋은 Sentence Embedding을 생성한다는 것을 보여줌
  • 사전학습된 Word Embedding이 비등방성(Anisotropy)문제를 겪는다는 최근 연구와 연결하여 스펙트럼 관점에서 대조학습 목적함수가
    • Sentence Embedding 공간의 Singular Value Distribution을 평탄하게 만들고,
    • 그 결과 Uniformity를 향상시킨다는 것을 증명함

⇒ SimCSE를 7개의 표준 STS 과제와 7개의 Transfer Task에서 종합적으로 평가함 — 기존 성능보다 각각 4.2%, 2.2% 향상


2. Background: Contrastive Learning

  • 대조학습은 의미적으로 가까운 이웃은 서로 가깝게 끌어당기고, 가깝지 않은 데이터는 서로 멀어지게끔 학습하는 방법
    • D={(xi,xi+)}i=1mD=\{(x_i, x_i^+)\}_{i=1}^{m} 라는 문장쌍 집합이 있다고 가정
      • 여기서 xi,xi+x_i, x_i^+는 의미적으로 관련된 데이터(Positive Pair)
  • Chen et al.(2020)의 대조학습 프레임워크를 따랐고, 미니배치 안의 Negative Sample을 사용하는 Cross Entropy 목적 함수 사용
    • hi,hi+h_i, h_i^+를 각각 xix_ixi+x_i^+의 표현이라고 하자. → 즉, hi,hi+h_i, h_i^+는 각각 Anchor와 positive의 임베딩 벡터임. 이를 통해 Contrastive Loss를 계산함
    • N개의 쌍으로 이루어진 미니배치에서 (xi,xi+)(x_i, x_i^+)의 학습 목적함수 i=logexp(sim(hi,hi+)/τ)j=1Nexp(sim(hi,hj+)/τ)\ell_i=-\log\frac{\exp(\operatorname{sim}(h_i,h_i^+)/\tau)}{\sum_{j=1}^{N}\exp(\operatorname{sim}(h_i,h_j^+)/\tau)} → Anchor가 자기 positive를 맞추도록 하는 Loss
      • τ : Temperature Hyperparameter(민감도 조절) → Similarity를 얼마나 강조할지를 결정
      • sim(hi,hi+)\operatorname{sim}(h_i,h_i^+): 두 벡터 사이의 코사인 시밀러리티
  • 본 연구에서는 BERT와 RoBERTa와 같은 사전학습 언어모델을 통해 h=fθ(x)h = f_{\theta}(x)로 인코딩하고, Contrastive Learning Loss(Eq.1)를 이용해서 모든 파라미터를 파인튜닝함

Positive instances

  • 대조학습에서 가장 중요한 문제 중 하나는 Positive pair를 어떻게 만드는가임
    • 이미지: 같은 이미지에 crop, flip, 왜곡, 회전 등의 랜덤 변환을 적용하여 만듦
    • 언어: word deletion, word reordering, word substitution 같은 데이터 증강 기법을 적용
  • 그러나 NLP에서 데이터 증강은 언어의 이산적인 특성때문에 본질적으로 어려움
    • 3장에서 말하겠지만, Hidden representation에 표준 Dropout만 적용하는 것이 이런 이산적인 Operator보다 더 좋은 성능을 냄
  • NLP에서도 유사한 대조학습은 다양한 문제에서 연구되어 옴
    • 기존엔 질문-문서(QA)처럼 이미 짝이 정해진 데이터세트를 Positive pair로 사용했었음
      • Question과 Passage처럼 입력의 성격이 다르므로 각각을 처리하기 위해 2개의 인코더를 사용하는 듀얼 인코더 구조를 사용함

Alignment and uniformity

  • 기존) Loss가 작으면 좋은 모델 ↔ 좋은 임베딩은 Alignment와 Uniformity를 동시에 만족해야함
    • Alignment: 의미가 같은 데이터는 서로 가까워야함
    • Uniformity: 전체 임베딩은 공간 전체에 고르게 퍼져 있어야 함
  • Positive Pair의 분포는 pposp_{pos}가 주어졌을 때, Alignment는 짝지어진 데이터들의 임베딩 사이의 기대 거리를 계산함
    • 단, 임베딩은 이미 정규화되어 있다고 가정

      Lalign=E(x,x+)ppos[f(x)f(x+)2]L_{\mathrm{align}}=\mathbb{E}_{(x,x^+)\sim p{\mathrm{pos}}}\left[\|f(x)-f(x^+)\|^2\right]

      • f(x)f(x): 문장을 Encoder(BERT)에 넣어서 얻은 embedding
      • f(x+)f(x^+): positive pair의 embedding
      • f(x)f(x+)2\|f(x)-f(x^+)\|^2: 두 임베딩 사이의 거리 → 거리가 작을수록 좋음

      → 즉 결국은 alignment는 positive pair 거리의 평균

  • 반면, Uniformity는 Embedding이 얼마나 균일하게 분포하는지를 측정함
    • 즉, 임베딩이 특정 방향으로 몰리지 않고 공간 전체에 얼마나 고르게 퍼져 있는지를 측정하는 지표임 Luniform=logEe2f(x)f(y)2L_{\mathrm{uniform}}=\log\mathbb{E}e^{-2\|f(x)-f(y)\|^2} → 모든 데이터 쌍의 거리를 이용하여 Embedding이 얼마나 균등하게 퍼져있는지를 계산 여기서 주의해야할 것은 positive pair가 아니라 아무 문장이나 2개를 뽑아서 랜덤한 문장을 비교하는 것
      ⇒ Uniformity는
      전체 공간의 분포**를 보기 때문

3. Unsupervised SimCSE

  • 비지도 SimCSE의 아이디어는 매우 단순함
    • 문장 집합 {xi}i=1m\{x_i\}_{i=1}^{m}를 가지고 positive pair를 xi+=xix_i^+ = x_i 로 사용
      • Anchor : 오늘 날씨가 좋다

      • Positive : 오늘 날씨가 좋다.

        ⇒ 즉, 기존 대조학습에서 positive pair를 만들기 위해 crop, rotation, word deletion 같은 증강이 필요했음

        벗뜨, SimCSE는 ‘그냥 같은 문장 쓰자’ 라는 아이디어

    • 이걸 positive pair처럼 작동하기 위해서는 xix_ixi+x_i^+에 대해 서로 독립적으로 샘플링된 Dropout Mask를 사용 i=logesim(hiz,hiz)/τj=1Nesim(hiz,hjz)/τ\ell_i = - \log \frac{ e^{\operatorname{sim}(h_i^z,h_i^{z'})/\tau} }{ \sum_{j=1}^{N} e^{\operatorname{sim}(h_i^z,h_j^{z'})/\tau} }
  • Transformer의 일반적인 학습에서 Dropout mask가
    • fully connected layer
    • attention probability 모두가 적용됨
    • 기본 dropout 확률은 0.1 hiz=fθ(xi,z)h_i^z = f_{\theta}(x_i, z)
      • zz: Transformer의 기본 Dropout Mask (추가적인 Dropout은 x)

Dropout noise as data augmentation

  • dropout을 본 논문에서는 가장 작은 형태의 data augmentation이라고 해석함
    • 문장은 전혀 바뀌지 않고, embedding만 약간 달라짐
  • STS-B Development Set에서 이 방법을 다른 학습 방법으로 비교

  • Crop, Word Deletion, Word Replacement 같은 일반적인 데이터 증강을 비교함
    • h=fθ(g(x),z)h=f_\theta(g(x),z)
      • gg는 입력 문장에 적용되는 랜덤한 이산 연산을 의미함
  • 실험결과, 단어 하나만 삭제하는 간단한 증강조차 성능을 떨어뜨렸고, 모든 텍스트 증강 기법보다 Dropout만 사용하는 SimCSE가 더 좋은 성능을 보였음
  • 또한, 저자들은 SimCSE의 학습 방식(self-prediction)이 기존의 Next Sentence Prediction기반 대조학습보다 좋은지 확인하기 위해 비교 실험을 수행함
    • +) Encoder를 하나만 사용할 때와 두 개를 사용할 때도 같이 비교 진행
  • SimCSE는 Next-Sentence 목적 함수보다 훨씬 좋은 성능을 보였음
    • 즉, 본 연구의 방법에서는 2개의 인코더보다 한 개의 인코더를 사용하는 것이 더 효과적임

Why does it work?

  • 비지도 SimCSE에서 Dropout Noise역할의 중요성을 확인하기 위해 다양한 확률로 바꾸어 실험 진행 → p=0.1(기본값)이 가장 좋은 성능을 보였음
  • 특히, ① Dropout을 완전히 제거한 경우 ② Dropout은 사용하지만 두 문장에 동일한 Dropout Mask를 적용한 경우(Fixed 0.1) 두 경우는 성능이 크게 감소
    • positive pair의 embedding이 완전히 동일해졌고, 그 결과 성능이 크게 감소했기 때문

  • 학습과정에서 10 step마다 모델의 Checkpoint를 저장하고, Figure2 에서 AlignmentUniformity를 시각화함
    • 또한, “delete one word” 데이터 증강 모델도 함께 비교함
  • pre-trained checkpoint에서 시작한 모든 모델은 uniformity를 크게 향상시킴
    • 즉, BERT에서 시작한 모든 모델은 대조학습을 하면서 임베딩이 더 균등하게 퍼짐
  • dropout을 하지 않거나 Fixed 0.1 모델의 경우에는 Alignment가 크게 악화됨
    • 하지만 unsupervised SimCSE는 Dropout Noise 덕분에 Alignment를 안정적으로 유지함
  • 또한, 사전학습된 모델로 시작하는 게 좋은게, 초기에 좋은 Alignment를 제공하기 때문
  • Delete one word의 경우 Alignment를 향상시키긴 하지만, Uniformity는 조금만 향상됨

4. Supervised SimCSE

  • 3절에서 Dropout Noise를 추가하는 것이 Positive pair(x,x+)(x,x^+)의 좋은 Alignmnet(적절히 가깝게 유지)를 유지할 수 있음을 확인할 수 있었음
    • 이번 절에서는 지도학습 데이터세트를 활용해서 Alignment를 더 개선해보겠다.
  • 기존 연구에서는 지도학습 NLI데이터세트가 Sentence Embedding 학습에 효과적임을 보여주었음
    • Entailment (의미적으로 참)
    • Neutral (애매함)
    • Contradiction (모순) 중 무엇인지 예측하도록 구성되어 있음
  • 본 연구에서는 NLI를 분류 문제가 아니라 NLI 지도 데이터세트에서 Positive Pair를 사용하여 대조학습을 수행함 ⇒ 즉, 분류 문제가 아니라 임베딩 학습

Choices of labeled data

  • 지도학습 데이터세트라고 해서 모두 좋은 게 아니기 때문에, 어떤 데이터세트가 대조학습에 가장 적합한지를 비교 실험을 수행함
    • QQP: Quora question pairs — 같은 질문인지 아닌지 판별하는 데이터세트
    • Flickr 30k: 같은 사진을 설명하는 두 문장은 같은 의미를 담고 있으므로 positive pair로 사용
    • ParaNMT: 대규모 Back-Translation 기반 Paraphrase 데이터세트
    • NLI — SNLI, MNLI

  • 동일한 대조학습 구조를 유지하고 데이터세트만 바꿔가며 성능 비교 진행
    • 학습 pair 수도 동일하게 맞췄음
  • 모든 선택지 중에서 NLI (SNLI + MNLI)의 Entailment pair가 가장 좋은 성능을 보였음
    • NLI 데이터세트는 crowdsourcing 문장쌍으로 이루져 있고,
    • annotator들도 premise 기반으로 hypothesis를 직접 작성하기 때문에 두 문장은 Lexical Overlap이 적음

Contradiction as hard negatives

  • NLI 데이터세트의 장점을 Entailment pair만 사용하는 것에 끝나는 게 아니라, contradiction pair를 hard negative로 사용하면서 더욱 활용함
    • 기존의 대조학습에서는 Anchor → positive → 같은 의미, Negative는 아무 문장임 — 이건 너무 쉽
    • 근데, contradiction pair에서는 “A dog is running”“No Animal is moving” 처럼 비슷한 단어는 많지만 의미는 정반대인 hard negative를 활용함
  • NLI 데이터세트의 경우에는 하나의 premise가 주어지면, Annotator는
    • 반드시 참인 문장(Entailment)
    • 참일 수도 있는 문장(Neutral)
    • 반드시 거짓인 문장(Contradiction)을 작성해야함
  • 따라서, positive pair가 있으면 같은 premise에 대응하는 hard negative도 자동으로 존재함!
    • 그래서 (xi,xi+)(x_i, x_i^+)(xi,xi+,xi)(x_i, x_i^+, x_i^-)로 확장함logesim(hi,hi+)/τj=1N(esim(hi,hj+)/τ+esim(hi,hj)/τ)-\log \frac{ e^{\operatorname{sim}(h_i,h_i^+)/\tau} }{ \sum_{j=1}^{N} \left( e^{\operatorname{sim}(h_i,h_j^+)/\tau} + e^{\operatorname{sim}(h_i,h_j^-)/\tau} \right) }
    ⇒ positive similarity는 크게 만들고, hard negative similarity는 작게 만듦

5. Connection to Anisotropy

  • 기존의 BERT 같은 모델의 임베딩은 벡터 공간 전체에 퍼져있는 게 아니라 한 방향으로 몰려 있는 경향(Anisotropy)가 있음

    • 그래서 서로 다른 문장이 비슷한 벡터를 가지게 되어서 문장들을 잘 구분하지 못하는 문제가 존재함
  • 그런데 이런 임베딩 행렬을 SVD로 분해해보면, 몇 개의 축(방향)만 매우 강하고 나머지 방향은 거의 사용되지 않음

    ✓ SVD 관련 내용
    https://darkpgmr.tistory.com/106

    • 즉 첫번째 방향만 거의 모든 정보를 가지고 있어서 임베딩은 그 쪽으로 몰리게 됨 = Anisotropy

      ⇒ 이 문제를 완화하는 간단한 방법은 후처리

    • 가장 큰 주성분을 제거하거나

    • 임베딩을 Isotropic Distribution으로 변환하는 것

      ✓ Isotropic Distribution

      • Iso = 같은(equal)

      • tropic = 방향(direction)

        ⇒ 즉, 모든 방향이 동일한 성질을 가진다.

      • 벡터 공간에서 임베딩들이 특정 방향에 몰리지 않고, 모든 방향으로 고르게 퍼져 있는 상태

  • 대조학습은 Negative Instance를 서로 멀어지게 만들어서, 임베딩들이 공간 전체에 퍼질 수 있게 함

    • SVD(특이값 분해)를 이용하여 대조학습이 몇 개의 방향에만 집중된 임베딩을 여러 방향으로 고르게 사용
  • Negative가 매우 많다고 가정을 한다면, Contrastive Loss를 2개의 항으로 나누어 해석할 수 있음

    • 실제로 SimCSE는 미니 배치 안의 모든 문장을 Negative로 사용함

    • Batch가 충분히 크면, 이론적으로는 Negative가 무한히 많다고 볼 수 있고 그래서 loss를 깔끔하게 분해할 수 있음

      ✓ 수식 상세히 설명

      i=logesim(hiz,hiz)/τj=1Nesim(hiz,hjz)/τ\ell_i = - \log \frac{ e^{\operatorname{sim}(h_i^z,h_i^{z'})/\tau} }{ \sum_{j=1}^{N} e^{\operatorname{sim}(h_i^z,h_j^{z'})/\tau} }

      • hi=f(xi)h_i = f(x_i)
      • hi+=f(xi+)h_i^+ = f(x_i^+)
      • sim = cosine similarity
      • ττ = temperature
        • ✓ 이 식이 의미하는 것은
          • Anchor: “A dog is running”
          • Positive: “A puppy is running”
          • 배치 안에 Negative1 Negative2 Negative3 Negative4 … 와 같이 있다면, 분자는 Positive와의 similarity를 의미함
          • 분모는 배치 안의 모든 후보들과 similarity

      그래서 이 식에서 Negative sample이 무한히 많다고 가정을 해보자.

      즉, Batch가 엄청 크다고 생각을 하는건데,

      그러면 합(sum)이 기댓값(expectation)으로 바뀌게 됨

      ⇒ 위의 Loss 수식을 두 부분으로 나눔 (eq.6)

      1τE(x,x+)[f(x)Tf(x+)]-\frac{1}{\tau}E_{(x,x^+)}\left[f(x)^T f(x^+)\right] + Ex[logExef(x)Tf(x)/τ]E_x\left[\log E_{x^-}e^{f(x)^T f(x^-)/\tau}\right]

      • 이때 첫 번째 항은 Positive를 의미함
        • 정규화되어 있으므로 f(x)Tf(x+)=cos(θ)f(x)^Tf(x^+) = \cos(\theta) → 즉, cosine similarity임!
        • Loss는 앞에 마이너스가 있으므로 Similarity를 최대한 크게 만들려고 함
          • 즉, Anchor → positive를 계속해서 붙이면서 Alignment를 담당하는 항
      • 두번째 항은 Negative를 의미하는데
        • 만약에 Negative Similarity가 크다면 ex. e0.95/τe^{0.95/\tau}도 매우 커지게 됨
        • 그러면 Loss가 엄청 커지게되고, loss를 줄이기 위해 similarity를 줄여야함. 즉, negative를 멀리 보내야함!
  • 이때, PdataP_{data}가 유한한 샘플 {xix_i} 위에서 균등분포라고 하면, hi=f(xi)h_i = f(x_i)일 때, Jensen 부등식을 이용하여 더 간단한 형태로 유도할 수 있음

    • Expdata[logExpdata[ef(x)Tf(x)/τ]]E_{x\sim p_{\mathrm{data}}} \left[ \log E_{x^{-}\sim p_{\mathrm{data}}} \left[ e^{f(x)^T f(x^-)/\tau} \right] \right] =1mi=1mlog(1mj=1mehiThj/τ)= \frac{1}{m} \sum_{i=1}^{m} \log \left( \frac{1}{m} \sum_{j=1}^{m} e^{h_i^T h_j/\tau} \right) 1τm2i=1mj=1mhiThj\ge \frac{1}{\tau m^2} \sum_{i=1}^{m} \sum_{j=1}^{m} h_i^T h_j
  • WW를 문장 임베딩 행렬이라고 하면, WW의 i번째 행은 hih_i

    • 행: 하나의 문장 임베딩
    • 열: 임베딩의 각 차원
  • eq6의 두번째 항을 최적화 하는 것(Negative를 멀리 보내는 것)은 본질적으로 WWTWW^T의 모든 원소의 합의 상한을 최소화하는 것

    • 즉, Sum(WWT)=ijhiThj\operatorname{Sum}(WW^T)=\sum_i\sum_j h_i^T h_j → 모든 문장 임베딩기리의 내적의 총합을 줄이는 것과 동일하다.
    • 이 값이 작다는 건 서로 덜 비슷하다는 뜻이니까, 공간 전체로 잘 퍼져있다는 것을 의미함(uniformity가 좋아짐)
  • 또한, hih_i를 정규화해놨기때문에, WWTWW^T의 대각 원소는 모두 1임
    → 모든 고유값의 합은 상수!!
    - 이때 WWTWW^T의 모든 원소가 양수이면 Sum(WWT)Sum(WW^T)은 가장 큰 고유값의 상한이 됨 → 즉, 모든 내적의 합을 줄이면 가장 큰 고유값도 함께 줄어듦

    ⇒ 임베딩 공간의 Singular Spectrum이 평평해짐(여러 방향으로 퍼짐)

    ⇒ 그래서 결과적으로 대조학습은 문장 임베딩의 Uniformity를 향상시킬 것으로 기대됨


6. Experiment

6.1 Evaluation Setup

  • 7개의 Semantic Textual Similarity(STS) 과제에서 실험 수행
    • 비지도 학습 — STS 데이터는 오직 “평가”에만 사용했음
  • 지도학습 SimSCE에서도 STS의 정답을 이용해 학습하는 것이 아닌 SNLI, MNLI 같은 별도의 레이블 데이터만 사용함
  • 목적: 의미적으로 비슷한 의미의 문장을 가깝게 표시하는 것

Semantic Textual Similarity Tasks

  • 7개의 STS 벤치마크를 사용했음 + 기존 논문들이 STS를 사용하더라도 평가방법이 조금씩 달랐어서 Sentence-BERT 논문의 평가방식으로 통일하여 진행함
    • Regressor 사용 여부
    • Spearman 상관 계수 or Pearson 상관계수 사용
    • 결과를 평균내는 방법

Training Details

  • 사전학습된 BERT 또는 RoBERTa를 사용하고, [CLS] Representation을 Sentence Embedding으로 사용하였음
  • 비지도 SimCSE는 영어 위키피디아 문장 100만개 학습했고, 지도 SimCSE는 MNLI와 SNLI를 합친 31만 4천 개 데이터로 학습함

6.2 Main Results

  • 비지도 SimCSE와 지도 SimCSE를 STS 과제에서 기존 최신 SOTA 문장 임베딩 방법들과 함께 비교했음
    • 비지도 baseline
      • 평균 GloVe Embedding
      • 평균 BERT 또는 RoBERTa Embedding
      • BERT-flow
      • BERT-whitening 등이 포함됨
  • 그리고 대조 학습 기반의 최신 모델들도 함께 비교를 진행했음
    • IS-BERT 는 문장 전체 정보(global)과 일부 토큰 정보(local)사이를 비슷하게 만드는 방식
    • DeCLUTR 는 같은 문서의 다른 구간(span)을 postive pair로 사용
    • CT 는 2개의 서로 다른 인코더에서 나온 같은 문장의 임베딩을 정렬함
  • 지도학습에서는 대표적인 문장 임베딩 모델들과 비교를 진행했음
    • InferSent, Universal Sentence Encoder, SBERT, SRoBERTa, 후처리(BERT-flow, Whitening, CT)를 적용한 방법까지

  • 결과적으로 SimCSE는 추가적인 NLI Supervision의 유무와 관계없이 모든 데이터세트에서 성능을 크게 향상시켰고 기존의 SOTA를 크게 능가했음

6.3 Ablation Studies

  • 또한 다양한 Pooling 방법Hard Negative가 미치는 영향을 조사했음

    ✓ NLP에서도 Pooling을 적용하나?

    • NLP에서도 Pooling은 매우 많이 사용됨. 다만, CNN에서 사용하는 Pooling과는 목적이 조금 다른 편

    • 그러면 NLP에서 Pooling이 왜 필요할까? → BERT를 예로 들자.

      • 문장이 “I love BOAZ”라면, 토큰화 이후에는 [CLS] I love BOAZ . 로, BERT를 통과하면 각 토큰마다 하나씩 벡터가 나오게 됨

        • [CLS] → 768차원

        • I → 768차원

        • love → 768차원

        • BOAZ → 768차원

        • . → 768차원

          ⇒ 즉 결과는 5 x 768

      • 그런데 문장 임베딩은 문장 하나 = 벡터 하나이어야함

        → 여러 개의 토큰 벡터를 하나의 벡터로 합치는 과정이 필요!!

    • 대표적인 Pooling 방법

      • CLS Pooling
        • [CLS] 벡터만 사용
        • BERT의 경우 [CLS] 가 문장 전체 정보를 담도록 학습되어 있기 때문에 많이 사용됨
      • Mean Pooling
        • 모든 토큰 평균 내는 방법
      • Max Pooling
        • 각 차원마다 가장 큰 값만 선택
    • CNN의 Pooling과는 어떻게 다를까?

    CNN PoolingNLP Pooling
    Feature map 크기 감소여러 토큰 벡터를 하나의 문장 벡터로 합침
    공간 정보 요약문장 의미 요약
    MaxPool, AvgPool 사용CLS, Mean, Max Pooling 사용

Pooling Methods

  • 기존 연구에서 사전학습 모델의 평균 임베딩(특히 첫번째와 마지막 layer)을 사용하는 것이 [CLS] 보다 더 좋은 성능을 낸다고 보고함
    • [CLS] 표현의 경우에는 원래 BERT 구현에서는 바로 사용하는 게 아니라 MLP(Dense layer)를 한 번 더 거치게 됨
    • 본 논문에서는 이 MLP를 언제 사용할 지에 대해 3가지 방법을 비교했음
  1. keeping the MLP layer
  • 학습과 테스트 모두 CLSMLPEmbedding
  1. no MLP layer
  • 학습과 테스트 모두 CLSEmbedding
  1. keeping MLP during training but removing it at testing time
  • 학습 중에는 MLP 유지, 테스트에서는 MLP 제거

    ✓ 왜 이렇게 하지?

    • MLP는 대조학습을 조금 더 쉽게 만들어주는 역할임

    • 하지만, 최종적인 문장 임베딩의 경우에는 MLP를 제거한 원래 CLS가 더 일반화가 잘됨

      → 그래서 학습할 때만 MLP를 사용

    비지도 SimCSE는 Train에 MLP를 쓰고, Test에서는 제거하는 것이 가장 좋았고, 지도 SimCSE에서는 Pooling 방법에 따른 차이가 크지 않았음

    기본 Pooling 설정은 비지도: Train에서만 MLP, 지도: 항상 MLP

Hard Negatives

  • Hard Negative는 Anchor와 주제가 비슷하면서 의미가 반대이므로 어려움
    • 따라서 Eq.5의 목적 함수를 각 Negative에 서로 다른 가중치를 주도록 확장함

      logesim(hi,hi+)/τj=1N(esim(hi,hj+)/τ+αiljesim(hi,hj)/τ)-\log \frac{ e^{\operatorname{sim}(h_i,h_i^+)/\tau} }{ \sum_{j=1}^{N} \left( e^{\operatorname{sim}(h_i,h_j^+)/\tau} + \alpha^{\,l_j}_i e^{\operatorname{sim}(h_i,h_j^-)/\tau} \right) }

      • 여기서 α\alpha가 hard negative의 가중치임! → 다양한 α\alpha값으로 변환시켜서 학습!!

→ 결과적으로 α\alpha=1이 가장 좋은 성능을 보였고, Neutral Hypothesis는 추가적인 성능향상을 가져오진 못했음

7. Analysis

  • 본 절에서는 SimCSE가 왜 효과적인지에 대해 다양한 분석을 진행함
    • 대조학습이 Uniformity를 높인다
    • NLI가 Alignment를 높인다 등을 실제 데이터에도 맞는지 확인

Uniformity and Alignment

  • 여러 문장 임베딩 모델들이 Uniformity와 Alignment, 평균 STS 성능을 비교했음
    • 일반적으로 Alignment와 Uniformity가 모두 좋은 모델이 더 좋은 성능을 달성함
    • 사전학습 임베딩은 좋은 Alignment를 가지고 있긴 하지만, Uniformity는 좋지 않았음 → 즉, BERT는 의미가 비슷한 문장들을 잘 모아주긴 하는데, 벡터 공간 전체에 고르게 퍼져 있진 않더라
    • BERT-flow와 BERT-whitening같은 후처리 방법은 Uniformity를 크게 향상시키긴 하느데, Alignment는 약화됨
    • 비지도 SimCSE는 사전학습 임베딩의 Uniformity를 효과적으로 향상시키면서 좋은 Alignment를 유지함
    • SimCSE에서 지도 데이터를 추가하면 Alignment가 더 향상되더라

Qualitative Comparison

  • SBERTbase와 SimCSE-BERTbase를 사용하여 작은 규모의 검색 실험을 수행함
    • Flickr30k 데이터세트의 15만개 Caption을 사용하고,
    • 임의의 문장을 Query로 사용하여
    • 코사인시밀러리티 기반으로 유사문장을 검색함

  • 실제 검색 결과를 비교해보니 SimCSE가 의미적으로 더 적절한 문장을 찾아옴

  • 초기 문장 임베딩 연구는 주변 문장을 예측하는 방식에 기반했음
  • 최근 연구들은 대조학습을 도입해서 데이터 증강이나 인코더를 활용하여 Positive pair를 만들었음
  • SimCSE는 위 방법들보다 더 단순하게 Dropout Mask만 적용하여 positive pair를 만들었음에도 STS에서 SOTA 달성
  • 기존의 문장 임베딩은 NLI 데이터를 활용했고 또 다른 연구들은 BERT-flow나 BERT-whitening처럼 Anisotropy를 완화하는 방향으로 발전
  • SimCSE는 대조학습 자체로 Alignment와 Uniformity를 동시에 개선하여 두 흐름을 효과적으로 연결한 모델이라고 할 수 있음

9. Conclusion

  • 본 연구에서는 SimCSE라는 대조학습 프레임 워크를 제안했고 STS과제에서 SOTA 달성
    • Dropout Noise를 사용하여 입력 문장 자기 자신을 예측하는 비지도 접근법과
    • NLI 데이터세트를 활용하는 지도 접근법을 제시함
  • SimCSE와 다른 Baseline 모델의 Alignment와 Uniformity를 분석함으로써 왜 효과적인지도 설명했음
  • 해당 아이디어는 문장 임베딩뿐만 아니라 다른 연속 벡터 표현에도 적용할 수 있고, 앞으로는 언어 모델의 사전학습 과정에도 활용될 가능성이 있음

0개의 댓글