파인튜닝

파인튜닝 (Fine-tuning)

파인튜닝은 모델 자체를 데이터로 업데이트해서 출력 품질을 높이고 할루시네이션을 줄이고, 더 많은 데이터를 외우고, 지연 시간이나 비용을 낮추는 방법이에요. LlamaIndex 툴킷의 핵심은 인컨텍스트 러닝/검색 증강이지만, 파인튜닝으로 이를 잘 보완할 수 있어요.

출처: 문서

본문

개요 (Overview)

모델을 파인튜닝한다는 것은 데이터 집합 위에서 모델 자체를 업데이트해서 다양한 방식으로 개선하는 것을 뜻해요. 여기에는 출력 품질 향상, 할루시네이션 감소, 데이터를 더 통합적으로 기억하기, 지연 시간/비용 절감이 포함돼요.

우리 툴킷의 핵심은 인컨텍스트 러닝/검색 증강(retrieval augmentation)으로, 모델을 인퍼런스 모드로 사용하고 모델 자체는 학습시키지 않아요.

파인튜닝은 모델을 외부 데이터로 "증강"하는 데에도 쓰일 수 있지만, 검색 증강을 다양한 방식으로 보완할 수 있어요:

임베딩 파인튜닝의 이점 (Embedding Finetuning Benefits)

  • 임베딩 모델을 파인튜닝하면 학습 데이터 분포 위에서 더 의미 있는 임베딩 표현을 만들 수 있어요 → 검색 성능이 더 좋아져요.

LLM 파인튜닝의 이점 (LLM Finetuning Benefits)

  • 주어진 데이터 집합 위에서 특정 스타일을 학습할 수 있어요
  • 학습 데이터에 덜 표현된 DSL(예: SQL)을 학습할 수 있어요
  • 프롬프트 엔지니어링으로 고치기 어려운 할루시네이션/오류를 교정할 수 있어요
  • 더 좋은 모델(예: GPT-4)을 더 단순하고 저렴한 모델(예: gpt-3.5, Llama 2)로 증류(distill)할 수 있어요

LlamaIndex와의 통합 (Integrations with LlamaIndex)

이 가이드는 계속 진화하고 있으며, 현재 LlamaIndex와의 핵심 통합이 세 가지 있어요. 아래 섹션들을 확인해 보세요.

  • 검색 성능 향상을 위한 임베딩 파인튜닝
  • 더 나은 text-to-SQL을 위한 Llama 2 파인튜닝
  • gpt-4를 증류하기 위한 gpt-3.5-turbo 파인튜닝

임베딩 파인튜닝 (Finetuning Embeddings)

임베딩을 다양한 방식으로 파인튜닝하는 방법을 보여주는 포괄적인 가이드를 만들었어요. 비구조화 텍스트 말뭉치 위에서 모델 자체(여기서는 bge)를 파인튜닝하거나, 블랙박스 임베딩 위에 어댑터를 만드는 방식이에요. 다음 단계로 구성돼요:

  1. LlamaIndex를 사용해 임의의 비구조화 컨텍스트 위에서 합성 질문/답변 데이터셋 생성하기
  2. 모델 파인튜닝하기
  3. 모델 평가하기

파인튜닝을 하면 검색 평가 지표가 5~10% 정도 향상돼요. 그런 다음 파인튜닝된 모델을 LlamaIndex로 RAG 앱에 연결하면 돼요.

이전 (Old)

LLM 파인튜닝 (Fine-tuning LLMs)

GPT-3.5를 파인튜닝해 GPT-4 증류하기

OpenAI의 파인튜닝 엔드포인트로 gpt-3.5-turbo를 파인튜닝해서 RAG/에이전트용 GPT-4 응답을 출력하도록 하는 가이드가 여러 개 있어요.

GPT-4를 사용해 임의의 비구조화 컨텍스트에서 질문을 자동 생성하고, GPT-4 쿼리 엔진 흐름을 사용해 "ground-truth" 답변을 생성해요. OpenAIFineTuningHandler 콜백이 질문/답변을 데이터셋에 자동으로 기록해요.

그런 다음 파인튜닝 작업을 실행해 증류된 모델을 얻어요. 이 모델을 Ragas로 평가해서 기본 GPT-3.5 흐름과 벤치마크 비교할 수 있어요.

이전 (Old)

더 나은 구조화 출력을 위한 파인튜닝

파인튜닝의 또 다른 사용 사례는 모델이 구조화된 데이터를 더 잘 출력하게 만드는 거예요. OpenAI와 Llama2 모두에 대해 할 수 있어요.

더 나은 Text-to-SQL을 위한 Llama 2 파인튜닝

이 튜토리얼에서는 text-to-SQL 데이터셋 위에서 Llama 2를 파인튜닝한 다음, LlamaIndex 추상화를 사용해 어떤 SQL 데이터베이스에 대해서도 구조화된 분석에 사용하는 방법을 보여줘요.

스택에는 학습 데이터셋 sql-create-context, 기본 모델 OpenLLaMa, 파인튜닝용 PEFT, 클라우드 컴퓨팅용 Modal, 인퍼런스 추상화용 LlamaIndex가 포함돼요.

평가자 파인튜닝 (Fine-tuning An Evaluator)

이 튜토리얼들에서는 GPT-4 판사(평가자)를 GPT-3.5 판사로 증류하는 것을 목표로 해요. 최근 GPT-4 판사가 인간 평가자와 높은 수준의 일치에 도달할 수 있다는 것이 관찰됐어요. (예: https://arxiv.org/pdf/2306.05685.pdf)

따라서 GPT-3.5 판사를 파인튜닝하면 더 낮은 비용으로 GPT-4 수준(그리고 그에 따른 인간과의 일치)에 도달할 수 있어요.

리랭킹용 크로스 인코더 파인튜닝 (Fine-tuning Cross-Encoders for Re-Ranking)

크로스 인코더를 파인튜닝하면 자체 프라이빗 데이터에서 리랭킹 성능을 개선할 수 있어요.

리랭킹은 고급 검색의 핵심 단계로, 여러 소스에서 검색된 노드를 별도의 모델로 다시 정렬해서 가장 관련성 높은 노드가 먼저 오도록 하는 방식이에요.

이 예제에서는 QASPER 데이터셋을 기반으로 생성한 데이터셋을 사용해, sentence-transformers 패키지로 크로스 인코더 모델을 파인튜닝해요.

Cohere 커스텀 리랭커 (Cohere Custom Reranker)

CohereAI로 커스텀 리랭커를 학습하면 자체 프라이빗 데이터에서 리랭킹 성능을 개선할 수 있어요.

리랭킹은 고급 검색 프로세스에서 중요한 단계예요. 초기 검색 단계에서 검색된 노드를 별도의 모델로 재구성하는 단계로, 가장 관련성 높은 노드가 우선 순위로 먼저 오도록 하는 게 목표예요.

이 예제에서는 cohere 커스텀 리랭커 학습 모듈을 사용해 도메인이나 특정 데이터셋에 대한 리랭커를 만들어 검색 성능을 개선해요.