8 fantastiche librerie Python per l'elaborazione del linguaggio naturale

L'elaborazione del linguaggio naturale, o PNL in breve, è meglio descritta come "AI per parlato e testo". La magia dietro i comandi vocali, la traduzione vocale e di testo, l'analisi del sentiment, il riepilogo del testo e molte altre applicazioni e analisi linguistiche, l'elaborazione del linguaggio naturale è stata notevolmente migliorata attraverso l'apprendimento profondo.

Il linguaggio Python fornisce un comodo front-end a tutte le varietà di machine learning, inclusa la PNL. In effetti, c'è l'imbarazzo della ricchezza della PNL tra cui scegliere nell'ecosistema Python. In questo articolo esploreremo ciascuna delle librerie NLP disponibili per Python: i loro casi d'uso, i loro punti di forza, i loro punti deboli e il loro livello generale di popolarità.

Si noti che alcune di queste librerie forniscono versioni di livello superiore della stessa funzionalità esposta da altri, rendendo tale funzionalità più facile da usare a scapito di una certa precisione o prestazioni. Ti consigliamo di scegliere una libreria adatta sia al tuo livello di esperienza che alla natura del progetto.

CoreNLP

La libreria CoreNLP, un prodotto della Stanford University, è stata costruita per essere una soluzione di elaborazione del linguaggio naturale pronta per la produzione, in grado di fornire previsioni e analisi della PNL su larga scala. CoreNLP è scritto in Java, ma sono disponibili più pacchetti Python e API, inclusa una libreria PNL Python nativa chiamata StanfordNLP.

CoreNLP include un'ampia gamma di strumenti linguistici: etichettatura grammaticale, riconoscimento di entità denominate, analisi, analisi del sentiment e molto altro ancora. È stato progettato per essere indipendente dalla lingua umana e attualmente supporta arabo, cinese, francese, tedesco e spagnolo oltre all'inglese (con supporto russo, svedese e danese disponibile da terze parti). CoreNLP include anche un server API Web, un modo conveniente per fornire previsioni senza troppo lavoro aggiuntivo.

Il punto più semplice per iniziare con i wrapper Python di CoreNLP è StanfordNLP, l'implementazione di riferimento creata dallo Stanford NLP Group. Oltre ad essere ben documentato, StanfordNLP viene anche mantenuto regolarmente; molte delle altre librerie Python per CoreNLP non sono state aggiornate da tempo.

CoreNLP supporta anche l'uso di NLTK, un'importante libreria Python NLP discussa di seguito. A partire dalla versione 3.2.3, NLTK include le interfacce per CoreNLP nel suo parser. Assicurati solo di utilizzare l'API corretta.

L'ovvio svantaggio di CoreNLP è che avrai bisogno di familiarità con Java per farlo funzionare, ma non è niente che una lettura attenta della documentazione non possa ottenere. Un altro ostacolo potrebbe essere la licenza di CoreNLP. L'intero toolkit è concesso in licenza con GPLv3, il che significa che qualsiasi utilizzo in software proprietario distribuito ad altri richiederà una licenza commerciale.

Gensim

Gensim fa solo due cose, ma le fa molto bene. Il suo obiettivo è la semantica statistica: analizzare i documenti per la loro struttura, quindi assegnare un punteggio ad altri documenti in base alla loro somiglianza.

Gensim può lavorare con corpi di testo molto grandi trasmettendo documenti al suo motore di analisi ed eseguendo su di essi l'apprendimento non supervisionato in modo incrementale. Può creare più tipi di modelli, ciascuno adatto a diversi scenari: Word2Vec, Doc2Vec, FastText e Latent Dirichlet Allocation.

La documentazione dettagliata di Gensim include tutorial e guide pratiche che spiegano i concetti chiave e li illustrano con esempi pratici. Le ricette comuni sono disponibili anche nel repository Gensim GitHub.

NLTK

Il Natural Language Toolkit, o NLTK in breve, è tra le più note e potenti librerie di elaborazione del linguaggio naturale Python. Molti corpora (set di dati) e modelli addestrati sono disponibili per l'uso con NLTK immediatamente, quindi puoi iniziare subito a sperimentare con NLTK.

Come afferma la documentazione, NLTK fornisce un'ampia varietà di strumenti per lavorare con il testo: "classificazione, tokenizzazione, stemming, tagging, analisi e ragionamento semantico". Può anche funzionare con alcuni strumenti di terze parti per migliorarne le funzionalità.

Tieni presente che NLTK è stato creato da e per un pubblico di ricerca accademica. Non è stato progettato per servire i modelli NLP in un ambiente di produzione. Anche la documentazione è piuttosto scarsa; anche gli how-to sono sottili. Inoltre, non esiste un binario a 64 bit; dovrai installare l'edizione a 32 bit di Python per usarlo. Infine, NLTK non è nemmeno la libreria più veloce, ma può essere velocizzata con l'elaborazione parallela.

Se sei determinato a sfruttare ciò che è all'interno di NLTK, potresti iniziare invece con TextBlob (discusso di seguito).

Modello

Se tutto ciò che devi fare è raschiare un sito web popolare e analizzare ciò che trovi, cerca Pattern. Questa libreria di elaborazione del linguaggio naturale è molto più piccola e più stretta di altre librerie trattate qui, ma ciò significa anche che si concentra sul fare un lavoro comune davvero bene.

