Implementierung von CRF in Python

Antworten:

13

CRF ++ ist im Allgemeinen eine beliebte Wahl und verfügt über Python-Bindungen . CRFSuite hat auch dokumentiert Bindungen hier , aber scheint nicht so viel weitverbreitete Verwendung als CRF ++ gesehen zu haben. Zum jetzigen Zeitpunkt fehlt den übergeordneten Frameworks für maschinelles Lernen wie Scikit-Learn die CRF-Unterstützung (siehe diese Pull-Anforderung ).

pflaquerre
quelle
15

CRF ++ hat mehr eingehende Links, da es sich um eine ältere Bibliothek handelt.
CRFSuite ist meiner Meinung nach überlegen.

  • CRFSuites Behauptung des Autors, dass es beim Trainieren eines Modells 20x schneller ist als CRF ++ .
  • Weniger strenge Anforderungen an die Eingabedaten.

Wenn Sie nach Python-Bindungen suchen, ist CRFSuite auch besser, da Sie ein Modell in Python trainieren können, während Sie in CRF ++ nur vorhandene Modelle in Python testen können. (Das war der Deal Breaker für mich.) CRFSuite enthält auch eine Reihe von Beispielcode in Python, wie NER, Chunking und POS-Tagging.

Peter H
quelle
3
Können Sie erläutern, wie die von CRFSuite bereitgestellten NER und Chunking verwendet werden? Es sieht so aus, als würde es Trainingsdaten in einem anderen Format erwarten. Wo kann ich das finden?
Legende
14

Hier sind einige andere Wrapper / Implementierungen:

  • https://github.com/adsva/python-wapiti - Python-Wrapper für http://wapiti.limsi.fr/ . Wapiti ist schnell; Crfsuite-Benchmarks sind nicht fair gegenüber Wapiti, da Wapiti das L-BFGS-Training auf mehrere CPU-Kerne parallelisieren kann, und diese Funktion wurde in Benchmarks nicht verwendet. Das Problem mit Wapiti ist, dass es nicht als Bibliothek geschrieben ist. Der Wrapper bemüht sich, das zu überwinden, aber Sie können immer noch einen Unfang bekommen exit(), und ich habe während des Trainings Speicherlecks gesehen. Außerdem ist Wapiti in einer Art von Funktionen eingeschränkt, die es darstellen kann, CRFsuite ist jedoch auch eingeschränkt (auf eine andere Art und Weise). Wapiti ist in einem Wrapper enthalten und muss nicht separat installiert werden.
  • https://github.com/jakevdp/pyCRFsuite - ein Wrapper für crfsuite. Der Wrapper ist weit fortgeschritten und erlaubt die Verwendung von spärlichen Scipy-Matrizen als Eingabe, aber es scheint einige ungelöste Probleme zu geben, in einigen Fällen ist es möglich, einen Segfault zu bekommen.
  • https://github.com/tpeng/python-crfsuite - ein weiterer Crfsuite-Wrapper. Dieser ist ziemlich einfach; crfsuite wird für eine einfachere Installation gebündelt und kann einfach mit 'pip install python-crfsuite' installiert werden.
  • https://github.com/larsmans/seqlearn bietet strukturiertes Perceptron an, das in vielen Fällen ein Ersatz für CNI sein kann. Strukturierte Perceptron-Implementierung ist in seqlearn sehr schnell. Es gibt eine PR (die zum Zeitpunkt des Schreibens noch nicht zusammengeführt wurde), die das seqlearn um CRF-Unterstützung erweitert. es sieht solide aus.
  • https://github.com/timvieira/crf - es ist ziemlich einfach und hat einige wesentliche Funktionen nicht, aber es erfordert nur numpy.

Ich würde empfehlen, nach Möglichkeit seqlearn zu verwenden, python-crfsuite, wenn Sie CRFsuite-Trainingsalgorithmen und Trainingsgeschwindigkeit benötigen, pyCRFsuite, wenn Sie eine erweiterte CRFsuite-Integration benötigen und bereit sind, einige Unannehmlichkeiten zu bewältigen, python-wapiti, wenn Sie Wapiti-Trainingsalgorithmen oder -Funktionen benötigen Nicht verfügbar in CRFsuite (wie das Konditionieren einzelner Beobachtungen auf Übergängen) und in timvieiras crf, wenn es keine Möglichkeit gibt, einen C / C ++ - Compiler zum Laufen zu bringen, aber eine vorgefertigte Zahl verfügbar ist.

Mikhail Korobov
quelle
7

Ich denke, was Sie suchen, ist PyStruct .

PyStruct zielt darauf ab, eine benutzerfreundliche strukturierte Lern- und Vorhersagebibliothek zu sein. Gegenwärtig werden nur Max-Margin-Methoden und ein Perzeptron implementiert, andere Algorithmen könnten jedoch folgen.

Das Ziel von PyStruct ist es, Forschern und Laien ein gut dokumentiertes Tool zur Verfügung zu stellen, mit dem sie strukturierte Vorhersagealgorithmen verwenden können. Das Design versucht so nah wie möglich an der Oberfläche und den Konventionen von scikit-learn zu bleiben.

PyStructkommt mit einer guten Dokumentation , und es wird aktiv auf Github entwickelt .

Nachfolgend finden Sie eine Tabelle zum Vergleich PyStructmit CRFsuiteund anderen Paketen, die aus PyStruct - Structured Prediction in Python extrahiert wurden :

Vergleich von Softwarepaketen zur strukturierten Vorhersage

ostrokach
quelle