Передача знания и Нейронный машинный перевод на практике |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-11-13 19:45 Нейронный машинные перевод (НМП, англ. Neural Machine Translation, NMT) развивается очень быстро. Сегодня, чтобы собрать свой переводчик, не нужно иметь два высших образования. Но чтобы обучить модель, нужен большой параллельный корпус (корпус, в котором предложению на исходном языке сопоставлен его перевод). На практике речь идет хотя бы об одном миллионе пар предложений. Есть даже отдельная большая область НМП, исследующая методы обучения языковых пар с малым количеством данных в электронном виде (англ. Low Resource NMT). План обучения таков. Нужно взять большой (родительский) корпус, обучить на нем нейронную модель, а затем дообучить нашу дочернюю модель. Причем целевой язык перевода будет один и тот же: русский. Интуитивно это можно сравнить с изучением второго языка. Его учить легче, зная один иностранный язык. Еще это похоже на изучение узкой области иностранного языка, например, медицинской терминологии английского языка: сначала нужно выучить английский в общем.
Также возможно отдельно придется повозиться с MXNet , которая отвечает за работу с видеокартой. В Colab нужно дополнительно установить библиотеку
Про нейронные сети принято считать, что им достаточно скормить данные как есть, а они сами разберутся. Но на самом деле это не всегда так. Вот и в нашем случае корпус нужно предобработать. Сначала его токенизируем, чтобы модели легче было понимать, что «кот!» и «кот» — это примерно про одно и тоже. Для примера подойдет просто питоновский токенайзер.
В результате, подаем на вход пары предложений вида
и
На выходе получаются такие токенизированные предложения:
и на русском
В нашем случае понадобятся объединенные словари родительского и дочернего корпусов, поэтому создадим общие файлы:
так как дообучение дочерней модели происходит на том же словаре. Теперь небольшое, но важное отступление. В МП предложения разбивают на атомы в виде слов и далее оперируют предложениями как последовательностями слов. Но этого как правило недостаточно, потому что образуется огромный хвост из слов, которые встречаются в корпусе по одному разу. Построить для них вероятностную модель сложно. Особенно это актуально для языков с развитой морфологией (падеж, род, число). И русский, и чувашский именно такие языки. Но есть решение. Можно разбить предложение на более низкий уровень, на подслова. Мы использовали Byte pair encoding.
Получим примерно такие последовательности подслов
и
Видно, что из слов хорошо вычленяются аффиксы: Не@@ давно и добро@@ той. Для этого нужно подготовить словари bpe
И применить их к токенам, например:
По аналогии нужно сделать для всех файлов: обучающих, валидационных и тестовых родительской и дочерней моделей. Теперь перейдем непосредственно к обучению нейронной модели. Сначала нужно подготовить общие модельные словари:
Далее обучим родительскую модель. Более подробно простой пример описан на странице Sockeye. Технически процесс состоит из двух шагов: подготовки данных с использованием созданных ранее модельных словарей
и самого обучения
Обучение на мощностях Colab занимает около суток. Когда тренировка модели завершена, переводить с ее помощью можно так
Для обучения дочерней модели выполним
Код запуска обучения выглядит так
Добавляются параметры, указывающие, что нужно использовать конфигурацию и веса родительской модели в качестве точки старта. Детали в примере с дообучением от Sockeye. Обучение дочерней модели сходится примерно за 12 часов. Подводя итоги, сравним результаты. Обычная модель машинного перевода дала качество 24,96 BLEU, тогда как модель с передачей знания 32,38 BLEU. Разница видна и визуально на примерах переводов. Поэтому, пока продолжаем собирать корпус, будем пользоваться этой моделью. Источник: habr.com Комментарии: |
|