Этот репозиторий представляет работу, выполненную во время диссертации моего магистра, с названием «Улучшение перевода нейронной машины с низким ресурсом в связи с переносом обучения», рекомендованным Александрой Берч и Рэйчел Бауден в Университете Эдинбурга. Он был представлен в августе 2020 года. Он исследовал некоторые из подходов к трансферному обучению для систем перевода нейронных машин (NMT), используя модели в масках, такие как XLM-Roberta (XLM-R) [1]. Этот проект был в первую очередь создан в рамках слияния контекстуализированных представлений слов из моделей маскированных языков (MLM) с системой NMT на основе трансформатора [2]. Это также эмпирически проследило передачу синтаксических знаний путем анализа голов внимания в этой системе, основанной на работе о справочнике [3]. Это руководство дает необходимые инструкции по установке вместе с небольшим рабочим примером с использованием небольшого подмножества параллельного параллельного набора данных IIT в Бомбее [4]. Все гиперпараметры, используемые в этой работе, можно получить из тезиса.
Оглавление
- Обзор слияния на основе внимания
- Установка
- Предварительная обработка
- Базовая система NMT
- XLM-R-FULED SYSTEM NMT
- Создание XLM-R
- Преобразование сценариев
- Синтаксический анализ
- Дополнительная информация
- Ссылки
1. Обзор слияния на основе внимания
- Мы подключили XLM-R с системой NMT на основе трансформатора, используя слияние на основе внимания после работы [2].
- Мы называем это системой NMT, разбитой XLM-R, которая состоит из дополнительного модуля XLM-R, отличного от стандартного NMT-Encoder и NMT-декодера.
- Входное предложение передается как в XLM-R, так и NMT-Encoder, который дает два разных представления для предложения. Контекстуализированное представление слов из XLM-R сливается с представлением NMT-Encoder с использованием слияния, основанного на внимании. Точно так же представление XLM-R сливается с декодером.
2. Установка
2.1. Требования
- Python> = 3,5
- Pytorch> = 1.5.0
- Tensorflow == 1.13.1
- Трансформаторы HuggingFace == 2.11.0
- Matplotlib
- Морской
- Scikit-learn
- Sacrebleu> = 1.4.10
- Предложение> = 0,1,91
- Индийская библиотека NLP> = 0,6
- Мозесдекодер
2.2 Установка в каталоге пакетов
- Скачать, извлечь и установить Mosesdecoder в этом месте.
- Загрузите, извлечь и установите библиотеку NLP Inde в этом месте. Кроме того, извлечь ресурсы IND Inde NLP в этом месте. Мы можем пропустить этот шаг, если мы не работаем с индийскими языками.
- Загрузите, извлечь и установите библиотеку Transformers Transformers HuggingFace.
2.3 Установка Fairseq
- Клонировать это хранилище. Его родительский каталог будет выступать в качестве домашнего каталога для всех сценариев предварительной обработки, обучения и оценки в этой работе.
- Запустите следующие команды из домашнего каталога.
cd 'work/systems/baseline-NMT/fairseq'
pip install --editable ./
- Он установит систему Baseline-NMT на основе библиотеки Fairseq, а также ее зависимости. Обратите внимание, что мы использовали несколько версий систем Fairseq, расположенных в этом месте. Итак, мы всегда использовали точные пути обучения и файлов оценки, чтобы избежать конфликтов.
2.4 Загрузка и извлечение XLM-R
- Загрузите все файлы, связанные с XLM-R из центра HuggingFace. Используйте опцию «Список всех файлов в модели» для просмотра и загрузки файлов, а именно config.json, pytorch_model.bin, pendencesiece.bpe.model и tokenizer.json .
- Поместите эти файлы в этот каталог.
3. Предварительная обработка
- Пожалуйста, посетите библиотеки Fairseq и Bert-NMT, чтобы познакомиться с основными этапами предварительной обработки, обучения и оценки, поскольку наша работа построена над ними.
- Мы использовали Mosesdecoder для предварительной обработки английских наборов данных, но переключились на библиотеку Indic NLP для индийских языков, таких как хинди, гуджарати, бенгали и маратхи.
- Мы использовали BPE предложения для сегментации слова. Когда языки источника и целевого языка обменивались существенными символами, мы обрабатывали наборы данных с помощью совместного BPE, используя этот сценарий. В противном случае был использован другой сценарий.
- Для набора данных английского иинди, используемого для демонстрации этой работы, мы использовали последний сценарий.
- Установите Home_dir в родительский каталог этого репозитория.
- Мы уже поместили файлы поезда, тестирования и разработки в RAW_DATA_DIR . Вы можете изменить их с помощью своих файлов с теми же соглашениями об именах.
- Мы объединили учебные данные с массовыми монолингальными наборами данных, чтобы изучить лучшую сегментацию BPE. Поместите эти наборы данных по адресу raw_monolingual_data_dir . В нашей работе мы использовали массивный корпус Оскара, но для этой демонстрации мы просто использовали те же файлы поездов.
- Переключите между индийским NLP или библиотекой Моисея на основе языков, комментируя функцию clean_norm_tok , как показано в скрипте.
- Запустите этот скрипт, который предварительно обрабатывает все файлы и сохраняет на Preprocessed_Data_DIR . Справочник Tokenized-BPE содержит все промежуточные файлы после нормализации, токенизации и т. Д., А также все окончательные файлы BPED.
- Затем этот скрипт бинарирует данные, которые будут использоваться системами на основе Fairseq, и сохраняет в бинарном каталоге. Он использует бинаризер Fairseq из системы XLM-R, чтобы бинаризировать файлы для базового уровня, а также систем XLM-R-разбитых. Он использует -Bert-Model-name для доступа к токенизатору XLM-R для токенизации исходных файлов, поскольку они также использовались компонентом XLM-R вместе со стандартным NMT-экодером в системах XLM-R.
- (Необязательно) Обратите внимание, что эта система в основном основана на XLM-R, но мы также можем использовать другие модели в масках, предоставленные библиотекой Transformers HuggingFace. Нам нужно внести некоторые изменения следующим образом:
- Загрузите и извлеките новую языковую модель, как упомянуто на шаге 2.4.
- Импортируйте соответствующий токенизатор и модель из библиотеки трансформаторов HuggingFice в системе, разбитой XLM с по умолчанию, как упомянуто ниже:
from transformers import XLMRobertaModel
BertModel = XLMRobertaModel
from transformers import XLMRobertaTokenizer
BertTokenizer = XLMRobertaTokenizer
- Нам нужно импортировать их в следующих файлах:
- Work/Systems/XLM-R-FUNS/BERT-NMT/PREPROCESS.PY
- Work/Systems/XLM-R-FUNS/BERT-NMT/Interactive.py
- Work/Systems/XLM-R-FUSE/BERT-NMT/FAIRSEQ_CLI/PREP-Процесс.PY
- Work/Systems/XLM-R-FUNS/BERT-NMT/FAIRSEQ_CLI/Interactive.py
- Work/Systems/XLM-R-FUNS/BERT-NMT/FAIRSEQ/TASKS/TRAVES.PY
- Work/Systems/XLM-R-FUSE/BERT-NMT/FAIRSEQ/MODELS/TRANSTRER.PY
- Work/Systems/XLM-R-FUNS/BERT-NMT/FAIRSEQ/BINARIZER.PY
- Кроме того, нам нужно изменить токены запуска
(<s>) и окончать (</s>) токены в этих файлах в соответствии с новой языковой моделью.
4. Базовая система NMT
4.1 Обучение базовой системы NMT
- Обучите базовую систему на основе трансформатора с помощью этого сценария.
- Он будет накапливать градиенты, чтобы сформировать больший эффективный размер партии. Размер партии = (количество графических процессоров) * ( --max-tokens ) * ( --Update-freq ).
- Он использует стратегию валидации ранней остановки с -и пациентом , определяющая максимальное количество контрольных точек с снижением баллов BLEU.
- Наша работа использует архитектуру трансформатора: Transformer_IWSLT_DE_EN в качестве по умолчанию. Системы XLM-R восстанавливают параметры из базовых систем, поэтому их архитектура должна соответствовать. Мы также можем использовать другие крупные архитектуры для базовой системы, но мы должны также дать ту же базовую архитектуру для системы XLM-R. Проверьте этот файл, чтобы получить дополнительные архитектуры, реализуя слияние на основе внимания.
- Он сохраняет контрольные точки на базовом уровне_nmt_checkpoints_dir .
4.2 Оценка базовой системы NMT
- Оцените базовую систему с помощью этого сценария.
- Нам нужно оценить файл тестирования BED с помощью лучшей контрольной точки. Используйте -REMOVE-BPE = предложение для удаления сегментации BPE из выходного файла.
- Используйте либо Indic NLP, либо Моисей, чтобы детоксировать выходной файл, как показано в скрипте.
- Этот скрипт рассчитывает конечные оценки BLEU с использованием Sacrebleu, используя нетронутый тестовый файл целевого языка.
5. xlm-R-Fused NMT System
5.1 Обучение системы NMT XLM-R
- Обурите систем XLM-R с этим сценарием, который будет использовать систему в этом месте.
- BERT_NAME сохраняет путь к варианту XLM-R, используемому с этой системой. Мы можем использовать либо предварительно обученные, так и настройки, здесь.
- Этот скрипт копирует лучшую контрольную точку из базовой системы и восстанавливает параметры для дальнейшего обучения с помощью системы XLM-R.
- Эта система была построена по более ранней версии Fairseq, которая не обеспечивала ранней остановки, поэтому этот сценарий сохраняет все контрольно-пропускные пункты для этапов обучения Max-Update , которые затем оцениваются позже.
- Для слияния внимания как на стороне энкодера, так и на стороне декодера используйте -Arch как Transformer_S2_IWSLT_DE_EN , в то время как для Fusion только для декодера используйте Transformer_IWSLT_DE_EN .
- Убедитесь, что использовать небольшую скорость обучения, так как параметры уже находятся вблизи оптимальных уровней.
5.2 Оценка системы NMT-r-разбивкой XLM-R
- Оцените системы XLM-R с этим сценарием, который аналогичен сценарию, используемому для базовой системы.
- В этом скрипте используется конкретная контрольная точка для вычисления баллов BLU, в то время как другой скрипт расширяет его для вычисления баллов для всех контрольных точек.
- Как это было упомянуто ранее, в этой системе нет функции ранней остановки. Итак, мы сохранили все контрольно -пропускные пункты каждые несколько эпох и оценивали их с помощью набора проверки. Затем лучшая контрольная точка может быть установлен с использованием best_checkpoint в предыдущем сценарии для оценки тестового набора.
- Он использует пути к двум различным тестовым файлам, которые используются различными компонентами систем NMT-R-R-R-R-R. TEST_SRC_BPED указывает на файл, который используется стандартным NMT-Encoder, в то время как TEST_SRC_RAW указывает на файл необработанного исходного материала, который используется компонентом XLM-R. Файл необработана необходим XLM-R, поскольку он использует свою собственную внутреннюю токенизацию с использованием токенизатора, предоставляемого библиотекой Transformers HuggingFace. Убедитесь, что BERT_NAME указывает на соответствующий каталог варианта XLM-R, чтобы он мог получить доступ к своему соответствующему токенизатору.
6. Manetuning XLM-R
6.1 многоязычные и одноязычные варианты
- Мы создали модели XLM-R, чтобы создать многоязычные и одноязычные варианты оригинальных предварительно обученных моделей.
- Индо-арийская xlm-r-база является многоязычным вариантом, который создается путем создания базы XLM-R с родственными языками-хинди, гуджарати, маратхи и бенгальски. Он использует их синтаксические, морфологические, орфографические и лексические сходства.
- Гуджарати-xlm-r-base и gujarati-xlm-r-large являются одноязычными вариантами, созданными с одним набором данных Гуджарати. Кроме того, Gujarati-DEV-XLM-R-баз создается с помощью языка Гуджарати, преобразованного в сценарий Деванагари. Эти модели были выпущены в центре HuggingFace, которые доступны здесь.
- Мы использовали варианты Pytorch XLM-R, доступные здесь в качестве предварительно обученных моделей.
6.2 Подготовка данных
- Мы в первую очередь следовали этому уроку, который мы призываем вас посетить, прежде чем продолжить.
- Используйте этот скрипт, чтобы подготовить данные. Он готовит файлы обучения и валидации для одного монолингального набора данных, чей путь установлен с использованием raw_mono_source . Затем он предварительно обрабатывается с использованием библиотеки Indic NLP, как это сделано для учебных файлов выше.
- В этом сценарии BERT_NAME указывает на исходную предварительную модель XLM-R, которая используется для доступа к его словарю.
- Затем он бинаризируется с использованием другого варианта библиотеки Fairseq, доступного здесь. Он использует токенизатор XLM-R, который гарантирует, что наши данные токенизированы так же, как и исходные данные были сделаны для предварительной подготовки XLM-R.
- (Необязательно) Если вы хотите определить любую другую модель в масках, вам необходимо импортировать эту языковую модель в этом файле. Внесите следующие изменения:
- Импортируйте соответствующий токенизатор вместо нашего xlmrobertatokenizer по умолчанию
from transformers import XLMRobertaTokenizer
BertTokenizer = XLMRobertaTokenizer
- Замените имя модели здесь
dict = BertTokenizer.from_pretrained("xlm-roberta-base")
- Замените токены начала и конец, аналогичные предложению в предварительной обработке.
- Точно так же подготовьте данные для других языков, если вы хотите создать многоязычную модель.
6.3 Обучение и оценка модели
- Используйте этот сценарий, чтобы нанести ущерб монолингальному варианту.
- Он использует ту же базовую систему NMT, которая используется на шаге 4.1 для определения модели. Здесь RESTORE_POINT указывает на предварительно обученную контрольную точку модели. Используйте -задать в качестве masked_lm для одноязычного варианта.
- Сравните, используйте этот скрипт, чтобы создать многоязычный вариант. Он использует -задать как многоязычный_Маскед_лм , который объединяет данные с разных языков.
- Это также переосмысливает его, чтобы минимизировать влияние дисбаланса данных, где более крупные наборы данных одолевают более мелкие. Используйте --мультиланг-самплинг-альфа для регулировки коэффициента отбора проб. Смотрите оригинальную бумагу XLM-R [1] для деталей.
- Мы сохранили контрольно -пропускные пункты через регулярные промежутки времени и выбрали модель с минимальной потерей проверки.
6.4 Сделать контрольную точку Pytorch совместимым с трансформаторами HuggingChingface
- Нам нужно преобразовать сохраненную контрольную точку Pytorch в другую версию, совместимую с библиотекой Trangingface Transformers.
- Мы предполагаем, что вы установили библиотеку Transformers в каталоге пакетов. Затем используйте следующую команду.
python packages/transformers/src/transformers/convert_roberta_original_pytorch_checkpoint_to_pytorch.py --roberta_checkpoint_path best_ck_dir/ --pytorch_dump_folder_path ./
- Здесь, BEST_CK_DIR содержит конфискованную контрольную точку XLM-R, названную как model.pt , dict.txt и предложение.bpe.model . Последние 2 файла одинаковы как для предварительно обученных, так и для созданных моделей, к которым можно получить доступ здесь. pytorch_dump_folder_path относится к каталогу, где необходимо сохранить версию совместимой с трансформаторами.
- Обратите внимание, что в библиотеке Transformers были некоторые проблемы с файлом convert_roberta_original_pytorch_checkpoint_to_pytorch.py , который мы исправили и добавили в каталог UTILS. Замените этот файл и восстановите библиотеку.
- (Необязательно) Мы можем использовать руководства HuggingFace непосредственно для Finetune модели, не используя библиотеку Fairseq. Мы нашли этот подход очень медленным из-за плохой поддержки с несколькими GPU, предоставляемой Huggingface. Они внедрили многопоточное чтение по сравнению с многопроцестрой, которая вызывает дисбалансированное использование графических процессоров. Fairseq внедрил свой собственный модуль для обработки этого, который обсуждается здесь.
- После создания, просто используйте окончательную версию Pytorch, чтобы заменить оригинальные предварительно обученные модели для обучения и оценки систем XLM-R.
7. Преобразование сценариев
- Мы использовали некоторые стратегии преобразования сценариев, где мы пытались использовать лексическое сходство между связанными языками, используя общий сценарий. Мы использовали библиотеку Inde NLP, чтобы преобразовать то же самое.
- Поскольку система XLM-R обрабатывает те же входные предложения в XLM-R, а также NMT-Encoder, мы пробовали различные комбинации сценариев для этих модулей. Например, для пары Гуджарати-Хинди мы передали сценарии Гуджарати в модуль XLM-R, но Гуджарати в сценарии Деванагари в NMT-экодер, чтобы максимизировать лексическое перекрытие с целевым языком.
- Предложения в разных сценариях имеют одинаковое семантическое значение, поэтому их слияние, основанное на внимании. Проверьте тезис для получения более подробной информации.
- Эта функциональность может использоваться с помощью системы XLM-R, изменяя исходные файлы, которые будут бинарсированы для XLM-R. Это можно сделать с помощью этого скрипта, который преобразует эти файлы в целевой скрипт.
- Точно так же сценарий может использоваться для преобразования сценария исходных файлов, которые должны быть переданы в XLM-R, а также стандартный NMT-Encoder.
- Затем тренируйте базовый уровень и xlm-R-разбитые системы NMT, как и перед использованием начальных тренировочных сценариев.
- Оцените эти системы, как и прежде, используя начальные сценарии оценки. Если целевой язык преобразуется в сценарий исходного языка, то его необходимо преобразовать обратно в свой начальный сценарий в качестве шага постобработки. Это может быть сделано с помощью сценариев оценки, присутствующих в каталоге с скриптом, внутри базового уровня, и сценариев xlm-r-разбитых сценариев.
8. Синтаксический анализ
Пожалуйста, ознакомьтесь с работой [3], код которого доступен здесь. Наша работа расширяет его, чтобы отследить передачу синтаксических знаний в системах XLM-R.
8.1 Подготовка данных
- Обработка набора данных универсальных зависимостей (UD)
- Мы использовали набор данных Hindi UD [5] [6] для синтаксического анализа.
- Используйте этот скрипт, чтобы обработать необработанные файлы поезда и тестовых файлов. Он извлекает синтаксическую головку и соответствующие синтаксические отношения из файлов UD.
- Затем используйте этот скрипт, чтобы преобразовать приведенные выше файлы в формат JSON, используя инструкции здесь.
- Наконец, извлеките необработанные предложения из приведенных выше файлов, используя этот скрипт.
- Обработка исходных файлов для вывода Fairseq
- Используйте приведенные выше файлы с необработанными предложениями в качестве исходных тестовых файлов. Мы оцениваем наши лучшие базовые и xlm-r-контрольные точки системы с этими файлами.
- Предварительно обработать эти файлы, как упомянуто на шаге 3 (предварительная обработка), и подготовьте бинаризированные файлы для Fairseq. Поскольку здесь нет никаких целевых побочных данных, мы используем модифицированный сценарий предварительной обработки для обработки только файлов источника.
8.2 Извлечение карт внимания из базовых и xlm-r-обработанных систем
- Используйте приведенные выше бинарсированные данные, чтобы извлечь карты внимания из системы, связанной с XLM-R, используя сценарий оценки. Точно так же используйте этот скрипт, чтобы извлечь карты из базовой системы.
- В этих сценариях используются две разные системы, построенные по базовой системе NMT и системе NMT-обработки XLM-R, к которой можно получить доступ здесь и здесь, соответственно.
- Эти системы извлекают карты самоприщепления для всех головок внимания, присутствующих во всех слоях энкодера трансформатора. Кроме того, система, построенная через XLM-R-размер, также извлекает карты BERT-Attuent, возникающие в результате слияния на основе внимания представлений XLM-R и представлений NMT-Encoder.
- Используйте дополнительный параметр -save_attn_maps , чтобы дать путь, чтобы сохранить карты внимания. Создайте папки - Self , Bert и Batch_sentences внутри него, чтобы сохранить соответствующие карты. Batch_sentences хранит соответствующие предложения в заказе. Карты внимания извлекаются. Этот файл можно использовать для проверки порядка обработанных предложений.
- Эти карты будут сохранены в массивах Numpy, где один файл содержит количество предложений, так же, как размер партии.
- Используйте этот сценарий, чтобы дополнительно обработать карты внимания.
- Это создает объекты маринозов, используя карты внимания и файлы JSON.
- Затем он преобразует карты внимания для токенов уровня BPE на уровень слова. Проверьте тезис для получения более подробной информации.
- Для тестирования нашего кода вы можете использовать наши файлы Pickle как для базовых, так и для систем XLM-R, которые доступны здесь. Загрузите и извлеките сжатый файл в этом месте. Эти файлы рассола будут работать с предварительно обработанными данными хинди UD, уже присутствующими в упомянутом месте.
8.3 Визуализация карт внимания и классификатор на основе внимания, основанный на внимании
- Запустите сантаксический анализ ноутбука, доступный здесь. Point train_path и dev_path к приведенным приведенным файлам поезда и тестирования. Здесь наши разработчики и тестовые файлы одинаковы, так как мы не используем никакого гиперпараметра.
- Веса, полученные из базовых и систем, использованных XLM-R, использовались для определения правильной синтаксической головки в разных слоях и головках внимания.
- У этого есть несколько качественных примеров, когда синтаксическая голова была успешно предсказана.
- Наконец, это дает окончательный балл UAS, обучая и оценивая классификатор, основанный на внимании. Требуется взвешенное сочетание весов самоубийства, данных всеми слоями и головками внимания, чтобы дать общую меру синтаксического знания.
9. Дополнительная информация
- Лицензии: Обратите внимание, что наша работа лицензирована по лицензии MIT. Но мы используем некоторые другие работы и наборы данных, которые имеют свои собственные лицензии. В частности, все системы, основанные на библиотеке Fairseq, имеют соответствующие лицензии, присутствующие в их соответствующих каталогах. Кроме того, пожалуйста, проверьте лицензии на параллельный параллельный набор данных на английском языке и набор данных Hindi Universal Degy Dependion, используя заданные ссылки в файле README. Аналогичным образом, проверьте лицензию на библиотеку Transformers Transformers, так как мы изменили один из ее файлов, как упомянуто в Readme.
- Поднимите проблему, если вам нужна помощь. Если вы найдете эту работу полезной, не стесняйтесь использовать ее, и, пожалуйста, цитируйте мою диссертация.
10. Ссылки
[1] Конно, Алексис и др. «Неконтролируемое обучение в масштабе неконтролируемого представления». Arxiv Preprint arxiv: 1911.02116 (2019)
[2] Zhu, Jinhua, et al. «Включение Берта в перевод нейронной машины». Международная конференция по обучению. 2019
[3] Кларк К., Хандельвал, У., Леви, О. и Мэннинг, CD (2019, август). На что смотрит Берт? Анализ внимания Берта. В материалах семинара ACL 2019 года BlackBoxNLP: анализ и интерпретация нейронных сетей для НЛП (стр. 276-286).
[4] Anoop Kunchukuttan, Pratik Mehta, Pushpak Bhattacharyya. IIT Бомбейский параллельный корпус английского языка. Языковые ресурсы и конференция по оценке. 2018.
[5] Рияз Ахмад Бхат, Раджеш Бхатт, Аннахита Фаруди, Прескотт Классен, Бхувана Нарасимхан, Марта Палмер, Оуэн Рамбоу, Дипти Мисра Шарма, Ашвинь -Вайдья, Шри Рамагурумюрти Вишну и Фейсия. Проект хинди/урду деревьев. В Справочнике по лингвистической аннотации (под редакцией Нэнси Иде и Джеймсом Пустеовским), Springer Press. 2015.
[6] Марта Палмер, Раджеш Бхатт, Бхувана Нарасимхан, Оуэн Рамбоу, Дипти Мисра Шарма, Фей Ся. Синтаксис хинди: аннотирующая зависимость, структура лексического предиката-аргумента и структура фразы. В процессе 7-й Международной конференции по обработке естественного языка, ICON-2009, Хайдарабад, Индия, 14-17 декабря 2009 г.