#nlp #stanford-nlp #stanza
#nlp #stanford-nlp #stanza
Вопрос:
Я использую Stanza для получения токенов, лемм и тегов из документов на нескольких языках для целей приложения для изучения языков. Это означает, что мне нужно хранить и загружать много моделей Stanza (по умолчанию) для разных языков.
Моя главная проблема прямо сейчас заключается в том, что если я хочу загрузить все эти модели, требования к памяти слишком велики для моих ресурсов. В настоящее время я развертываю веб-API под управлением Stanza NLP на AWS. Я хочу свести к минимуму затраты на инфраструктуру.
Одним из возможных решений является загрузка одной модели за раз, когда мне нужно запустить мой скрипт. Я предполагаю, что это означает, что каждый раз будут возникать дополнительные накладные расходы для загрузки модели в память.
Еще одна вещь, которую я попробовал, это просто использовать процессоры, которые мне действительно нужны, что уменьшает объем памяти, но не настолько сильно.
Я попытался просмотреть открытые и закрытые проблемы на Github и Google, но многого не нашел.
Какие еще возможные решения существуют?
Комментарии:
1. Просто для ясности, вы хотите запустить конвейер Stanza на мобильном устройстве и заставить модели помещаться в память? Вы ориентируетесь на iOS или Android?
2. Эй, @StanfordNLPHelp возможно, я ввел вас в заблуждение, сказав «приложение» 🙂 Виноват! Это веб-приложение. Мой код выполняется в скрипте Python.
Ответ №1:
Суть в том, что модель для языка должна находиться в памяти во время выполнения, поэтому тем или иным способом вам нужно уменьшить размер модели или разрешить хранение моделей на диске. Я могу предложить несколько советов по уменьшению размеров моделей, хотя имейте в виду, что уменьшение размера вашей модели, вероятно, приведет к снижению точности.
Вы могли бы изучить процентное распределение языковых запросов и сохранить часто запрашиваемые языки в памяти и обращаться к диску только для более редких языковых запросов.
Наиболее эффективной стратегией уменьшения размера модели является уменьшение размера словаря. Возможно, вы могли бы сократить словарный запас еще меньше и при этом получить аналогичную точность. Мы провели некоторую оптимизацию на этом фронте, но может быть больше возможностей сократить размер модели.
Вы могли бы поэкспериментировать с меньшим размером модели и встраиванием слов и, возможно, получите лишь небольшое снижение точности, мы не очень активно экспериментировали с различными размерами моделей, чтобы увидеть, насколько точность вы теряете. Это означало бы переподготовку модели и просто уменьшение размера встраивания и параметров размера модели.
Я мало что знаю об этом, но существует стратегия пометки кучи данных вашей большой точной моделью, а затем обучения модели меньшего размера для имитации большой модели. Я полагаю, что это называется «дистилляцией знаний».
В аналогичном направлении вы могли бы пометить кучу данных с помощью Stanza, а затем обучить модель CoreNLP (которая, я думаю, будет иметь меньший объем памяти).).
В целом, я думаю, что проще всего было бы переобучить модель с меньшим размером словаря. Мы Я думаю, что в настоящее время в нем 250 000 слов, и сокращение до 10 000 или 50 000 уменьшит размер модели, но может не слишком сильно повлиять на точность.
К сожалению, я не думаю, что вы можете выбрать волшебный вариант, который просто решит эту проблему, вам придется переобучить модели и посмотреть, какой точностью вы готовы пожертвовать ради меньшего объема памяти.
Комментарии:
1. Можно ли загружать модели с помощью mmap? Это ускорило бы загрузку и минимизировало использование памяти.