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
반응형