4 NLP-bibliotheken die geweldig zijn

Er zijn veel bibliotheken gemaakt om NLP-problemen op te lossen. Hier zijn enkele van de meest verbazingwekkende die ons door de jaren heen hebben geholpen om kwaliteitsprojecten aan onze klanten te leveren. Houd er rekening mee dat deze lijst geen compleet overzicht is van alle beschikbare NLP-bibliotheken, maar dit zijn de bibliotheken waarvan we denken dat ze geweldig zijn.
illustration

In het verleden waren er veel geweldige geesten nodig om een NLP-project te doen, wiskundigen, machine learning-ingenieurs en taalkunde. Nu kunnen ontwikkelaars kant-en-klare tools gebruiken die de voorverwerking van tekst vereenvoudigen, zodat ze zich kunnen concentreren op het bouwen van machine learning-modellen.

Waarom Python?

Allereerst is de programmeertaal die onze eerste keuze is in NLP-projecten Python. De eenvoudige syntaxis en transparante semantiek van deze taal maken het een uitstekende keuze.

Er zijn veel bibliotheken gemaakt om NLP-problemen op te lossen. Hier zijn enkele van de meest verbazingwekkende die ons door de jaren heen hebben geholpen om kwaliteitsprojecten aan onze klanten te leveren. Houd er rekening mee dat deze lijst geen compleet overzicht is van alle beschikbare NLP-bibliotheken, maar dit zijn de bibliotheken waarvan we denken dat ze geweldig zijn.

Natural Language Toolkit

De NLTK-bibliotheek is over het algemeen het populairst. Dit komt door het brede scala aan toepassingen dat het mogelijk maakt, zoals sentimentanalyse, tokenisatie, classificatie. NLTK kan ook op veel talen worden toegepast, waaronder Nederlands (wat bij andere bibliotheken vaak niet het geval is). NLTK is vooral handig bij tekstverwerking.

Het nadeel is dat deze bibliotheek vrij traag kan zijn en ook moeilijk te gebruiken, de leercurve is steil.

Features van de Natural Language Toolkit zijn onder meer:

  • Text classification
  • Part-of-speech tagging
  • Entity extraction
  • Tokenization
  • Parsing
  • Stemming
  • Semantic reasoning
from nltk.tokenize import word_tokenize

sample_text = "this text needs to be tokenized"
word_tokenize(sample_text)

# ----- Expected output -----
# ['this', 'text', 'needs', 'to', 'be', 'tokenized']
from nltk.stem.snowball import SnowballStemmer

dutchStemmer = SnowballStemmer("dutch")
dutchStemmer.stem("artikelen")

# ----- Expected output -----
# 'artikel'

SpaCy

SpaCy

SpaCy, wat staat voor Python voor gemak en Cython voor snelheid, is de volgende stap in de NLTK-evolutie. NLTK is onhandig en traag als het gaat om complexere bedrijfstoepassingen.

We geven ook de voorkeur aan deze bibliotheek boven NLTK vanwege zijn snelheid, aangezien deze in Cython is geschreven. Het is een relatief jonge bibliotheek die is ontworpen voor productiegebruik. Maar dat maakt het ook toegankelijker dan andere Python-bibliotheken.

SpaCy is goed in syntactische analyse, wat handig is voor aspectgebaseerde sentimentanalyse en conversational user interface-optimalisatie.

SpaCy is ook een uitstekende keuze voor herkenning van benoemde entiteiten. U kunt SpaCy gebruiken voor zakelijke inzichten en marktonderzoek.

Het is een perfecte match voor het vergelijken van klantprofielen, productprofielen of tekstdocumenten.

Het bevat bijna elke functie die te vinden is in die concurrerende frameworks:

  • Part-of-speech tagging
  • Dependency parsing
  • Named entity recognition
  • Tokenization
  • Sentence segmentation
  • Rule-based match operations
  • Word vectors

U kunt ook woordvectoren bouwen die worden gebruikt in bijv. onderwerp modellering. Het is een echt voordeel met deze bibliotheek. In tegenstelling tot OpenNLP en CoreNLP werkt SpaCy met word2vec en doc2vec.

