8 geweldige Python-bibliotheken voor natuurlijke taalverwerking

Natuurlijke taalverwerking, kortweg NLP, kan het best worden omschreven als 'AI voor spraak en tekst'. De magie achter spraakopdrachten, spraak- en tekstvertaling, sentimentanalyse, tekstsamenvatting en vele andere linguïstische toepassingen en analyses, natuurlijke taalverwerking is drastisch verbeterd door diepgaand leren.

De Python-taal biedt een handige front-end voor alle soorten machine learning, inclusief NLP. In feite is er een verlegenheid van NLP-rijkdom om uit te kiezen in het Python-ecosysteem. In dit artikel zullen we elk van de NLP-bibliotheken die beschikbaar zijn voor Python verkennen - hun gebruiksscenario's, hun sterke punten, hun zwakke punten en hun algemene populariteitsniveau.

Merk op dat sommige van deze bibliotheken versies van een hoger niveau bieden van dezelfde functionaliteit die door anderen worden getoond, waardoor die functionaliteit gemakkelijker te gebruiken is ten koste van enige precisie of prestatie. U zult een bibliotheek willen kiezen die zowel bij uw expertiseniveau als bij de aard van het project past.

CoreNLP

De CoreNLP-bibliotheek - een product van Stanford University - is gebouwd als een productieklare oplossing voor natuurlijke taalverwerking die NLP-voorspellingen en analyses op schaal kan leveren. CoreNLP is geschreven in Java, maar er zijn meerdere Python-pakketten en API's voor beschikbaar, waaronder een native Python NLP-bibliotheek genaamd StanfordNLP.

CoreNLP bevat een breed scala aan taalhulpmiddelen: grammatica-tagging, benoemde entiteitsherkenning, parsing, sentimentanalyse en nog veel meer. Het is ontworpen om agnostisch te zijn voor de menselijke taal en ondersteunt momenteel Arabisch, Chinees, Frans, Duits en Spaans naast Engels (met ondersteuning voor Russisch, Zweeds en Deens beschikbaar van derden). CoreNLP bevat ook een web API-server, een handige manier om voorspellingen te doen zonder al te veel extra werk.

De gemakkelijkste plaats om te beginnen met CoreNLP's Python-wrappers is StanfordNLP, de referentie-implementatie gemaakt door de Stanford NLP Group. StanfordNLP is niet alleen goed gedocumenteerd, maar wordt ook regelmatig onderhouden; veel van de andere Python-bibliotheken voor CoreNLP zijn al een tijdje niet meer bijgewerkt.

CoreNLP ondersteunt ook het gebruik van NLTK, een belangrijke Python NLP-bibliotheek die hieronder wordt besproken. Vanaf versie 3.2.3 bevat NLTK interfaces naar CoreNLP in zijn parser. Zorg ervoor dat u de juiste API gebruikt.

Het voor de hand liggende nadeel van CoreNLP is dat je enige bekendheid met Java nodig hebt om het aan de gang te krijgen, maar dat is niets dat een zorgvuldig lezen van de documentatie niet kan bereiken. Een andere hindernis zou de licentieverlening van CoreNLP kunnen zijn. De hele toolkit is gelicentieerd onder de GPLv3, wat betekent dat voor elk gebruik in propriëtaire software die u aan anderen distribueert een commerciële licentie vereist is.

Gensim

Gensim doet slechts twee dingen, maar doet ze buitengewoon goed. De focus ligt op statistische semantiek: documenten analyseren op hun structuur en vervolgens andere documenten beoordelen op basis van hun gelijkenis.

Gensim kan met zeer grote tekstlichamen werken door documenten naar de analyse-engine te streamen en er stapsgewijs onbewaakt leren op uit te voeren. Het kan meerdere soorten modellen maken, elk geschikt voor verschillende scenario's: Word2Vec, Doc2Vec, FastText en Latent Dirichlet Allocation.