Pattern è dotato di built-in per lo scraping di numerosi servizi e fonti web popolari (Google, Wikipedia, Twitter, Facebook, RSS generici, ecc.), Tutti disponibili come moduli Python (ad es from pattern.web import Twitter.). Non devi reinventare le ruote per ottenere dati da quei siti, con tutte le loro peculiarità individuali. È quindi possibile eseguire una serie di operazioni NLP comuni sui dati, come l'analisi del sentiment.

Pattern espone alcune delle sue funzionalità di livello inferiore, consentendo di utilizzare le funzioni NLP, la ricerca in n-grammi, i vettori e i grafici direttamente, se lo si desidera. Ha anche una libreria di supporto incorporata per lavorare con database comuni (MySQL, SQLite e MongoDB in futuro), rendendo facile lavorare con dati tabulari memorizzati da sessioni precedenti o ottenuti da terze parti.

Poliglotta

Polyglot, come suggerisce il nome, consente applicazioni di elaborazione del linguaggio naturale che gestiscono più lingue contemporaneamente.  

Le funzionalità NLP in Polyglot fanno eco a ciò che si trova in altre librerie NLP: tokenizzazione, riconoscimento di entità denominate, tagging della parte del discorso, analisi del sentiment, word embedding, ecc.

Tieni presente che il supporto linguistico di Polyglot differisce notevolmente da funzionalità a funzionalità. Ad esempio, il sistema di tokenizzazione supporta quasi 200 lingue (in gran parte perché utilizza l'algoritmo di segmentazione del testo Unicode) e l'analisi del sentiment supporta 136 lingue, ma il tagging della parte del discorso ne supporta solo 16.

PyNLPI

PyNLPI (pronunciato "ananas") ha solo un elenco di base di funzioni di elaborazione del linguaggio naturale, ma ha alcune funzioni di conversione e elaborazione dati veramente utili per i formati di dati NLP.

La maggior parte delle funzioni PNL in PyNLPI sono per lavori di base come la tokenizzazione o l'estrazione di n-grammi, insieme ad alcune funzioni statistiche utili nella PNL come la distanza di Levenshtein tra stringhe o catene di Markov. Queste funzioni sono implementate in puro Python per comodità, quindi è improbabile che abbiano prestazioni a livello di produzione.

Ma PyNLPI brilla per lavorare con alcuni dei tipi di dati e formati più esotici che sono sorti nello spazio della PNL. PyNLPI può leggere ed elaborare i formati di dati GIZA, Moses ++, SoNaR, Taggerdata e TiMBL e dedica un intero modulo a lavorare con FoLiA, il formato di documento XML utilizzato per annotare le risorse linguistiche come i corpora (corpi di testo usati per la traduzione o altre analisi) . 

Ti consigliamo di raggiungere PyNLPI ogni volta che hai a che fare con quei tipi di dati.

SpaCy

SpaCy, che utilizza Python per praticità e Cython per velocità, è classificato come "elaborazione del linguaggio naturale di livello industriale". I suoi creatori affermano che si confronta favorevolmente con NLTK, CoreNLP e altri concorrenti in termini di velocità, dimensioni del modello e precisione. Lo svantaggio principale di SpaCy è che è relativamente nuovo, quindi copre solo l'inglese e poche altre lingue (principalmente europee). Detto questo, SpaCy ha già raggiunto la versione 2.2 al momento della stesura di questo documento.

SpaCy include quasi tutte le funzionalità che si trovano in quei framework concorrenti: tag vocale, analisi delle dipendenze, riconoscimento di entità denominate, tokenizzazione, segmentazione di frasi, operazioni di corrispondenza basate su regole, vettori di parole e molto altro. SpaCy include anche ottimizzazioni per le operazioni della GPU, sia per accelerare i calcoli, sia per archiviare i dati sulla GPU per evitare la copia.

La documentazione di Spacy è eccellente. Una procedura guidata di configurazione genera azioni di installazione dalla riga di comando per Windows, Linux e macOS e anche per diversi ambienti Python (pip, conda, ecc.). I modelli di linguaggio si installano come pacchetti Python, quindi possono essere monitorati come parte dell'elenco delle dipendenze di un'applicazione.

TextBlob

TextBlob è un front-end amichevole per le librerie Pattern e NLTK, che racchiude entrambe le librerie in interfacce di alto livello e facili da usare. Con TextBlob, passi meno tempo a lottare con le complessità di Pattern e NLTK e più tempo a ottenere risultati.

TextBlob semplifica la strada sfruttando oggetti e sintassi Python nativi. Gli esempi di avvio rapido mostrano come i testi da elaborare vengono semplicemente trattati come stringhe e metodi comuni di NLP come la codifica della parte del discorso sono disponibili come metodi su quegli oggetti stringa.

Un altro vantaggio di TextBlob è che puoi "sollevare il cofano" e modificare la sua funzionalità man mano che diventi più sicuro. Molti componenti predefiniti, come il sistema di analisi del sentiment o il tokenizer, possono essere sostituiti secondo necessità. Puoi anche creare oggetti di alto livello che combinano componenti (questo analizzatore di sentimenti, quel classificatore e così via) e riutilizzarli con il minimo sforzo. In questo modo, puoi prototipare qualcosa rapidamente con TextBlob, quindi perfezionarlo in seguito.