Implementacja CRF w Pythonie

Odpowiedzi:

15

CRF ++ ma więcej linków przychodzących, ponieważ jest to starsza biblioteka.
CRFSuite jest moim zdaniem lepszy.

  • Twierdzenie autora CRFSuite, że szkolenie modelu jest 20 razy szybsze niż CRF ++ .
  • Mniej rygorystyczne wymagania dotyczące danych wejściowych.

Jeśli szukasz powiązań w Pythonie, CRFSuite jest również lepszy, ponieważ możesz trenować model w Pythonie, podczas gdy w CRF ++ możesz testować tylko istniejące modele w Pythonie. (To było dla mnie przełamanie umowy.) CRFSuite zawiera także kilka przykładowych kodów w Pythonie, takich jak NER, Chunking i tagowanie POS.

Peter H.
źródło
3
Czy możesz wyjaśnić, jak korzystać z NER i dzielenia udostępnianych przez CRFSuite? Wygląda na to, że oczekuje danych szkoleniowych w innym formacie. Gdzie mogę to znaleźć?
Legenda,
14

Oto kilka innych opakowań / implementacji:

  • https://github.com/adsva/python-wapiti - otoki Pythona dla http://wapiti.limsi.fr/ . Wapiti jest szybki; testy porównawcze crfsuite nie są uczciwe wobec wapiti, ponieważ wapiti może równolegle trenować L-BFGS z wieloma rdzeniami procesora, a ta funkcja nie była używana w testach porównawczych. Problem z Wapiti polega na tym, że nie jest napisany jako biblioteka. Owijarka stara się to przezwyciężyć, ale wciąż możesz uzyskać coś nie do zdobycia exit(), a podczas treningu widziałem przecieki pamięci. Ponadto, wapiti jest ograniczone w rodzaju funkcji, które może reprezentować, ale CRFsuite jest również ograniczony (w inny sposób). Wapiti jest pakowany w opakowanie, nie trzeba instalować go osobno.
  • https://github.com/jakevdp/pyCRFsuite - opakowanie na crfsuite. Owijarka jest dość zaawansowana i pozwala na użycie scipy rzadkich macierzy jako danych wejściowych, ale wydaje się, że istnieją pewne nierozwiązane problemy, w niektórych przypadkach można uzyskać awarię.
  • https://github.com/tpeng/python-crfsuite - kolejne opakowanie crfsuite. Ten jest raczej prosty; zawiera pakiet crfsuite dla łatwiejszej instalacji i może być zainstalowany tylko za pomocą „pip install python-crfsuite”.
  • https://github.com/larsmans/seqlearn zapewnia Strukturalny Perceptron, który w wielu przypadkach może zastępować CRF. Strukturalne wdrożenie Perceptronu jest bardzo szybkie w seqlearn. Istnieje PR (niepołączony w momencie pisania), który dodaje obsługę CRF do seqlearn; wygląda solidnie.
  • https://github.com/timvieira/crf - jest dość prosty i nie ma niektórych istotnych funkcji, ale wymaga tylko numpy.

Polecam użycie seqlearn, jeśli możesz, python-crfsuite, jeśli potrzebujesz algorytmów szkoleniowych CRFsuite i prędkości treningu, pyCRFsuite, jeśli potrzebujesz bardziej zaawansowanej integracji CRFsuite i jesteś gotowy na pewne niedogodności, python-wapiti, jeśli potrzebujesz algorytmów szkoleniowych lub funkcji Wapiti niedostępne w CRFsuite (np. warunkowanie indywidualnych obserwacji przejść) i CRF timvieira, jeśli nie ma sposobu na uruchomienie kompilatora C / C ++, ale dostępna jest wstępnie skonfigurowana numpy.

Michaił Korobow
źródło
7

Myślę, że szukasz PyStruct .

PyStruct ma być łatwą w użyciu, ustrukturyzowaną biblioteką do uczenia się i prognozowania. Obecnie implementuje tylko metody maksymalnego marginesu i perceptron, ale mogą wystąpić inne algorytmy.

Celem PyStruct jest dostarczenie dobrze udokumentowanego narzędzia zarówno dla naukowców, jak i osób niebędących ekspertami, do korzystania ze strukturalnych algorytmów prognozowania. Projekt stara się być jak najbliżej interfejsu i konwencji scikit-learn.

PyStructpochodzi z dobrą dokumentacją i jest aktywnie rozwijany na github .

Poniżej znajduje się tabela porównująca PyStructz CRFsuiteinnymi pakietami i wyodrębniona z PyStruct - Structured prediction in Python :

Porównanie pakietów oprogramowania do prognozowania strukturalnego

ostrokach
źródło