3. 训练专门用于问答的微调模型

本笔记本将利用上下文、问题和答案对的数据集来额外创建对抗性问题和上下文对,其中问题不是针对该上下文生成的。在这些情况下,模型将被提示回答“没有足够的上下文来回答问题”。我们还将训练一个判别器模型,该模型预测问题是否可以根据上下文进行回答。

我们将添加硬对抗性示例,这些示例将基于语义相似的段落或源自同一文章的相邻段落。

将节拆分为训练集和测试集

我们检查分隔符是否在上下文中不存在

3.1 为问答和判别器模型创建微调数据集

微调数据集的创建方式如下。对于每个对应的问、答和上下文对,我们创建:

  • 正面示例:正确的问题、答案、上下文对
  • 负面示例:
  • 随机负面示例,其中随机上下文与问题配对
  • 两个硬负面示例
    • 一个源自同一维基百科文章
    • 另一个与正确上下文最相似

此过程存在噪声,因为有时问题可能可以通过不同的上下文来回答,但平均而言,我们希望这不会对性能产生太大影响。

我们对判别器和问答模型都应用了相同的数据集创建过程。我们分别对训练集和测试集应用该过程,以确保训练集中的示例不出现在测试集中。

我们对判别器和问答模型都应用了相同的数据集创建过程。我们分别对训练集和测试集应用该过程,以确保训练集中的示例不出现在测试集中。

我们已根据微调工具的建议格式化了数据,该工具可通过以下方式获得:

openai tools fine_tunes.prepare_data -f qa_train.jsonl

我们强烈建议您使用此工具,该工具建议改进您在微调中的数据格式。

3.2 提交数据集进行微调

3.3 使用微调后的模型

我们现在将使用微调后的判别器和微调后的问答模型。通过请求 logprobs,我们可以看到判别器在回答“是”还是“否”时的确定性。

我们可以看到,该模型可以很好地泛化到不同的上下文和问题。

我们可以看到,当上下文合适时,模型可以回答问题。

我们可以看到,模型知道何时回答问题,以及何时表示没有足够的上下文来回答问题。

我们还可以结合使用判别器和基础模型,或者微调后的问答模型。判别器基本上可以作为决定问题是否可以根据上下文回答的依据。

上面函数说明了如何潜在地结合使用判别器和微调后的问答模型。这提供了对模型在回答问题之前应该有多确定的更精细的控制。

我们现在将看看 answers 端点的工作原理——结合搜索从知识库中检索相关上下文,然后使用微调后的问答模型来回答问题。如果您想查看实现细节,请查看 answers_with_ft.py 文件。