Implémentation de CRF en python

32

Existe-t-il une implémentation populaire de champs aléatoires conditionnels en Python ?

Je n'arrive pas à en trouver qui soient largement utilisés et populaires!

garak
la source
Jetez un oeil à mon Github Repo ( ScikitCRF_NER ) pour l'implémentation en python de scikitCRF
Manikandan Thangavelu

Réponses:

13

CRF ++ est un choix populaire en général et possède des liaisons Python . CRFSuite a également des liaisons documentées ici , mais ne semble pas avoir eu une utilisation aussi répandue que CRF ++. Au moment d'écrire ces lignes, les frameworks d'apprentissage automatique de niveau supérieur tels que scikit-learn ne prennent pas en charge le format CRF (voir cette demande d'extraction ).

pflaquerre
la source
15

CRF ++ a plus de liens entrants car il s'agit d'une bibliothèque plus ancienne.
CRFSuite est supérieur à mon avis.

  • L'auteur de CRFSuite affirme qu'il est 20 fois plus rapide que CRF ++ lors de la formation d'un modèle.
  • Exigences moins rigides pour les données d'entrée.

Si vous recherchez des liaisons Python, CRFSuite est également préférable, car vous pouvez former un modèle en Python, tandis que dans CRF ++, vous ne pouvez tester que des modèles existants en Python. CRFSuite est également fourni avec un tas d'exemples de code en Python, tels que NER, Chunking et le marquage POS.

Peter H
la source
3
Pouvez-vous expliquer comment utiliser le NER et le Chunking fournis par CRFSuite? On dirait qu'il attend des données d'apprentissage d'un format différent. Où puis-je trouver ça?
Légende
14

Voici quelques autres wrappers / implémentations:

  • https://github.com/adsva/python-wapiti - Enveloppe Python pour http://wapiti.limsi.fr/ . Wapiti est rapide; Les benchmarks crfsuite ne sont pas adaptés à wapiti car wapiti peut paralléliser la formation L-BFGS à plusieurs cœurs de processeur et que cette fonctionnalité n’était pas utilisée dans les benchmarks. Le problème avec Wapiti est qu’il n’est pas écrit en tant que bibliothèque. Le wrapper s'efforce de surmonter ce problème, mais vous pouvez toujours obtenir un contenu impossible à capturer exit(), et j'ai constaté des fuites de mémoire au cours de la formation. En outre, wapiti est limité dans un type de fonctionnalités qu'il peut représenter, mais CRFsuite est également limité (d'une manière différente). Wapiti est fourni dans un emballage, inutile de l'installer séparément.
  • https://github.com/jakevdp/pyCRFsuite - un wrapper pour crfsuite. Le wrapper est assez avancé et permet d’utiliser des matrices scipy sparse, mais il semble y avoir des problèmes non résolus, il est possible d’obtenir une erreur de segmentation dans certains cas.
  • https://github.com/tpeng/python-crfsuite - un autre wrapper crfsuite. Celui-ci est plutôt simple; il regroupe crfsuite pour une installation plus facile et peut être installé simplement avec 'pip install python-crfsuite'.
  • https://github.com/larsmans/seqlearn fournit un Perceptron structuré qui peut remplacer le CRF dans de nombreux cas. La mise en œuvre de Perceptron structuré est très rapide dans seqlearn. Il existe un PR (non fusionné au moment de la rédaction) qui ajoute le support CRF à seqlearn; ça a l'air solide.
  • https://github.com/timvieira/crf - il est assez basique et ne présente pas certaines fonctionnalités essentielles, mais il ne nécessite que numpy.

Je vous recommande d'utiliser seqlearn si vous le pouvez, python-crfsuite si vous avez besoin d'algorithmes et de vitesse de formation CRFsuite, pyCRFsuite si vous avez besoin d'une intégration plus avancée de CRFsuite et prêt à faire face à certains inconvénients, python-wapiti si vous avez besoin d'algorithmes ou de fonctionnalités de formation Wapiti. non disponible dans CRFsuite (comme le conditionnement d'observations individuelles sur les transitions) et dans le fichier crf de timvieira s'il n'existe aucun moyen de faire fonctionner un compilateur C / C ++, mais un numpy pré-construit est disponible.

Mikhail Korobov
la source
7

Je pense que ce que vous recherchez, c'est PyStruct .

PyStruct se veut une bibliothèque d’apprentissage et de prédiction structurée facile à utiliser. Actuellement, il implémente uniquement des méthodes à marge maximale et un perceptron, mais d'autres algorithmes pourraient suivre.

PyStruct a pour objectif de fournir aux chercheurs, ainsi qu’aux non-spécialistes, un outil bien documenté leur permettant d’utiliser des algorithmes de prédiction structurés. La conception tente de rester aussi proche que possible de l'interface et des conventions de scikit-learn.

PyStructvient avec une bonne documentation , et il est activement développé sur github .

Vous trouverez ci-dessous un tableau comparatif PyStructavec CRFsuiteet d'autres packages, extrait de PyStruct - Prédiction structurée en Python :

Comparaison de progiciels de prédiction structurée

ostrokach
la source