Programiranje

8 odličnih Pythonovih knjižnic za obdelavo naravnega jezika

Obdelavo naravnega jezika ali na kratko NLP je najbolje opisati kot »AI za govor in besedilo«. Čarobnost glasovnih ukazov, prevajanja govora in besedila, analize sentimenta, povzetka besedila in številnih drugih jezikovnih aplikacij in analiz je obdelavo naravnega jezika dramatično izboljšala z globokim učenjem.

Jezik Python je primeren za uporabo vseh vrst strojnega učenja, vključno z NLP. Pravzaprav je v ekosistemu Python v zadregi bogastvo NLP. V tem članku bomo raziskali vsako knjižnico NLP, ki je na voljo za Python - primere uporabe, prednosti, slabosti in splošno priljubljenost.

Upoštevajte, da nekatere od teh knjižnic ponujajo različice iste funkcije, ki jih izpostavljajo druge, na višji ravni, kar olajša uporabo te funkcije za ceno določene natančnosti ali zmogljivosti. Želeli boste izbrati knjižnico, ki ustreza vaši ravni strokovnosti in naravi projekta.

CoreNLP

Knjižnica CoreNLP - izdelek univerze Stanford - je bila zgrajena kot produkcijsko pripravljena rešitev za obdelavo naravnih jezikov, ki omogoča obsežne napovedi in analize NLP. CoreNLP je napisan v Javi, vendar je zanj na voljo več paketov Python in API-jev, vključno z izvorno knjižnico Python NLP, imenovano StanfordNLP.

CoreNLP vključuje široko paleto jezikovnih orodij - označevanje slovnice, prepoznavanje imenovanih entitet, razčlenjevanje, analiza razpoloženja in še veliko več. Zasnovan je bil tako, da je agnostičen v človeškem jeziku, poleg angleščine pa trenutno podpira še arabščino, kitajščino, francoščino, nemščino in španščino (rusko, švedsko in dansko podporo imajo na voljo tretje osebe). CoreNLP vključuje tudi strežnik spletnega API-ja, priročen način za strežanje napovedi brez preveč dodatnega dela.

Najlažje je začeti z CoreNLP-jevimi ovitki Python StanfordNLP, referenčno izvedbo, ki jo je ustvarila skupina Stanford NLP. StanfordNLP je poleg dobro dokumentirane tudi redno vzdrževan; številne druge knjižnice Python za CoreNLP že nekaj časa niso bile posodobljene.

CoreNLP podpira tudi uporabo NLTK, glavne Python NLP knjižnice, o kateri bomo razpravljali spodaj. Od različice 3.2.3 NLTK v razčlenjevalnik vključuje vmesnike do CoreNLP. Prepričajte se, da uporabljate pravi API.

Očitna slabost CoreNLP je, da boste potrebovali nekaj znanja z Javo, da jo zaženete, vendar to ni nič, česar natančno branje dokumentacije ne more doseči. Druga ovira bi lahko bila licenca CoreNLP. Celoten komplet orodij je licenciran pod GPLv3, kar pomeni, da je za vsako uporabo lastniške programske opreme, ki jo distribuirate drugim, potrebna komercialna licenca.

Gensim

Gensim naredi le dve stvari, vendar jih izredno dobro. Njen poudarek je na statistični semantiki - analiziranju dokumentov glede na njihovo strukturo in nato ocenjevanju drugih dokumentov na podlagi njihove podobnosti.

Gensim lahko dela z zelo velikimi deli besedila tako, da dokumente pretaka v svoj analizni mehanizem in postopoma izvaja nenadzorovano učenje. Ustvari lahko več vrst modelov, od katerih je vsak primeren za različne scenarije: Word2Vec, Doc2Vec, FastText in Latent Dirichlet Allocation.

Podrobna Gensimova dokumentacija vključuje vadnice in navodila, ki razlagajo ključne koncepte in jih ponazarjajo s praktičnimi primeri. Običajni recepti so na voljo tudi na repozitoriju Gensim GitHub.

NLTK

Zbirka orodij za naravni jezik ali na kratko NLTK je med najbolj znanimi in najmočnejšimi knjižnicami za obdelavo naravnega jezika Python. Številni korpusi (nabori podatkov) in usposobljeni modeli so na voljo za uporabo z NLTK že takoj, zato lahko takoj začnete eksperimentirati z NLTK.

Kot piše v dokumentaciji, NLTK ponuja široko paleto orodij za delo z besedilom: "klasifikacija, tokenizacija, zarezovanje, označevanje, razčlenjevanje in semantično sklepanje." Za izboljšanje njegove funkcionalnosti lahko sodeluje tudi z nekaterimi tujimi orodji.

Upoštevajte, da je NLTK ustvaril akademsko raziskovalno občinstvo in za njega. Ni bil zasnovan za uporabo modelov NLP v proizvodnem okolju. Tudi dokumentacija je nekoliko skopa; tudi navodila so tanka. Prav tako ni 64-bitne binarne datoteke; za uporabo boste morali namestiti 32-bitno izdajo Pythona. Končno tudi NLTK ni najhitrejša knjižnica, vendar jo je mogoče pospešiti z vzporedno obdelavo.

Če ste odločeni izkoristiti tisto, kar je znotraj NLTK, lahko namesto tega začnete s programom TextBlob (o katerem bomo razpravljali spodaj).

Vzorec

Če vse, kar morate storiti, je, da postrgate priljubljeno spletno mesto in analizirate, kaj najdete, posežite po vzorcu. Ta knjižnica za obdelavo naravnih jezikov je veliko manjša in ožja od drugih knjižnic, ki jih tukaj pokrivamo, vendar to tudi pomeni, da je osredotočena na to, da res dobro opravimo eno skupno delo.

Vzorec je vgrajen za strganje številnih priljubljenih spletnih storitev in virov (Google, Wikipedia, Twitter, Facebook, generični RSS itd.), Ki so na voljo kot Python moduli (npr. from pattern.web import Twitter). Za pridobivanje podatkov s teh spletnih mest ni treba znova izumljati koles z vsemi njihovimi posebnimi domislicami. Nato lahko s podatki izvedete različne običajne NLP operacije, kot je analiza razpoloženja.

Vzorec izpostavi nekatere svoje funkcionalnosti na nižji ravni, kar vam omogoča, da neposredno uporabljate funkcije NLP, iskanje po gramih, vektorje in grafe, če želite. Ima tudi vgrajeno pomožno knjižnico za delo s skupnimi bazami podatkov (MySQL, SQLite in MongoDB v prihodnosti), kar olajša delo s tabelarnimi podatki, shranjenimi iz prejšnjih sej ali pridobljenimi od tretjih oseb.

Poliglot

Kot že ime pove, Polyglot omogoča aplikacije za obdelavo naravnih jezikov, ki obravnavajo več jezikov hkrati.

NLP v Polyglot odmeva tisto, kar najdemo v drugih knjižnicah NLP: tokenizacija, prepoznavanje imenovanih entitet, označevanje dela govora, analiza sentimenta, vdelava besed itd. Polyglot za vsako od teh operacij ponuja modele, ki delujejo s potrebnimi jeziki.

Upoštevajte, da se jezikovna podpora Polyglota močno razlikuje od funkcije do funkcije. Na primer, sistem tokenizacije podpira skoraj 200 jezikov (večinoma zato, ker uporablja algoritem za segmentacijo besedila Unicode), analiza razpoloženja pa podpira 136 jezikov, označevanje dela govora pa podpira le 16.

PyNLPI

PyNLPI (izgovarja se »ananas«) ima le osnovni seznam funkcij obdelave naravnega jezika, vendar ima nekaj resnično uporabnih funkcij za pretvorbo podatkov in obdelavo podatkov za NLP podatkovne formate.

Večina funkcij NLP v PyNLPI je namenjena osnovnim opravilom, kot sta tokenizacija ali ekstrakcija n-gramov, skupaj z nekaterimi statističnimi funkcijami, uporabnimi v NLP, kot je Levenshteinova razdalja med nizi ali Markovske verige. Te funkcije so za udobje implementirane v čisti Python, zato verjetno ne bodo imeli zmogljivosti na ravni proizvodnje.

Toda PyNLPI blesti pri delu z nekaterimi bolj eksotičnimi vrstami podatkov in formati, ki so nastali v prostoru NLP. PyNLPI lahko bere in obdeluje podatkovne formate GIZA, Moses ++, SoNaR, Taggerdata in TiMBL in celoten modul nameni delu s FoLiA, formatom dokumentov XML, ki se uporablja za označevanje jezikovnih virov, kot so korpusi (telesa besedila, ki se uporabljajo za prevajanje ali druge analize). .

Vedno boste želeli doseči PyNLPI, kadar koli imate opravka s temi vrstami podatkov.

SpaCy

SpaCy, ki izbere Python za udobje in Cython za hitrost, se obračunava kot "obdelava naravnega jezika z industrijsko močjo." Njegovi ustvarjalci trdijo, da je po hitrosti, velikosti modela in natančnosti primerljiv z NLTK, CoreNLP in drugimi konkurenti. Glavna pomanjkljivost SpaCy je, da je razmeroma nov, zato zajema le angleščino in nekaj drugih (predvsem evropskih) jezikov. Kljub temu je SpaCy od tega pisanja že dosegel različico 2.2.

SpaCy vključuje večino vseh funkcij, ki jih najdemo v teh konkurenčnih okvirih: označevanje govora, razčlenjevanje odvisnosti, prepoznavanje imenovanih entitet, tokenizacija, segmentacija stavkov, operacije ujemanja na podlagi pravil, vektorji besed in še veliko več. SpaCy vključuje tudi optimizacije za delovanje GPU - tako za pospeševanje računanja kot za shranjevanje podatkov na GPU, da se prepreči kopiranje.

Spacyjeva dokumentacija je odlična. Čarovnik za namestitev ustvari tudi dejanja namestitve ukazne vrstice za Windows, Linux in macOS ter za različna okolja Python (pip, conda itd.). Jezikovni modeli se namestijo kot paketi Python, tako da jim je mogoče slediti kot del seznama odvisnosti aplikacije.

TextBlob

TextBlob je prijazen prednji del knjižnic Pattern in NLTK, ki obe knjižnici ovije v visokokakovostne vmesnike, enostavne za uporabo. S programom TextBlob porabite manj časa za spopadanje z zapletenostmi Pattern in NLTK in več časa za doseganje rezultatov.

TextBlob gladi pot z izkoriščanjem izvornih predmetov Python in sintakse. Primeri hitrih korakov prikazujejo, kako se besedila, ki jih je treba obdelati, preprosto obravnavajo kot nizi, običajne metode NLP, kot je označevanje dela govora, pa so na voljo kot metode na teh objektih niza.

Druga prednost programa TextBlob je, da lahko z bolj samozavestno "dvignete pokrov" in spremenite njegovo funkcionalnost. Številne privzete komponente, na primer sistem za analizo sentimenta ali tokenizer, je mogoče po potrebi zamenjati. Ustvarite lahko tudi objekte na visoki ravni, ki združujejo komponente - ta analizator razpoloženja, klasifikator itd. - in jih z minimalnim naporom ponovno uporabite. Tako lahko s programom TextBlob hitro prototipirate nekaj, nato pa ga dodelate pozneje.

$config[zx-auto] not found$config[zx-overlay] not found