De gedetailleerde documentatie van Gensim omvat tutorials en how-to-gidsen die de belangrijkste concepten uitleggen en ze illustreren met praktische voorbeelden. Veelvoorkomende recepten zijn ook beschikbaar in de Gensim GitHub-repo.

NLTK

De Natural Language Toolkit, of kortweg NLTK, is een van de bekendste en krachtigste Python-bibliotheken voor natuurlijke taalverwerking. Er zijn veel corpora (datasets) en getrainde modellen beschikbaar om direct met NLTK te gebruiken, zodat u meteen kunt experimenteren met NLTK.

Zoals in de documentatie staat, biedt NLTK een breed scala aan tools voor het werken met tekst: "classificatie, tokenisatie, stamvorming, tagging, parsing en semantisch redeneren." Het kan ook werken met een aantal tools van derden om de functionaliteit te verbeteren.

Houd er rekening mee dat NLTK is gemaakt door en voor een academisch onderzoekspubliek. Het is niet ontworpen voor NLP-modellen in een productieomgeving. De documentatie is ook wat mager; zelfs de how-tos zijn dun. Er is ook geen 64-bits binair bestand; u moet de 32-bits editie van Python installeren om deze te kunnen gebruiken. Ten slotte is NLTK ook niet de snelste bibliotheek, maar het kan worden versneld met parallelle verwerking.

Als u vastbesloten bent gebruik te maken van wat er in NLTK zit, kunt u in plaats daarvan beginnen met TextBlob (hieronder besproken).

Patroon

Als u alleen een populaire website hoeft te schrapen en te analyseren wat u vindt, zoek dan naar Pattern. Deze bibliotheek voor het verwerken van natuurlijke taal is veel kleiner en smaller dan andere bibliotheken die hier worden behandeld, maar dat betekent ook dat deze is gericht op het heel goed doen van één gemeenschappelijk werk.

Pattern wordt geleverd met ingebouwde opties voor het scrapen van een aantal populaire webservices en bronnen (Google, Wikipedia, Twitter, Facebook, generieke RSS, etc.), die allemaal beschikbaar zijn als Python-modules (bijv. from pattern.web import Twitter). U hoeft de wielen niet opnieuw uit te vinden om gegevens van die sites te krijgen, met al hun individuele eigenaardigheden. U kunt vervolgens een aantal veelgebruikte NLP-bewerkingen op de gegevens uitvoeren, zoals sentimentanalyse.

Pattern legt enkele van zijn lagere functionaliteit bloot, waardoor u NLP-functies, zoeken in n-grammen, vectoren en grafieken rechtstreeks kunt gebruiken als u dat wilt. Het heeft ook een ingebouwde helperbibliotheek voor het werken met veelgebruikte databases (MySQL, SQLite en MongoDB in de toekomst), waardoor het gemakkelijk wordt om te werken met tabelgegevens die zijn opgeslagen uit eerdere sessies of die zijn verkregen van derden.

Polyglot

Polyglot, zoals de naam al aangeeft, maakt natuurlijke taalverwerkingstoepassingen mogelijk die met meerdere talen tegelijk werken.  

De NLP-functies in Polyglot weerspiegelen wat er in andere NLP-bibliotheken wordt gevonden: tokenisatie, benoemde entiteitsherkenning, tagging van spraakgedeelten, sentimentanalyse, woordinbedding, enz. Voor elk van deze bewerkingen biedt Polyglot modellen die werken met de benodigde talen.

Merk op dat de taalondersteuning van Polyglot sterk verschilt van functie tot functie. Het tokenisatiesysteem ondersteunt bijvoorbeeld bijna 200 talen (grotendeels omdat het het Unicode-algoritme voor tekstsegmentatie gebruikt), en sentimentanalyse ondersteunt 136 talen, maar tagging van delen van spraak ondersteunt slechts 16.

PyNLPI

