Приведи себя в порядок!
Распределенные смены (несоответствия между данными обучения и развертывания) повсеместно встречаются в реальных задачах и представляют серьезную проблему для безопасного и надежного использования систем ИИ. На NeurlPS в этом году мы организовалиВызов сменыЗдесь мы исследуем устойчивость к дистрибутивным переходам и неопределенное качество в реальных приложениях промышленного масштаба. Этот блог предназначен только для задачи машинного перевода этой задачи, даОфициальная страница на гитхабеДополнение к приведенному выше описанию с _дополнительным_ описанием набора данных, процесса обучения и оценки. Этот учебникHaiwen HuangО насShifts ChallengeЗадача прогнозирования движения автомобиляПродолжение учебника.
Структура этого урока следующая.
- Обзор миссии
- Настройте среду и репозиторий
- Скачать данные и исходные данные
- Препроцессировать данные в формат Fairseq
- Обучение модели
- Получение прогнозов и оценок неопределенности
- Оценка модели и представление
- направление на улучшение
1. Обзор миссии
В рамках набора данных Shifts мы изучаем задачу машинного перевода. Службы перевода, такие как Google Translate или Yandex Translate, часто сталкиваются с нетипичным и необычным использованием языка в своих запросах на перевод. Это часто включает сленг, ненормативную лексику, плохую грамматику, орфографию и пунктуацию, а также смайлики. Это создает проблемы для современных систем перевода, которые часто обучаются на корпусах с более «стандартным» использованием языка. Поэтому важно, чтобы модель была устойчива к использованию нетипичных языков для обеспечения высококачественных переводов и учитывала случаи, когда высококачественные переводы недоступны. Это особенно важно для систем машинного перевода, используемых для перевода конфиденциальных юридических или дипломатических документов, где важно, чтобы смысл не «терялся при переводе». Поэтому мы ожидаем, что модели будут хорошо работать в ряде сценариев, и учитываем случаи, когда они этого не делают. Это соответствует **прочность**и **Неопределенность**Прогноз. В задаче _transition_ мы оцениваем надежность прогнозов и _неопределенность_ при _распределительных переходах. _
В большинстве предыдущих работ оценки неопределенности и устойчивость к изменениям распределения оценивались отдельно. Надежность обычно оценивается с помощью прогнозирующих показателей производительности для конкретных задач, таких как частота ошибок классификации. Между тем, качество оценок неопределенности обычно оценивается по способности различать наборы данных «внутри предметной области», которые соответствуют обучающим данным, и наборы данных, переданные или «вне предметной области» (OOD) на основе показателей неопределенности. Однако мы считаем, что эти два вопроса являются двумя половинками общего целого и поэтому должны быть оцененысоединениеКроме того, они должны быть совместно оценены на наборе данных, который содержит как фрагмент совпадающих или «внутридоменных» данных, так и фрагмент сдвинутых данных [1]. Мы опишем более подробно в разделе оценки.
Перевод по сути **Структурированный прогноз** задача, потому что между токенами в выходной последовательности есть зависимости. Часто нам приходится делать предположения о форме этих зависимостей; например, большинство современных систем перевода являются авторегрессивными слева направо. Однако мы можем рассмотреть условные независимые прогнозы или другие порядки факторизации. Характер этих предположений затрудняет получение теоретически обоснованной меры неопределенности. Только недавно были разработаны принципиальные меры неопределенности для структурированного прогнозирования [2, 3, 4, 5, 6]. Однако это остается нерешенной задачей и плодотворной областью исследований. В этом руководстве рассматривается, как построить и запустить базовую систему на основе [2].
2. Настройте среду и репозиторий
Чтобы начать эту задачу, вы должны сначала настроить все необходимые пакеты и подходящую среду. Обратите внимание, что код немного устарел, используйтеFairseq 0.9иПиТорч 1.6.0.В ближайшее время мы планируем создать более чистую и актуальную реализацию. Поэтому вам понадобитсяpython 3.7иCUDA 10.2.
Сначала выпустите свою оболочку, клону и установите репозиторий сдвига сдвиги.
git clone
Это также установит версии всех необходимых пакетов, совместимых с Fairseq 0.9. Наконец, клонируйтеОценка неопределенности в авторегрессионном структурированном прогнозированииреализация [2].
git clone
Теперь, когда у вас есть среда, библиотека смен и библиотека структурированных неопределенностей, вы должны быть готовы перейти к следующему шагу.
3. Загрузите данные и исходный уровень
Теперь, когда у вас настроен репозиторий, вы можете загружать данные для обучения и разработки, а также базовые модели. Уведомление,Скрипт, загружающий данные, также выполняет предварительную предварительную обработку.
Чтобы загрузить данные обучения и развития, запустите сценарий предварительной обработки.
chmod +x ./shifts/translation/data/prepare_data.sh
./shifts/translation/data/prepare_data.sh
Это предварительно обработает данные, объединит все обучающие данные в один и удалит дубликаты и повторяющиеся примеры из обучающих данных. Затем загрузите базовую модель
wget
tar -xf baseline-models.tar
Это должно дать следующую структуру каталогов верхнего уровня.
./
orig,wmt20_en_ruиbaseline-modelsКаталог должен содержать следующее содержимое.
orig
4. Предварительно обработайте данные в формате Fairseq.
Теперь, когда вы загрузили данные, очистили и обработали их, теперь их необходимо преобразовать в специальный формат Fairseq. Это можно сделать с помощью следующей команды.
python3 structured-uncertainty/preprocess.py — source-lang en — target-lang ru — trainpref wmt20_en_ru/train — validpref wmt20_en_ru/valid — testpref wmt20_en_ru/test19,wmt20_en_ru/reddit_dev — destdir data-bin/wmt20_en_ru — thresholdtgt 0 — thresholdsrc 0 — workers 24
Если вы используете предоставленную базовую модель, используйте следующие команды для предварительной обработки.
python3 structured-uncertainty/preprocess.py — srcdict baseline-models/dict.en.txt — tgtdict baseline-models/dict.ru.txt — source-lang en — target-lang ru — trainpref wmt20_en_ru/train — validpref wmt20_en_ru/valid — testpref wmt20_en_ru/test19,wmt20_en_ru/reddit_dev — destdir data-bin/wmt20_en_ru — thresholdtgt 0 — thresholdsrc 0 — workers 24
Приведенная выше команда использует словари, поставляемые с базовой моделью, которые немного отличаются от словарей, которые вы получаете, запуская сценарии из предыдущих глав. Обе приведенные выше команды должны создать новый каталог.data-bin', структура его следующая.
data-bin/
в **контрольная работаэто набор данных для разработки в предметной области -newstest19**иtest1это переданные данные разработки -reddit_dev.
5. Модельное обучение
Теперь, если вы хотите воссоздать базовый уровень, вы можете запустить следующую команду.
python3 structured-uncertainty/train.py data-bin/wmt20_en_ru — arch transformer_wmt_en_de_big — share-decoder-input-output-embed — fp16 — memory-efficient-fp16 — num-workers 16 — optimizer adam — adam-betas ‘(0.9, 0.98)’ — clip-norm 0.0 — lr 5e-4 — lr-scheduler inverse_sqrt — warmup-updates 4000 — dropout 0.1 — weight-decay 0.0001 — criterion label_smoothed_cross_entropy — label-smoothing 0.1 — max-tokens 5120 — save-dir MODEL_DIR — max-update 50000 — update-freq 16 — keep-last-epochs 10 — seed 0
Это используется для создания базовой линии, меняется только начальное значение. Если вы используете графический процессор, отличный от V100 или A100, вам, вероятно, не следует использовать FP16, так как этот режим может быть численно нестабильным. Обратите внимание, что вы можете захотеть обучить свою модель с другими настройками, разной продолжительностью или использовать другую архитектуру, поэтому детали этой команды могут отличаться.
6. Получите прогнозы и оценки неопределенности
Теперь, когда у вас есть базовая модель или ансамбль ваших собственных моделей, вы можете совместно запустить вывод на одну модель или ансамбль следующим образом. Запустите базовую линию одной модели.
mkdir single
Запустите базовый план коллекции.
mkdir ensemble
Обратите внимание, что вы должны использовать только "- Расчет - Неопределенность" флаг, если вы используетеансамбльЭто даст преобразованный необработанный результат и связанные с ним оценки неопределенности, которые затем потребуют дальнейшей обработки. Все файлы хранятся в каталогах "single" и "ensemble" и структурированы следующим образом.
ensemble
7. Оценка модели и представление
Теперь, когда вы успешно вывели свою модель, теперь нам нужно оценить выходные данные модели и создать файл фиксации. Помните, что test — это ваш newstest19, не сдвинутые данные разработки, а test1 — это reddit_dev, сдвинутые данные разработки. Будем оценивать модель на обоих.
Это легко сделать, запустив следующий скрипт.
chmod +x ./shifts/translation/assessment/eval_single.sh
./shifts/translation/assessment/eval_single.sh
Теперь скрипт изменит один каталог и каталог коллекции, как показано ниже.
ensemble
Большая часть выходных данных представляет собой другую меру неопределенности, создаваемую кодом, за исключением гипотетического идентификатора (hypo_ids.txt),использованная литература(refs.txt) гипотеза (hypos.txt) и предполагаемая возможность (hypo_likelihoods.txt) Предполагая, что файл должен быть длиннее эталонного файла, фактором является размер луча. Например, если ширина луча равна 5, предполагается, что файл должен быть в 5 раз длиннее эталонного файла.
Когда у нас есть наши предположения и (много разных) оценок неопределенности, мы можем оценить наши прогнозы относительно ссылок, а затем создать отправку. Во-первых, давайте обсудим, как мы оцениваем модель.
Производительность модели оценивается с использованием показателей BLEU и GLEU. Однако BLEU устойчив только на уровне корпуса, а GLEU — на уровне предложений. Поскольку мы заинтересованы в оценке качества каждого переведенного предложения, нашсовместная оценкаКачество надежности и неопределенности использует GLEU. Мы вычисляем GLEU относительно соответствующей эталонной расшифровки для _каждой гипотезы_, созданной моделью. Напомним, что модель может генерировать несколько гипотез перевода для каждого входа (например, если ширина луча равна 5, для каждого входа имеется 5). Мы вычисляем максимальный (оптимальный) GLEU и ожидаемый GLEU, соответственно, взяв максимальное значение или средневзвешенное значение всех допущений. Вес каждой гипотезы можно рассчитать по-разному. Один из способов сделать это — проиндексировать и нормализовать вероятность каждой гипотезы, нормализованную по длине. Это создаст набор из 5 положительных весов, сумма которых равна 1. Наконец, мы берем доменВнутренние и сменные наборы данных (test+test1) в среднем максимальном GLEU или ожидаемом GLEU**. **
Теперь, когда мы оценили качество предсказания нашей модели в объединенной области и на смещенном наборе, мы можем оценить качество оценок неопределенности, построив кривые сохранения ошибок. Для этого мы сначала преобразуем нашу метрику GLEU в «ошибка GLEU", вычитается из 100 (поэтому чем меньше, тем лучше). Затем строится кривая сохранения ошибок путем замены предсказаний модели расшифровками достоверности, полученными от оракулов, в порядке уменьшения неопределенности. В идеале неопределенность модели связана к своим ошибкам, поэтому наиболее ошибочные прогнозы будут заменены в первую очередь, и по мере замены большего количества прогнозов это приведет к наибольшему снижению средней ошибки.Это представляет собой своего рода гибридные сценарии людей и ИИ, где в сложных ситуациях модель может обратиться к оракулам (людям) за помощью и получить идеальные предсказания для этих примеров от оракулов.
Поскольку часть исходных прогнозов уменьшается, ошибка GLEU также уменьшается. Наконец, мы измеряем площадь ошибки под кривой удерживания (R-AUC). Площадь под кривой удержания (R-AUC) — это мера, используемая для совместной оценки устойчивости сдвигов распределения и качества оценок неопределенности. R-AUC можно уменьшить, улучшив прогнозы модели, чтобы она имела более низкую общую ошибку при любом заданном коэффициенте удержания, или предоставив оценки неопределенности, которые лучше коррелируют с ошибками, так что наименее верные прогнозы будут отклонены в первую очередь.
На приведенных выше кривых коэффициента удержания в дополнение к ранжированию, основанному на неопределенности, мы включаем кривые, представляющие «случайные» ранжирования, где оценки неопределенности совершенно неинформативны, и «лучшие» ранжирования, где оценки неопределенности совпадают с оценками неопределенности. полностью коррелированы. Они представляют собой нижнюю и верхнюю границы производительности R-AUC в зависимости от качества неопределенности. Заявка с наименьшим R-AUC по оценочным данным (актуальна на 17 октября) выиграет.
Теперь, когда мы обсудили оценку, давайте обсудим, как создать файл фиксации. Если вы выполнили все, как описано выше, у вас уже должен быть файл «submission.json» в вашем каталоге верхнего уровня. Этот файл был создан с помощью следующей команды.
python shifts/translation/assessment/create_submission.py ensemble/test ensemble/test1 — save_path ./submission-ensemble.json — beam_width 5 — nbest 5 — ensemble — uncertainty_metric SCR-PE
Этот скрипт сначала вводит данные поля (контрольная работа), то сдвинутые данные (test1), сохранить путь, какая ширина луча при декодировании (ширина луча), сколько гипотез использовать (n_best), следует ли использоватьсобиратьвыход, и какая неопределенность включена в измерение (Индекс неопределенностиЗатем сценарий обрабатывает вывод в файл json-list со следующей структурой.
jsn_list = [jsn0, jsn1, ..., jsonN]
jsn0 = {‘id’: ‘001’,
Затем этот документ можно отправить на веб-сайт Shift. Нет, если вы используете пользовательские измерения неопределенности, вам придется изменить этот сценарий.
8. Направления улучшения
В этом блоге рассматриваются только базовые методы для задач машинного перевода в Shifts Challenge. Есть несколько направлений, которые могут привести к интересным открытиям и усовершенствованиям.
- Увеличьте разнообразие моделей в ансамбле. Это может быть достигнуто за счет увеличения данных во время тестирования, таких как отсев BPE, или включения «нормального» отсева в каждом члене ансамбля во время тестирования.
- Рассмотрите возможность объединения ансамблей моделей, которые делают разные предположения о данных, таких как авторегрессионные модели слева направо, справа налево, неавторегрессионные модели и модели, которые позволяют учитывать произвольные порядки факторизации, такие как XL-Net [7].
- Рассмотрим детерминированные методы настройки и оценки, не требующие использования модельных ансамблей [9].
Однако вы можете найти свои собственные решения, если они подчиняются установленным правилам и вычислительным ограничениям.здесь.
использованная литература
[1] А. Малинин, Н. Банд, Ганьшин, Александр, Г. Чесноков, Ю. Галь, М. Дж. Ф. Галес, А. Носков, А. Плосконосов, Л. Прохоренкова, И. Провилков, В. Райна, В. Райна, Рогинский, Денис, М. Шматова, П. Тигас и Б. Янгель, «Сдвиги: набор данных истинных сдвигов распределения по нескольким крупномасштабным задачам», 2021 г.
[2] Андрей Малинин и Марк Гейлз, «Оценка неопределенности в авторегрессионном структурированном прогнозировании», ICLR 2021.
[3] Сяо, Тим З. и Гомес, Эйдан Н. и Гал, Ярин, «Wat heb je gezegd? Обнаружение переводов вне распределения с помощью преобразователей мутаций», Симпозиум по байесовскому глубокому обучению, NeurIPS 2019
[4] Wang, Shuo and Liu, Yang and Wang, Chao and Luan, Huanbo and Sun, Maosong, "Improving Back-Translation with Uncertainty-based Confidence Estimation".2019
[5] Фомичева, Марина и Сун, Шуо и Янковская, Лиза и Блейн, Фредерик и Гусман, Франсиско и Фишел, Марк и Алетрас, Николаос и Чаудхари, Вишрав и Спиа, Лючия, «Оценка качества без учителя для нейронного машинного перевода», 2020 г. год
[6] Notin, Pascal and Hernandez-Lobato, José Miguel and Gal, Yarin.
"Principled Uncertainty Estimation for High Dimensional Data", Uncertainty & Robustness in Deep Learning Workshop, ICML, 2020
[7] Ян, Жилин и Дай, Зиханг и Ян, Йиминг и Карбонелл, Хайме и Салахутдинов, Расс Р и Ле, Куок В., «XL-Net: обобщенная авторегрессивная предварительная подготовка для понимания языка», NeurIP, S2019
[8] Joost van Amersfoort, Lewis Smith, Yee Whye Teh, Yarin Gal, "Uncertainty estimation using a single deep deterministic neural network", ICML, 2020
Базовое пошаговое руководство по задачам машинного перевода для NeurIPS Challenge 2021первоначально опубликовано вперейти к науке о данныхжурнал, люди продолжают разговор, выделяя историю и отвечая на нее.