Het grootste voordeel ten opzichte van de andere NLP-tools is de API. SpaCy heeft alle functies in één keer gecombineerd, dus u hoeft niet zelf modules te selecteren.

Er is echter ook een groot nadeel aan deze tool. Het ondersteunt het kleinste aantal talen. Maar dit zou moeten verbeteren naarmate de populariteit toeneemt.

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("ML2Grow is a fast growing startup located in Ghent")

for ent in doc.ents:
    print(ent.text, ent.label_)

# ----- Expected output -----
ML2Grow ORG
Ghent GPE  

ORG: Companies, agencies, institutions
GPE: Geopolitical entity, i.e. countries, cities, states.

Gensim

Soms moet u bepaalde informatie extraheren om zakelijke inzichten te ontdekken. GenSim is de perfecte tool voor dergelijke dingen.

We gebruiken Gensim voornamelijk om overeenkomsten te vinden in tekstdocumenten en onderwerpmodellering. Het is een geweldige bibliotheek voor het identificeren van overeenkomsten tussen twee documenten door middel van vectorruimtemodellering en onderwerpmodellering. Het ziet de inhoud van de documenten als reeksen vectoren en clusters. En dan classificeert GenSim ze. Het biedt een prachtige visualisatie van de onderwerpen in combinatie met python-bibliotheek Pyldavis.

Het heeft ook een ongelooflijke optimalisatie van geheugengebruik en verwerkingssnelheid. Daarom kan het grote hoeveelheden tekstgegevens verwerken.

De belangrijkste use-cases van GenSim zijn:

  • Data analysis
  • Semantic search applications
  • Text generation applications (chatbot, service customization, text summarization, etc.)
import gensim

# Load pre-trained Word2Vec model
model = gensim.models.Word2Vec.load("modelName.model")
model.similarity('Complement', 'Compliment')

# ----- Expected output -----
0.961089779453727

Flair

Flair is een eenvoudige NLP-bibliotheek. Het framework van Flair bouwt rechtstreeks op PyTorch, een van de beste deep learning-frameworks die er zijn.

Flair is een geweldige bibliotheek voor het herkennen van entiteiten en het taggen van delen van spraak. Werkt erg goed op Engelse tekst, maar geeft vreselijke resultaten op Nederlandse documenten. Aangezien het merendeel van onze klanten Nederlandstalige bronnen heeft, heeft het voor ons weinig zin om deze bibliotheek te gebruiken, maar we zijn er nog steeds dol op.

Belangrijkste NLP-taken:

  • Name-Entity Recognition
  • Parts-of-Speech Tagging
  • Text classification
  • Training Custom Models
from flair.models import TextClassifier
from flair.data import Sentence

classifier = TextClassifier.load('en-sentiment')
sentence = Sentence('NLP libraries are awesome!')
classifier.predict(sentence)

# ----- Expected output -----
[Positive (1.0)]

Kanttekening

De bovengenoemde bibliotheken zijn nog steeds sterk gericht op het Engels, ondanks dat ze vaak meertalig zijn. De meeste NLP-studies zijn daarom sterk gericht op Engels en andere veel gesproken talen zoals Chinees of Spaans. Dit leidt natuurlijk tot verdere marginalisering van andere talen.

Een NLP-bibliotheek die zeker het vermelden waard is maar de lijst niet heeft gehaald, is BERT. Een open-source neuraal netwerk-gebaseerde techniek voor NLP ontwikkeld door Google.

BERT is een afkorting voor Bidirectional Encoder Representations from Transformers. De term bidirectioneel betekent dat de context van een woord wordt gegeven door zowel de woorden die erop volgen als door de woorden die eraan voorafgaan. Deze techniek maakt dit algoritme moeilijk te trainen, maar zeer effectief. In 2019 werd BERT door Google Zoeken geadopteerd voor meer dan 70 talen. Vorig jaar werd bijna elke Engelse zoekopdracht verwerkt door BERT.

In onze volgende en laatste post van deze serie gaan we dieper in op de praktische kant van NLP in het bedrijfsleven en de industrie.