Война с keras.contrib.CRF, Theano и Tensorflow

Jan 25, 2018 18:40

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

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

Взял топ результатов поиска реализаций в гугле, попробовал каждую, написанную под Tensorflow, Theano или Keras, в частности:

https://github.com/Hironsan/anago
https://github.com/LiyuanLucasLiu/LM-LSTM-CRF
и еще парочку. В силу разных причин все они не захотели работать, я даже запостил соответствующих issue в одну из библиотек.

Наконец, keras_contrib.CRF. С этой реализацией тоже пока не выгорело, причем на разбирательство уже потрачено уйма рабочего времени. Прежде всего, как выяснилось, реализация не работает с актуальной версией Keras. Но можно откатиться на Keras 2.0.6 и проблема решается.
Но фактически обучение с KERAS_BACKEND=theano не идет, то есть видим вот такую безрадостную картинку:



Среди открытых багов есть похожий CRF is broken with Theano backend , но запустить с Tensorflow 1.4.0 у меня пока тоже не получается - вылезает ошибка с размерностью тензоров.

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


keras-contrib, tensorflow, lstm-crf, theano, keras, python

Previous post Next post
Up