Natural Language Processing, förkortat NLP, kan beskrivas som AI för tal och text. Tekniken har utvecklats avsevärt med hjälp av djupinlärning och ligger till grund för all den ”magi” vi upplever i vår vardag med röstkommandon, översättning av tal och text, analys av sinnesstämningar, textsammanfattning och många andra lingvistiska applikationer och analyser.

Programmeringsspråket Python utgör ett behändigt verktyg för all slags maskininlärning, inklusive NLP. Faktum är att det finns nästan överdrivet mycket att välja bland i ekosystemet kring Python. I denna artikel ska vi gå igenom alla de stora Python-biblioteken för NLP som finns tillgängliga för utvecklare av NLP-applikationer och beskriva deras användningsområden, deras styrkor och svagheter, och hur vanligt förekommande de är.

Kom ihåg att vissa av dessa bibliotek fungerar som högre abstraktionsnivåer av samma funktionaliteter som andra bibliotek ger, vilket höjer användarvänligheten för dessa funktioner på bekostnad av precision och prestanda. Det du vill är att välja bibliotek som passar din kunskapsnivå och användningsområdet för ditt projekt. Om ditt projekt gäller det svenska språket gäller det förstås även att välja ett bibliotek som stödjer svenska till de delar där stöd för specifika språk är viktigt.
 

CoreNLP

Biblioteket CoreNLP, som utvecklats av universitet i Stanford, är byggt för att vara en fullskalig produktionslösning för NLP. CoreNLP är i sig utvecklad i Java, men det finns ett flertal Python-paket och api:er, inklusive standardbiblioteket StanfordNLP.

CoreNLP kommer med en bred uppsättning verktyg för naturliga språk, till exempel verktyg för grammatik-taggning, namnigenkänning, satslösning, analys av känslostämningar och mycket annat. CoreNLP är designat så att det ska vara oberoende av mänskliga språk och har idag utöver engelska stöd för arabiska, kinesiska, franska, tyska och spanska. Från tredjepartsutvecklare finns även stöd för svenska, danska och ryska. Biblioteket inkluderar även en web-api-server, vilket är ett smidigt sätt att publicera förutsägelser utan alltför mycket extra arbete.

Det enklaste sättet att komma igång med CoreNLPs paket för Python är genom standardbiblioteket StanfordNLP. Detta bibliotek är väldokumenterat och underhålls regelbundet. Många av de andra biblioteken för CoreNLP har inte sett ny kod på ett tag. CoreNLP stödjer också NLTK, ett bibliotek vi tittar på nedan. Från och med version 3.2.3 av NLTK ingår det gränssnitt mot CoreNLP i NLTKs parser. Var bara noga med att du använder rätt api.

Den uppenbara baksidan med CoreNLP är att du behöver ha viss koll på Java för att komma igång, men det borde gå om du är noga med att läsa dokumentationen och följer instruktionerna. Ett annat problem kan vara licensieringen; CoreNLP är licensierad under GPLv3 vilket innebär att all användning av koden i eventuell proprietär mjukvara som du ger ut måste ha en kommersiell licens.

Genism

Biblioteket Genism gör endast två saker, men gör dem å andra sidan väldigt bra. Fokus ligger på statistisk semantik, att analysera strukturen i dokument, och sedan poängsätta andra dokument baserat på likheter.

Genism kan bearbeta mycket stora volymer text genom att strömma dokument genom systemets analysmotor och utföra inkrementell oövervakad inlärning av dokumenten. Genism kan skapa flera olika typer av modeller som Word2Vec, Doc2Vec, FastText och Latent Dirichlet Allocation, som var och en passar för lite olika scenarier.

Genism har också bra dokumentation med instruktioner och guider som förklarar nyckelkoncept och illustrerar dem med olika praktiska exempel. Allt finns tillgängligt på Genisms github-repo.

NLTK

Natural Language ToolKit, förkortat NLTK, är ett av de mest välkända och kraftfulla NLP-biblioteken för Python. Biblioteket innehåller många färdiga datasets och tränade modeller som går att använda direkt ur paketet, så det är enkelt att komma igång med dina experiment.

NLTK kommer med ett otal verktyg för att arbeta med texter: klassificering, symbolisering, verktyg för stammar, taggning, satslösning och semantiska resonemang. För att öka funktionaliteten kan NLTK också fungera tillsammans med tredjepartsverktyg.

Det är viktigt att förstå att NLTK skapades med akademisk forskning i åtanke, det är inte utvecklat för produktionsmiljöer. Dokumentationen är också ganska knapphändig, till och med så-gör-du-instruktionerna är ganska tunna. Dessutom finns det ingen 64-bitars binär, så du måste installera 32-bitars-versionen av Python för att kunna använda NLTK. Slutligen är NLTK inte det snabbaste biblioteket heller, även om det kan snabbas upp med hjälp av parallellisering. Ett annat sätt att komma åt innehållet i NLTK är genom TextBlob, se nedan.

Pattern

