BootstrapFewShot 계열

BootstrapFewShot 계열 (BootstrapFewShot family)

BootstrapFewShot 계열 — LabeledFewShot, BootstrapFewShot, BootstrapFewShotWithRandomSearch(별칭 BootstrapRS), KNNFewShot, InferRules — 은 DSPy의 데모 튜닝 최적화기들입니다. 모두 한 가지 메커니즘을 공유합니다. 예시 트레이스를 수집(또는 샘플)해 각 predictor의 demos 리스트에 넣는 것이죠. 데모가 어떻게 선택되는지 — 수동 샘플링, 메트릭 필터 부트스트랩, 데모 세트에 걸친 무작위 탐색, 추론 시점 KNN 검색, 또는 부트스트랩 트레이스에서의 규칙 추출 — 가 다릅니다.

출처: 문서

본문

선택 가이드에서 계열 구성원 하나를 고른 뒤, 변형들이 어떻게 관련되는지, 각각이 기본 위에 무엇을 더하는지, 어떤 실패 모드를 조심해야 하는지 이해하고 싶을 때 이 문서를 읽으세요.

설계 결정

1. 데모는 최적화기가 아니라 predictor에 있다

이 계열의 모든 변형은 predictor.demos — 각 Predict 에 붙은 평범한 Python 리스트 — 를 씁니다. 최적화기는 로더(loader)이고 predictor가 저장소입니다. 컴파일된 뒤 프로그램의 동작은 predictor들의 demos와 시그니처에 완전히 인코딩되며, 최적화기 객체는 버려도 됩니다. program.save(path) 는 데모를 프로그램과 함께 피클합니다.

2. LabeledFewShot 은 LM 없는 기준선이다

trainset의 무작위 샘플(또는 결정적 슬라이스)이며, teacher도, 메트릭도, LM 호출도 없습니다. 데모만으로 충분한지 확인하는 데 쓰세요. LabeledFewShot(k=16) 이 이미 목표에 도달한다면, 더 무거운 것은 낭비입니다.

3. BootstrapFewShot 은 트레이스를 메트릭으로 필터링한다

teacher가 각 훈련 예시를 실행하고, 메트릭이 각 완성을 판정하며, 통과한 트레이스가 데모가 됩니다. 기준선 위의 모든 변형은 이 루프의 어떤 버전을 씁니다. 메트릭이 손잡이입니다. 엄격하게 만들면 적지만 고품질의 데모, 느슨하게 만들면 많지만 낮은 품질의 데모를 얻습니다.

4. teacher는 기본적으로 student의 deepcopy다

teacher를 넘기지 않으면 BootstrapFewShot 은 student를 deepcopy해 teacher로 씁니다. labeled=True 를 설정하면 레이블된 예시를 그대로 데모로 쓰고 부트스트랩을 건너뜁니다. 컴파일 시점에 max_bootstrapped_demos, max_labeled_demos, max_demos 로 데모 수를 제한할 수 있습니다.

5. BootstrapFewShotWithRandomSearch 는 데모 세트를 탐색한다

메트릭 필터 부트스트랩 위에 무작위 탐색을 더해 여러 데모 후보 조합을 평가하고 가장 좋은 것을 고릅니다. BootstrapRS 는 그 별칭입니다. 더 나은 데모 조합을 찾는 대가로 더 많은 컴파일 비용이 듭니다.

6. KNNFewShot 은 추론 시점에 데모를 고른다

컴파일 시점에 데모를 고정하는 대신, 추론 시점에 각 입력에 가장 가까운 데모를 KNN 검색(retriever)으로 찾아 선택합니다. 입력에 따라 데모가 달라질 수 있습니다.

7. InferRules 는 부트스트랩된 트레이스에서 규칙을 추출한다

예시를 직접 데모로 쓰는 대신, 부트스트랩된 트레이스를 분석해 사람이 읽을 수 있는 규칙을 만들어 지시문에 반영합니다.

실패 모드

  • 데모 과적합: 컴파일 세트에 지나치게 맞춰진 데모는 분포 밖 입력에서 퇴화할 수 있습니다.
  • 품질 대비 양: 메트릭을 너무 느슨하면 저품질 데모가 프롬프트를 채웁니다.

더 알아보기 (Learn more)