Пошаговое руководство по настройке BERT для NER
Со времени основополагающей статьи Васвани и др. Внимание - это все, что вам нужно, модели Transformer на сегодняшний день стали самым современным в технологии НЛП. С приложениями, от NER, классификации текста, ответов на вопросы или генерации текста, применения этой удивительной технологии безграничны.
В частности, BERT - что означает двунаправленные представления кодировщика от трансформаторов - использует архитектуру трансформатора новым способом. Например, BERT анализирует обе стороны предложения с помощью случайно замаскированного слова, чтобы сделать прогноз. Помимо прогнозирования замаскированного токена, BERT прогнозирует последовательность предложений, добавляя токен классификации [CLS] в начале первого предложения, и пытается предсказать, следует ли второе предложение за первым, добавляя токен разделения [SEP] между двумя предложениями.
В этом руководстве я покажу вам, как настроить модель BERT для прогнозирования таких сущностей, как навыки, диплом, основной диплом и опыт работы с описанием должностей в программном обеспечении. Если вы хотите пойти дальше и извлечь связи между сущностями, прочтите нашу статью о том, как выполнять объединенные сущности и извлечение отношений с помощью трансформаторов.
Для тонкой настройки трансформаторов требуется мощный графический процессор с параллельной обработкой. Для этого мы используем Google Colab, поскольку он предоставляет бесплатные серверы с графическими процессорами.
В этом уроке мы будем использовать недавно выпущенную библиотеку spaCy 3 для точной настройки нашего преобразователя. Ниже приведено пошаговое руководство по настройке модели BERT на spaCy 3 (видеоурок здесь). Код вместе с необходимыми файлами доступен в репозитории G ithub repo.
Маркировка данных:
Для точной настройки BERT с помощью spaCy 3 нам необходимо предоставить данные для обучения и разработки в формате JSON spaCy 3 (см. Здесь), которые затем будут преобразованы в двоичный файл .spacy. Мы предоставим данные в формате IOB, содержащиеся в файле TSV, а затем преобразуем их в формат spaCy JSON.
Я пометил только 120 должностных инструкций такими объектами, как навыки, диплом, диплом специалиста и опыт для обучающий набор данных и около 70 должностных инструкций для набора данных разработчика.
В этом руководстве я использовал инструмент аннотации UBIAI, потому что он обладает обширными функциями, такими как:
- Автоматическая аннотация ML
- Словарь, регулярное выражение и автоматическая аннотация на основе правил
- Совместная работа в команде для совместного использования задач аннотации
- Прямой экспорт аннотаций в формат IOB
Используя функцию регулярных выражений в UBIAI, я предварительно аннотировал все упоминания опыта, которые следует шаблону «\ d. * \ +. *», Например «5+ лет опыта в C ++». Затем я загрузил словарь csv, содержащий все языки программного обеспечения, и назначил навыки сущности. Предварительные аннотации экономят много времени и помогут свести к минимуму ручные аннотации.
Для получения дополнительной информации об инструменте аннотации UBIAI посетите страницу документации и мой предыдущий пост Введение в UBIAI: простая в использовании текстовая аннотация для приложений NLP ».
Экспортированная аннотация будет выглядеть так:
MS B-DIPLOMA in O electrical B-DIPLOMA_MAJOR engineering I-DIPLOMA_MAJOR or O computer B-DIPLOMA_MAJOR engineering I-DIPLOMA_MAJOR . O 5+ B-EXPERIENCE years I-EXPERIENCE of I-EXPERIENCE industry I-EXPERIENCE experience I-EXPERIENCE . I-EXPERIENCE Familiar O with O storage B-SKILLS server I-SKILLS architectures I-SKILLS with O HDD B-SKILLS
Для конвертации из IOB в JSON (см. Документацию здесь) мы используем команду spaCy 3:
!python -m spacy convert drive/MyDrive/train_set_bert.tsv ./ -t json -n 1 -c iob !python -m spacy convert drive/MyDrive/dev_set_bert.tsv ./ -t json -n 1 -c iob
После преобразования в JSON spaCy 3 нам нужно преобразовать файлы JSON для обучения и разработки в двоичный файл .spacy с помощью этой команды (обновите путь к файлу своим собственным):
!python -m spacy convert drive/MyDrive/train_set_bert.json ./ -t spacy !python -m spacy convert drive/MyDrive/dev_set_bert.json ./ -t spacy
Модельное обучение:
- Откройте новый проект Google Colab и обязательно выберите GPU в качестве аппаратного ускорителя в настройках ноутбука.
- Чтобы ускорить процесс обучения, нам нужно запустить параллельную обработку на нашем графическом процессоре. Для этого устанавливаем библиотеку NVIDIA 9.2 cuda:
!wget https://developer.nvidia.com/compute/cuda/9.2/Prod/local_installers/cuda-repo-ubuntu1604-9-2-local_9.2.88-1_amd64 -O cuda-repo-ubuntu1604–9–2-local_9.2.88–1_amd64.deb !dpkg -i cuda-repo-ubuntu1604–9–2-local_9.2.88–1_amd64.deb !apt-key add /var/cuda-repo-9–2-local/7fa2af80.pub !apt-get update !apt-get install cuda-9.2
Чтобы проверить, установлен ли правильный компилятор cuda, запустите:! Nvcc --version
- Установите просторную библиотеку и конвейер пространственного трансформатора:
pip install -U spacy !python -m spacy download en_core_web_trf
- Далее мы устанавливаем библиотеку машинного обучения pytorch, которая настроена для cuda 9.2:
pip install torch==1.7.1+cu92 torchvision==0.8.2+cu92 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
- После установки pytorch нам нужно установить просторные трансформаторы, настроенные для cuda 9.2, и изменить CUDA_PATH и LD_LIBRARY_PATH, как показано ниже. Наконец, установите библиотеку cupy, которая является эквивалентом библиотеки numpy, но для графического процессора:
!pip install -U spacy[cuda92,transformers] !export CUDA_PATH=”/usr/local/cuda-9.2" !export LD_LIBRARY_PATH=$CUDA_PATH/lib64:$LD_LIBRARY_PATH !pip install cupy
- SpaCy 3 использует файл конфигурации config.cfg, который содержит все компоненты обучения модели для обучения модели. На странице обучения spaCy вы можете выбрать язык модели (английский в этом руководстве), компонент (NER) и оборудование (GPU) для использования и загрузить шаблон файла конфигурации.
Единственное, что нам нужно сделать, это указать путь к файлам train и dev .spacy. После этого мы загружаем файл в Google Colab.
- Теперь нам нужно автоматически заполнить файл конфигурации остальными параметрами, которые потребуются модели BERT; все, что вам нужно сделать, это запустить эту команду:
!python -m spacy init fill-config drive/MyDrive/config.cfg drive/MyDrive/config_spacy.cfg
Предлагаю отладить ваш конфигурационный файл на случай ошибки:
!python -m spacy debug data drive/MyDrive/config.cfg
- Наконец-то мы готовы обучать модель BERT! Просто запустите эту команду, и обучение должно начаться:
!python -m spacy train -g 0 drive/MyDrive/config.cfg — output ./
P.S: если вы получите ошибку cupy_backends.cuda.api.driver.CUDADriverError: CUDA_ERROR_INVALID_PTX: не удалось выполнить компиляцию PTX JIT, просто удалите cupy и установите его снова, и это должно решить проблему.
Если все прошло правильно, вы должны увидеть, как обновляются оценки модели и потери:
По окончании обучения модель будет сохранена в папке model-best. Оценки модели находятся в файле meta.json внутри папки model-best:
“performance”:{ “ents_per_type”:{ “DIPLOMA”:{ “p”:0.5584415584, “r”:0.6417910448, “f”:0.5972222222 }, “SKILLS”:{ “p”:0.6796805679, “r”:0.6742957746, “f”:0.6769774635 }, “DIPLOMA_MAJOR”:{ “p”:0.8666666667, “r”:0.7844827586, “f”:0.8235294118 }, “EXPERIENCE”:{ “p”:0.4831460674, “r”:0.3233082707, “f”:0.3873873874 } }, “ents_f”:0.661754386, “ents_p”:0.6745350501, “ents_r”:0.6494490358, “transformer_loss”:1408.9692438675, “ner_loss”:1269.1254348834 }
Оценки, безусловно, намного ниже уровня производственной модели из-за ограниченного набора данных для обучения, но стоит проверить его эффективность на образце описания должности.
Извлечение сущностей с помощью трансформаторов
Чтобы протестировать модель на образце текста, нам нужно загрузить модель и запустить ее на нашем тексте:
nlp = spacy.load(“./model-best”) text = [ '''Qualifications - A thorough understanding of C# and .NET Core - Knowledge of good database design and usage - An understanding of NoSQL principles - Excellent problem solving and critical thinking skills - Curious about new technologies - Experience building cloud hosted, scalable web services - Azure experience is a plus Requirements - Bachelor's degree in Computer Science or related field (Equivalent experience can substitute for earned educational qualifications) - Minimum 4 years experience with C# and .NET - Minimum 4 years overall experience in developing commercial software ''' ] for doc in nlp.pipe(text, disable=["tagger", "parser"]): print([(ent.text, ent.label_) for ent in doc.ents])
Ниже приведены сущности, извлеченные из нашего примера описания должности:
[ ("C", "SKILLS"), ("#", "SKILLS"), (".NET Core", "SKILLS"), ("database design", "SKILLS"), ("usage", "SKILLS"), ("NoSQL", "SKILLS"), ("problem solving", "SKILLS"), ("critical thinking", "SKILLS"), ("Azure", "SKILLS"), ("Bachelor", "DIPLOMA"), ("'s", "DIPLOMA"), ("Computer Science", "DIPLOMA_MAJOR"), ("4 years experience with C# and .NET\n-", "EXPERIENCE"), ("4 years overall experience in developing commercial software\n\n", "EXPERIENCE") ]
Достаточно впечатляюще для использования всего 120 учебных документов! Мы смогли правильно извлечь большую часть навыков, дипломов, дипломов и опыта.
При большем количестве обучающих данных модель, безусловно, улучшится и принесет более высокие баллы.
Заключение:
Имея всего несколько строк кода, мы успешно обучили функциональную модель преобразователя NER благодаря удивительной библиотеке spaCy 3. Идите вперед и попробуйте его на своем примере использования и, пожалуйста, поделитесь своими результатами. Обратите внимание, что вы можете использовать инструмент аннотации UBIAI, чтобы пометить свои данные, мы предлагаем бесплатную 14-дневную пробную версию.
Как всегда, если у вас есть какие-либо комментарии, оставьте сообщение ниже или напишите по адресу [email protected]!
Следуйте за нами в Twitter @ UBIAI5