跳到内容

数据

DSPy 是一个机器学习框架,因此在其中工作涉及训练集、开发集和测试集。对于数据中的每个示例,我们通常区分三种类型的值:输入、中间标签和最终标签。您可以在没有任何中间或最终标签的情况下有效使用 DSPy,但您至少需要一些示例输入。

DSPy Example 对象

DSPy 中数据的核心数据类型是 Example。您将使用 Examples 来表示训练集和测试集中的项。

DSPy Examples 类似于 Python 的 dict,但有一些实用的工具函数。您的 DSPy 模块将返回类型为 Prediction 的值,它是 Example 的一个特殊子类。

当您使用 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)
输出
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"), ...]

指定输入键

在传统的机器学习中,存在分离的“输入”和“标签”。

在 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 访问定义对象 Example(name="John Doe", job="sleep") 中键 name 的值。

要访问或排除某些键,请使用 inputs()labels() 方法分别返回仅包含输入键或非输入键的新 Example 对象。

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)

输出

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)