Implementasi CRF dalam python

Jawaban:

13

CRF ++ adalah pilihan yang populer secara umum, dan memiliki binding Python . CRFSuite juga memiliki binding yang didokumentasikan di sini , tetapi tampaknya tidak terlihat digunakan secara luas seperti CRF ++. Pada tulisan ini, kerangka kerja pembelajaran mesin tingkat tinggi seperti scikit-belajar kekurangan dukungan CRF (lihat permintaan tarik ini ).

pflaquerre
sumber
15

CRF ++ memiliki lebih banyak tautan masuk karena ini adalah perpustakaan yang lebih tua.
CRFSuite lebih unggul menurut saya.

Jika Anda mencari pengikat Python, CRFSuite juga lebih baik karena Anda bisa melatih model dengan Python, sedangkan di CRF ++ Anda hanya bisa menguji model yang ada di Python. (Itu adalah pemecah kesepakatan bagi saya.) CRFSuite juga dilengkapi dengan banyak contoh kode dalam Python, seperti NER, Chunking, dan penandaan POS.

Peter H
sumber
3
Bisakah Anda menguraikan cara menggunakan NER dan chunking yang disediakan oleh CRFSuite? Sepertinya ia mengharapkan data pelatihan dari format yang berbeda. Di mana saya dapat menemukan ini?
Legenda
14

Berikut beberapa pembungkus / implementasi lainnya:

  • https://github.com/adsva/python-wapiti - Pembungkus Python untuk http://wapiti.limsi.fr/ . Wapiti cepat; tolok ukur crfsuite tidak adil untuk wapiti karena wapiti dapat memparalelkan pelatihan L-BFGS ke beberapa core CPU, dan fitur ini tidak digunakan dalam benchmark. Masalah dengan Wapiti adalah bahwa itu tidak ditulis sebagai perpustakaan. Bungkusnya berusaha keras untuk mengatasinya, tetapi Anda masih bisa mendapatkan yang tak tertandingi exit(), dan saya telah melihat memori bocor selama pelatihan. Selain itu, wapiti terbatas dalam jenis fitur yang dapat diwakilinya, tetapi CRFsuite juga terbatas (dengan cara yang berbeda). Wapiti dibundel dalam bungkus, tidak perlu menginstalnya secara terpisah.
  • https://github.com/jakevdp/pyCRFsuite - pembungkus untuk crfsuite. Pembungkusnya cukup maju dan memungkinkan menggunakan matriks jarang scipy sebagai input, tetapi tampaknya ada beberapa masalah yang belum terselesaikan, adalah mungkin untuk mendapatkan segfault dalam beberapa kasus.
  • https://github.com/tpeng/python-crfsuite - pembungkus crfsuite lainnya. Yang ini agak sederhana; itu bundel crfsuite untuk instalasi lebih mudah dan dapat diinstal hanya dengan 'pip install python-crfsuite'.
  • https://github.com/larsmans/seqlearn menyediakan Streptured Perceptron yang dapat menjadi pengganti CRF dalam banyak kasus. Implementasi Perceptron terstruktur sangat cepat dalam seqlearn. Ada PR (tidak digabung pada saat penulisan) yang menambahkan dukungan CRF ke seqlearn; itu terlihat solid.
  • https://github.com/timvieira/crf - ini cukup mendasar dan tidak memiliki beberapa fitur penting, tetapi hanya membutuhkan numpy.

Saya akan merekomendasikan untuk menggunakan seqlearn jika Anda bisa, python-crfsuite jika Anda memerlukan algoritma pelatihan CRFsuite dan kecepatan pelatihan, pyCRFsuite jika Anda memerlukan integrasi CRFsuite yang lebih maju dan siap menghadapi beberapa ketidaknyamanan, python-wapiti jika Anda memerlukan algoritme atau fitur pelatihan Wapiti tidak tersedia di CRFsuite (seperti mengkondisikan pengamatan individu pada transisi) dan crf timvieira jika tidak ada cara untuk membuat kompiler C / C ++ bekerja, tetapi numpy prebuilt tersedia.

Mikhail Korobov
sumber
7

Saya pikir apa yang Anda cari adalah PyStruct .

PyStruct bertujuan untuk menjadi perpustakaan pembelajaran dan prediksi terstruktur yang mudah digunakan. Saat ini hanya mengimplementasikan metode max-margin dan perceptron, tetapi algoritma lain mungkin mengikuti.

Tujuan dari PyStruct adalah untuk menyediakan alat yang terdokumentasi dengan baik untuk para peneliti dan juga non-ahli untuk menggunakan algoritma prediksi terstruktur. Desain mencoba untuk tetap sedekat mungkin dengan antarmuka dan konvensi scikit-belajar.

PyStructdilengkapi dengan dokumentasi yang baik , dan secara aktif dikembangkan di github .

Di bawah ini adalah tabel yang membandingkan PyStructdengan CRFsuitedan paket lainnya, diekstraksi dari PyStruct - Prediksi terstruktur dalam Python :

Perbandingan paket perangkat lunak prediksi terstruktur

ostrokach
sumber