1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/paddlepaddle-PALM

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

PaddlePALM

Английский | Китайский

PaddlePALM (PArallel Learning from Multi-tasks) — это быстрый, гибкий, расширяемый и удобный в использовании фреймворк для масштабной предобучаемости и многотаскового обучения в области естественного языка. PaddlePALM представляет собой высокий уровень фреймворка, целенаправленно направленный на быстрое развитие высокопроизводительных моделей NLP.

С помощью PaddlePALM легко достичь эффективного исследования надежного обучения моделей NLP с несколькими вспомогательными задачами. Например, используя PaddlePALM, созданный моделью D-Net был признан первой позицией на треке EMNLP2019 MRQA.

Sample

Лидборд MRQA2019

Помимо исследовательской области, PaddlePALM был применён на поисковой системе Baidu, чтобы повысить точность понимания запросов пользователей и минирования ответов, что свидетельствует о высокой надёжности и производительности PaddlePALM.

Основные характеристики:- Удобство использования: с PALM всего 8 шагов до выполнения типовой задачи NLP. Кроме того, все базовые компоненты (например, основа модели, читатель данных, голова вывода задачи, оптимизатор...) были декомпозированы, что позволяет заменять любой компонент другими кандидатами с минимальными изменениями вашего кода.

  • Встроенная популярная основа NLP и предобученные модели: множество передовых общих архитектур моделей и предобученных моделей (например, BERT, ERNIE, RoBERTa...) встроены.

  • Удобное многотасковое обучение: требуется всего один API для совместного обучения нескольких задач с переиспользованием параметров.

  • Поддерживает обучение/оценку с несколькими GPU: автоматически распознаёт и адаптируется к режиму работы с несколькими GPU для ускорения обучения и вывода.

  • Дружественно к предобучению: самонастраивающиеся задачи (например, маска для языковой модели) встроены для упрощения предобучения. Легко обучаться с нуля.

  • Удобство кастомизации: поддерживает кастомизацию любого компонента (например, основа, голова задачи, читатель и оптимизатор) с переиспользованием заранее определённых, что даёт разработчикам высокую гибкость и эффективность для адаптации к различным сценариям NLP.Вы можете легко воспроизводить следующие конкурентоспособные результаты с минимальным количеством кода, что охватывает большинство задач NLP, таких как классификация, соответствие, последовательное маркирование, чтение с пониманием содержания, понимание диалогов и так далее. Более подробная информация доступна в примерах.

    Датасет
    chnsenticorp Соответствие пар вопросов Quora MSRA-NER
    (SIGHAN2006)
    CMRC2018

    Метрика

    точность
    F1-score
    точность
    F1-score
    F1-score
    EM
    F1-score
    тест
    тест
    тест
    разработка
    ERNIE Base 95.8 95.8 86.2 82.2 99.2 64.3 85.2

    Обзор

    <img src="https://tva1.sinaimg.cn/large/0082zybply1gbyo8d4ltoj31ag0n3tby.jpg" alt="Пример" width="600px" height="auto">
    <p align="center">
    	<em>Схема архитектуры</em>
    </p>

    PaddlePALM — это хорошо спроектированный высокий уровень NLP-фреймворк. Вы можете эффективно достичь наблюдаемого обучения, ненаблюдаемого/самонастроенного обучения, многозадачного обучения и обучения с переносом с минимальным количеством кода на основе PaddlePALM. В архитектуре PaddlePALM есть три слоя: слой компонентов, слой трейнеров и высший уровень слоя трейнеров снизу вверх. В компонентном слое PaddlePALM предоставляются 6 отделенных компонентов для выполнения задачи NLP. Каждый компонент включает богатые заранее определенные классы и базовый класс. Заранее определенные классы предназначены для типичных задач NLP, а базовый класс помогает пользователям создавать новый класс (на основе заранее определенных или от базового).Слой трейнера предназначен для создания вычислительного графика с выбранными компонентами и выполнения обучения и прогнозирования. Стратегия обучения, сохранение и загрузка модели, процедуры оценки и прогнозирования описаны в этом слое. Обратите внимание, что один трейнер может обрабатывать только одну задачу.

    Высший уровень слоя трейнера предназначен для сложной стратегии обучения и вывода, например, многозадачного обучения. Вы можете добавить вспомогательные задачи для обучения устойчивых моделей NLP (повышения производительности тестовых наборов и внеобластной производительности модели) или совместного обучения нескольких связанных задач для повышения производительности каждой задачи.| модуль | иллюстрация | | - | - | | paddlepalm | открыта система предварительного обучения и многозадачного обучения NLP, основанная на PaddlePaddle. | | paddlepalm.reader | коллекция эластичных читателей данных для конкретных задач. | | paddlepalm.backbone | коллекция классических моделей представления NLP, таких как BERT, ERNIE, RoBERTa. | | paddlepalm.head | коллекция специализированных выходных слоёв для задач. | | paddlepalm.lr_sched | коллекция планировщиков скорости обучения. | | paddlepalm.optimizer | коллекция оптимизаторов. | | paddlepalm.downloader | модуль загрузки предварительно обученных моделей с конфигурационными и словарными файлами. | | paddlepalm.Trainer | основная единица для запуска сессии одиночного обучения/предсказания. Трейнер создаёт вычислительный граф, управляет процессом обучения и оценки, обеспечивает сохранение модели/точки контроля и загрузку предварительно обученной модели/точки контроля. | | paddlepalm.MultiHeadTrainer | основная единица для запуска сессии многозадачного обучения/предсказания. Мультиголовый трейнер создан на основе нескольких трейнеров. Кроме наследования от трейнера, он дополнительно обеспечивает переиспользование основного блока модели между задачами, выбор трейнеров для многозадачного обучения и мультиголовый вывод для эффективной оценки и предсказания. |## Установка

    PaddlePALM поддерживает как Python 2, так и Python 3, Linux и Windows, CPU и GPU. Предпочтительный способ установки PaddlePALM — через pip. Просто выполните следующие команды в вашей оболочке:

    pip install paddlepalm

    Установка с помощью исходного кода

    git clone https://github.com/PaddlePaddle/PALM.git
    cd PALM && python setup.py install

    Библиотечные зависимости

    • Python >= 2.7
    • CUDA >= 9.0
    • cuDNN >= 7.0
    • PaddlePaddle >= 1.7.0 (Для установки обратитесь к этому)

    Загрузка предобученных моделей

    Мы включаем множество предобученных моделей для инициализации параметров основной части модели. Обучение больших моделей NLP, таких как 12-слойные трансформеры, с использованием предобученных моделей практически эффективнее, чем обучение с случайно инициализированными параметрами. Чтобы просмотреть все доступные предобученные модели и скачать их, выполните следующий код в интерпретаторе Python (введите команду python в командной строке):

    >>> from paddlepalm import downloader
    >>> downloader.ls('pretrain')
    Доступные предобученные элементы:
      => RoBERTa-zh-base
      => RoBERTa-zh-large
      => ERNIE-v2-en-base
      => ERNIE-v2-en-large
      => XLNet-cased-base
      => XLNet-cased-large
      => ERNIE-v1-zh-base
      => ERNIE-v1-zh-base-max-len-512
      => BERT-en-uncased-large-whole-word-masking
      => BERT-en-cased-large-whole-word-masking
      => BERT-en-uncased-base
      => BERT-en-uncased-large
      => BERT-en-cased-base
      => BERT-en-cased-large
      => BERT-multilingual-uncased-base
      => BERT-multilingual-cased-base
      => BERT-zh-base
    
    >>> downloader.download('pretrain', 'BERT-en-uncased-base', './pretrain_models')
    ...
    ```## Пример использования
    
    #### Быстрая настройка8 шагов для запуска типичной задачи обучения NLP:
    
    1. Используйте `paddlepalm.reader` для создания *чтения* данных набора и генерации входных признаков, затем вызовите метод `reader.load_data` для загрузки ваших данных обучения.
    2. Используйте `paddlepalm.backbone` для создания модели *основы* для извлечения текстовых признаков (например, контекстное слово вложение, вложение предложения).
    3. Зарегистрируйте ваш *чтение* с помощью вашего *основы* через метод `reader.register_with`. После этого шага ваш читатель может выдавать входные признаки, используемые основой.
    4. Используйте `paddlepalm.head` для создания выходной части задачи *головы*. Эта голова может предоставлять потерю задачи для обучения и прогнозирующие результаты для вывода модели.
    5. Создайте обучаемый объект задачи с помощью `paddlepalm.Trainer`, затем постройте граф переднего распространения с использованием основы и выходной части задачи (созданной на шагах 2 и 4) через метод `trainer.build_forward`.
    6. Используйте `paddlepalm.optimizer` (и `paddlepalm.lr_sched`, если это необходимо) для создания *оптимизатора*, затем постройте обратное распространение через метод `trainer.build_backward`.
    7. Подготовьте чтение и данные (полученные на шаге 1) для тренировщика с помощью метода `trainer.fit_reader`.
    8. Загрузите предобученную модель с помощью `trainer.load_pretrain`, или загрузите контрольную точку с помощью `trainer.save_checkpoint`.выполните `load_ckpt` или ничего не делайте для обучения с нуля, затем выполните обучение с помощью `trainer.train`. Для получения более подробной информации о реализации см. следующие демонстрационные примеры:- [Классификация настроений](https://github.com/PaddlePaddle/PALM/tree/master/examples/classification)
    - [Соответствие пар вопросов](https://github.com/PaddlePaddle/PALM/tree/master/examples/matching)
    - [Распознавание сущностей](https://github.com/PaddlePaddle/PALM/tree/master/examples/tagging)
    - [Машинное чтение и понимание контента вроде SQuAD](https://github.com/PaddlePaddle/PALM/tree/master/examples/mrc)
    
    
    #### Обучение несколькими задачами одновременно
    Чтобы запустить обучение нескольким задачам одновременно:
    
    1. повторно создайте компоненты (например, читатель, основной модуль и голова) для каждой задачи, затем выполните шаги 1~5 выше.
    2. создайте пустых трейнеров (каждый трейнер соответствует одной задаче) и передайте их для создания `MultiHeadTrainer`.
    3. постройте граф передачи нескольких задач с помощью метода `multi_head_trainer.build_forward`.
    4. используйте `paddlepalm.optimizer` (и `paddlepalm.lr_sched`, если это необходимо) для создания *оптимизатора*, затем постройте обратную связь через `multi_head_trainer.build_backward`.
    5. подготовьте всех созданных читателей и данные для `multi_head_trainer` с помощью метода `multi_head_trainer.fit_readers`.
    6. загрузите предобученную модель с помощью `multi_head_trainer.load_pretrain`, или загрузите контрольную точку с помощью `multi_head_trainer.load_ckpt`, или ничего не делайте при обучении с нуля, а затем начните обучение с помощью `multi_head_trainer.train`.
    
    Операции сохранения/загрузки и прогнозирования для `multi_head_trainer` аналогичны операциям для обычного трейнера.Для получения более подробной информации о реализации с использованием `multi_head_trainer`, см.
    
    - [ATIS: совместное обучение распознавания намерений диалога и заполнения слотов](https://github.com/PaddlePaddle/PALM/tree/master/examples/multi-task)
    
    #### Сохранение моделей
    Чтобы сохранять модели/контрольные точки и логи во время обучения, просто вызовите метод `trainer.set_saver`. Дополнительные детали реализации см. [здесь](https://github.com/PaddlePaddle/PALM/tree/master/examples).
    
    #### Оценка/Интерпретация
    Чтобы сделать прогноз/оценку после этапа обучения, просто создайте ещё три экземпляра читателя, основного модуля и головы с `phase='predict'` (повторите шаги 1~4 выше). Затем сделайте прогнозирование с помощью метода `predict` в трейнере (не требуется создание другого трейнера). Дополнительные детали реализации см. [здесь](https://github.com/PaddlePaddle/PALM/tree/master/examples/predict). Если вы хотите выполнять оценку во время процесса обучения, используйте `trainer.train_one_step()`. Метод `trainer.train_one_step(batch)` позволяет обучаться всего за один шаг, поэтому вы можете вставить код оценки в любой момент процесса обучения. Аргумент `batch` можно получить с помощью метода `trainer.get_one_batch`.
    
    PaddlePALM также поддерживает многоголовое inference, пожалуйста, обратитесь к `examples/multi-task/joint_predict.py`.#### Играйте с несколькими GPU
    Если в вашей среде существует несколько GPU, вы можете контролировать количество и индекс этих GPU через переменную окружения [CUDA_VISIBLE_DEVICES](https://devblogs.nvidia.com/cuda-pro-tip-control-gpu-visibility-cuda_visible_devices/). Например, если в вашей среде есть 4 GPU, индексируемых как 0, 1, 2, 3, вы можете запустить только с GPU2 следующими командами:```shell
    CUDA_VISIBLE_DEVICES=2 python run.py

    Несколько GPU должны быть разделены запятой. Например, запуск с GPU2 и GPU3, следующие команды используются:

    CUDA_VISIBLE_DEVICES=2,3 python run.py

    В режиме работы с несколькими GPU, PaddlePaddle автоматически распределяет каждый батч между доступными картами. Например, если значение batch_size установлено на 64, а видимых для PaddlePaddle карт 4, то фактический размер батча на каждой карте будет равен 64/4 = 16. Поэтому при работе с несколькими картами необходимо убедиться, что установленный размер батча может быть разделён на количество карт.

    Лицензия

    Этот учебник предоставлен PaddlePaddle и лицензирован под лицензией Apache-2.0.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/paddlepaddle-PALM.git
git@api.gitlife.ru:oschina-mirror/paddlepaddle-PALM.git
oschina-mirror
paddlepaddle-PALM
paddlepaddle-PALM
master