Downloads · 30 days
19
14% of all-time downloads
AdamCodd/ettin-nli-classifier
ettin-nli-classifier is a machine learning model from AdamCodd. Use it for the machine learning task on the model card, and read the license before you ship it in a product. The card lists the license as mit.
This model uses the jhu-clsp/ettin-encoder-68m architecture, which has been fine-tuned for NLI tasks on the MultiNLI and SNLI datasets. It was made to replace the old distilroberta finetune.
Downloads · 30 days
19
14% of all-time downloads
All-time downloads
135
Public
Parameters
68.4M
548 MB on disk
Likes
0
Public
Click a slice to open those files.
.onnx274 MB · 50%
From the Hugging Face model README
This model uses the jhu-clsp/ettin-encoder-68m architecture, which has been fine-tuned for NLI tasks on the MultiNLI and SNLI datasets. It was made to replace the old distilroberta finetune. It achieves the following results on the evaluation set:
The SNLI corpus (version 1.0) is a collection of 570k human-written English sentence pairs manually labeled for balanced classification with the labels entailment, contradiction, and neutral, supporting the task of natural language inference (NLI), also known as recognizing textual entailment (RTE).
The Multi-Genre Natural Language Inference (MultiNLI) corpus is a crowd-sourced collection of 433k sentence pairs annotated with textual entailment information. The corpus is modeled on the SNLI corpus, but differs in that covers a range of genres of spoken and written text, and supports a distinctive cross-genre generalization evaluation.
Inference API has been disabled as it is not suitable for this kind of task.
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
# Load model and tokenizer
model_checkpoint = 'AdamCodd/ettin-nli-classifier'
model = AutoModelForSequenceClassification.from_pretrained(model_checkpoint)
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
# Set device
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
# Sample premise and hypothesis
premise = "The cat is sleeping under the sun."
hypothesis = "It's raining, and the cat is getting wet."
# Tokenize and predict
input = tokenizer(premise, hypothesis, truncation=True, padding=True, return_tensors="pt", max_length=256).to(device)
with torch.no_grad():
output = model(**input)
probabilities = torch.softmax(output.logits, dim=-1)[0].tolist()
# Output prediction
label_names = ["Entailment", "Neutral", "Contradiction"]
prediction = {name: round(prob * 100, 1) for name, prob in zip(label_names, probabilities)}
print(prediction)
# e.g. {'Entailment': 1.3, 'Neutral': 8.2, 'Contradiction': 90.5}
The training data consists of a concatenated corpus of the SNLI train split and the MultiNLI train split. The evaluation metrics were calculated using a concatenated validation set consisting of the SNLI validation split and the MultiNLI validation_matched split. All -1 labels (samples without annotator consensus) were filtered out prior to training.
The following hyperparameters were used during training:
Metrics: Accuracy, F1, Precision, Recall
'eval_loss': 0.62099,
'eval_accuracy': 0.88142,
'eval_f1': 0.88158,
'eval_precision': 0.88182,
'eval_recall': 0.88142
NB: The confusion matrix is here.
If you want to support me, you can here.