dspy.BootstrapFewShotWithRandomSearch

dspy.BootstrapFewShotWithRandomSearch

dspy.BootstrapFewShotWithRandomSearch(줄여서 dspy.BootstrapRS라고도 불러요)는 후보 탐색(candidate search) 을 더한 BootstrapFewShot이에요. 한 번의 부트스트랩 통과만으로 데모 품질이 일관되지 않을 때, 여러 번 돌려 그중 최고를 고르는 옵티마이저죠.

아이디어는 단순해요. 부트스트래핑은 어느 trace가 먼저 부트스트랩되느냐에 따라 다른 데모 부분집합을 발견하는데, 그건 무작위성에 좌우돼요. 그렇다면 같은 부트스트랩을 무작위 시드 여러 개로 반복해서, 각 후보를 검증 셋에서 평가하고 가장 높은 점수를 낸 후보를 반환하자는 거예요.

생성자 시그니처

dspy.BootstrapFewShotWithRandomSearch(
    metric,
    teacher_settings=None,
    max_bootstrapped_demos=4,
    max_labeled_demos=16,
    max_rounds=1,
    num_candidate_programs=16,
    num_threads=None,
    max_errors=None,
    stop_at_score=None,
    metric_threshold=None,
)

compileteacher, trainset, valset을 받아요. valset은 기본적으로 trainset으로 설정되고, 후보들의 승자를 가르는 심판 역할을 해요.

후보가 만들어지는 방식

num_candidate_programs개의 후보를 만들고 그중 승자를 고르는데, 그중 3개 시드는 고정된 베이스라인이에요.

  • seed=-3: zero-shot(데모 없음)
  • seed=-2: LabeledFewShot(k=max_labeled_demos)
  • seed=-1: trainset을 섞지 않은 BootstrapFewShot

나머지 시드는 trainset을 섞고 부트스트랩 데모 개수를 달리해요. 각 후보는 valset에서 평가되고, 가장 높은 점수를 낸 후보가 반환돼요. best_program.candidate_programs에는 (seed, program, score, subscores) 튜플로 이뤄진 정렬된 전체 후보 목록이 담겨 있어서 검사할 수 있어요.

핵심 파라미터

  • num_candidate_programs: 최적화 중 평가할 무작위 프로그램 수예요.
  • stop_at_score: 후보의 valset 점수가 특정 값 N에 도달하면 일찍 멈춰요. "충분히 좋음"의 기준이 명확할 때 나머지 예산을 아끼는 데 유용해요.
  • num_threads: 후보 평가를 병렬화해요. 부트스트랩 단계 자체를 병렬화하는 건 아니에요.

언제 쓰나요?

한 번의 부트스트랩 통과가 시도마다 데모 품질이 들쭉날쭉할 때 쓸 수 있어요. BootstrapFewShot보다 데이터가 더 많을 때(50개 이상) 시작점으로 권장돼요. 여러 후보를 만들어 검증 셋으로 골라내므로 부트스트랩의 무작위성에서 오는 변동을 평균화하는 효과가 있어요.