Простое обучение с использованием многопроцессорной обработки - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь обучить пользовательскую модель, используя spacy. В настоящее время у меня есть более 2 тыс. Записей для обучения, и каждый текст состоит из более чем 100 слов, по крайней мере, более 2 объектов для каждой записи. Я запустил его за 50 итераций. Тренировка занимает больше 2 часов.

Есть ли способ обучения с использованием многопроцессорной обработки? Это улучшит время тренировки?

1 Ответ

1 голос
/ 28 февраля 2020

Короткий ответ ... вероятно, нет

Маловероятно, что вы сможете заставить это работать по нескольким причинам:

  • Обучаемая сеть выполняет итеративную оптимизация
    • Не зная результатов предыдущей партии, следующая партия не может быть оптимизирована
  • Существует только одна сеть
    • Любая параллельная тренировка создавайте расходящиеся сети ...
    • ... которые вам затем придется каким-то образом объединить

Длинный ответ ... есть что-то, что вы можете сделать!

Однако есть несколько вещей, которые вы можете попробовать:

  • Получить Обучение GPU работать, если у вас нет
    • Это боль , но может немного ускорить время обучения
    • Это значительно сократит использование ЦП, однако
  • Попробуйте использовать инструменты командной строки spaCy
    • Формат JSON - трудная задача, но ...
    • Преимущество Вы получите хорошо оптимизированный алгоритм, написанный экспертами
    • Он может иметь значительно более быстрые / лучшие результаты, чем методы, созданные вручную
  • Если у вас разные сущности, вы можете обучить несколько специализированных сетей
    • Каждая из них может обучаться быстрее
    • Эти сети могут быть созданы параллельно друг другу (если позволяет процессор)
  • Оптимизация эксперимента python и с параметрами
    • Скорость и качество очень зависят от настройки параметров (размер партии, повторы и т. Д. c.)
    • Ваша реализация python, предоставляющая пакеты (убедитесь, что это на высшем уровне)
  • Предварительная обработка примеров
    • Для извлечения spaCy NER требуется удивительно небольшое количество контекста для работы
    • Вы можете попробовать предварительно обработать ваши фрагменты, чтобы они содержали 10 или 15 окружающих слов, и посмотреть, как ваше время и точность показывают
* 10 82 * Заключительные мысли ... когда ваша сеть «готова»?

Я обучил сети со многими сущностями на тысячах примеров длиннее, чем указано, и длинных и коротких, иногда это занимает время.

Однако 90% прироста производительности фиксируется в первые 10% обучения.

  • Вам нужно подождать 50 партий?
  • ... или Вы ищете определенный уровень производительности c?

Если вы отслеживаете качество каждые X пакетов, вы можете выручить, когда достигнете заранее определенного уровня качества.

Вы также можете сохранить старые сети, которые вы обучили на предыдущих партиях, а затем "пополнить их" новым обучением, чтобы достичь уровня производительности, которого вы не могли, начав с нуля в то же время.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...