Programmering

8 flotte Python-biblioteker for naturlig språkbehandling

Naturlig språkbehandling, eller forkortet NLP, beskrives best som "AI for tale og tekst." Magien bak stemmekommandoer, tale- og tekstoversettelse, sentimentanalyse, tekstoppsummering og mange andre språklige applikasjoner og analyser, er naturlig språkbehandling blitt forbedret dramatisk gjennom dyp læring.

Pythonspråket gir en praktisk frontend til alle varianter av maskinlæring, inkludert NLP. Faktisk er det en forlegenhet over NLP-rikdom å velge mellom i Python-økosystemet. I denne artikkelen vil vi utforske hvert av NLP-bibliotekene som er tilgjengelige for Python - deres brukssaker, styrker, svakheter og deres generelle popularitetsnivå.

Merk at noen av disse bibliotekene tilbyr versjoner på høyere nivå av den samme funksjonaliteten som er utsatt for andre, noe som gjør den funksjonaliteten enklere å bruke på bekostning av presisjon eller ytelse. Du vil velge et bibliotek som passer både til ditt ekspertisenivå og til prosjektets art.

CoreNLP

CoreNLP-biblioteket - et produkt fra Stanford University - ble bygget for å være en produksjonsklar løsning for naturlig språkbehandling, som er i stand til å levere NLP-spådommer og analyser i stor skala. CoreNLP er skrevet på Java, men flere Python-pakker og API-er er tilgjengelige for den, inkludert et innfødt Python NLP-bibliotek kalt StanfordNLP.

CoreNLP inkluderer et bredt spekter av språkverktøy — grammatikkmerking, navngitt enhetsgjenkjenning, parsing, sentimentanalyse og mye mer. Den ble designet for å være menneskelig språk agnostisk, og støtter for tiden arabisk, kinesisk, fransk, tysk og spansk i tillegg til engelsk (med russisk, svensk og dansk støtte tilgjengelig fra tredjeparter). CoreNLP inkluderer også en web-API-server, en praktisk måte å tjene spådommer uten for mye ekstra arbeid.

Det enkleste stedet å starte med CoreNLPs Python-omslag er StanfordNLP, referanseimplementeringen opprettet av Stanford NLP Group. I tillegg til å være godt dokumentert, vedlikeholdes StanfordNLP også regelmessig; mange av de andre Python-bibliotekene for CoreNLP har ikke blitt oppdatert på noen tid.

CoreNLP støtter også bruken av NLTK, et stort Python NLP-bibliotek diskutert nedenfor. Fra versjon 3.2.3 inkluderer NLTK grensesnitt til CoreNLP i sin parser. Bare vær sikker på å bruke riktig API.

Den åpenbare ulempen med CoreNLP er at du trenger litt kjennskap til Java for å få den i gang, men det er ingenting som en nøye lesing av dokumentasjonen ikke kan oppnå. En annen hindring kan være CoreNLPs lisensiering. Hele verktøysettet er lisensiert under GPLv3, noe som betyr at all bruk i proprietær programvare som du distribuerer til andre, vil kreve en kommersiell lisens.

Gensim

Gensim gjør bare to ting, men gjør det veldig bra. Fokuset er statistisk semantikk - analysere dokumenter for deres struktur, og deretter score andre dokumenter basert på deres likhet.

Gensim kan jobbe med veldig store tekstdeler ved å streame dokumenter til analysemotoren og utføre tilsyn utenom tilsyn trinnvis. Det kan opprette flere typer modeller, hver tilpasset forskjellige scenarier: Word2Vec, Doc2Vec, FastText og Latent Dirichlet Allocation.

Gensims detaljerte dokumentasjon inkluderer veiledninger og veiledninger som forklarer nøkkelbegreper og illustrerer dem med praktiske eksempler. Vanlige oppskrifter er også tilgjengelig på Gensim GitHub repo.

NLTK

The Natural Language Toolkit, eller forkortet NLTK, er blant de mest kjente og mest kraftfulle av Pythons naturlige språkbehandlingsbiblioteker. Mange corpora (datasett) og trente modeller er tilgjengelige for bruk med NLTK ut av boksen, slik at du kan begynne å eksperimentere med NLTK med en gang.

Som dokumentasjonen sier, gir NLTK et bredt utvalg av verktøy for å arbeide med tekst: "klassifisering, tokenisering, stemming, tagging, parsing og semantisk resonnement." Det kan også fungere med noen tredjepartsverktøy for å forbedre funksjonaliteten.

Husk at NLTK ble opprettet av og for et akademisk forskningsmål. Den var ikke designet for å betjene NLP-modeller i et produksjonsmiljø. Dokumentasjonen er også noe sparsom; selv veiledningen er tynn. Dessuten er det ingen 64-bit binær; må du installere 32-biters utgave av Python for å bruke den. Endelig er heller ikke NLTK det raskeste biblioteket, men det kan fremskyndes med parallell behandling.

Hvis du er fast bestemt på å utnytte det som er inne i NLTK, kan du i stedet starte med TextBlob (omtalt nedenfor).

Mønster

Hvis alt du trenger å gjøre er å skrape et populært nettsted og analysere det du finner, strekke deg etter Pattern. Dette naturlige språkbehandlingsbiblioteket er langt mindre og smalere enn andre biblioteker som dekkes her, men det betyr også at det er fokusert på å gjøre en felles jobb veldig bra.