Om allt du behöver göra är att skrapa webbsajter och analysera innehållet är Pattern verktyget för dig. Detta bibliotek för NLP är betydligt mindre och smalare än de övriga vi går igenom i denna artikel, men å andra sidan är Pattern fokuserat på en enda vanlig uppgift vilket den också utför väldigt bra.

I paketet ingår ett antal inbyggda moduler för att skrapa ett otal populära webbsajter och -tjänster (Google, Wikipedia, Twitter, Facebook, generiska RSS:er, et cetera). Du behöver alltså inte uppfinna hjulet igen för att hämta data från dessa sajter, med alla individuella egenheter de har. Sedan kan du utföra ett antal NLP-operationer på de data du hämtat, till exempel stämningsanalyser.

Pattern har också ett antal lågnivåfunktioner som låter dig använda NLP-funktioner, n-gram-sökningar, vektorer och grafer direkt ur verktygslådan. Pattern har också inbyggda hjälpbibliotek för att hantera vanliga databaser som MySQL, SQLite och i framtiden även MongoDB, vilket gör det enkelt att arbeta med tabelldata som du sparat från tidigare sessioner eller hämtat från tredjepartskällor.

Polyglot

Som namnet antyder ger Polyglot dig möjlighet att bygga NLP-applikationer som hanterar flera naturliga språk på samma gång. Funktionerna i Polyglot är ungefär desamma som i andra system, alltså symbolisering, igenkänning av namngivna entiteter, taggning av tal, känsloanalyser, inbäddade ord, och så vidare. För alla dessa funktioner ger Polyglot modeller som kan arbeta med olika naturliga språk.

Det är bra att komma ihåg att Polyglots stöd för olika naturliga språk varierar en hel del för de olika funktionerna. Exempelvis symbolhanteringen har stöd för nästan 200 naturliga språk, mycket tack vare användningen av algoritmen Unicode Text Segmentation, känsloanalysen har stöd för 136 språk i skrivande stund, medan taggning av naturligt tal endast har stöd för 16 naturliga språk.
 

PyNLPl

Biblioteket PyNLPl (uttalas ”pineapple” med gement L på slutet) har endast en basal uppsättning funktioner för NLP-processning, men har några mycket användbara funktioner för hantering och konvertering av dataformat för NLP.

De vanliga funktionerna i PyNLPl täcker vanliga uppgifter som symbolisering och n-gram-extrahering, tillsammans med några användbara statistiska funktioner inom NLP som Levenshteinavstånd mellan strängar och Markovkedjor. Dessa funktioner är implementerade i ren Python för enkelhets skull, men de lär inte prestandamässigt stå pall i produktionssammanhang.

PyNLPl kommer iställer till sin rätt när det kommer till att hantera exotiska dataformat som GIZA, Moses++, SoNaR, Taggerdata och TiMBL. Biblioteket har till och med en hel modul för FoLiA – XML-formatet som används för att kommentera språkresurser som corpora, alltså textmassor för översättning och andra typer av språkanalys.

SpaCy

Bibliotekeket SpaCy är relativt nytt och stödjer för närvarande bara ett fåtal språk, inklusive engelska och en handfull andra europeiska språk. Utvecklarna bakom SpaCy har sett till att dra nytta av Python för dess behändighet och Cython för maximal prestanda, och de hävdar att SpaCy är ett produktionskapabelt NLP som står sig väl mot andra system som NLTK, och CoreNLP.

Listan över funktioner som följer med SpaCy motsvarar också vad som inkluderas i de konkurrerande ramverken, dit hör till exempel taltaggning, satslösning, igenkänning av namngivna entiteter, symbolisering, meningssegmentering, regelbaserade matchningsoperationer, ordvektorer och en massa annat. SpaCy stödjer även optimeringar för grafikkretsar (GPU), både för att accelerera beräkningar och för att lagra data på grafikkretsarna för att slippa kopieraing av data.

SpaCy kommer med en mycket bra dokumentation. En installationsguide skapar installationskommandon i terminalerna för Windows, Linux, och Mac, men även för Pythonmiljöer som Conda och Pip. Språkmodulerna installeras som Pythonpaket vilket innebär att de kan spåras som en del av en applikations lista av beroenden.

TextBlob

Tack vare TextBlob kan du ägna mer tid åt att få resultat än åt att klura ut de intrikata detaljerna i bibliotek som NLTK eller Pattern. Det beror på att TextBlob fungerar som ett användarnavänligt gränssnitt mot just de nämnda biblioteken.

En annan fördel med TextBlob är att du kan ”lyfta på huven” och anpassa dess funktionalitet varefter du blir mer bekväm med systemet. Många av de medföljande funktionerna kan bytas ut mot andra funktioner vartefter du behöver dem. Du kan också skapa högnivå-objekt som kombinationer av komponenter – du kan ta en viss känsloanalysator, en viss klassificerare, och så vidare och återanvända dem på enklaste sätt. På detta sätt kan du snabbt få igång en prototyp med TextBlob och rafinera din uppsättning senare.

Läs också:
Nu ska Googles översättningar bli mindre fördomsfulla
Så når du genom bruset i rösthajpen