BIG-bench (Beyond the Imitation Game Benchmark)는 200개가 넘는 작업으로 구성된 협업형 벤치마크로, 대규모 언어 모델을 심층적으로 평가하고 그 미래 역량을 가늠하기 위해 만들어졌습니다. BIG-Bench Hard (BBH)는 BIG-Bench 과제 중 가장 어려운 23개를 모아 놓은 벤치마크로, 현재 세대의 언어 모델로는 해결하기 매우 까다로울 수 있습니다.이 튜토리얼에서는 BIG-bench Hard 벤치마크의 causal judgement task를 바탕으로 구현한 LLM 워크플로의 성능을 개선하고, 프롬프팅 전략을 평가하는 방법을 살펴봅니다. LLM 워크플로를 구현하고 프롬프팅 전략을 최적화하는 데 DSPy를 사용합니다. 또한 LLM 워크플로를 추적하고 프롬프팅 전략을 평가하기 위해 Weave도 사용합니다.
DSPy는 자유 형식 문자열을 직접 조작하는 방식에서 벗어나, 프로그래밍(모듈식 Operator를 조합해 텍스트 변환 그래프를 구성하는 방식)에 더 가깝게 새로운 LM 파이프라인을 구축하도록 돕는 프레임워크입니다. 여기서 컴파일러는 프로그램으로부터 최적화된 LM 호출 전략과 프롬프트를 자동으로 생성합니다.언어 모델을 설정하기 위해 dspy.LM을 사용하고, 이를 기본값으로 지정하기 위해 dspy.configure를 사용합니다.
시그니처는 DSPy 모듈의 입력/출력 동작을 선언적으로 정의하는 명세입니다. DSPy 모듈은 작업에 맞게 적응하는 컴포넌트로, 신경망의 계층과 유사하며 특정 텍스트 변환을 추상화합니다.
class CausalReasoning(dspy.Signature): """You are an expert in causal reasoning. Analyze the given question carefully and answer Yes or No. Provide a detailed explanation justifying your answer.""" question: str = dspy.InputField(desc="The question to be answered") answer: str = dspy.OutputField(desc="Yes or No") confidence: float = dspy.OutputField(desc="Confidence score between 0 and 1") explanation: str = dspy.OutputField(desc="Detailed explanation for the answer")class CausalReasoningModule(dspy.Module): def __init__(self): self.prog = dspy.Predict(CausalReasoning) @weave.op() def forward(self, question: str) -> dict: result = self.prog(question=question) return { "answer": result.answer, "confidence": result.confidence, "explanation": result.explanation, }
예제로 Big-Bench Hard의 인과 추론 하위 집합에 있는 항목을 사용해 LLM 워크플로, 즉 CausalReasoningModule을 테스트해 보겠습니다.
이제 베이스라인 프롬프팅 전략이 있으므로, 예측된 답변이 정답과 일치하는지 확인하는 단순한 메트릭으로 weave.Evaluation을 사용해 검증 세트에서 평가해 보겠습니다. Weave는 각 예시를 가져와 애플리케이션에 전달한 다음, 여러 맞춤형 채점 함수로 출력을 평가합니다. 이렇게 하면 애플리케이션의 성능을 보여주는 뷰를 얻을 수 있고, 개별 출력과 점수를 자세히 살펴볼 수 있는 풍부한 UI도 활용할 수 있습니다.먼저 예측된 답변이 정답과 일치하는지 판별하는 채점 함수를 만들어야 합니다. Weave 채점 함수는 모델의 반환 값을 output으로 받고, 데이터셋 예시의 일치하는 키를 추가 인수로 받습니다. 여기서 answer는 데이터셋에서 오고, output은 CausalReasoningModule.forward가 반환한 dict입니다.