PyNLPI (uitgesproken als "ananas") heeft slechts een basislijst van natuurlijke taalverwerkingsfuncties, maar het heeft een aantal echt nuttige gegevensconversie- en gegevensverwerkingsfuncties voor NLP-gegevensformaten.

De meeste NLP-functies in PyNLPI zijn voor basistaken zoals tokenisatie of n-gram-extractie, samen met enkele statistische functies die nuttig zijn in NLP, zoals Levenshtein-afstand tussen strings of Markov-ketens. Die functies zijn voor het gemak geïmplementeerd in pure Python, dus het is onwaarschijnlijk dat ze prestaties op productieniveau hebben.

Maar PyNLPI blinkt uit door het werken met enkele van de meer exotische gegevenstypen en -formaten die in de NLP-ruimte zijn ontstaan. PyNLPI kan GIZA-, Moses ++, SoNaR-, Taggerdata- en TiMBL-gegevensindelingen lezen en verwerken, en wijdt een hele module aan het werken met FoLiA, het XML-documentformaat dat wordt gebruikt om taalbronnen zoals corpora (tekstlichamen die worden gebruikt voor vertaling of andere analyse) te annoteren . 

U wilt PyNLPI bereiken wanneer u met die gegevenstypen te maken heeft.

SpaCy

SpaCy, dat Python gebruikt voor het gemak en Cython voor snelheid, wordt aangekondigd als 'natuurlijke taalverwerking van industriële sterkte'. De makers beweren dat het gunstig afsteekt bij NLTK, CoreNLP en andere concurrenten in termen van snelheid, modelgrootte en nauwkeurigheid. Het belangrijkste nadeel van SpaCy is dat het relatief nieuw is, dus het omvat alleen Engels en een paar andere (voornamelijk Europese) talen. Dat gezegd hebbende, heeft SpaCy op het moment van schrijven al versie 2.2 bereikt.

SpaCy bevat bijna elke functie die in die concurrerende frameworks wordt aangetroffen: spraaklabels, parsering van afhankelijkheden, herkenning van benoemde entiteiten, tokenisatie, zinsegmentatie, regelgebaseerde matchoperaties, woordvectoren en nog veel meer. SpaCy bevat ook optimalisaties voor GPU-bewerkingen - zowel voor het versnellen van berekeningen als voor het opslaan van gegevens op de GPU om kopiëren te voorkomen.

De documentatie van Spacy is uitstekend. Een installatiewizard genereert installatieacties via de opdrachtregel voor Windows, Linux en macOS en ook voor verschillende Python-omgevingen (pip, conda, enz.). Taalmodellen worden geïnstalleerd als Python-pakketten, zodat ze kunnen worden gevolgd als onderdeel van de afhankelijkheidslijst van een toepassing.

TextBlob

TextBlob is een vriendelijke front-end voor de Pattern- en NLTK-bibliotheken, die beide bibliotheken verpakt in hoogwaardige, gemakkelijk te gebruiken interfaces. Met TextBlob besteed je minder tijd aan het worstelen met de fijne kneepjes van Pattern en NLTK en meer tijd aan het behalen van resultaten.

TextBlob effent de weg door gebruik te maken van native Python-objecten en syntaxis. De quickstart-voorbeelden laten zien hoe te verwerken teksten eenvoudig als strings worden behandeld, en algemene NLP-methoden zoals part-of-speech-tagging zijn beschikbaar als methoden voor die string-objecten.

Een ander voordeel van TextBlob is dat u de motorkap kunt "optillen" en de functionaliteit kunt wijzigen naarmate u meer zelfvertrouwen krijgt. Veel standaardcomponenten, zoals het sentimentanalysesysteem of de tokenizer, kunnen indien nodig worden verwisseld. U kunt ook objecten op hoog niveau maken die componenten combineren - deze sentimentanalysator, die classificator, enz. - en deze met minimale inspanning opnieuw gebruiken. Op deze manier kunt u snel een prototype maken van iets met TextBlob en het later verfijnen.