포스트

Langchain PDF Chatbot 만들기 - 22 - OpenSouce Embedding 모델 찾기

목차

  1. 모델 선정 기준
  2. MTEB
  3. 테스트한 OpenSource Embedding 모델 List

기존 사용 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