![[DSPy] 07.Data :Programming—not prompting—Language Models](http://www.tmoremore.com/wp-content/uploads/2024/06/dspy.png)
DSPy는 머신 러닝 프레임워크이므로 이 프레임워크에서 작업하려면 학습 세트, 개발 세트, 테스트 세트가 필요합니다.
데이터의 각 예제에 대해 일반적으로 입력, 중간 레이블, 최종 레이블의 세 가지 유형의 값을 구분합니다. 중간 레이블이나 최종 레이블 없이도 DSPy를 효과적으로 사용할 수 있지만, 최소한 몇 가지 예제 입력이 필요합니다.
작업에 필요한 데이터는 얼마나 필요하며 어떻게 데이터를 수집하나요?
구체적으로 예제 입력이 10개만 있어도 DSPy 최적화 도구를 유용하게 사용할 수 있지만, 50~100개(또는 300~500개)의 예제가 있으면 훨씬 더 큰 도움이 됩니다.
이런 예제는 어떻게 구할 수 있을까요? 업무가 매우 특이하다면 직접 10개 정도의 예시를 준비하는 데 투자하세요. 아래 메트릭에 따라 레이블이 아닌 입력만 필요한 경우가 많으므로 그렇게 어렵지 않습니다.
하지만 여러분의 작업이 실제로 그렇게 독특하지 않을 가능성도 있습니다. 예를 들어, HuggingFace 데이터 집합이나 다른 형태의 데이터에서 거의 항상 여기에서 활용할 수 있는 다소 인접한 데이터 집합을 찾을 수 있습니다.
라이선스가 충분히 허용되는 데이터가 있다면 그 데이터를 사용하는 것이 좋습니다. 그렇지 않은 경우에는 시스템을 사용/배포/데모하고 그런 식으로 초기 데이터를 수집할 수도 있습니다.
DSPy Example 오브젝트
DSPy에서 데이터의 핵심 데이터 유형은 Example입니다. Example을 사용하여 훈련 세트와 테스트 세트의 항목을 표현합니다.
DSPy Example는 파이썬 딕셔너리와 유사하지만 몇 가지 유용한 유틸리티가 있습니다. DSPy 모듈은 Example의 특수 하위 클래스인 Prediction 유형의 값을 반환합니다.
DSPy를 사용하면 많은 평가와 최적화를 실행하게 됩니다. 개별 데이터 포인트는 Example 유형이 될 것입니다:
qa_pair = dspy.Example(question="This is a question?", answer="This is an answer.")
print(qa_pair)
print(qa_pair.question)
print(qa_pair.answer)
Output:
Example({'question': 'This is a question?', 'answer': 'This is an answer.'}) (input_keys=None)
This is a question?
This is an answer.
Example 에는 모든 필드 키와 모든 값 유형이 포함될 수 있지만, 일반적으로 값은 문자열입니다.
object = Example(field1=value1, field2=value2, field3=value3, …)
이제 트레이닝 세트를 예를 들어 다음과 같이 표현할 수 있습니다:
trainset = [dspy.Example(report="LONG REPORT 1", summary="short summary 1"), …]
입력 키 지정
기존 ML에서는 ‘입력’과 ‘레이블’이 분리되어 있습니다.
DSPy에서 Example 객체에는 특정 필드를 입력으로 표시할 수 있는 with_inputs() 메서드가 있습니다. (나머지는 메타데이터 또는 레이블일 뿐입니다.)
# Single Input.
print(qa_pair.with_inputs("question"))
# Multiple Inputs; be careful about marking your labels as inputs unless you mean it.
print(qa_pair.with_inputs("question", "answer"))
(점) 연산자를 사용하여 값에 액세스할 수 있습니다. object.name을 통해 정의된 개체 예제(name=”John Doe”, job=”sleep”)의 키 이름 값에 액세스할 수 있습니다.
특정 키에 액세스하거나 제외하려면 inputs() 및 labels() 메서드를 사용하여 각각 입력 키 또는 비입력 키만 포함된 새 예제 개체를 반환합니다.
article_summary = dspy.Example(article= "This is an article.", summary= "This is a summary.").with_inputs("article")
input_key_only = article_summary.inputs()
non_input_key_only = article_summary.labels()
print("Example object with Input fields only:", input_key_only)
print("Example object with Non-Input fields only:", non_input_key_only)
Output
Example object with Input fields only: Example({'article': 'This is an article.'}) (input_keys=None)
Example object with Non-Input fields only: Example({'summary': 'This is a summary.'}) (input_keys=None)