Programmering

8 fantastiske Python-biblioteker til naturlig sprogbehandling

Naturlig sprogbehandling, eller kort sagt NLP, beskrives bedst som "AI til tale og tekst." Magien bag stemmekommandoer, tale- og tekstoversættelse, sentimentanalyse, tekstopsummering og mange andre sproglige anvendelser og analyser, er naturlig sprogbehandling blevet forbedret dramatisk gennem dyb læring.

Python-sproget giver en praktisk front-end til alle sorter af maskinindlæring inklusive NLP. Faktisk er der en forlegenhed over NLP-rigdom at vælge imellem i Python-økosystemet. I denne artikel undersøger vi hvert af de NLP-biblioteker, der er tilgængelige for Python - deres brugssager, deres styrker, deres svagheder og deres generelle popularitet.

Bemærk, at nogle af disse biblioteker leverer versioner på højere niveau af den samme funktionalitet, der er eksponeret af andre, hvilket gør denne funktion lettere at bruge på bekostning af en vis præcision eller ydelse. Du vil vælge et bibliotek, der passer godt både til dit ekspertiseniveau og til projektets art.

CoreNLP

CoreNLP-biblioteket - et produkt fra Stanford University - blev bygget til at være en produktionsklar løsning til naturlig sprogbehandling, der er i stand til at levere NLP-forudsigelser og analyser i stor skala. CoreNLP er skrevet i Java, men flere Python-pakker og API'er er tilgængelige for det, inklusive et oprindeligt Python NLP-bibliotek kaldet StanfordNLP.

CoreNLP inkluderer en bred vifte af sprogværktøjer - grammatikmærkning, navngivet enhedsgenkendelse, parsing, sentimentanalyse og meget mere. Det var designet til at være menneskeligt sprog agnostisk og understøtter i øjeblikket arabisk, kinesisk, fransk, tysk og spansk ud over engelsk (med russisk, svensk og dansk support tilgængelig fra tredjeparter). CoreNLP inkluderer også en web-API-server, en praktisk måde at betjene forudsigelser på uden for meget ekstra arbejde.

Det nemmeste sted at starte med CoreNLPs Python-indpakninger er StanfordNLP, referenceimplementeringen oprettet af Stanford NLP Group. Ud over at være veldokumenteret vedligeholdes StanfordNLP også regelmæssigt; mange af de andre Python-biblioteker til CoreNLP er ikke blevet opdateret i nogen tid.

CoreNLP understøtter også brugen af ​​NLTK, et større Python NLP-bibliotek beskrevet nedenfor. Fra version 3.2.3 inkluderer NLTK grænseflader til CoreNLP i sin parser. Bare sørg for at bruge den rigtige API.

Den åbenlyse ulempe ved CoreNLP er, at du har brug for noget fortrolighed med Java for at få det i gang, men det er ikke noget, en omhyggelig læsning af dokumentationen ikke kan opnå. En anden forhindring kan være CoreNLP's licensering. Hele værktøjssættet er licenseret under GPLv3, hvilket betyder, at enhver brug i proprietær software, som du distribuerer til andre, kræver en kommerciel licens.

Gensim

Gensim gør kun to ting, men gør det meget godt. Dens fokus er statistisk semantik - analyserer dokumenter for deres struktur og scorer derefter andre dokumenter baseret på deres lighed.

Gensim kan arbejde med meget store tekstdele ved at streame dokumenter til sin analysemaskine og udføre tilsyneladende læring på dem trinvist. Det kan oprette flere typer modeller, der hver passer til forskellige scenarier: Word2Vec, Doc2Vec, FastText og Latent Dirichlet Allocation.

Gensims detaljerede dokumentation inkluderer vejledninger og vejledninger, der forklarer nøglekoncepter og illustrerer dem med praktiske eksempler. Almindelige opskrifter er også tilgængelige på Gensim GitHub repo.

NLTK

Natural Language Toolkit, eller kort sagt NLTK, er blandt de mest kendte og mest magtfulde af Pythons naturlige sprogbehandlingsbiblioteker. Mange corpora (datasæt) og uddannede modeller er tilgængelige til brug med NLTK ud af boksen, så du kan begynde at eksperimentere med NLTK med det samme.

Som dokumentationen siger, tilbyder NLTK en lang række værktøjer til at arbejde med tekst: "klassificering, tokenisering, stemming, tagging, parsing og semantisk ræsonnement." Det kan også arbejde med nogle tredjepartsværktøjer for at forbedre dets funktionalitet.

Husk, at NLTK blev oprettet af og for et akademisk forskningspublikum. Det var ikke designet til at betjene NLP-modeller i et produktionsmiljø. Dokumentationen er også noget sparsom; selv vejledningerne er tynde. Der er heller ingen 64-bit binær; skal du installere 32-bit-udgaven af ​​Python for at bruge den. Endelig er NLTK heller ikke det hurtigste bibliotek, men det kan øges med parallel behandling.

Hvis du er fast besluttet på at udnytte det, der er inde i NLTK, kan du starte i stedet med TextBlob (diskuteret nedenfor).

Mønster

Hvis alt hvad du skal gøre er at skrabe et populært websted og analysere, hvad du finder, nå ud til Mønster. Dette naturlige sprogbehandlingsbibliotek er langt mindre og smallere end andre biblioteker, der er dækket her, men det betyder også, at det er fokuseret på at udføre et fælles job rigtig godt.

