논문명: SimCSE: Simple Contrastive Learning of Sentence Embeddings
학회(출판연도): EMNLP 2021
연구분야: NLP, Sentence Embedding, Contrastive Learning, Representation Learning
입력 문장을 받아서 대조학습 목적 함수 안에서 자기 자신을 예측하고 일반적인 Dropout만을 노이즈로 사용함
⇒ 이 방법은 기존의 지도학습 기반 방법들과 동등한 성능을 보임!!

또한, 우리는 SimCSE가 왜 뛰어난 성능을 보이는지 확인하기 위해 Wang&Isola가 제안한 평가 기준을 차용함.
→ 의미적으로 연결되어 있는 ① Positive Pair가 얼마나 잘 모여있는지(Alignment)와 ② 전체 임베딩 공간이 얼마나 균등하게 퍼져 있는지(Uniformity)를 함께 측정하여 임베딩 품질을 평가함
⇒ [분석 결과]
⇒ SimCSE를 7개의 표준 STS 과제와 7개의 Transfer Task에서 종합적으로 평가함 — 기존 성능보다 각각 4.2%, 2.2% 향상
Alignment는 짝지어진 데이터들의 임베딩 사이의 기대 거리를 계산함단, 임베딩은 이미 정규화되어 있다고 가정
→ 즉 결국은 alignment는 positive pair 거리의 평균
Uniformity는 Embedding이 얼마나 균일하게 분포하는지를 측정함Anchor : 오늘 날씨가 좋다
Positive : 오늘 날씨가 좋다.
⇒ 즉, 기존 대조학습에서 positive pair를 만들기 위해 crop, rotation, word deletion 같은 증강이 필요했음
벗뜨, SimCSE는 ‘그냥 같은 문장 쓰자’ 라는 아이디어




