项目介绍:nli-roberta-base
nli-roberta-base项目是一个用于自然语言推理(Natural Language Inference, NLI)的模型。它采用了Cross-Encoder进行训练,适用于多种语言任务,尤为关注零样本分类(Zero-Shot Classification)。
模型背景
nli-roberta-base模型采用Roberta基础版(roberta-base)为基础,通过SentenceTransformers的Cross-Encoder类对其进行训练。Cross-Encoder是一种能够处理句子对的技术,可以对其进行分类以确定句子之间的逻辑关系。
训练数据
这个模型主要在两个大型数据集上进行了训练:
- SNLI(Stanford Natural Language Inference)数据集:这是一个用于自然语言推理的广泛使用的数据集,包含句子对及其推理关系标签。
- MultiNLI(Multi-Genre Natural Language Inference)数据集:该数据集跨越多种体裁,为模型提供了更广泛的文本情境。
对于每对输入的句子,模型将输出三个分数,分别表示“矛盾”(contradiction)、“蕴含”(entailment)和“中性”(neutral)这三种逻辑关系。
性能表现
模型的性能评估及其详细结果可以在SBERT.net的预训练Cross-Encoder页面中找到。通过这些指标可以了解模型在不同任务中的表现水平。
使用方法
使用预训练模型
用户可以通过以下代码快速应用预训练模型进行推理任务:
from sentence_transformers import CrossEncoder
model = CrossEncoder('cross-encoder/nli-roberta-base')
scores = model.predict([('A man is eating pizza', 'A man eats something'), ('A black race car starts up in front of a crowd of people.', 'A man is driving down a lonely road.')])
#转换分数到标签
label_mapping = ['矛盾', '蕴含', '中性']
labels = [label_mapping[score_max] for score_max in scores.argmax(axis=1)]
使用Transformers库
模型也可以直接与Transformers库搭配使用,而不需要SentenceTransformers库:
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
model = AutoModelForSequenceClassification.from_pretrained('cross-encoder/nli-roberta-base')
tokenizer = AutoTokenizer.from_pretrained('cross-encoder/nli-roberta-base')
features = tokenizer(['A man is eating pizza', 'A black race car starts up in front of a crowd of people.'], ['A man eats something', 'A man is driving down a lonely road.'], padding=True, truncation=True, return_tensors="pt")
model.eval()
with torch.no_grad():
scores = model(**features).logits
label_mapping = ['矛盾', '蕴含', '中性']
labels = [label_mapping[score_max] for score_max in scores.argmax(dim=1)]
print(labels)
零样本分类
nli-roberta-base还具备零样本分类的能力,可以在未知领域中进行分类任务:
from transformers import pipeline
classifier = pipeline("zero-shot-classification", model='cross-encoder/nli-roberta-base')
sent = "Apple just announced the newest iPhone X"
candidate_labels = ["technology", "sports", "politics"]
res = classifier(sent, candidate_labels)
print(res)
通过这种方式,模型能够在没有专门的训练数据集的情况下,根据给定的类别标签,灵活地对新的文本进行分类。
许可证
nli-roberta-base模型采用Apache 2.0许可证,允许用户在各类项目中自由使用与改进。
总结
nli-roberta-base模型通过结合SNLI和MultiNLI数据集的强大训练,提供了高效的自然语言推理和零样本分类能力。无论是学术研究还是实际应用中,它都能帮助用户快速处理复杂的语言任务。