Это контрольная точка для bart-large после обучения на наборе данных MultiNLI (MNLI).
Дополнительная информация об этой модели:
Yin et al. предложили метод использования предварительно обученных моделей NLI в качестве готовых классификаторов последовательностей с нулевым выстрелом. Метод работает путём представления классифицируемой последовательности в виде предпосылки NLI и создания гипотезы из каждой возможной метки. Например, если мы хотим оценить, принадлежит ли последовательность классу «политика», мы можем создать гипотезу «Этот текст о политике». Затем вероятности для вывода и противоречия преобразуются в вероятности меток.
Этот метод удивительно эффективен во многих случаях, особенно при использовании более крупных предварительно обученных моделей, таких как BART и Roberta. См. этот блог-пост (https://joeddav.github.io/blog/2020/05/29/ZSL.html) для более подробного введения в этот и другие методы с нулевым выстрелом, а также примеры кода ниже для использования этой модели для классификации с нулевым выстрелом как с помощью встроенного конвейера Hugging Face, так и с использованием собственного кода Transformers/PyTorch.
Модель можно загрузить с помощью конвейера «zero-shot-classification» следующим образом:
from transformers import pipeline
classifier = pipeline("zero-shot-classification",
model="facebook/bart-large-mnli")
Затем вы можете использовать этот конвейер для классификации последовательностей по любым указанным вами именам классов.
sequence_to_classify = "one day I will see the world"
candidate_labels = ['travel', 'cooking', 'dancing']
classifier(sequence_to_classify, candidate_labels)
#{'labels': ['travel', 'dancing', 'cooking'],
# 'scores': [0.9938651323318481, 0.0032737774308770895, 0.002861034357920289],
# 'sequence': 'one day I will see the world'}
Если более одной метки кандидата может быть правильной, передайте multi_label=True
, чтобы вычислить каждый класс независимо:
candidate_labels = ['travel', 'cooking', 'dancing', 'exploration']
classifier(sequence_to_classify, candidate_labels, multi_label=True)
#{'labels': ['travel', 'exploration', 'dancing', 'cooking'],
# 'scores': [0.9945111274719238,
# 0.9383890628814697,
# 0.0057061901316046715,
# 0.0018193122232332826],
# 'sequence': 'one day I will see the world'}
# pose sequence as a NLI premise and label as a hypothesis
from transformers import AutoModelForSequenceClassification, AutoTokenizer
nli_model = AutoModelForSequenceClassification.from_pretrained('facebook/bart-large-mnli')
tokenizer = AutoTokenizer.from_pretrained('facebook/bart-large-mnli')
premise = sequence
hypothesis = f'This example is {label}.'
# run through model pre-trained on MNLI
x = tokenizer.encode(premise, hypothesis, return_tensors='pt',
truncation_strategy='only_first')
logits = nli_model(x.to(device))[0]
# we throw away "neutral" (dim 1) and take the probability of
# "entailment" (2) as the probability of the label being true
entail_contradiction_logits = logits[:,[0,2]]
probs = entail_contradiction_logits.softmax(dim=1)
prob_label_is_true = probs[:,1]
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )