Implementación de CRF en python


Respuestas:



15

CRF ++ tiene más enlaces entrantes porque es una biblioteca más antigua.
CRFSuite es superior en mi opinión.

  • La afirmación del autor de CRFSuite de que es 20 veces más rápido que CRF ++ at training a model.
  • Requisitos menos rígidos para los datos de entrada.

Si está buscando enlaces de Python, CRFSuite también es mejor porque puede entrenar un modelo en Python, mientras que en CRF ++ solo puede probar modelos existentes en Python. (Ese fue el factor decisivo para mí). CRFSuite también viene con un montón de código de ejemplo en Python, como NER, Chunking y etiquetado POS.


3
¿Puedes dar más detalles sobre cómo usar el NER y Chunking proporcionado por CRFSuite? Parece que espera datos de entrenamiento de un formato diferente. ¿Dónde puedo encontrar esto?
Leyenda

14

Estas son algunas otras envolturas / implementaciones:

  • https://github.com/adsva/python-wapiti - Python wrapper para http://wapiti.limsi.fr/ . Wapiti es rápido; Los puntos de referencia de crfsuite no son justos para wapiti porque wapiti puede paralelizar el entrenamiento de L-BFGS con múltiples núcleos de CPU, y esta característica no se usó en puntos de referencia. El problema con Wapiti es que no está escrito como una biblioteca. El contenedor se esfuerza por superar eso, pero aún puede obtener una captura inadmisible exit(), y he visto pérdidas de memoria durante el entrenamiento. Además, wapiti está limitado en un tipo de características que puede representar, pero CRFsuite también está limitado (de una manera diferente). Wapiti está incluido en un contenedor, no es necesario instalarlo por separado.
  • https://github.com/jakevdp/pyCRFsuite : un contenedor para crfsuite. El reiniciador es bastante avanzado y permite usar matrices dispersas escamosas como entrada, pero parece que hay algunos problemas no resueltos, es posible obtener una falla predeterminada en algunos casos.
  • https://github.com/tpeng/python-crfsuite : otro contenedor de crfsuite. Este es bastante simple; incluye crfsuite para una instalación más fácil y se puede instalar solo con 'pip install python-crfsuite'.
  • https://github.com/larsmans/seqlearn proporciona Perceptron estructurado que puede ser un reemplazo para CRF en muchos casos. La implementación estructurada de Perceptron es muy rápida en seqlearn. Hay un PR (no fusionado en el momento de la escritura) que agrega soporte CRF a seqlearn; Se ve sólido.
  • https://github.com/timvieira/crf : es bastante básico y no tiene algunas características esenciales, pero solo requiere numpy.

Recomiendo usar seqlearn si puede, python-crfsuite si necesita algoritmos de entrenamiento CRFsuite y velocidad de entrenamiento, pyCRFsuite si necesita una integración CRFsuite más avanzada y listo para enfrentar algunos inconvenientes, python-wapiti si necesita algoritmos o características de entrenamiento Wapiti no está disponible en CRFsuite (como condicionar las observaciones individuales en las transiciones) y el crf de Timvieira si no hay forma de hacer que funcione un compilador C / C ++, pero hay un numpy preconstruido disponible.


7

Creo que lo que estás buscando es PyStruct .

PyStruct pretende ser una biblioteca de aprendizaje estructurado y predicción fácil de usar. Actualmente implementa solo métodos de margen máximo y un perceptrón, pero podrían seguir otros algoritmos.

El objetivo de PyStruct es proporcionar una herramienta bien documentada para que los investigadores y los no expertos utilicen algoritmos de predicción estructurados. El diseño trata de mantenerse lo más cerca posible de la interfaz y las convenciones de scikit-learn.

PyStructviene con buena documentación y se desarrolla activamente en github .

A continuación se muestra una tabla que compara PyStructcon CRFsuitey otros paquetes, extraídos de PyStruct - predicción estructurado en Python :

Comparison of structured prediction software packages

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.