Langchain PDF Chatbot 만들기 - 22 - OpenSouce Embedding 모델 찾기
목차
기존 사용 Embedding 모델
OpenAI가 제공하는 임베딩 모델과 Anthropic이 권장하는 임베딩 모델 중에서 text-embedding-3-large를 사용하고 있었다.
그런데 OpenSource 임베딩 모델을 확인해서 사용해야하는 상황이 되어버렸다.
모델 선정 기준
우선 HuggingFace에서 library가 sentence-transformers인 것 중에서 한국어를 지원하는 것
그리고 Task가 sentence-similarity와 feature-extraction 둘 중에 하나인 것으로 우선순위를 정해서 테스트
- sentence-similarity : 문장간 의미적 유사도를 평가하는데 최적화
- feature-extraction : 입력 텍스트로부터 특징을 추출해 다양한 목적에 사용할 수 있는 임베딩 생성이 목적
그 외에도 다른 사람들이 많이 사용하거나 추천하는 임베딩 모델도 테스트했음
MTEB
MTEB는 임베딩 모델을 평가하기 위한 벤치마크 데이터
MTEB로 측정가능한 Task 목록
MTEB로 측정가능한 Task 목록에서 Task를 선정하는 기준
- 한국어 데이터 셋
- RAG에 필요한 평가 지표 Task
- STS(Semetic Textual Similarity) : 두 문장이 의미적으로 얼마나 유사한지 평가
- Retrieval : 주어진 질의를 바탕으로 관련 있는 문서를 찾아내는지 평가
- Reranking : 초기 검색 결과나 후보 리스트를 재정렬하여 관련성 높은 항목을 상위 배치하는지 평가
MTEB 테스트 코드
MTEB는 pip install mteb
를 이용해서 설치
1
2
3
4
5
6
7
8
9
10
11
12
import mteb
tasks = mteb.get_tasks(languages=["kor"]).to_dataframe()
tasks = tasks[tasks['type'].isin(['STS', 'Retrieval', 'Reranking'])]
tasks = tasks['name'].tolist()
tasks = mteb.get_tasks(tasks=tasks_name)
model = mteb.get_model(model_name, device="cuda", trust_remote_code=True, token=HUGGINGFACE_API_KEY)
evaluation = mteb.MTEB(tasks=tasks)
results = evaluation.run(model, output_folder=f"embedding_test_results/{model_name}")
테스트한 OpenSource Embedding 모델 List
- jinaai/jina-embeddings-v3
- nomic-ai/nomic-embed-text-v2-moe
- intfloat/e5-mistral-7b-instruct
- intfloat/multilingual-e5-large-instruct
- sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
- Alibaba-NLP/gte-multilingual-base
- Alibaba-NLP/gte-Qwen2-7B-instruct
- bespin-global/klue-sroberta-base-continue-learning-by-mnr
- upskyy/kf-deberta-multitask
- Salesforce/SFR-Embedding-2_R
- BAAI/bge-multilingual-gemma2
- upskyy/bge-m3-korean
- jhgan/ko-sroberta-multitask
- nlpai-lab/KURE-v1
- nlpai-lab/KoE5
- kakaocorp/kanana-nano-2.1b-embedding
- McGill-NLP/LLM2Vec-Meta-Llama-3-8B-Instruct-mntp-supervised
- dragonkue/snowflake-arctic-embed-l-v2.0-ko
- facebook/drama-1b
- klue/bert-base