Машинное обучение с без данных и без обучения
Что такое 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, каковы его практические применения и соображения.
В следующем посте я углублюсь в анализ и практическое использование. Я распространю этот пост на следующие темы
- Анализ времени вывода по этим точкам.
- Аппаратное обеспечение (CPU против GPU)
- Размер этикетки
2. Как обращаться с большим набором этикеток.
- Использование графических процессоров
- Использование среды выполнения ONNX для выводов на основе ЦП.
e.t.c
Пожалуйста, не переключайтесь. Прошу поставить несколько хлопков
если вам понравился пост. Спасибо!!
Для сравнения производительности с помощью различных методов нулевой съемки.
Использованная литература: