在医疗诊断、金融预测和法律分析等高风险应用领域,不确定性量化至关重要。随着生成式AI的日益普及,其重要性也随之增加。大语言模型(LLM)在提供治疗建议、总结合同或解读法规时,不仅要确保准确性,还必须能够明确指出自身的不确定性。本文将探讨如何利用MAPIE库和Mistral-7B模型,在大模型中实现可靠的不确定性量化,从而提升AI决策的可靠性。
不确定性的关键作用
不确定性在AI应用中扮演着至关重要的角色。理解不确定性使人类能够重新掌握控制权,做出更明智的决策:标记模糊的输出,升级到人工审核,或自动丢弃低置信度的结果。许多技术可以用于估计不确定性,但如果没有统计保证,这些方法通常不可靠。想象一个LLM在医疗诊断中给出建议,但它无法告知你它有多确定。如果建议是错误的,可能会导致严重的后果。通过量化不确定性,我们可以更加谨慎地使用AI的输出,避免盲目信任可能出错的系统。
Conformal Prediction 的优势
Conformal Prediction (一致性预测) 是一种为机器学习模型输出提供校准不确定性的方法。与传统的模型只给出单一预测不同,Conformal Prediction 提供了一组答案,并且保证在一定概率下,正确答案包含在这个集合中。例如,一个置信度为 90% 的预测集合,平均情况下,会包含 90% 的正确答案。无论你处理的是表格数据、计算机视觉还是大模型,MAPIE 都是应用 Conformal Prediction 的首选库,它易于使用且结果可靠。与传统的模型返回单一预测(例如“24岁”或“斑马”)不同,Conformal Prediction 增加了预测集合:回归中的预测区间(例如 [20, 29]),或分类中的预测集合(例如 {斑马, 马})。这些集合的构建保证了给定的置信水平,使预测更加透明和可靠。
MAPIE 的核心价值
MAPIE (Model Agnostic Prediction Interval Estimator) 是一套基于 Conformal Prediction 的工具,它提供严格的、模型无关的不确定性集合,并带有正式的覆盖率保证。换句话说,它为任何模型提供了可靠的可能结果范围,并从数学上保证真实值将以受控的概率落入这些范围。MAPIE 的核心价值在于其统计严谨性,它能够在不依赖模型假设的情况下,提供可靠的不确定性估计。这使得 MAPIE 成为在各种机器学习应用中提高模型可靠性的有力工具,特别是在那些需要高度信任和安全性的场景中。比如,当LLM建议一种治疗方案时,MAPIE可以提供一个置信区间,表明该建议成功的概率范围。
CosmosQA 数据集的应用场景
CosmosQA 是一个常识阅读理解基准数据集,非常适合评估大模型处理细微差别和多步骤推理的能力。每个示例包含:一个上下文(通常来自日常情境)、一个关于该上下文的问题、一个答案选项列表和一个正确答案标签。为了使 CosmosQA 能够与 大模型 协同工作,我们通过以下步骤为每个问题创建一个提示:添加一个包含 5 个示例的 few-shot prompt,将上下文、问题和选项格式化为输入,并要求 LLM 以结构化格式(例如“答案:A”)回答。一个例子如下:
- 上下文:我家总是乱糟糟的,我快受不了了…
- 问题:是什么导致叙述者最近感到压力?
- 选项:
- A. 他们要搬到新房子了。
- B. 我本来会尝试猜测他们的密码…
- C. 他们要搬到一所新大学。
- D. 他们要为孩子们搬到一所新房子。
- 答案:C
利用 CosmosQA,我们可以评估 大模型 在复杂推理场景下的表现,并使用 MAPIE 来量化模型预测的不确定性。这有助于我们识别模型容易出错的情况,并采取相应的措施来提高模型的可靠性。
Mistral-7B-Instruct 模型的集成
为了利用 MAPIE,我们需要将 大模型 封装在一个 scikit-learn 风格的界面中。这意味着实现以下功能:
predict_proba
方法:输出选项上的 softmax 分布。predict
方法:输出最可能的类。- 一些必需的属性:
is_fitted_
和classes_
。
文章中使用的 Mistral-7B-Instruct 模型是一个强大的因果语言模型,经过微调以遵循指令。通过将其封装成一个简单的多类分类器,可以方便地与 MAPIE 集成。以下是 LLMClassifier 包装器的代码示例:
import numpy as np
import torch.nn.functional as F
import torch
from tqdm import tqdm
class LLMClassifier:
def __init__(self, tokenizer, model):
self.tokenizer = tokenizer
self.model = model
self.options = ["Answer: A", "Answer: B", "Answer: C", "Answer: D"]
self.options_ids = [
self.tokenizer.encode(opt)[-1]
for opt in self.options
]
self.is_fitted_ = True
self.classes_ = [0, 1, 2, 3]
def fit(self): # No fitting needed for pretrained LLMs
pass
def predict_proba(self, prompts):
pred_probas = []
for prompt in tqdm(prompts):
inputs = self._prepare_inputs([prompt])
with torch.no_grad():
outputs = self.model(**inputs)
logits = outputs.logits[:, -1, :]
logits_options = logits[:, self.options_ids]
probabilities = F.softmax(
logits_options, dim=-1
).cpu().numpy().flatten()
probabilities /= probabilities.sum()
pred_probas.append(probabilities)
return np.array(pred_probas)
def predict(self, prompts):
probas = self.predict_proba(prompts)
return np.argmax(probas, axis=-1)
def _prepare_inputs(self, prompts):
inputs = self.tokenizer(prompts)
return inputs
这个 LLMClassifier
类是一个轻量级包装器,它将因果语言模型转换为与 MAPIE 兼容的多类分类器。它以 scikit-learn 类似的方式设计,公开了概率分类所需的方法和属性。在初始化时,该类定义了一组固定的可能答案(答案:A、答案:B 等),并将它们编码以识别模型将评分的 token ID。该模型假定为预训练的,因此不需要拟合,因此 fit
方法为空,并且属性 is_fitted_
和 classes_
设置为满足 MAPIE 的要求。核心方法 predict_proba
接受一个提示列表,并为每个提示运行模型以计算最终 token 的 logits。然后,它仅选择与预期答案 token 关联的 logits,并应用 softmax 来获得答案选择上的标准化分数。这些概率作为 NumPy 数组返回。predict
方法只是调用 predict_proba
并返回每个提示的最可能答案。最后,_prepare_inputs
处理 token 化和格式化以进行推理,确保输入已准备好用于 LLM。通过这种封装,我们可以将 大模型 无缝集成到 MAPIE 框架中,并利用 Conformal Prediction 来量化模型预测的不确定性。
从概率到 Conformal Prediction 集合
现在我们的 LLM 已经封装完毕,可以应用 Conformal Prediction 了。目标是将单标签预测替换为反映模型不确定性的预测集合,并保证覆盖率。 按照标准的 Conformal Prediction 实践,我们需要一个校准集(也称为 conformalization 集)来校准原始 logits 的一致性分数。使用 sklearn.model_selection.train_test_split
将数据集分成校准集和测试集。
from sklearn.model_selection import train_test_split
X_conf, X_test, y_conf, y_test = train_test_split(X, y, train_size=0.5)
这将允许 MAPIE 学习模型在示例中的不确定性,并相应地计算阈值。接下来,我们实例化 LLM 并使用 MAPIE 的 SplitConformalClassifier
对其进行封装。你需要的只是你的模型和所需的置信水平(例如 90%)。
from mapie.classification import SplitConformalClassifier
llm = LLMClassifier(tokenizer, model)
scc = SplitConformalClassifier(estimator=llm, confidence_level=0.9)
此步骤计算每个预测的一致性分数,并确定所需覆盖率水平的分位数截止值。 根据模型和数据集大小,这可能需要几分钟时间。
scc.conformalize(X_conf, y_conf)
在底层,MAPIE 使用 LLM 生成的原始 logits 来评估模型对其每个预测的置信度。 然后,它在校准集上学习一个阈值:只有 logits 超过此阈值的标签才会包含在最终预测集中。 这保证了预测集将包含至少 90% 的正确答案,而无需对模型进行任何假设。我们现在可以为测试示例生成预测集:
y_pred, y_pred_set = scc.predict_set(X_test)
y_pred_set
中的每个元素都是形状为 (n_classes, 1)
的布尔数组,指示哪些标签包含在预测集中。 y_pred_set
的第二个维度表示正在分析的置信水平的数量。 在此示例中,我们仅关注 90% 的置信水平,但可以一次研究多个置信水平。
预测集合的可视化与解读
现在我们有了预测集合,让我们仔细看看它们告诉我们关于 LLM 行为的信息,以及如何使用它们来指导更明智的决策。
准确率、覆盖率和平均宽度
首先,我们计算三个关键指标:
- 准确率:模型的最优预测与实际情况匹配的频率。
- 覆盖率:实际情况标签包含在预测集中的频率。
- 平均宽度:预测集的平均大小。
from sklearn.metrics import accuracy_score
from mapie.metrics.classification import (
classification_coverage_score,
classification_mean_width_score,
)
accuracy = accuracy_score(y_test, y_pred) # 0.864
coverage = classification_coverage_score(
y_test, y_pred_set[:, :, 0]) # 0.96
mean_width = classification_mean_width_score(y_pred_set[:, :, 0]) # 1.53
这是一个好兆头:即使模型的最优预测大约 86% 的时间是正确的,96% 的真实答案都落在 conformal prediction 集中,与我们指定的置信水平非常匹配。 这就是统计保证在起作用。 平均而言,模型为每个问题返回大约 1.5 个选项。 这意味着大多数预测集都很紧凑且信息丰富。
一个高度不确定的案例
这是一个模型在其预测集中包含三个标签的示例:
- 上下文:所以今天一开始还不错……我决定去 DMV 为我奶奶的车弄一个临时标签,这样我就可以开它而不是我的车了。 我的车发出很大的尖叫声,我受不了。
- 问题:在 DMV 可能会发生什么?
- 选项:
- A. 在排队等候时,我决定为聚会买一只小狗
- B. 我在排队等候时买了一个热狗
- C. 我最终不得不排队等候很长时间,以至于错过了聚会
- D. 我在 DMV 而不是在家举办聚会
- 正确答案:C
- 预测:B
- 预测集:[‘A’, ‘B’, ‘C’]
虽然模型的最优预测不正确,但真实答案包含在预测集中。 这表明 Conformal Prediction 如何在导致错误之前发现不确定性,从而允许我们标记此困难案例以供审查或谨慎处理。
预测集大小的分布
现在让我们看一下预测集大小的全局分布:
大多数预测集都是单例,这意味着模型有足够的信心只返回一个答案。 但我们也观察到很大一部分预测包含 2、3 或 4 个标签,其中模型表达了更多的犹豫。
按预测集大小划分的准确率
不确定性与性能有何关系? 以下是按预测集大小划分的准确率细分:
正如预期的那样,预测集越小,准确率越高。 大小为 1 的预测集几乎总是能得到正确的答案,而较大的集合则表明更加混乱和更多的错误。
如何应用
这种洞察力具有实际意义。 你可以:
- ✅ 信任单例预测以进行自动决策
- ⚠️ 标记中等大小的集合 (2) 以供审查
- ❌ 将大型集合 (3–4) 丢弃或升级到人工或更强大的模型
换句话说,预测集大小成为可靠的风险指标,而 MAPIE 为你提供了相应的行动工具。
MAPIE与可信LLM的未来
MAPIE 通过 Conformal Prediction 将统计保证引入 LLM 管道。 通过封装像 Mistral-7B-Instruct 这样的开源模型,并将 MAPIE 应用于像 CosmosQA 这样的多项选择任务,我们将原始预测转化为经过校准的预测集,从而使不确定性可衡量且可操作。 无论你需要标记歧义答案、将不确定的案例推迟给人工,还是跨域校准你的模型,MAPIE 都能为你提供强大而透明的基础。未来的 MAPIE 版本将超越预测集,提供 LLM 风险控制机制和置信度评分校准,从而可以跨整个工作流程(如 RAG 或代理系统)改进模型信任。
总结
本文深入探讨了如何利用 MAPIE 库和 Mistral-7B 模型量化大模型中的不确定性。通过 Conformal Prediction,我们能够将原始预测转化为校准的预测集合,从而使不确定性可衡量且可操作。这种方法不仅提高了 AI 决策的可靠性,还在医疗诊断、金融预测等高风险领域具有广泛的应用前景。通过持续关注和改进 MAPIE 等工具,我们可以构建更加值得信赖和安全的 AI 系统,从而更好地服务于社会。如果你觉得这篇文章有用,可以关注 MAPIE 项目并加入社区,一起努力把不确定性引入AI系统。