license: apache-2.0
language: en
tags:
- microsoft/deberta-v3-base
datasets:
- multi_nli
- snli
- fever
- tals/vitaminc
- paws
metrics:
- accuracy
- auc
- balanced accuracy
Cross-Encoder for Hallucination Detection
This model was trained using SentenceTransformers Cross-Encoder class. The model outputs a probabilitity from 0 to 1, 0 being a hallucination and 1 being factually consistent. The predictions can be thresholded at 0.5 to predict whether a document is consistent with its source.
Training Data
This model is based on microsoft/deberta-v3-base and is trained initially on NLI data to determine textual entailment, before being further fine tuned on summarization datasets with samples annotated for factual consistency including FEVER, Vitamin C and PAWS.
Performance
- TRUE Dataset (Minus Vitamin C, FEVER and PAWS) - 0.872 AUC Score
- SummaC Benchmark (Test Split) - 0.764 Balanced Accuracy, 0.831 AUC Score
- AnyScale Ranking Test for Hallucinations - 86.6 % Accuracy
Usage with Sentencer Transformers (Recommended)
The model can be used like this:
from sentence_transformers import CrossEncoder
model = CrossEncoder('vectara/hallucination_evaluation_model')
scores = model.predict([
["A man walks into a bar and buys a drink", "A bloke swigs alcohol at a pub"],
["A person on a horse jumps over a broken down airplane.", "A person is at a diner, ordering an omelette."],
["A person on a horse jumps over a broken down airplane.", "A person is outdoors, on a horse."],
["A boy is jumping on skateboard in the middle of a red bridge.", "The boy skates down the sidewalk on a blue bridge"],
["A man with blond-hair, and a brown shirt drinking out of a public water fountain.", "A blond drinking water in public."],
["A man with blond-hair, and a brown shirt drinking out of a public water fountain.", "A blond man wearing a brown shirt is reading a book."],
["Mark Wahlberg was a fan of Manny.", "Manny was a fan of Mark Wahlberg."],
])
This returns a numpy array representing a factual consistency score. A score < 0.5 indicates a likely hallucination):
array([0.61051559, 0.00047493709, 0.99639291, 0.00021221573, 0.99599433, 0.0014127002, 0.002.8262993], dtype=float32)
Usage with Transformers AutoModel
You can use the model also directly with Transformers library (without the SentenceTransformers library):
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
import numpy as np
model = AutoModelForSequenceClassification.from_pretrained('vectara/hallucination_evaluation_model')
tokenizer = AutoTokenizer.from_pretrained('vectara/hallucination_evaluation_model')
pairs = [
["A man walks into a bar and buys a drink", "A bloke swigs alcohol at a pub"],
["A person on a horse jumps over a broken down airplane.", "A person is at a diner, ordering an omelette."],
["A person on a horse jumps over a broken down airplane.", "A person is outdoors, on a horse."],
["A boy is jumping on skateboard in the middle of a red bridge.", "The boy skates down the sidewalk on a blue bridge"],
["A man with blond-hair, and a brown shirt drinking out of a public water fountain.", "A blond drinking water in public."],
["A man with blond-hair, and a brown shirt drinking out of a public water fountain.", "A blond man wearing a brown shirt is reading a book."],
["Mark Wahlberg was a fan of Manny.", "Manny was a fan of Mark Wahlberg."],
]
inputs = tokenizer.batch_encode_plus(pairs, return_tensors='pt', padding=True)
model.eval()
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits.cpu().detach().numpy()
# convert logits to probabilities
scores = 1 / (1 + np.exp(-logits)).flatten()
This returns a numpy array representing a factual consistency score. A score < 0.5 indicates a likely hallucination):
array([0.61051559, 0.00047493709, 0.99639291, 0.00021221573, 0.99599433, 0.0014127002, 0.002.8262993], dtype=float32)