Реализация CRF в Python

32

Существует ли популярная реализация условных случайных полей в Python ?

Я не могу найти что-то, что широко используется и популярно!

Гарак
источник
Посмотрите на мою Github Repo ( ScikitCRF_NER ) для реализации питон scikitCRF
Manikandan Thangavelu

Ответы:

13

CRF ++ является популярным выбором в целом и имеет привязки Python . CRFSuite также имеет привязки документированные здесь , но , кажется, не видела , как много широкого применения в качестве CRF ++. На момент написания этой статьи в системах машинного обучения более высокого уровня, таких как scikit-learn, отсутствует поддержка CRF (см. Этот запрос на извлечение ).

pflaquerre
источник
15

CRF ++ имеет больше входящих ссылок, потому что это старая библиотека.
CRFSuite превосходит по моему мнению.

  • Заявление автора CRFSuite о том, что он обучает модель в 20 раз быстрее, чем CRF ++ .
  • Менее жесткие требования к входным данным.

Если вы ищете привязки Python, CRFSuite также лучше, потому что вы можете обучать модель в Python, в то время как в CRF ++ вы можете тестировать только существующие модели в Python. (Это стало для меня преградой.) CRFSuite также поставляется с набором примеров кода на Python, таких как NER, Chunking и POS-теги.

Питер Х
источник
3
Можете ли вы рассказать, как использовать NER и Chunking, предоставляемые CRFSuite? Похоже, он ожидает тренировочные данные другого формата. Где я могу найти это?
Легенда
14

Вот некоторые другие оболочки / реализации:

  • https://github.com/adsva/python-wapiti - Оболочка Python для http://wapiti.limsi.fr/ . Вапити быстр; Тесты crfsuite несправедливы по отношению к wapiti, потому что wapiti может распараллелить обучение L-BFGS для нескольких ядер ЦП, и эта функция не использовалась в тестах. Проблема с Wapiti заключается в том, что он не написан как библиотека. Оболочка изо всех сил пытается преодолеть это, но вы все равно можете получить uncatchable exit(), и я видел утечки памяти во время обучения. Кроме того, wapiti ограничен в типе функций, которые он может представлять, но CRFsuite также ограничен (по-другому). Wapiti поставляется в обертке, не нужно устанавливать ее отдельно.
  • https://github.com/jakevdp/pyCRFsuite - оболочка для crfsuite. Оболочка достаточно продвинута и позволяет использовать скудные разреженные матрицы в качестве входных данных, но кажется, что есть некоторые нерешенные проблемы, в некоторых случаях возможно получить ошибку segfault.
  • https://github.com/tpeng/python-crfsuite - еще одна оболочка crfsuite. Этот довольно прост; для облегчения установки он включает crfsuite и может быть установлен просто с помощью 'pip install python-crfsuite'.
  • https://github.com/larsmans/seqlearn предоставляет структурированный персептрон, который во многих случаях может заменить CRF. Реализация структурированного Perceptron в seqlearn очень быстрая. Существует PR (не объединенный на момент написания), который добавляет поддержку CRF в seqlearn; это выглядит солидно.
  • https://github.com/timvieira/crf - он довольно простой и не имеет каких-либо важных функций, но требует только клочья.

Я бы порекомендовал использовать seqlearn, если вы можете, python-crfsuite, если вам нужны алгоритмы обучения CRFsuite и скорость обучения, pyCRFsuite, если вам нужна более продвинутая интеграция CRFsuite и готов столкнуться с некоторыми неудобствами, python-wapiti, если вам нужны алгоритмы или функции обучения Wapiti. недоступно в CRFsuite (например, для подготовки отдельных наблюдений за переходами) и CRF Тимвиера, если нет способа заставить работать компилятор C / C ++, но имеется готовый numpy.

Михаил Коробов
источник
7

Я думаю, что вы ищете PyStruct .

PyStruct стремится быть простой в использовании библиотекой структурированного обучения и прогнозирования. В настоящее время он реализует только методы max-margin и персептрон, но могут следовать и другие алгоритмы.

Целью PyStruct является предоставление хорошо документированного инструмента для исследователей, а также неспециалистов, чтобы использовать алгоритмы структурированного прогнозирования. Дизайн старается держаться как можно ближе к интерфейсу и соглашениям scikit-learn.

PyStructпоставляется с хорошей документацией и активно разрабатывается на github .

Ниже приведена таблица сравнения PyStructс CRFsuiteдругими пакетами, извлеченная из PyStruct - Структурное предсказание в Python :

Сравнение программных пакетов для структурированного прогнозирования

ostrokach
источник