Sentence-BERT

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2026.01.12
조회수
5
버전
v1

Sentence-BERT

개요

Sentence-BERT(SBERT)는 문장 단위의 의미를 고정된 차원의 벡터(임베딩)로 효과적으로 표현하기 위해 개발된 자연어처리(NLP) 모델이다. 기존의 BERT 모델은 토큰 단위의 표현 능력은 뛰어나지만, 문장 전체의 의미를 하나의 벡터로 표현하는 데는 비효율적이었으며, 특히 문장 유사도 계산과 같은 작업에서 반복적인 인퍼런스로 인해 계산 비용이 매우 높았다. Sentence-BERT는 이러한 문제를 해결하기 위해 BERT 아키텍처를 변형하여, 문장 임베딩을 고속으로 생성하고 높은 정확도를 달성할 수 있도록 설계되었다.

SBERT는 2019년 Nils Reimers와 Iryna Gurevych에 의해 제안되었으며, 주로 의미 유사도 측정, 문장 클러스터링, 정보 검색, 문장 분류 등의 작업에서 널리 사용된다.


동기와 문제 정의

기존 BERT의 한계

BERT(Bidirectional Encoder Representations from Transformers)는 문맥을 고려한 토큰 임베딩을 생성하는 데 탁월하지만, 다음과 같은 제약이 존재한다:

  • 문장 임베딩 생성 비효율성: 문장 A와 문장 B의 유사도를 계산할 때, 각 문장을 개별로 인퍼런스하여 [CLS] 토큰의 출력 벡터를 사용하는 방식은 O(n²)의 시간 복잡도를 가짐.
  • 의미적 유사도 측정의 부정확성: 단순히 [CLS] 벡터를 사용하거나 토큰 벡터의 평균을 취하는 방식은 문장 간 의미적 유사성을 정확히 반영하지 못함.

이러한 문제를 해결하기 위해 Sentence-BERT는 시맨틱 엔테일먼트(semantic textual similarity) 및 문장 유사도 측정 작업에 특화된 모델 아키텍처를 제안했다.


아키텍처 및 학습 방식

모델 구조

SBERT는 BERT, RoBERTa 등의 사전 학습된 트랜스포머 기반 인코더를 기반으로 하며, 다음과 같은 두 가지 주요 구성 요소로 이루어진다:

  1. 공유 인코더(Shared Encoder):
    두 개의 문장을 동일한 BERT 모델에 통과시켜 각각의 문장 임베딩을 추출. 인코더는 파인튜닝 과정에서 공유된다.

  2. 풀링 레이어(Pooling Layer):
    BERT 출력 토큰 임베딩들로부터 고정 길이의 문장 벡터를 생성. 일반적으로 [CLS] 토큰 임베딩, 평균 풀링(mean pooling), 최대 풀링(max pooling) 중 평균 풀링이 가장 효과적임.

예를 들어, 문장 "The cat sits on the mat"의 각 토큰 벡터를 평균화하여 하나의 문장 벡터를 생성한다.

학습 전략

SBERT는 삼중 손실(Triplet Loss) 또는 코사인 유사도 손실(Cosine Similarity Loss)을 사용하여 의미적으로 유사한 문장은 가깝게, 다른 문장은 멀게 만드는 방식으로 학습된다.

  • 쌍 기반 학습(Siamese Network):
    동일한 인코더를 공유하는 두 개의 네트워크로 구성되며, 두 문장 간의 유사도를 학습.
  • 트리플렛 학습(Triplet Loss):
    앵커 문장, 긍정 문장(유사), 부정 문장(비유사)의 세 튜플을 사용하여 거리 기반 학습 수행.

또한, 자연어 추론(NLI) 데이터셋(예: SNLI, MultiNLI)을 활용하여 문장 간 관계(동의, 중립, 모순)를 학습함으로써 의미 표현 능력을 향상시킨다.


주요 특징

특징 설명
고속 문장 유사도 계산 문장을 미리 인코딩하여 벡터로 저장하면, 코사인 유사도 계산만으로 유사 문장 검색 가능 (O(1) 검색)
높은 정확도 STS (Semantic Textual Similarity) 벤치마크에서 기존 방법 대비 상당한 성능 향상
다양한 언어 및 도메인 지원 multilingual BERT 기반 SBERT는 다국어 문장 임베딩도 지원
사전 학습 모델 기반 BERT, RoBERTa, DistilBERT 등 다양한 백본 모델 사용 가능

활용 사례


예시 코드 (Python)

SBERT는 [sentence-transformers](/doc/%EA%B8%B0%EC%88%A0/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC/sentence-transformers) 라이브러리를 통해 쉽게 사용할 수 있다.

from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity

# 모델 로드
model = SentenceTransformer('all-MiniLM-L6-v2')

# 문장 임베딩 생성
sentences = [
    "The cat sits on the mat",
    "A feline is resting on a rug",
    "The dog runs in the park"
]
embeddings = model.encode(sentences)

# 유사도 계산
similarity = cosine_similarity([embeddings[0]], [embeddings[1]])
print(f"Similarity: {similarity[0][0]:.4f}")  # 출력 예: 0.85


관련 모델 및 확장

  • SBERT-WK: 키워드 가중치를 반영한 풀링 방식.
  • LaBSE: 다국어 문장 임베딩을 위한 Google의 모델.
  • SimCSE: 대조 학습(contrastive learning) 기반의 강화된 문장 임베딩 모델.

참고 자료


Sentence-BERT는 문장 임베딩 분야의 핵심 기술로 자리 잡았으며, 실시간 의미 분석이 필요한 다양한 응용 분야에서 필수적인 도구로 사용되고 있다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?