Skip to content

数据

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

DSPy Example 对象

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

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

当你使用DSPy时,你会进行大量的评估和优化运行。你的单个数据点将是Example类型:

qa_pair = dspy.Example(question="这是一个问题?", answer="这是一个答案。")

print(qa_pair)
print(qa_pair.question)
print(qa_pair.answer)
输出:
Example({'question': '这是一个问题?', 'answer': '这是一个答案。'}) (input_keys=None)
这是一个问题?
这是一个答案。

示例可以包含任意字段键和任意值类型,但通常值是字符串。

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() 方法分别返回仅包含输入或非输入键的新示例对象。

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({'article': 'This is an article.'}) (input_keys={'article'})
仅包含非输入字段的示例对象: Example({'summary': 'This is a summary.'}) (input_keys=None)

优云智算