Mønster kommer med innebygde moduler for å skrape en rekke populære webtjenester og kilder (Google, Wikipedia, Twitter, Facebook, generisk RSS, etc.), som alle er tilgjengelige som Python-moduler (f.eks. fra pattern.web importerer Twitter). Du trenger ikke å finne opp hjulene på nytt for å få data fra disse nettstedene, med alle deres individuelle særegenheter. Du kan deretter utføre en rekke vanlige NLP-operasjoner på dataene, for eksempel sentimentanalyse.

Mønster viser noen av funksjonene på lavere nivå, slik at du kan bruke NLP-funksjoner, n-gram-søk, vektorer og grafer direkte hvis du vil. Det har også et innebygd hjelperbibliotek for å jobbe med vanlige databaser (MySQL, SQLite og MongoDB i fremtiden), noe som gjør det enkelt å jobbe med tabelldata lagret fra tidligere økter eller hentet fra tredjeparter.

Polyglot

Polyglot, som navnet antyder, muliggjør naturlige språkbehandlingsapplikasjoner som håndterer flere språk samtidig.

NLP-funksjonene i Polyglot gjenspeiler det som finnes i andre NLP-biblioteker: tokenisering, navngitt enhetsgjenkjenning, merking av tale, stemningsanalyse, ordinnbedding osv. For hver av disse operasjonene tilbyr Polyglot modeller som fungerer med de språkene du trenger.

Merk at Polyglots språkstøtte er veldig forskjellig fra funksjon til funksjon. For eksempel støtter tokeniseringssystemet nesten 200 språk (hovedsakelig fordi det bruker Unicode-tekstsegmenteringsalgoritmen), og sentimentanalyser støtter 136 språk, men tagging av tale-tale støtter bare 16.

PyNLPI

PyNLPI (uttalt "ananas") har bare en grunnleggende liste over naturlige språkbehandlingsfunksjoner, men den har noen virkelig nyttige datakonvertering- og databehandlingsfunksjoner for NLP-dataformater.

De fleste NLP-funksjonene i PyNLPI er for grunnleggende jobber som tokenisering eller n-gram-ekstraksjon, sammen med noen statistiske funksjoner som er nyttige i NLP som Levenshtein-avstand mellom strenger eller Markov-kjeder. Disse funksjonene er implementert i ren Python for enkelhets skyld, så det er lite sannsynlig at de har ytelse på produksjonsnivå.

Men PyNLPI skinner for å jobbe med noen av de mer eksotiske datatypene og formatene som har dukket opp i NLP-rommet. PyNLPI kan lese og behandle dataformatene GIZA, Moses ++, SoNaR, Taggerdata og TiMBL, og bruker en hel modul til å arbeide med FoLiA, XML-dokumentformatet som brukes til å kommentere språkressurser som corpora (teksttekster brukt til oversettelse eller annen analyse) .

Du vil nå PyNLPI når du har med disse datatypene å gjøre.

SpaCy

SpaCy, som trykker på Python for enkelhets skyld og Cython for hastighet, blir fakturert som "naturlig språkbehandling av industriell styrke." Skaperne hevder at det sammenlignes gunstig med NLTK, CoreNLP og andre konkurrenter når det gjelder hastighet, modellstørrelse og nøyaktighet. SpaCys største ulempe er at den er relativt ny, så den dekker bare engelsk og noen få andre (hovedsakelig europeiske) språk. Når det er sagt, har SpaCy allerede nådd versjon 2.2 i skrivende stund.

SpaCy inkluderer mest alle funksjonene som finnes i de konkurrerende rammene: talemerking, avhengighetsparsering, navngitt enhetsgjenkjenning, tokenisering, setningssegmentering, regelbaserte kampoperasjoner, ordvektorer og tonnevis mer. SpaCy inkluderer også optimaliseringer for GPU-operasjoner - både for å akselerere beregning og for lagring av data på GPU for å unngå kopiering.

Spacys dokumentasjon er utmerket. En installasjonsveiviser genererer kommandolinjeinstallasjonshandlinger for Windows, Linux og macOS og for forskjellige Python-miljøer (pip, conda, etc.) også. Språkmodeller installeres som Python-pakker, slik at de kan spores som en del av en applikasjons avhengighetsliste.

TextBlob

TextBlob er en vennlig frontend til mønster- og NLTK-bibliotekene, og pakke begge disse bibliotekene inn på høyt nivå, brukervennlige grensesnitt. Med TextBlob bruker du mindre tid på å slite med komplikasjonene til Pattern og NLTK og mer tid på å få resultater.

TextBlob glatter veien ved å utnytte innfødte Python-objekter og syntaks. Hurtigstarteksemplene viser hvordan tekster som skal behandles rett og slett blir behandlet som strenger, og vanlige NLP-metoder som tagging av tale er tilgjengelig som metoder på disse strengobjektene.

En annen fordel med TextBlob er at du kan "løfte hetten" og endre funksjonaliteten etter hvert som du blir tryggere. Mange standardkomponenter, som sentimentanalysesystemet eller tokenizer, kan byttes ut etter behov. Du kan også opprette objekter på høyt nivå som kombinerer komponenter - denne sentimentanalysatoren, den klassifisereren osv. - og bruke dem på nytt med minimal innsats. På denne måten kan du raskt prototype noe med TextBlob, og deretter finjustere det senere.

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