Машинное обучение с без данных и без обучения

Что такое Zero-shot?

Техника машинного обучения, которая используется для классификации данных на основе очень небольшого количества или даже отсутствия помеченных примеров. что означает классификацию на лету.

Zero-shot - это тоже вариант трансферного обучения. Это распознавание образов без примеров с использованием семантической передачи.

Обучение с нулевым выстрелом (ZSL) чаще всего относится к довольно специфическому типу задачи: изучить классификатор на одном наборе меток, а затем оценить на другом наборе меток, который классификатор никогда раньше не видел.

Почему Zero-shot?

  • Нет данных или доступно очень небольшое количество данных для обучения. (Обнаружение намерения без каких-либо данных, предоставленных пользователем)
  • Количество классов / ярлыков очень велико. (много тысяч)
  • Стандартный классификатор, сниженная стоимость с точки зрения инфраструктуры и разработки.

Как работает Zero-shot?

Есть несколько подходов к обучению с нулевым выстрелом

Подход скрытого встраивания

у нас есть модель вложения последовательностей Φ (отправлено), множество возможных имен классов C. Мы классифицируем данную последовательность X в соответствии с,

!pip install transformers
from transformers import AutoTokenizer, AutoModel
from torch.nn import functional as F
tokenizer = AutoTokenizer.from_pretrained('deepset/sentence_bert')
model = AutoModel.from_pretrained('deepset/sentence_bert')
sentence = 'Who are you voting for in 2020?'
labels = ['business', 'art & culture', 'politics']
# run inputs through model and mean-pool over the sequence
# dimension to get sequence-level representations
inputs = tokenizer.batch_encode_plus([sentence] + labels,
return_tensors='pt',
pad_to_max_length=True)
input_ids = inputs['input_ids']
attention_mask = inputs['attention_mask']
output = model(input_ids, attention_mask=attention_mask)[0]
sentence_rep = output[:1].mean(dim=1)
label_reps = output[1:].mean(dim=1)
# now find the labels with the highest cosine similarities to
# the sentence
similarities = F.cosine_similarity(sentence_rep, label_reps)
closest = similarities.argsort(descending=True)
for ind in closest:
print(f'label: {labels[ind]} \t similarity: {similarities[ind]}')

Классификация как вывод на естественном языке (NLI)

NLI рассматривает два предложения: «посылка» и «гипотеза». Задача состоит в том, чтобы определить, истинна ли гипотеза (следствие) или ложна (противоречие) с учетом посылки.

Подход, предложенный Yin et al. (2019) , использует предварительно обученный классификатор пар последовательностей MNLI в качестве нестандартного классификатора текста с нулевым выстрелом, который действительно работает довольно хорошо.

Важное практическое рассмотрение

Модели Zeroshot большие и тяжелые для вычислений. Чтобы внедрить его в производство, следует учесть несколько практических аспектов.

  • Нулевой выстрел также не работает, когда тема является более абстрактным термином по отношению к тексту.
  • Ярлыки должны иметь правильную семантику.
  • Zero-shot может работать как классификатор с несколькими этикетками.
  • Модель ответов BART MNLI + Yahoo работает лучше для общих случаев использования.
  • Для работы с ZSL необходимы описательные и содержательные метки.
  • Производительность классификаторов Zero-shot: оценка F1 .68 и .72 для невидимой и видимой меток соответственно.

Ограничение подхода с нулевым выстрелом

  • Проверка - это проблема: это проблема для любой ситуации обучения без учителя.
  • Значимые ярлыки - необходимость.
  • Вероятно, это не побьет контролируемые методы.
  • Непрактичное время вывода для этикеток размером более 20.
  • GPU голоден !!

В следующем посте я опишу, как меняется время вывода, когда мы увеличиваем размер метки.

Как работать с большим количеством этикеток

  • Попробуйте одну из загруженных сообществом дистиллированных моделей 40 на хабе. Их точность сопоставима с большей моделью, но они меньше по размеру и быстрее делают вывод. Начните с valhalla/distilbart-mnli-12-3 (модели можно указать, передав, например, pipeline("zero-shot-classification", model="valhalla/distilbart-mnli-12-3") при построении модели.
  • На графическом процессоре не забудьте передать device=0 в конвейер factory для использования cuda.
  • На ЦП попробуйте запустить конвейер с ONNX Runtime. Вы должны получить импульс. Вот проект 52, он позволяет автоматически использовать ВЧ конвейеры с ОРТ.
  • Если у вас много ярлыков-кандидатов, постарайтесь передать в конвейер только наиболее вероятных. Передача большого количества меток для каждого предложения действительно замедлит вас, поскольку каждая пара предложение / метка должна передаваться в модель вместе. Если у вас есть 100 возможных меток, но вы можете использовать какую-то эвристическую или более простую модель, чтобы сузить ее, это очень поможет.
  • Используйте смешанную точность. Это довольно просто 47 при использовании PyTorch 1.6.

Другие варианты использования с ZSL

  • Нулевой выстрел как обнаружение умысла.
  • Нулевой выстрел как классификация настроений.
  • Нулевой выстрел как классификация эмоций.
  • Нулевой выстрел как классификация тем.
  • Zero-shot как классификация с несколькими этикетками.

Области применения

  • обработка естественного языка
  • классификация изображений
  • семантическая сегментация
  • генерация изображения
  • обнаружение объекта

В этом посте я попытался кратко изложить, что такое Zeroshot, каковы его практические применения и соображения.

В следующем посте я углублюсь в анализ и практическое использование. Я распространю этот пост на следующие темы

  1. Анализ времени вывода по этим точкам.
  • Аппаратное обеспечение (CPU против GPU)
  • Размер этикетки

2. Как обращаться с большим набором этикеток.

  • Использование графических процессоров
  • Использование среды выполнения ONNX для выводов на основе ЦП.

e.t.c

Пожалуйста, не переключайтесь. Прошу поставить несколько хлопков

если вам понравился пост. Спасибо!!

Для сравнения производительности с помощью различных методов нулевой съемки.



Использованная литература: