Из техничких разлога садржај читалишта можете пратити искључиво на латиници.

8 sjajnih Python biblioteka za obradu prirodnog jezika

Kako odabrati kod toliko NLP resursa u Pythonu? Otkrijte najbolje Python biblioteke za analizu teksta i kako se one koriste. Obrada prirodnog jezika, ili skraćeno NLP – natural language processing, najbolje je opisati kao „VI za govor i tekst“. Čarolija iza govornih komandi, prevođenja govora i teksta, analize raspoloženja, sažimanja teksta i mnogih drugih lingvističkih aplikacija i analiza, obrada prirodnog jezika dramatično je poboljšana zahvaljujući dubokom učenju. Jezik Python pruža pogodan pristup za sve vrste mašinskog učenja, uključujući NLP. U stvari, postoji neprilika šta izabrati od NLP bogatstva u ekosistemu Python. U ovom članku ćemo istražiti svaku od NLP biblioteka dostupnih za Python - njihove primene upotrebe, snagu, slabosti i opšti nivo popularnosti.

Imajte na umu da neke od ovih biblioteka pružaju verzije višeg nivoa za istu funkcionalnost koju nude druge biblioteke, što olakšava upotrebu te funkcije po cenu određene preciznosti ili performansi. Odabraćete biblioteku koja odgovara vašem nivou stručnosti i prirodi projekta.

CoreNLP

Biblioteka CoreNLP - proizvod Univerziteta Stanford - napravljena je da bude rešenje za obradu prirodnog jezika spremno za proizvodnju, sposobno da pruži NLP predviđanja i analize u velikom obimu. CoreNLP je napisana na Javi, ali za nju je dostupno više Python paketa i API-ja, uključujući i izvornu Python NLP biblioteku pod nazivom Stanza.

CoreNLP uključuje širok spektar jezičkih alata - označavanje gramatike, prepoznavanje imenovanih entiteta, raščlanjivanje, analizu raspoloženja i još mnogo toga. Dizajniran je da bude agnostički na ljudskom jeziku i trenutno uz engleski podržava arapski, kineski, francuski, nemački i španski jezik (uz podršku ruskog, švedskog i danskog od drugih dobavljača). CoreNLP takođe uključuje veb API server, pogodan način za posluživanje predviđanja bez previše dodatnog rada.

Najjednostavnije mesto za početak rada sa CoreNLP-ovim Python omotačima je Stanza, referentna implementacija koju je kreirala Stanford NLP grupa. Pored toga što je dobro dokumentovana, Stanza se takođe redovno održava; mnoge druge Python biblioteke za CoreNLP nisu ažurirane već neko vreme.

CoreNLP takođe podržava upotrebu NLTK, glavne Python NLP biblioteke o kojoj se govori u nastavku. Od verzije 3.2.3, NLTK uključuje u svoj parser interfejse za CoreNLP. Samo pazite da koristite tačan API .

Očigledna mana CoreNLP-a je da će vam biti potrebno malo znanja o Javi da biste je pokrenuli, ali to nije ništa što se ne može postići pažljivim čitanjem dokumentacije. Još jedna prepreka može biti licenciranje CoreNLP-a. Čitav komplet alata licenciran je pod GPLv3, što znači da će za bilo kakvu upotrebu vlasničkog softvera koji distribuirate drugima biti potrebna komercijalna licenca.

Gensim

Gensim radi samo dve stvari, ali to radi izuzetno dobro. Njegov fokus je statistička semantika - analiza dokumenata u smislu njihove strukture, a zatim bodovanje ostalih dokumenata na osnovu njihove sličnosti.

Gensim može da radi sa vrlo velikim komadima teksta preusmeravanjem dokumenata u svoj mehanizam za analizu i postupnim izvođenjem nenadgledanog učenja na njima. Može da stvori više tipova modela, svaki pogodan za različite scenarije: Word2Vec, Doc2Vec, FastText i Latent Dirichlet Allocation.

Gensimova detaljna dokumentacija uključuje vodiče i uputstva za upotrebu koji objašnjavaju ključne koncepte i ilustruju ih praktičnim primerima. Uobičajeni recepti su takođe dostupni na repozitorijumu Gensim GitHub.

Najnovija verzija, Gensim 4, podržava samo Python 3, ali sadrži glavne optimizacije uobičajenih algoritama kao što su Word2Vec, manje složeni OOP model i mnoge druge modernizacije.

NLTK

Toolkit za prirodni jezik, ili skraćeno NLTK, jedna je od najpoznatijih i najmoćnijih Python biblioteka za obradu prirodnog jezika. Mnogi korpusi (skupovi podataka) i obučeni modeli dostupni su odmah za upotrebu sa NLTK-om, tako da možete odmah da počnete da eksperimentišete sa NLTK-om.

Kao što navodi dokumentacija, NLTK pruža široku lepezu alata za rad sa tekstom: „klasifikacija, tokenizacija, rezanje, označavanje, raščlanjivanje i semantičko obrazlaganje“. Takođe može da radi sa nekim nezavisnim alatima (kao što su Stanford Tagger, TADM i MEGAM) da poboljša svoju funkcionalnost.

Imajte na umu da je NLTK kreirala za sebe akademska istraživačka zajednica. Nije dizajniran da služi NLP modelima u proizvodnom okruženju. Dokumentacija je takođe donekle oskudna; čak su i uputstva mršava. Takođe, ne postoji 64-bitni binarni kôd; moraćete da instalirate 32-bitno izdanje Pythona da biste ga koristili. Konačno, NLTK nije ni najbrža biblioteka, ali se može ubrzati paralelnom obradom.

Ako ste odlučni da iskoristite sadržaj NLTK-a, možete umesto njega da započnete sa TextBlob-om (o kome će biti reči u nastavku).

Pattern

Ako vam jedino treba da pročačkate neku popularnu veb stranicu i analizirate ono što nađete, posegnite za Pattern-om. Ova biblioteka za obradu prirodnog jezika je mnogo manja i uža od ostalih ovde obuhvaćenih biblioteka, ali to takođe znači da je usredsređena na to da zaista dobro obavlja jedan uobičajeni posao.

Pattern se isporučuje sa ugrađenim alatima za prikupljanje sa niza popularnih veb usluga i izvora (Google, Wikipedia, Twitter, Facebook, generički RSS, itd.), koji su svi dostupni kao Python moduli (npr. from pattern.web import Twitter) . Ne morate ponovo da otkrivate toplu vodu da biste dobili podatke sa tih veb lokacija, sa svim njihovim pojedinačnim smicalicama. Tada možete nad dobijenim podacima izvršiti razne uobičajene NLP operacije, poput analize raspoloženja.

Pattern izlaže neke od funkcija nižeg nivoa, omogućavajući vam da, ako želite, direktno koristite NLP funkcije, pretraživanje n-grama, vektore i grafikone. Takođe ima ugrađenu pomoćnu biblioteku za rad sa uobičajenim bazama podataka (MySQL, SQLite i MongoDB u budućnosti), što olakšava rad sa tabelarnim podacima sačuvanim iz prethodnih sesija ili dobijenim od trećih lica.

Polyglot

Polyglot , kao što i samo ime govori, omogućava aplikacijama za obradu prirodnog jezika da se bave sa više jezika odjednom.

NLP funkcije u Polyglotu odražavaju ono što se može naći u drugim NLP bibliotekama: tokenizacija, prepoznavanje imenovanih entiteta, označavanje dela govora, analiza raspoloženja, ugrađivanje reči itd. Za svaku od tih operacija, Polyglot pruža modele koji funkcionišu sa potrebnim jezicima.

Imajte na umu da se Polyglotova podrška za jezike razlikuje od funkcije do funkcije. Na primer, sistem za prepoznavanje jezika podržava skoro 200 jezika, tokenizacija podržava 165 jezika (uglavnom zato što koristi algoritam Unicode segmentacije teksta), a analiza raspoloženja podržava 136 jezika, dok označavanje delova govora podržava svega 16.

PyNLPI

PyNLPI (izgovara se „pajnepl“) ima samo osnovni spisak funkcija obrade prirodnog jezika, ali ima neke zaista korisne funkcije konverzije i obrade podataka za NLP formate podataka.

Većina NLP funkcija u PyNLPI-u su za osnovne poslove poput tokenizacije ili ekstrakcije n-grama, uz neke statističke funkcije korisne u NLP-u, poput Levenshtein-ovog rastojanja između niski ili Markovljevih lanaca. Te funkcije su zbog praktičnosti implementirane u čistom Pythonu, pa je malo verovatno da će imati performanse za nivo proizvodnje.

Međutim, PyNLPI je sjajan za rad sa nekim egzotičnijim tipovima podataka i formatima koji su nastali u NLP prostoru. PyNLPI može da čita i obrađuje GIZA, Moses ++, SoNaR, Taggerdata i TiMBL formate podataka, a čitav jedan modul posvećuje radu sa FoLiA, XML formatom dokumenta koji se koristi za označavanje jezičkih resursa poput corpora (delova teksta koji se koriste za prevod ili drugu analizu) .

Poželećete da posegnete za PyNLPI-om kad god budete imali posla sa tim tipovima podataka.

SpaCy

SpaCy , koji koristi Python radi pogodnosti, a Cython radi brzine, naplaćuje se kao „obrada prirodnog jezika industrijske snage“. Njegovi tvorci tvrde da je povoljniji u poređenju sa NLTK, CoreNLP i ostalim konkurentima u pogledu brzine, veličine modela i tačnosti. SpaCy sadrži modele za više jezika, mada samo za 16 od podržana 64 jezika ima potpune kanale podataka.

SpaCy uključuje skoro sve funkcije koja se nalaze u konkurentskim radnim okvirima: označavanje govora, raščlanjivanje zavisnosti, prepoznavanje imenovanog entiteta, tokenizacija, segmentacija rečenica, operacije podudaranja zasnovane na pravilima, vektori reči i još mnogo toga. SpaCy takođe uključuje optimizacije za rad GPU-a - kako za ubrzavanje računanja, tako i za čuvanje podataka na GPU-u kako bi se izbeglo kopiranje.

Dokumentacija za SpaCy je odlična. Čarobnjak za podešavanje generiše akcije instalacije sa komandne linije za Windows, Linux i macOS, kao i za različita Python okruženja (pip, conda, itd.). Jezički modeli se instaliraju kao Python paketi, tako da se mogu pratiti kao delovi liste zavisnosti aplikacije.

Najnovija verzija radnog okvira, SpaCy 3.0, nudi mnoge nadogradnje. Pored korišćenja radnog okvira Ray za izvođenje distribuirane obuke na više mašina, nudi novi sistem kanala zasnovan na transformeru za bolju preciznost, novi sistem obuke i model konfiguracije toka rada, upravljanje tokom rada sa kraja na kraj i još mnogo toga .

TextBlob

TextBlob je prijatan čeoni deo biblioteka Pattern i NLTK, omotavajući obe te biblioteke u interfejse visokog nivoa, jednostavne za upotrebu. Uz TextBlob trošite manje vremena na borbu sa zamršenostima biblioteka Pattern i NLTK, a više vremena na postizanje rezultata.

TextBlob olakšava rad maksimalnim iskorištavanjem izvornih Python objekata i sintakse. Primeri brzog početka pokazuju kako se tekstovi koji se obrađuju jednostavno tretiraju kao stringovi, a uobičajeni NLP metodi poput označavanja delova govora dostupni su kao metodi nad tim string objektima.

Još jedna prednost TextBloba je što možete da „podignete haubu“ i promenite njegovu funkcionalnost kako vam raste samopouzdanje. Mnoge podrazumevane komponente, poput sistema za analizu raspoloženja ili tokenizera, mogu po potrebi da se zamene . Takođe možete da kreirate objekte na visokom nivou koji kombinuju komponente - ovaj analizator raspoloženja, taj klasifikator itd. - i da ih ponovo koristite uz minimalan napor. Na ovaj način možete brzo da napravite prototip za nešto pomoću TextBlob-a, a zatim ga doradite kasnije.

Izvor: InfoWorld