Author
박우명 / CDO & Head of Research
Category
Paper Review
Tags
EmbeddingMTEBLLMdata
Published
January 8, 2024
도입
- LLM이 외부의 지식이나 정보를 동적으로 활용하는 방법으로 RAG(Retrieval-Augmented Generation) framework가 매우 각광 받고 있음
- Embedding model은 retrieval의 성능을 결정하는 가장 중요한 요소로 embedding model의 성능을 측정하기 위한 대규모 벤치마크 중 대표적인 것으로 MTEB(Massive Text Embedding Benchmark)이 존재 (이전 아티클 참고 : MTEB 상위권 방법론들)
- 이 아티클에서는 최근 MTEB에서 최고의 성능을 달성한 방법론에 대하여 소개함
- 리뷰 논문 : https://arxiv.org/abs/2401.00368 (by Microsoft)
개요
- 한줄 요약 : GPT-4를 활용하여 학습 데이터를 생성하고 그것으로 Mistral-7b 모델을 tuning 하여 MTEB에서 SOTA 성능을 달성
- 다국어 데이터도 생성하여 총 93개 언어에 대한 embedding 능력을 학습
- DeepNet, LongNet, E5, Kosmos 시리즈 등 꽤 실용적인 연구를 많이 하는 그룹에서 발표한 논문
방법론 상세
- Data Generation
- 다양한 종류의 데이터를 생성하기 위하여 embedding task를 크게 몇 개의 그룹으로 나눈 후 각 그룹별로 다른 prompt template을 활용하여 데이터를 생성
- Asymmetric tasks
- Query와 document가 의미상 연관은 있지만 유사한 내용은 아닌 경우(질문-답변, 검색 query-관련 문서 등)
- 이 경우는 short-short, short-long, long-short, long-long 4가지 subgroup으로 나눔
- 위 그림 1에서와 같이 먼저 task의 instruction을 LLM이 생성하게 한 후 생성한 task instruction에 대하여 query 및 document를 생성하는 2단계로 진행
- Symmetric tasks
- Query와 document가 유사한 의미를 가지는 경우
- STS와 bitext retrieval 2가지 subgroup으로 나눔
- 이 경우는 task instruction이 직관적이므로 사람이 직접 생성한 prompt를 통하여 바로 query 및 document를 생성 (e.g., “Retrieve semantically similar text.”)
- 프롬프트에서 query_length, query_type, num_words 등 주요 feature들에 대하여 여러 개의 옵션을 사전에 만든 후 생성할 때마다 random sampling하여 최대한 다양한 데이터를 생성하였음
- 모델
- Backbone : Mistral-7b
- LoRA with rank=16, DeepSpeed ZeRO-3
- seq_length=512, batch_size=2048, LR=10^-4, linear decay, weight decay=0.1
- Query에 task instruction 을 합친 형태를 입력으로 사용함
- Query와 document 입력 맨 뒤에 [EOS] token을 삽입한 후 이 토큰에 대한 embedding을 각각의 embedding vector()로 사용.
- 입력 query와 positive document가 유사한 embedding이 되도록 InfoNCE loss로 학습. 여기서 은 in-batch negative 및 hard negative 모두 포함한 집합
- 학습은 1 epoch 진행. V100 32장으로 18시간 소요
- MTEB evaluation은 document에 대한 encoding에 시간이 많이 걸려서 V100 8장으로 3일 소요
결과
- 생성 데이터 유형 및 언어 종류
- 총 150k개의 task로부터 500k개의 데이터를 생성. 데이터 생성에 180M 토큰 사용
- 기존 labeled 데이터도 학습에 활용(아래 표에서 full data). 다음의 데이터로부터 샘플링하여 위에서 생성한 데이터 포함 총 1.8M 데이터를 수집
- ELI5, HotpotQA, FEVER, MIRACL, MS-MARCO, NQ, NLI, SQuAD, TriviaQA, Quora Duplicate Questions, MrTyDi, DuReader, T2Ranking
- Task 종류는 short-long 이 가장 많고 long-short, STS 등의 순서
- 언어는 (당연하게도) 영어가 가장 많음
- GPT-3.5-turbo로 약 25%, GPT-4로 75%를 생성. GPT-3.5-turbo는 지시문이나 가이드라인을 명확히 따르지 않는 경우가 일부 있으나 전체 품질은 나쁘지 않아서 학습 데이터에 포함시킴
- 실험 결과
- 전체 데이터를 모두 학습에 활용한 모델이 MTEB에서 66.6점으로 SOTA를 달성.
- 생성 데이터로만 학습한 경우에도 63.1점으로 괜찮은 성능을 얻음
- OpenAI보다는 높고 Cohere보다는 낮은 수준
- 23년 8월경까지 SOTA였던 GTE-large와 비슷한 점수
- 영어 이외에도 프랑스어, 러시아어 등에서는 꽤 좋은 성능을 보이나 low-resource 언어에서는 비교적 낮음. Mistral-7B 자체가 영어 위주로 학습되어서 그런 것으로 예상
- Pre-training 단계에서부터 contrastive learning을 적용했을 때의 효과가 별로 없었음. 모델이 크고 학습 데이터가 많아져서 그런 것으로 예상
- Ablation study
- LLaMA 2 백본 대비 Mistral-7B가 더 좋음 (62.9 -> 64.5)
- Augmentation 효과 있음 (62.7 -> 64.5)
- Pooling 방법은 그닥 효과가 없음 (64.5 -> 64.0 or 64.1)
- LoRA rank에 따라서 약간의 성능 차이가 있음 (다른 값이 더 좋은데 왜 r=16을 사용했는지는 명확하지 않음. 논문에서는 큰 차이가 아니라 그냥 r=16을 사용했다고 언급)
- Instruction을 넣어주는 것이 매우 중요! (60.3 -> 64.5). 이는 백본이 sLLM이라 promping을 이해하여 embedding 계산에도 도움을 주기 때문인 것으로 예상
Examples
- 사용한 Instruction 예시
논의사항
- SGPT와 유사하게 비교적 큰 크기의 transformer decoder 백본을 활용한 접근 방법. 꽤 실용적이며 다양한 오픈 소스 sLLM이 존재하는 현재 시점에서 가장 유용한 접근 방법 중 하나라 판단
- 생성 데이터 및 데이터 생성에 사용된 프롬프트를 공개하지 않아서 (그들이 공개한 checkpoint를 쓰는 것 말고는) 제안한 방법론의 재현 및 검증이 어려운 점은 아쉬움
- 기존에도 그랬지만 앞으로도 계속 모델 checkpoint만 공개하고 실제 사용한 데이터나 데이터 수집/생성 detail은 공개하지 않는 추세가 점점 더 심해질 것 같음
- Good Data is All You Need!!