Mønster leveres med indbyggede til skrabning af et antal populære webtjenester og kilder (Google, Wikipedia, Twitter, Facebook, generisk RSS osv.), Som alle er tilgængelige som Python-moduler (f.eks. fra mønster.web importerer Twitter). Du behøver ikke genopfinde hjulene for at få data fra disse websteder med alle deres individuelle besynder. Du kan derefter udføre en række almindelige NLP-operationer på dataene, såsom sentimentanalyse.

Mønster afslører nogle af dets lavere funktionalitet, så du kan bruge NLP-funktioner, n-gram søgning, vektorer og grafer direkte, hvis du vil. Det har også et indbygget hjælperbibliotek til at arbejde med almindelige databaser (MySQL, SQLite og MongoDB i fremtiden), hvilket gør det nemt at arbejde med data i tabelform gemt fra tidligere sessioner eller hentet fra tredjeparter.

Polyglot

Polyglot, som navnet antyder, muliggør naturlige sprogbehandlingsapplikationer, der beskæftiger sig med flere sprog på én gang.

NLP-funktionerne i Polyglot ekko, hvad der findes i andre NLP-biblioteker: tokenisering, navngivet enhedsgenkendelse, tagging af tale, stemningsanalyse, ordindlejringer osv. For hver af disse operationer tilbyder Polyglot modeller, der fungerer med de nødvendige sprog.

Bemærk, at Polyglots sprogstøtte adskiller sig meget fra funktion til funktion. For eksempel understøtter tokeniseringssystemet næsten 200 sprog (hovedsageligt fordi det bruger Unicode-tekstsegmenteringsalgoritmen), og sentimentanalyse understøtter 136 sprog, men tagging af del-af-tale understøtter kun 16.

PyNLPI

PyNLPI (udtales "ananas") har kun en grundlæggende liste over naturlige sprogbehandlingsfunktioner, men den har nogle virkelig nyttige datakonvertering og databehandlingsfunktioner til NLP-dataformater.

De fleste af NLP-funktionerne i PyNLPI er til grundlæggende job som tokenisering eller n-gram-ekstraktion sammen med nogle statistiske funktioner, der er nyttige i NLP som Levenshtein afstand mellem strenge eller Markov-kæder. Disse funktioner implementeres i ren Python for nemheds skyld, så det er usandsynligt, at de har ydeevne på produktionsniveau.

Men PyNLPI skinner for at arbejde med nogle af de mere eksotiske datatyper og formater, der er sprunget op i NLP-rummet. PyNLPI kan læse og behandle dataformaterne GIZA, Moses ++, SoNaR, Taggerdata og TiMBL og bruger et helt modul til at arbejde med FoLiA, det XML-dokumentformat, der bruges til at kommentere sprogressourcer som corpora (teksttekster brugt til oversættelse eller anden analyse) .

Du vil gerne nå ud til PyNLPI, når du har at gøre med disse datatyper.

SpaCy

SpaCy, der trykker let på Python for nemheds skyld og Cython for hastighed, betegnes som "industriel styrke naturlig sprogbehandling." Dens skabere hævder, at det sammenlignes gunstigt med NLTK, CoreNLP og andre konkurrenter med hensyn til hastighed, modelstørrelse og nøjagtighed. SpaCys største ulempe er, at det er relativt nyt, så det dækker kun engelsk og et par andre (hovedsageligt europæiske) sprog. Når det er sagt, har SpaCy allerede nået version 2.2, da dette skrives.

SpaCy inkluderer mest alle funktioner, der findes i de konkurrerende rammer: talemærkning, afhængighedsparsering, navngivet enhedsgenkendelse, tokenisering, sætningssegmentering, regelbaserede matchoperationer, ordvektorer og masser mere. SpaCy inkluderer også optimeringer til GPU-operationer - både til hurtigere beregning og til lagring af data på GPU'en for at undgå kopiering.

Spacy's dokumentation er fremragende. En installationsguide genererer også kommandolinjeassistenter til Windows, Linux og macOS og til forskellige Python-miljøer (pip, conda osv.). Sprogmodeller installeres som Python-pakker, så de kan spores som en del af en applikations afhængighedsliste.

TextBlob

TextBlob er en venlig front-end til mønster- og NLTK-bibliotekerne, der indpakker begge disse biblioteker i højt niveau, brugervenlige grænseflader. Med TextBlob bruger du mindre tid på at kæmpe med indviklingen i Pattern og NLTK og mere tid på at få resultater.

TextBlob glatter vejen ved at udnytte indfødte Python-objekter og syntaks. Quickstart-eksemplerne viser, hvordan tekster, der skal behandles, simpelthen behandles som strenge, og almindelige NLP-metoder som tagging af tale er tilgængelige som metoder på disse strengobjekter.

En anden fordel ved TextBlob er, at du kan “løfte hætten” og ændre dens funktionalitet, efterhånden som du bliver mere selvsikker. Mange standardkomponenter, som sentimentanalysesystemet eller tokeniseren, kan byttes ud efter behov. Du kan også oprette objekter på højt niveau, der kombinerer komponenter - denne sentimentanalysator, den klassifikator osv. - og genbruge dem med minimal indsats. På denne måde kan du prototype noget hurtigt med TextBlob og derefter forfine det senere.

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