Figure2 에서 Alignment와 Uniformity를 시각화함QQP: Quora question pairs — 같은 질문인지 아닌지 판별하는 데이터세트Flickr 30k: 같은 사진을 설명하는 두 문장은 같은 의미를 담고 있으므로 positive pair로 사용ParaNMT: 대규모 Back-Translation 기반 Paraphrase 데이터세트
“A dog is running” → “No Animal is moving” 처럼 비슷한 단어는 많지만 의미는 정반대인 hard negative를 활용함기존의 BERT 같은 모델의 임베딩은 벡터 공간 전체에 퍼져있는 게 아니라 한 방향으로 몰려 있는 경향(Anisotropy)가 있음
그런데 이런 임베딩 행렬을 SVD로 분해해보면, 몇 개의 축(방향)만 매우 강하고 나머지 방향은 거의 사용되지 않음
✓ SVD 관련 내용
https://darkpgmr.tistory.com/106
즉 첫번째 방향만 거의 모든 정보를 가지고 있어서 임베딩은 그 쪽으로 몰리게 됨 = Anisotropy
⇒ 이 문제를 완화하는 간단한 방법은 후처리
가장 큰 주성분을 제거하거나
임베딩을 Isotropic Distribution으로 변환하는 것
✓ Isotropic Distribution
Iso = 같은(equal)
tropic = 방향(direction)
⇒ 즉, 모든 방향이 동일한 성질을 가진다.
벡터 공간에서 임베딩들이 특정 방향에 몰리지 않고, 모든 방향으로 고르게 퍼져 있는 상태
대조학습은 Negative Instance를 서로 멀어지게 만들어서, 임베딩들이 공간 전체에 퍼질 수 있게 함
Negative가 매우 많다고 가정을 한다면, Contrastive Loss를 2개의 항으로 나누어 해석할 수 있음
실제로 SimCSE는 미니 배치 안의 모든 문장을 Negative로 사용함
Batch가 충분히 크면, 이론적으로는 Negative가 무한히 많다고 볼 수 있고 그래서 loss를 깔끔하게 분해할 수 있음
✓ 수식 상세히 설명
- 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)
+
- 이때 첫 번째 항은 Positive를 의미함
- 정규화되어 있으므로 → 즉, cosine similarity임!
- Loss는 앞에 마이너스가 있으므로 Similarity를 최대한 크게 만들려고 함
- 즉, Anchor → positive를 계속해서 붙이면서 Alignment를 담당하는 항
- 두번째 항은 Negative를 의미하는데
- 만약에 Negative Similarity가 크다면 ex. 도 매우 커지게 됨
- 그러면 Loss가 엄청 커지게되고, loss를 줄이기 위해 similarity를 줄여야함. 즉, negative를 멀리 보내야함!
이때, 가 유한한 샘플 {} 위에서 균등분포라고 하면, 일 때, Jensen 부등식을 이용하여 더 간단한 형태로 유도할 수 있음
를 문장 임베딩 행렬이라고 하면, 의 i번째 행은
eq6의 두번째 항을 최적화 하는 것(Negative를 멀리 보내는 것)은 본질적으로 의 모든 원소의 합의 상한을 최소화하는 것
또한, 를 정규화해놨기때문에, 의 대각 원소는 모두 1임
→ 모든 고유값의 합은 상수!!
- 이때 의 모든 원소가 양수이면 은 가장 큰 고유값의 상한이 됨 → 즉, 모든 내적의 합을 줄이면 가장 큰 고유값도 함께 줄어듦
⇒ 임베딩 공간의 Singular Spectrum이 평평해짐(여러 방향으로 퍼짐)
⇒ 그래서 결과적으로 대조학습은 문장 임베딩의 Uniformity를 향상시킬 것으로 기대됨
[CLS] Representation을 Sentence Embedding으로 사용하였음IS-BERT 는 문장 전체 정보(global)과 일부 토큰 정보(local)사이를 비슷하게 만드는 방식DeCLUTR 는 같은 문서의 다른 구간(span)을 postive pair로 사용CT 는 2개의 서로 다른 인코더에서 나온 같은 문장의 임베딩을 정렬함
또한 다양한 Pooling 방법과 Hard Negative가 미치는 영향을 조사했음
✓ NLP에서도 Pooling을 적용하나?
NLP에서도 Pooling은 매우 많이 사용됨. 다만, CNN에서 사용하는 Pooling과는 목적이 조금 다른 편
그러면 NLP에서 Pooling이 왜 필요할까? → BERT를 예로 들자.
문장이 “I love BOAZ”라면, 토큰화 이후에는
[CLS]IloveBOAZ.로, 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 Pooling NLP Pooling Feature map 크기 감소 여러 토큰 벡터를 하나의 문장 벡터로 합침 공간 정보 요약 문장 의미 요약 MaxPool, AvgPool 사용 CLS, Mean, Max Pooling 사용
[CLS] 보다 더 좋은 성능을 낸다고 보고함[CLS] 표현의 경우에는 원래 BERT 구현에서는 바로 사용하는 게 아니라 MLP(Dense layer)를 한 번 더 거치게 됨CLS → MLP → EmbeddingCLS → Embedding학습 중에는 MLP 유지, 테스트에서는 MLP 제거
✓ 왜 이렇게 하지?
MLP는 대조학습을 조금 더 쉽게 만들어주는 역할임
하지만, 최종적인 문장 임베딩의 경우에는 MLP를 제거한 원래 CLS가 더 일반화가 잘됨
→ 그래서 학습할 때만 MLP를 사용
비지도 SimCSE는 Train에 MLP를 쓰고, Test에서는 제거하는 것이 가장 좋았고, 지도 SimCSE에서는 Pooling 방법에 따른 차이가 크지 않았음
기본 Pooling 설정은 비지도: Train에서만 MLP, 지도: 항상 MLP
따라서 Eq.5의 목적 함수를 각 Negative에 서로 다른 가중치를 주도록 확장함

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

