dspy.MIPROv2

dspy.MIPROv2

MIPROv2는 이름이 곧 하는 일을 설명해요. Multiprompt Instruction PRoposal Optimizer Version 2, 즉 '다중 프롬프트 명령어 제안 옵티마이저 2세대'예요. 한 문장으로 요약하면, 명령어(instruction)와 few-shot 예시를 함께 최적화할 수 있는 프롬프트 옵티마이저예요.

어떻게 하냐면, few-shot 예시 후보를 부트스트래핑하고, 태스크의 여러 역학에 근거를 둔 명령어를 제안한 다음, 이 선택지들의 최적 조합을 베이지안 최적화(Bayesian Optimization) 로 찾아요. few-shot 예시와 명령어를 함께 최적화할 수도 있고, 0-shot 최적화를 위해 명령어만 최적화할 수도 있어요.

예시 사용법

아래 프로그램은 MIPROv2로 수학 프로그램을 최적화하는 예시예요.

import dspy
from dspy.datasets.gsm8k import GSM8K, gsm8k_metric

# 옵티마이저 임포트
from dspy.teleprompt import MIPROv2

# LM 초기화
lm = dspy.LM('openai/gpt-4o-mini', api_key='YOUR_OPENAI_API_KEY')
dspy.configure(lm=lm)

# 옵티마이저 초기화
teleprompter = MIPROv2(
    metric=gsm8k_metric,
    auto="medium", # light, medium, heavy 최적화 실행 중 선택 가능
)

# 프로그램 최적화
print(f"Optimizing program with MIPROv2...")
gsm8k = GSM8K()
optimized_program = teleprompter.compile(
    dspy.ChainOfThought("question -> answer"),
    trainset=gsm8k.train,
)

# 최적화된 프로그램 저장
optimized_program.save(f"optimized.json")

MIPROv2는 어떻게 동작하나요?

높은 수준에서 보면, MIPROv2는 LM 프로그램의 각 predictor마다 few-shot 예시와 새 명령어를 모두 만들고, 베이지안 최적화로 이 변수들의 최적 조합을 탐색해요. 시각 자료가 필요하다면 이 트위터 스레드를 추천해요.

단계를 더 자세히 나누면 아래와 같아요.

  1. Few-Shot 예시 부트스트래핑: 훈련 셋에서 예시를 무작위로 샘플링해 LM 프로그램에 통과시켜요. 프로그램 출력이 그 예시에 대해 올바르면 유효한 few-shot 예시 후보로 남겨요. 아니면 다른 예시를 시도해서 지정된 만큼의 후보를 확보할 때까지 반복해요. 이 단계는 훈련 셋에서 샘플링한 max_bootstrapped_demos개의 부트스트랩 예시와 max_labeled_demos개의 기본 예시로 이뤄진 num_candidates 세트를 만들어요.

  2. 명령어 후보 제안: 명령어 제안자는 (1) 훈련 데이터셋 특성의 요약, (2) LM 프로그램 코드와 특정 명령어를 생성할 대상 predictor의 요약, (3) 해당 predictor의 참고 입출력을 보여줄 이전에 부트스트랩된 few-shot 예시, (4) 잠재적 명령어의 특성 공간을 탐색하기 위한 무작위 생성 팁(예: "be creative", "be concise" 등)을 포함해요. 이 컨텍스트는 고품질 명령어 후보를 작성하는 prompt_model에 제공돼요.

  3. Few-Shot 예시와 명령어의 최적 조합 찾기: 마지막으로 베이지안 최적화로 프로그램의 각 predictor에 가장 잘 맞는 명령어와 예시(demonstration) 조합을 골라요. 이는 일련의 num_trials 트라이얼을 실행해서 이루어지는데, 각 트라이얼에서 새 프롬프트 세트를 검증 셋으로 평가해요. 새 프롬프트 세트는 각 트라이얼에서 minibatch_size 크기의 미니배치(minibatch=True일 때)에서만 평가돼요. 최고 평균을 낸 프롬프트 세트는 minibatch_full_eval_steps마다 전체 검증 셋에서 평가돼요. 최적화가 끝나면 전체 검증 셋에서 가장 좋은 성능을 낸 프롬프트 세트를 가진 LM 프로그램이 반환돼요.

더 자세한 내용과 다른 DSPy 옵티마이저와의 비교 연구는 이 논문에서 볼 수 있어요.