포스트

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