일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- java
- aqqle
- Elasticsearch
- dbeaver
- 테슬라
- request cache
- JPA
- aggs
- Selenium
- Analyzer
- Elastic
- 아이온큐
- API
- TSLA
- IONQ
- 양자컴퓨터
- Docker
- NORI
- file download
- elasticsearch cache
- KNN
- redis
- mysql
- ann
- api cache
- Cache
- java crawler
- vavr
- Query
- Aggregation
Archives
- Today
- Total
아빠는 개발자
[NLP] jhgan vs snunlp vs upskyy 본문
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 |