?

Log in

No account? Create an account

Компьютерная лингвистика

Новостная лента www.solarix.ru

Entries by tag: keras

Сравнение оптимизаторов "Follow The Moving Leader" и "Nesterov moment + Adam"
kelijah
Для задачи посимвольной генерации теста ответа в чатботе сравниваю два алгоритма оптимизации:

1) штатный keras.optimizers.nadam, описанный тут http://cs229.stanford.edu/proj2015/054_report.pdf
2) FTML из https://github.com/keras-team/keras-contrib/blob/master/keras_contrib/optimizers/ftml.py, описанный тут.

Сравнивается значение per instance accuracy, достигаемое при обучении нейросетки, то есть успехом считается генерация всей цепочки символов ответа без единой ошибки.
Read more...Collapse )

Сравнение оптимизаторов nadam и rmsprop с помощью F-теста
kelijah
Еще одна серия экспериментов с моделью для векторизации символьного представления слов.
Сравним две штатных реализации оптимизаторов в Keras - rmsprop и nadam. Фиксируем batch_size значением 250, делаем несколько запусков обучения модели для каждого варианта оптимизатора (см. строку 356 в файле wordchar2vector_trainer.py).
ANOVA для сравнения алгоритмов оптимизации...Collapse )

Theano 1.0.1 с cuda 9.0 поломан?
kelijah
Что-то с новым релизом Theano 1.0.1 нечисто. По крайней мере при работе с Cuda 9.0 под убунтой и вторым питоном.

Уже на второй модели вижу, что сетка отказывается обучаться - тупо loss на валидации стоит на одном значении с точностью до 4го знака несколько эпох подряд и баста, привет early stopping.

Версии:
Read more...Collapse )

При этом на этой же машине последний Tensorflow дает замечательные результаты для той же самой модели при запуске с KERAS_BACKEND=tensorflow. Хотя битва с tf у меня была длительная из-за того, что Cuda 9.1 не поддерживается, так что пришлось выбирать между компиляцией TF из исходников и даунгрейдом до cuda 9.0, я выбрал cuda 9.0 и не ошибся. А теперь точит червь сомнения насчет Theano.

Визуализация влияния batch_size на качество модели wordchar2vector
kelijah
Сама модель описана тут, это просто seq2seq автоэнкодер для цепочек символов. Реализующий ее на Python+Keras код лежит тут.
Тетрадка для визуализации доступна по этой ссылке.
В ходе обучения в файле сохраняем instance accuracy - долю слов, которые точно восстановлены декодером. Эта метрика показана на графиках.
На графиках видно, что есть некий оптимум в размере батча, и вообще batch_size для данной модели влияет очень сильно:Read more...Collapse )

Colaboratory - бесплатно, медленно, сгодится для экспериментов с подбором гиперпараметров ML моделей
kelijah
За три дня экпериментов с Colaboratory лично убедился что:

1) Заливка датасетов туда и обратно немного напрягает. 400-метровый CSV с датасетом скачивается внутрь контейнера из google drive минут 5. Воспользовался рецептом, описанным в официальном howto здесь, то есть залил файлик в свой GD, определил его file ID через расшаривание по ссылке, скачал через googleapiclient и так далее. Потом перекачал скачанные байты во временный файл внутри контейнера. В общем, минут на 15-20, если делать все второй раз после превращения контейнера в тыкву по истечении 12 часов.

2) Для модели, размечающей данные с помощью рекуррентной сеточки с использованием keras_contrib.layers.CRF, обучение на Tesla K80 в Colaboratory идет медленнее примерно в 2 раза в сравнении с железным 4-ядерным i7-4790 4 ГГц. Сравнил по времени, затраченному на одну эпоху обучения модели. Спасибо tensorflow, модель на CPU съедает все четыре ядра почти на 100%.

3) Определенное удобство - возможность оставить модель на ночь обучаться, например для подбора гиперпараметров или архитектуры. Тут бесплатному GPU в зубы не смотрим, берем что есть.

Кривые обучения для модели wordchar2vector
kelijah
Модель для чатбота была описана в этом посте. С того времени в код были добавлены новые архитектуры нейросети, доработан механизм задания параметров при запуске из командной строки и расширена документация - теперь все детально расписано тут https://github.com/Koziev/chatbot/blob/master/PyModels/trainers/README.wordchar2vector.md.

Далее - сравнение разных архитектур нейросети в ходе обучения.
Read more...Collapse )

Три варианта рекуррентно-сверточных сетей в задаче определения длины ответа
kelijah
(предыдущий пост с описанием моделей чат-бота тут: https://kelijah.livejournal.com/232313.html)

Код для тренировки вспомогательной модели, которая определяет число слов ответа для заданной предпосылки и вопроса выложен тут https://github.com/Koziev/chatbot/blob/master/PyModels/nn_answer_length.py.
Read more...Collapse )

Тренировка и использование модели посимвольного встраивания слов для чатбота
kelijah
(Начало тут https://kelijah.livejournal.com/231141.html)

Часть моделей чат-бота при работе используют разные способы векторизации слов. Один из использованных алгоритмов векторизации заключается в упаковке посимвольного представления слова с помощью сжимающего рекуррентного автоэнкодера:
Подробности реализации и скриншоты...Collapse )

Предварительное сравнение точности CRFSuite и LSTM-CRF из keras.contrib
kelijah
Задача - анализ строковых данных из номенклатурного справочника.
Данные представляются цепочкой символов, разбивка на слова невозможна из-за специфики задачи. Каждому символу модель должна присвоить флаг в зависимости от того, относится ли символ к извлекаемой сущности. Сравниваемые модели используют одинаковый датасет с идентичной разбивкой на train/val.

1) Решение на базе классического NLP алгоритма на базе CRF использует реализацию CRFSuite и вручную выбранные фичи. Обучение длится примерно 20 часов. Достигаемая точность per char равна примерно 0.9947

2) Решение на базе keras-contrib.CRF. Никаких ручных фич нет, на вход bidir LSTM слоя подаются векторы исходных символов, настраиваемые через Embedding (см. референсную реализацию, я добавил туда лишь EarlyStopping и вычисление per instance accuracy). Обучение на GPU + Tensorflow идет примерно 1 час. Достигаемая точность per char равна 0.9988

Война с keras.contrib.CRF, Theano и Tensorflow
kelijah
По рабочей необходимости прочесываю все современные нейросетевые архитектуры и решения для выполнения sequence labeling. Сейчас боевое решение основано в том числе на старом добром CRFSuite через питоновскую обертку python-crfsuite и при разметке номенклатурных данных достигает неплохой точности от 99.5% до 97.8% в зависимости от категории извлекаемых данных.

Среди архитектур, которые я пробовал, есть замечательная штука под названием LSTM+CRF.
Read more...Collapse )

PS: под Ubuntu 16.04 удалось запустить нормальное обучение в варианте с Keras==2.0.6 и текущим Tensorflow. Вот такая она, цена поддержки разных бэкэндов в Keras:
Read more...Collapse )