По рабочей необходимости прочесываю все современные нейросетевые архитектуры и решения для выполнения sequence labeling. Сейчас боевое решение основано в том числе на старом добром CRFSuite через питоновскую обертку
python-crfsuite и при разметке номенклатурных данных достигает неплохой точности от 99.5% до 97.8% в зависимости от категории извлекаемых данных.
Среди архитектур, которые я пробовал, есть замечательная штука под названием LSTM+CRF.
Взял топ результатов поиска реализаций в гугле, попробовал каждую, написанную под Tensorflow, Theano или Keras, в частности:
https://github.com/Hironsan/anagohttps://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: