8 perpustakaan Python yang bagus untuk pemrosesan bahasa alami

Pemrosesan bahasa alami, atau singkatnya NLP, paling baik dideskripsikan sebagai "AI untuk ucapan dan teks". Keajaiban di balik perintah suara, terjemahan ucapan dan teks, analisis sentimen, ringkasan teks, dan banyak aplikasi dan analisis linguistik lainnya, pemrosesan bahasa alami telah ditingkatkan secara dramatis melalui pembelajaran mendalam.

Bahasa Python menyediakan antarmuka yang nyaman untuk semua jenis pembelajaran mesin termasuk NLP. Faktanya, ada rasa malu akan kekayaan NLP yang dapat dipilih dalam ekosistem Python. Dalam artikel ini kita akan menjelajahi setiap pustaka NLP yang tersedia untuk Python — kasus penggunaannya, kekuatannya, kelemahannya, dan tingkat popularitas umum mereka.

Perhatikan bahwa beberapa pustaka ini menyediakan versi tingkat yang lebih tinggi dari fungsionalitas yang sama yang diekspos oleh orang lain, membuat fungsionalitas tersebut lebih mudah digunakan dengan mengorbankan beberapa presisi atau kinerja. Anda akan ingin memilih perpustakaan yang sesuai dengan tingkat keahlian Anda dan sifat proyek.

CoreNLP

Pustaka CoreNLP - produk dari Universitas Stanford - dibangun untuk menjadi solusi pemrosesan bahasa alami yang siap produksi, yang mampu memberikan prediksi dan analisis NLP dalam skala besar. CoreNLP ditulis di Java, tetapi beberapa paket Python dan API tersedia untuk itu, termasuk pustaka NLP Python asli yang disebut StanfordNLP.

CoreNLP mencakup berbagai alat bahasa — penandaan tata bahasa, pengenalan entitas bernama, penguraian, analisis sentimen, dan banyak lagi. Ini dirancang untuk menjadi bahasa manusia agnostik, dan saat ini mendukung bahasa Arab, Cina, Prancis, Jerman, dan Spanyol selain bahasa Inggris (dengan dukungan Rusia, Swedia, dan Denmark tersedia dari pihak ketiga). CoreNLP juga menyertakan server API web, cara nyaman untuk menyajikan prediksi tanpa terlalu banyak pekerjaan tambahan.

Tempat termudah untuk memulai dengan pembungkus Python CoreNLP adalah StanfordNLP, implementasi referensi yang dibuat oleh Stanford NLP Group. Selain terdokumentasi dengan baik, StanfordNLP juga dipelihara secara teratur; banyak pustaka Python lain untuk CoreNLP belum diperbarui dalam beberapa waktu.

CoreNLP juga mendukung penggunaan NLTK, pustaka utama Python NLP yang dibahas di bawah ini. Mulai versi 3.2.3, NLTK menyertakan antarmuka ke CoreNLP di parsernya. Pastikan untuk menggunakan API yang benar.

Kelemahan yang jelas dari CoreNLP adalah Anda akan membutuhkan pengetahuan tentang Java untuk menjalankannya, tetapi tidak ada yang tidak dapat dicapai dengan membaca dokumentasi dengan cermat. Rintangan lainnya adalah lisensi CoreNLP. Seluruh toolkit dilisensikan di bawah GPLv3, yang berarti setiap penggunaan dalam perangkat lunak berpemilik yang Anda distribusikan kepada orang lain akan memerlukan lisensi komersial.

Gensim

Gensim hanya melakukan dua hal, tetapi melakukannya dengan sangat baik. Fokusnya adalah semantik statistik — menganalisis dokumen untuk strukturnya, kemudian menilai dokumen lain berdasarkan kesamaannya.

Gensim dapat bekerja dengan kumpulan teks yang sangat besar dengan mengalirkan dokumen ke mesin analisisnya dan melakukan pembelajaran tanpa pengawasan padanya secara bertahap. Itu dapat membuat beberapa jenis model, masing-masing cocok untuk skenario yang berbeda: Word2Vec, Doc2Vec, FastText, dan Latent Dirichlet Allocation.

Dokumentasi rinci Gensim mencakup tutorial dan panduan cara kerja yang menjelaskan konsep-konsep utama dan mengilustrasikannya dengan contoh langsung. Resep umum juga tersedia di repo Gensim GitHub.

NLTK

Natural Language Toolkit, atau singkatnya NLTK, adalah salah satu pustaka pemrosesan bahasa alami Python yang paling terkenal dan paling kuat. Banyak corpora (kumpulan data) dan model terlatih tersedia untuk digunakan dengan NLTK, jadi Anda dapat langsung mulai bereksperimen dengan NLTK.

Seperti yang dinyatakan dalam dokumentasi, NLTK menyediakan berbagai alat untuk bekerja dengan teks: "klasifikasi, tokenisasi, stemming, pemberian tag, penguraian, dan penalaran semantik". Itu juga dapat bekerja dengan beberapa alat pihak ketiga untuk meningkatkan fungsinya.

Perlu diingat bahwa NLTK dibuat oleh dan untuk audiens penelitian akademis. Itu tidak dirancang untuk melayani model NLP di lingkungan produksi. Dokumentasi juga agak jarang; bahkan petunjuknya tipis. Juga, tidak ada biner 64-bit; Anda harus menginstal Python edisi 32-bit untuk menggunakannya. Terakhir, NLTK juga bukan perpustakaan tercepat, tetapi dapat dipercepat dengan pemrosesan paralel.

Jika Anda bertekad untuk memanfaatkan apa yang ada di dalam NLTK, Anda dapat memulai dengan TextBlob (dibahas di bawah).

Pola

Jika yang perlu Anda lakukan hanyalah mengikis situs web populer dan menganalisis apa yang Anda temukan, raih Pattern. Pustaka pemrosesan bahasa alami ini jauh lebih kecil dan lebih sempit daripada pustaka lain yang tercakup di sini, tetapi itu juga berarti pustaka ini difokuskan untuk melakukan satu pekerjaan umum dengan sangat baik.

Pattern hadir dengan built-in untuk menyalin sejumlah layanan dan sumber web populer (Google, Wikipedia, Twitter, Facebook, RSS generik, dll.), Yang semuanya tersedia sebagai modul Python (mis., from pattern.web import Twitter). Anda tidak perlu menemukan kembali roda untuk mendapatkan data dari situs tersebut, dengan semua keunikan masing-masing. Anda kemudian dapat melakukan berbagai operasi NLP umum pada data, seperti analisis sentimen.

Pola memperlihatkan beberapa fungsionalitas tingkat rendahnya, memungkinkan Anda untuk menggunakan fungsi NLP, pencarian n-gram, vektor, dan grafik secara langsung jika Anda mau. Ini juga memiliki perpustakaan pembantu built-in untuk bekerja dengan database umum (MySQL, SQLite, dan MongoDB di masa mendatang), membuatnya mudah untuk bekerja dengan data tabel yang disimpan dari sesi sebelumnya atau diperoleh dari pihak ketiga.

Poliglot

Polyglot, seperti namanya, memungkinkan aplikasi pemrosesan bahasa alami yang menangani banyak bahasa sekaligus.  

Fitur NLP di Polyglot menggemakan apa yang ditemukan di pustaka NLP lainnya: tokenisasi, pengenalan entitas, penandaan bagian dari ucapan, analisis sentimen, embeddings kata, dll. Untuk setiap operasi ini, Polyglot menyediakan model yang bekerja dengan bahasa yang dibutuhkan.

Perhatikan bahwa dukungan bahasa Polyglot sangat berbeda dari satu fitur ke fitur lainnya. Misalnya, sistem tokenisasi mendukung hampir 200 bahasa (sebagian besar karena menggunakan algoritme Segmentasi Teks Unicode), dan analisis sentimen mendukung 136 bahasa, tetapi penandaan part-of-speech hanya mendukung 16 bahasa.

PyNLPI

PyNLPI (diucapkan "pineapple") hanya memiliki daftar dasar fungsi pemrosesan bahasa alami, tetapi memiliki beberapa fitur konversi data dan pemrosesan data yang benar-benar berguna untuk format data NLP.

Sebagian besar fungsi NLP di PyNLPI adalah untuk pekerjaan dasar seperti tokenisasi atau ekstraksi n-gram, bersama dengan beberapa fungsi statistik yang berguna di NLP seperti jarak Levenshtein antara string atau rantai Markov. Fungsi-fungsi tersebut diimplementasikan dengan Python murni untuk kenyamanan, jadi mereka tidak mungkin memiliki kinerja tingkat produksi.

Tapi PyNLPI bersinar karena bekerja dengan beberapa tipe data dan format yang lebih eksotis yang muncul di ruang NLP. PyNLPI dapat membaca dan memproses format data GIZA, Moses ++, SoNaR, Taggerdata, dan TiMBL, dan menggunakan seluruh modul untuk bekerja dengan FoLiA, format dokumen XML yang digunakan untuk memberi anotasi pada sumber bahasa seperti corpora (badan teks yang digunakan untuk terjemahan atau analisis lainnya) . 

Anda akan ingin meraih PyNLPI setiap kali Anda berurusan dengan tipe data tersebut.

SpaCy

SpaCy, yang menggunakan Python untuk kenyamanan dan Cython untuk kecepatan, disebut sebagai "pemrosesan bahasa alami berkekuatan industri". Penciptanya mengklaim itu lebih baik dibandingkan dengan NLTK, CoreNLP, dan pesaing lain dalam hal kecepatan, ukuran model, dan akurasi. Kekurangan utama SpaCy adalah relatif baru, sehingga hanya mencakup bahasa Inggris dan beberapa bahasa (terutama Eropa) lainnya. Meskipun demikian, SpaCy telah mencapai versi 2.2 pada saat tulisan ini dibuat.

SpaCy mencakup hampir semua fitur yang ditemukan dalam kerangka kerja yang bersaing tersebut: penandaan ucapan, penguraian ketergantungan, pengenalan entitas bernama, tokenisasi, segmentasi kalimat, operasi pencocokan berbasis aturan, vektor kata, dan banyak lagi. SpaCy juga menyertakan pengoptimalan untuk operasi GPU — baik untuk mempercepat komputasi, dan untuk menyimpan data di GPU untuk menghindari penyalinan.

Dokumentasi Spacy sangat bagus. Wizard penyiapan menghasilkan tindakan penginstalan baris perintah untuk Windows, Linux, dan macOS dan untuk lingkungan Python yang berbeda (pip, conda, dll.) Juga. Model bahasa diinstal sebagai paket Python, sehingga dapat dilacak sebagai bagian dari daftar ketergantungan aplikasi.

TextBlob

TextBlob adalah front-end yang ramah untuk pustaka Pattern dan NLTK, membungkus kedua pustaka tersebut dalam antarmuka tingkat tinggi dan mudah digunakan. Dengan TextBlob, Anda menghabiskan lebih sedikit waktu untuk bergumul dengan seluk-beluk Pola dan NLTK dan lebih banyak waktu untuk mendapatkan hasil.

TextBlob memperlancar jalannya dengan memanfaatkan objek dan sintaks Python asli. Contoh quickstart menunjukkan bagaimana teks yang akan diproses diperlakukan sebagai string, dan metode NLP umum seperti penandaan part-of-speech tersedia sebagai metode pada objek string tersebut.

Keuntungan lain dari TextBlob adalah Anda dapat "membuka penutupnya" dan mengubah fungsinya saat Anda semakin percaya diri. Banyak komponen default, seperti sistem analisis sentimen atau tokenizer, dapat ditukar sesuai kebutuhan. Anda juga dapat membuat objek tingkat tinggi yang menggabungkan komponen — penganalisis sentimen ini, pengklasifikasi tersebut, dll. — Dan menggunakannya kembali dengan sedikit usaha. Dengan cara ini, Anda dapat membuat prototipe sesuatu dengan cepat menggunakan TextBlob, lalu menyempurnakannya nanti.