MiniCheck-DeBERTa-v3-Large

lytang
Clasificación de texto

Este es un modelo de verificación de hechos basado en el trabajo 'MiniCheck: Efficient Fact-Checking of LLMs on Grounding Documents'. El modelo está basado en DeBERTa-v3-Large y predice una etiqueta binaria: 1 para soportado y 0 para no soportado. Realiza predicciones a nivel de oración, tomando como entrada un documento y una oración, y determina si la oración está respaldada por el documento. MiniCheck-DeBERTa-v3-Large ha sido afinado a partir de microsoft/deberta-v3-large (He et al., 2023) en la combinación de 35K datos: 21K de datos ANLI (Nie et al., 2020) y 14K de datos sintéticos generados desde cero de manera estructurada.

Como usar

Instala MiniCheck y todas las dependencias necesarias utilizando el siguiente comando:

pip install "minicheck @ git+https://github.com/Liyan06/MiniCheck.git@main"

A continuación se muestra un caso de uso simple:

from minicheck.minicheck import MiniCheck
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

doc = "Un grupo de estudiantes se reúne en la biblioteca de la escuela para estudiar para sus próximos exámenes finales."
claim_1 = "Los estudiantes se están preparando para un examen."
claim_2 = "Los estudiantes están de vacaciones."

# model_name puede ser uno de ['roberta-large', 'deberta-v3-large', 'flan-t5-large', 'Bespoke-MiniCheck-7B']
scorer = MiniCheck(model_name='deberta-v3-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.9786180257797241, 0.01138285268098116]

Para evaluar el resultado en el benchmark LLM-AggreFact:

import pandas as pd
from datasets import load_dataset
from minicheck.minicheck import MiniCheck
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

# cargar 29K datos de prueba
df = pd.DataFrame(load_dataset("lytang/LLM-AggreFact")['test'])
docs = df.doc.values
claims = df.claim.values

scorer = MiniCheck(model_name='deberta-v3-large', cache_dir='./ckpts')
pred_label, raw_prob, _, _ = scorer.score(docs=docs, claims=claims) # ~ 800 docs/min, dependiendo del hardware

Para evaluar el resultado en el benchmark:
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)

Funcionalidades

Verificación de hechos basada en textos
Predicciones a nivel de oración
Etiqueta binaria: 1 para soportado, 0 para no soportado
Afinado en una combinación de datos ANLI y datos sintéticos

Casos de uso

Verificación de hechos a nivel de oración
Evaluación de afirmaciones respecto a documentos
Uso en investigación para evaluar generaciones de LLMs