Как ускорить процесс создания модели OpenNLP
Я использую OpenNLP Token Name Finder для анализа неструктурированных данных, я создал корпус (обучающий набор) записей 4MM, но, поскольку я создаю модель из этого корпуса с использованием OpenNLP API в Eclipse, процесс занимает около 3 часов, что очень много времени. Модель строится на параметрах по умолчанию: итерация 100 и отсечка 5.
Итак, мой вопрос: как я могу ускорить этот процесс, как я могу сократить время, затрачиваемое на процесс построения модели.
Размер корпуса мог быть причиной этого, но он просто хотел узнать, сталкивался ли кто-то с такой проблемой, и если да, то как ее решить.
Пожалуйста, предоставьте некоторую подсказку.
Заранее спасибо!
2 ответа
Обычно первый подход к решению таких проблем состоит в том, чтобы разделить обучающие данные на несколько частей и позволить каждому создать собственную модель. После этого вы объединяете модели. Я не уверен, что это верно в этом случае (я не эксперт по OpenNLP), ниже есть другое решение. Кроме того, так как кажется, что APIOpenNLP предоставляет только однопоточные методы train (), я бы подал вопрос, запрашивающий многопоточный вариант.
Для медленной однопоточной операции два основных замедляющих фактора - это IO и CPU, и оба могут обрабатываться отдельно:
- IO - какой жесткий диск вы используете? Обычный (магнитный) или SSD? переход на SSD должен помочь.
- CPU - какой процессор вы используете? переход на более быстрый процессор поможет. Не обращайте внимания на количество ядер, так как здесь вам нужна грубая скорость.
Возможно, вы захотите воспользоваться вариантом, чтобы получить сервер с высокой загрузкой ЦП из веб-сервисов Amazon или Google Compute Engine и запустить обучение там - вы можете скачать модель позже. Оба предоставляют вам серверы с высокой загрузкой процессора, использующие процессоры Xeon (Sandy Bridge или Ivy Bridge) и локальное хранилище SSD.
Я думаю, что вы должны внести изменения, связанные с алгоритмом, прежде чем обновлять оборудование.
Уменьшение размера предложения
Убедитесь, что у вас нет ненужных длинных предложений в обучающем примере. Такие предложения не увеличивают производительность, но оказывают огромное влияние на вычисления. (Не уверен в порядке) Я обычно ставлю отсечение в 200 слов / предложение. Также обратите внимание на функции, это генераторы функций по умолчаниюtwo kinds of WindowFeatureGenerator with a default window size of only two
OutcomePriorFeatureGenerator
PreviousMapFeatureGenerator
BigramNameFeatureGenerator
SentenceFeatureGenerator
Эти генераторы функций генерируют следующие функции в данном предложении для слова: Robert
,
Sentence: Robert, creeley authored many books such as Life and Death, Echoes and Windows.
Features:
w=robert
n1w=creeley
n2w=authored
wc=ic
w&c=robert,ic
n1wc=lc
n1w&c=creeley,lc
n2wc=lc
n2w&c=authored,lc
def
pd=null
w,nw=Robert,creeley
wc,nc=ic,lc
S=begin
ic
Начальный капитал, lc
нижний регистр
Из этих особенностей S=begin
является единственным зависимым от предложения признаком, который отмечает, что Robert
произошло в начале предложения.
Моя цель - объяснить роль законченного предложения в обучении. На самом деле вы можете удалить SentenceFeatureGenerator и еще больше уменьшить размер предложения, чтобы разместить в нем только несколько слов в окне нужного объекта. Это будет работать так же хорошо.
Я уверен, что это окажет огромное влияние на сложность и очень мало на производительность.
Вы рассматривали выборку?
Как я уже описал выше, функции очень разреженного представления контекста. Может быть, у вас есть много предложений с дубликатами, как видно из генераторов функций. Попытайтесь обнаружить их и сделать выборку таким образом, чтобы представлять предложения с различными паттернами, т.е. должно быть невозможно написать только несколько регулярных выражений, которые соответствуют им всем. По моему опыту, обучающие образцы с различными шаблонами работали лучше, чем те, которые представляют только несколько шаблонов, хотя в первом было гораздо меньшее количество предложений. Выборка таким способом вообще не должна влиять на производительность модели.
Спасибо.