아빠는 개발자

[NLP] jhgan vs snunlp vs upskyy 본문

NLP/HuggingFace

[NLP] jhgan vs snunlp vs upskyy

father6019 2025. 5. 5. 21:46
728x90
반응형

아래 3개의 모델로 텍스트 유사도를 비교할 예정 

jhgan = jhgan/ko-sbert-sts
snunlp = snunlp/KR-SBERT-V40K-klueNLI-augSTS
upskyy = upskyy/bge-m3-korean

 

3개 모델의 차이를 비교해 보면 아래와 같다. 

 

모델 Transformer
모델
최대 시퀀스 길이  임베딩 차원 파인튜닝 데이터 STS Dev
Pearson
Cosine
문서 분류
정확도
다국어
지원
jhgan/ko-sbert-sts Bert 128 768 KorSTS (한국어 STS) 0.8155 N/A 한국어 전용
snunlp/KR-SBERT-V40K-klueNLI-augSTS Bert 128 768 40K 말뭉치 + KLUE NLI + 증강 STS N/A (벤치마크 참조) 0.8628 (Hugging Face) 한국어 전용
upskyy/bge-m3-korean XLMRoberta 8192 1024 BGE-M3→KorSTS, KorNLI 파인튜닝 0.874 N/A 75개 언어 다국어 지원

 

 

  • 기본 Transformer 모델: SBERT 구조의 백본으로 사용된 BERT 계열 모델명을 표시
  • 최대 시퀀스 길이: 입력 토큰 최대 수. BGE-M3는 8,192까지 처리해 긴 문맥에 유리함
  • 임베딩 차원: 문장 하나를 표현하는 dense 벡터의 크기
  • 파인튜닝 데이터: 각 모델이 의미적 유사도 학습에 사용한 주된 데이터셋 또는 태스크
  • STS Dev Pearson Cosine: 개발용 STS 데이터셋에서 코사인 유사도 기반 Pearson 점수
  • 문서 분류 정확도: SNUNLP 모델만 문서 분류 태스크 평가 결과를 공개.
  • 다국어 지원: upskyy 모델은 75개 언어를 지원하며, 다른 두 모델은 한국어 전용.

 

아래 두개의 한글 문장을 비교해 보았다. 

"여성용 가방을 사고 싶어요",
"여자 명풍가방 구매 하고 싶음"

 

jhgan Similarity score: 0.7624
snunlp Similarity score: 0.6445
upskyy Similarity score: 0.6513

 

간단한 테스트 코드.

import torch
from sentence_transformers import SentenceTransformer, models, util

def load_sentence_model(model_name="upskyy/bge-m3-korean"):
    # GPU 사용 가능 시
    device = "cuda" if torch.cuda.is_available() else "cpu"
    print(f"Using device: {device}")

    word_embedding_model = models.Transformer(
        model_name,
        tokenizer_args={"use_fast": False}
    )
    pooling_model = models.Pooling(
        word_embedding_model.get_word_embedding_dimension(),
        pooling_mode_mean_tokens=True,
        pooling_mode_cls_token=False,
        pooling_mode_max_tokens=False
    )

    model = SentenceTransformer(
        modules=[word_embedding_model, pooling_model],
        device=device
    )
    return model

# 모델 로드
model_jhgan = SentenceTransformer('jhgan/ko-sbert-sts')
model_snunlp = SentenceTransformer("snunlp/KR-SBERT-V40K-klueNLI-augSTS")
model_upskyy = load_sentence_model("upskyy/bge-m3-korean")


# 한글 문장 임베딩
sentences = [
    "여성용 가방을 사고 싶어요",
    "여자 명풍가방 구매 하고 싶음"
]


embeddings_jhgan = model_jhgan.encode(sentences, convert_to_tensor=True)
cos_sim_jhgan = util.pytorch_cos_sim(embeddings_jhgan[0], embeddings_jhgan[1])
print(f"jhgan Similarity score: {cos_sim_jhgan.item():.4f}")

embeddings_snunlp = model_snunlp.encode(sentences, convert_to_tensor=True)
cos_sim_snunlp = util.pytorch_cos_sim(embeddings_snunlp[0], embeddings_snunlp[1])
print(f"snunlp Similarity score: {cos_sim_snunlp.item():.4f}")

embeddings_upskyy = model_upskyy.encode(sentences, convert_to_tensor=True)
cos_sim_upskyy = util.pytorch_cos_sim(embeddings_upskyy[0], embeddings_upskyy[1])
print(f"upskyy Similarity score: {cos_sim_upskyy.item():.4f}")

 

728x90
반응형

'NLP > HuggingFace' 카테고리의 다른 글

[BERT] 테스트  (0) 2025.06.25
[NLP] jhgan  (0) 2025.05.05
[NLP] upskyy  (0) 2025.05.01
[NLP] snunlp  (0) 2025.05.01
[NLP] 가상환경 만들기 - conda  (0) 2025.05.01