🍰혹시 [CLS] Embedding만 사용하고 계신가요?
개요
최근 BERT와 같은 거대한 언어 모델들이 NLP 분야에서 놀라운 성능을 보여주고 있습니다. BERT를 사용하는 경우, 자주 [CLS] 토큰에 대한 임베딩만 사용하여 다양한 Downstream Task를 수행합니다. 이 글에서는 BERT에서 [CLS] 임베딩만 사용하는 이유와 그 한계에 대해 살펴보겠습니다.
BERT에서의 CLS Embedding 이란?
BERT 모델은 입력 시퀀스의 시작 부분에 특별한 [CLS] 토큰을 추가합니다. 이 토큰은 모델이 문장 분류와 같은 태스크를 수행할 때 문장의 전체 정보를 요약하는 역할을 합니다. BERT의 학습 과정에서 [CLS] 토큰에 대한 임베딩은 문장의 정보를 축약하여 다양한 NLP 문제를 해결하는데 사용됩니다.
Embedding 방법의 종류는?
CLS Pooling Embedding

문장 제일 앞에 [CLS] 토큰의 Embedding vectors를 사용하는 방법입니다.
학습 프로세스중에 보통 [CLS] 토큰을 기반으로 문장 수준의 의미를 함축할 수 있다고 하여 일반적으로 제일 많이 사용하는 방법입니다. 하지만 NSP와 같은 분류 작업을 사전 학습에 많이 진행하지 않은 사전 학습 모델의 경우 효율이 다른 pooling 방법과 비슷하다고 합니다.
Mean Pooling Embedding

BERT 출력의 토큰 벡터들을 평균하여 문장 수준의 임베딩을 생성하는 방법입니다. 이 방식에서는, [CLS] 토큰 외에도 문장의 모든 토큰 벡터를 고려합니다. 각 토큰 벡터를 합한 후 토큰의 수로 나누어 평균값을 계산합니다. 이렇게 얻은 벡터는 문장의 전체적인 의미를 표현하는데 도움이 됩니다. 이 방식은 문장의 모든 토큰 정보를 반영하여 전체적인 문맥을 파악하는 데 유용하다고 할 수 있습니다.
Max Pooling Embedding

각 토큰 벡터에서 최대값을 추출하여 문장 수준의 임베딩을 생성하는 방법입니다. 이 방식에서는 BERT 출력의 각 차원에서 모든 토큰 벡터의 최대값을 선택합니다. 결과적으로, 이 방식은 문장 내에서 가장 중요한 특징을 포착하고자 하는 경우에 유용합니다. 그러나 이 방식은 문장의 전체적인 의미에 대한 정보를 잃을 수 있으므로, 문맥을 고려한 태스크에서는 주의해서 사용해야 합니다.
CLS Embedding만 사용하는 이유?
그렇다면 [CLS] 임베딩을 주로 사용하는 이유는 뭘까요?
가장 큰 이유는, 이 임베딩이 전체 문장에 대한 정보를 간결하게 포함하고 있다고 가정하기 때문입니다. 이로 인해, 다양한 문장 분류 태스크에 적합한 정보를 제공할 것으로 기대됩니다. 또한, [CLS] 임베딩만 사용하면 계산 복잡성이 줄어들고 처리 속도가 빨라집니다.
CLS Embdding의 한계
그러나 [CLS] 임베딩만 사용하는 것에는 한계가 있습니다. 먼저, [CLS] 토큰은 문장의 정보를 요약하는 데 유용하지만, 구체적인 문맥 정보를 모두 담기 어렵습니다. 따라서, 문장의 개별 단어나 구문에 대한 세부 정보가 필요한 태스크에서는 [CLS] 임베딩만으로는 부족할 수 있습니다. 예를 들어, 개체명 인식(NER)이나 관계 추출 같은 태스크에서는 전체 문장의 임베딩보다는 각 단어의 임베딩을 사용하는 것이 더 적합할 수 있습니다.
BERT에서 [CLS] 임베딩만 사용하는 것은 문장 분류와 같은 일부 다운스트림 태스크에 유용할 수 있지만, 모든 NLP 문제에 적합하지는 않습니다. 특정 문제가 처리하지 않은 문제에 대한 구체적인 정보가 필요한 경우에는, 다른 접근 방식을 고려해야 합니다. 따라서, 언어 모델을 사용할 때에는 [CLS] 임베딩의 한계를 인지하고 적절한 전략을 선택하는 것이 중요합니다.
다른 방법에는 무엇이 있을까요?
Max, Mean Pooling Embedding
위에서 설명드린 max, mean pooling embedding 방법을 사용해보는 것도 하나의 방법입니다! 이 방법은 각 토큰의 정보를 보다 고르게 반영할 수 있지만, 여전히 구체적인 문맥 정보를 완벽하게 포착하기는 어렵습니다.
Attention Mechanism
어텐션 메커니즘을 사용하여 문장의 각 토큰에 가중치를 부여하고, 가중 평균을 통해 문장의 정보를 요약할 수 있습니다. 이 방법은 중요한 토큰에 더 큰 가중치를 부여함으로써, 특정 문맥 정보를 보다 정확하게 포착할 수 있습니다.
Task-specific model architecture
특정 다운스트림 태스크를 위해 전용 모델 구조를 사용하여 문맥 정보를 보다 정확하게 포착할 수 있습니다. 예를 들어, 개체명 인식(NER)이나 품사 태깅(POS tagging)과 같은 시퀀스 레이블링 문제의 경우, BERT를 활용한 BiLSTM-CRF 모델 구조를 사용할 수 있습니다.
이 글에서는 BERT에서 [CLS] pooling embedding을 주로 사용하는 이유와 그 한계, 그리고 대안적인 접근 방식에 대해 살펴 보았습니다. [CLS] pooling embedding은 일부 downstream task에는 유용하지만, 모든 NLP 문제에 적합하지 않다는 것을 명심해야 합니다!
Last updated