Implementazione di CRF in python


Risposte:


13

CRF ++ è una scelta popolare in generale e ha collegamenti Python . CRFSuite ha anche i collegamenti documentati qui , ma non sembra aver visto un uso così diffuso come CRF ++. Al momento della stesura di questo documento, i framework di apprendimento automatico di livello superiore come scikit-learn mancano del supporto CRF (vedere questa richiesta pull ).


15

CRF ++ ha più collegamenti in entrata perché è una libreria più vecchia.
CRFSuite è superiore secondo me.

Se stai cercando i collegamenti Python, CRFSuite è anche meglio perché puoi addestrare un modello in Python, mentre in CRF ++ puoi testare solo i modelli esistenti in Python. (Questo è stato il punto di rottura per me.) CRFSuite include anche un sacco di codice di esempio in Python, come NER, Chunking e POS.


3
Puoi approfondire come utilizzare NER e Chunking forniti da CRFSuite? Sembra che si aspetti dati di allenamento di un formato diverso. Dove posso trovarlo?
Legenda,

14

Ecco alcuni altri wrapper / implementazioni:

  • https://github.com/adsva/python-wapiti - Wrapper Python per http://wapiti.limsi.fr/ . Wapiti è veloce; I benchmark crfsuite non sono equi con wapiti perché wapiti può parallelizzare l'allenamento L-BFGS con più core della CPU e questa funzione non è stata utilizzata nei benchmark. Il problema con Wapiti è che non è scritto come una libreria. Il wrapper si impegna a fondo per superarlo, ma è ancora possibile ottenere un valore irraggiungibile exit()e durante l'allenamento ho riscontrato perdite di memoria. Inoltre, wapiti è limitato in un tipo di funzionalità che può rappresentare, ma anche CRFsuite è limitato (in un modo diverso). Wapiti è raggruppato in un wrapper, non è necessario installarlo separatamente.
  • https://github.com/jakevdp/pyCRFsuite - un wrapper per crfsuite. Il wrapper è piuttosto avanzato e consente di utilizzare matrici sparse come input, ma sembra che ci siano alcuni problemi irrisolti, in alcuni casi è possibile ottenere un segfault.
  • https://github.com/tpeng/python-crfsuite - un altro wrapper crfsuite. Questo è piuttosto semplice; raggruppa crfsuite per un'installazione più semplice e può essere installato solo con 'pip install python-crfsuite'.
  • https://github.com/larsmans/seqlearn fornisce Perceptron strutturato che può essere un sostituto per CRF in molti casi. L'implementazione strutturata di Perceptron è molto veloce in seqlearn. Esiste un PR (non unito al momento della stesura) che aggiunge il supporto CRF a seqlearn; sembra solido.
  • https://github.com/timvieira/crf - è abbastanza semplice e non ha alcune funzionalità essenziali, ma richiede solo intorpidimento.

Ti consiglio di usare seqlearn se puoi, python-crfsuite se hai bisogno di algoritmi di allenamento CRFsuite e velocità di allenamento, pyCRFsuite se hai bisogno di un'integrazione CRFsuite più avanzata e pronto ad affrontare alcuni inconvenienti, python-wapiti se hai bisogno di algoritmi o funzionalità di allenamento Wapiti non disponibile in CRFsuite (come condizionare le singole osservazioni sulle transizioni) e crf di timvieira se non c'è modo di far funzionare un compilatore C / C ++, ma è disponibile un numpy predefinito.


7

Penso che quello che stai cercando sia PyStruct .

PyStruct mira ad essere una libreria di apprendimento e previsione strutturata di facile utilizzo. Attualmente implementa solo metodi con margine massimo e un percettrone, ma potrebbero seguire altri algoritmi.

L'obiettivo di PyStruct è di fornire uno strumento ben documentato ai ricercatori e ai non esperti per utilizzare algoritmi di predizione strutturati. Il design cerca di rimanere il più vicino possibile all'interfaccia e alle convenzioni di scikit-learn.

PyStructviene fornito con una buona documentazione ed è attivamente sviluppato su github .

Di seguito è una tabella che confronta PyStructcon CRFsuitee altri pacchetti, estratti da PyStruct - Previsione strutturata in Python :

Confronto di pacchetti software di previsione strutturata

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.