MiniCheck-Flan-T5-Large
Este es un modelo de verificación de hechos basado en Flan-T5-Large que predice una etiqueta binaria - 1 para 'apoyado' y 0 para 'no apoyado'. El modelo hace predicciones a nivel de oración. Toma como entrada un documento y una oración y determina si la oración está apoyada por el documento: MiniCheck-Modelo(documento, afirmación) -> {0, 1}. MiniCheck-Flan-T5-Large es el mejor modelo de verificación de hechos con tamaño inferior a 1B y alcanza el rendimiento de GPT-4. Está finamente ajustado a partir de google/flan-t5-large (Chung et al., 2022) en la combinación de 35K datos: 21K datos de ANLI (Nie et al., 2020) y 14K datos sintéticos generados desde cero de manera estructurada (más detalles en el documento).
Como usar
Por favor, ejecute el siguiente comando para instalar el paquete MiniCheck y todas las dependencias necesarias.
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 están preparándose 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='flan-t5-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.9805923700332642, 0.007121307775378227]
Prueba en nuestro 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='flan-t5-large', cache_dir='./ckpts')
pred_label, raw_prob, _, _ = scorer.score(docs=docs, claims=claims) # ~ 500 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 a nivel de oración
- Predicción de etiqueta binaria (1 para 'apoyado', 0 para 'no apoyado')
- Modelo basado en Flan-T5-Large
- Alcanza rendimiento similar al de GPT-4
- Entrenado en combinación de 35K datos (21K ANLI y 14K sintéticos)
Casos de uso
- Verificación de hechos eficiente de modelos de lenguaje en documentos de referencia
- Predicción de la veracidad de afirmaciones basadas en documentos
- Evaluación comparativa de modelos en nuevas colecciones de datos de verificación de hechos