MiniCheck-RoBERTa-Large 项目介绍
MiniCheck-RoBERTa-Large 是一个事实核查模型,源自于MiniCheck这个项目,其目标是有效地对大语言模型(LLM)生成内容进行事实核查。该项目的详细介绍和更多技术细节可以在论文 MiniCheck: Efficient Fact-Checking of LLMs on Grounding Documents 中找到。
模型背景
MiniCheck-RoBERTa-Large 模型基于 RoBERTa-Large,对经过训练的 AlignScore 模型进行了微调。AlignScore 是由 Zha et al., 2023 发展而来的。在结构化方式下,该模型在14000条合成数据上进行了微调。最终,该模型可以在句子级别上进行预测,通过判定某一声明是否被相应文档支持而输出二进制标签:支持(1)或不支持(0)。
模型变体
除了 MiniCheck-RoBERTa-Large,MiniCheck 还有以下三种模型变体:
- bespokelabs/Bespoke-Minicheck-7B (模型大小:7B)
- lytang/MiniCheck-Flan-T5-Large (模型大小:0.8B)
- lytang/MiniCheck-DeBERTa-v3-Large (模型大小:0.4B)
模型性能
模型的性能通过一个新收集的基准数据集 LLM-AggreFact 进行评估。该数据集包含了11个最近被人工标注的有关事实核查和大语言模型生成内容的子数据集。在相似规模的专业事实核查模型中,MiniCheck-RoBERTa-Large 表现要优于其他同类模型,特别是在处理真实声明时表现出色。值得注意的是,评估时并未人工修改声明以引入特定错误类型。
模型使用示例
用户可以通过以下命令来安装 MiniCheck 包及其所需依赖:
pip install "minicheck @ git+https://github.com/Liyan06/MiniCheck.git@main"
下面是一个简单的使用示例:
from minicheck.minicheck import MiniCheck
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
doc = "A group of students gather in the school library to study for their upcoming final exams."
claim_1 = "The students are preparing for an examination."
claim_2 = "The students are on vacation."
scorer = MiniCheck(model_name='roberta-large', cache_dir='./ckpts')
pred_label, raw_prob, _, _ = scorer.score(docs=[doc, doc], claims=[claim_1, claim_2])
print(pred_label) # [1, 0]
print(raw_prob) # [0.9581979513168335, 0.031335990875959396]
在 LLM-AggreFact 基准上的测试
下面是如何在 LLM-AggreFact 基准上进行测试:
import pandas as pd
from datasets import load_dataset
from minicheck.minicheck import MiniCheck
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
# 加载29K测试数据
df = pd.DataFrame(load_dataset("lytang/LLM-AggreFact")['test'])
docs = df.doc.values
claims = df.claim.values
scorer = MiniCheck(model_name='roberta-large', cache_dir='./ckpts')
pred_label, raw_prob, _, _ = scorer.score(docs=docs, claims=claims) # 大约每分钟处理800个文档,具体依赖于硬件性能
Result Evaluation
结果评估可以通过以下方式进行:
from sklearn.metrics import balanced_accuracy_score
df['preds'] = pred_label
result_df = pd.DataFrame(columns=['Dataset', 'BAcc'])
for dataset in df.dataset.unique():
sub_df = df[df.dataset == dataset]
bacc = balanced_accuracy_score(sub_df.label, sub_df.preds) * 100
result_df.loc[len(result_df)] = [dataset, bacc]
result_df.loc[len(result_df)] = ['Average', result_df.BAcc.mean()]
result_df.round(1)
通过这些方法和工具,用户可以有效地利用 MiniCheck 系列模型实现大语言模型的事实核查任务。