8 großartige Python-Bibliotheken für die Verarbeitung natürlicher Sprache

Die Verarbeitung natürlicher Sprache, kurz NLP, wird am besten als „KI für Sprache und Text“ beschrieben. Die Magie hinter Sprachbefehlen, Sprach- und Textübersetzung, Stimmungsanalyse, Textzusammenfassung und vielen anderen sprachlichen Anwendungen und Analysen, der Verarbeitung natürlicher Sprache, wurde durch tiefes Lernen dramatisch verbessert.

Die Python-Sprache bietet ein praktisches Front-End für alle Arten des maschinellen Lernens, einschließlich NLP. Tatsächlich ist es im Python-Ökosystem peinlich, aus NLP-Reichtümern zu wählen. In diesem Artikel werden wir alle für Python verfügbaren NLP-Bibliotheken untersuchen - ihre Anwendungsfälle, ihre Stärken, ihre Schwächen und ihren allgemeinen Bekanntheitsgrad.

Beachten Sie, dass einige dieser Bibliotheken übergeordnete Versionen derselben Funktionalität bereitstellen, die von anderen bereitgestellt werden, wodurch die Verwendung dieser Funktionalität auf Kosten einer gewissen Präzision oder Leistung vereinfacht wird. Sie sollten eine Bibliothek auswählen, die sowohl Ihrem Fachwissen als auch der Art des Projekts entspricht.

CoreNLP

Die CoreNLP-Bibliothek - ein Produkt der Stanford University - wurde als produktionsbereite Lösung zur Verarbeitung natürlicher Sprache entwickelt, die NLP-Vorhersagen und -Analysen in großem Maßstab liefern kann. CoreNLP ist in Java geschrieben, es stehen jedoch mehrere Python-Pakete und APIs zur Verfügung, einschließlich einer nativen Python-NLP-Bibliothek namens StanfordNLP.

CoreNLP enthält eine breite Palette von Sprachwerkzeugen - Grammatik-Tagging, Erkennung benannter Entitäten, Analyse, Stimmungsanalyse und vieles mehr. Es wurde als Agnostiker der menschlichen Sprache konzipiert und unterstützt derzeit neben Englisch auch Arabisch, Chinesisch, Französisch, Deutsch und Spanisch (mit russischer, schwedischer und dänischer Unterstützung von Dritten). CoreNLP enthält auch einen Web-API-Server, eine bequeme Möglichkeit, Vorhersagen ohne zu viel zusätzliche Arbeit zu liefern.

Der einfachste Ausgangspunkt für die Python-Wrapper von CoreNLP ist StanfordNLP, die von der Stanford NLP Group erstellte Referenzimplementierung. StanfordNLP ist nicht nur gut dokumentiert, sondern wird auch regelmäßig gewartet. Viele der anderen Python-Bibliotheken für CoreNLP wurden seit einiger Zeit nicht mehr aktualisiert.

CoreNLP unterstützt auch die Verwendung von NLTK, einer wichtigen Python-NLP-Bibliothek, die unten erläutert wird. Ab Version 3.2.3 enthält NLTK Schnittstellen zu CoreNLP in seinem Parser. Stellen Sie einfach sicher, dass Sie die richtige API verwenden.

Der offensichtliche Nachteil von CoreNLP ist, dass Sie mit Java vertraut sein müssen, um es zum Laufen zu bringen, aber das ist nichts, was ein sorgfältiges Lesen der Dokumentation nicht erreichen kann. Eine weitere Hürde könnte die Lizenzierung von CoreNLP sein. Das gesamte Toolkit ist unter der GPLv3 lizenziert. Für jede Verwendung in proprietärer Software, die Sie an andere vertreiben, ist eine kommerzielle Lizenz erforderlich.

Gensim

Gensim macht nur zwei Dinge, aber sie macht sie außerordentlich gut. Der Schwerpunkt liegt auf der statistischen Semantik: Analysieren Sie Dokumente auf ihre Struktur und bewerten Sie andere Dokumente anhand ihrer Ähnlichkeit.

Gensim kann mit sehr großen Textmengen arbeiten, indem Dokumente an seine Analyse-Engine gestreamt und inkrementell unbeaufsichtigt gelernt werden. Es können mehrere Modelltypen erstellt werden, die jeweils für unterschiedliche Szenarien geeignet sind: Word2Vec, Doc2Vec, FastText und Latent Dirichlet Allocation.

Die ausführliche Dokumentation von Gensim enthält Tutorials und Anleitungen, in denen wichtige Konzepte erläutert und anhand von praktischen Beispielen veranschaulicht werden. Allgemeine Rezepte sind auch im Gensim GitHub-Repo verfügbar.

NLTK

Das Natural Language Toolkit, kurz NLTK, gehört zu den bekanntesten und leistungsstärksten Python-Bibliotheken für die Verarbeitung natürlicher Sprache. Viele Korpora (Datensätze) und trainierte Modelle können sofort mit NLTK verwendet werden, sodass Sie sofort mit NLTK experimentieren können.

Wie in der Dokumentation angegeben, bietet NLTK eine Vielzahl von Werkzeugen für die Arbeit mit Text: „Klassifizierung, Tokenisierung, Stemming, Tagging, Parsing und semantisches Denken“. Es kann auch mit einigen Tools von Drittanbietern zusammenarbeiten, um die Funktionalität zu verbessern.

Denken Sie daran, dass NLTK von und für ein akademisches Forschungspublikum erstellt wurde. Es wurde nicht für NLP-Modelle in einer Produktionsumgebung entwickelt. Die Dokumentation ist auch etwas spärlich; Sogar die Anleitungen sind dünn. Es gibt auch keine 64-Bit-Binärdatei. Sie müssen die 32-Bit-Edition von Python installieren, um sie verwenden zu können. Schließlich ist NLTK auch nicht die schnellste Bibliothek, kann aber durch parallele Verarbeitung beschleunigt werden.

Wenn Sie entschlossen sind, die Inhalte von NLTK zu nutzen, können Sie stattdessen mit TextBlob beginnen (siehe unten).

Muster

Wenn Sie nur eine beliebte Website durchsuchen und analysieren müssen, was Sie finden, greifen Sie nach Pattern. Diese Bibliothek zur Verarbeitung natürlicher Sprache ist viel kleiner und schmaler als andere hier behandelte Bibliotheken, aber das bedeutet auch, dass sie sich darauf konzentriert, einen gemeinsamen Job wirklich gut zu machen.

Das Muster enthält integrierte Funktionen zum Scraping einer Reihe beliebter Webdienste und -quellen (Google, Wikipedia, Twitter, Facebook, generisches RSS usw.), die alle als Python-Module verfügbar sind (z from pattern.web import Twitter. B. ). Sie müssen die Räder nicht neu erfinden, um Daten von diesen Websites mit all ihren individuellen Macken zu erhalten. Anschließend können Sie verschiedene gängige NLP-Vorgänge für die Daten ausführen, z. B. die Stimmungsanalyse.

Pattern stellt einige seiner Funktionen auf niedrigerer Ebene zur Verfügung, sodass Sie NLP-Funktionen, n-Gramm-Suche, Vektoren und Diagramme direkt verwenden können, wenn Sie möchten. Es verfügt außerdem über eine integrierte Hilfsbibliothek für die zukünftige Arbeit mit gängigen Datenbanken (MySQL, SQLite und MongoDB), die die Arbeit mit Tabellendaten erleichtert, die aus früheren Sitzungen gespeichert oder von Dritten bezogen wurden.

Polyglot

Polyglot ermöglicht, wie der Name schon sagt, Anwendungen zur Verarbeitung natürlicher Sprache, die mehrere Sprachen gleichzeitig verarbeiten.  

Die NLP-Funktionen in Polyglot spiegeln das wider, was in anderen NLP-Bibliotheken zu finden ist: Tokenisierung, Erkennung benannter Entitäten, Tag-of-Speech-Tagging, Stimmungsanalyse, Worteinbettung usw. Für jede dieser Operationen bietet Polyglot Modelle, die mit den erforderlichen Sprachen arbeiten.

Beachten Sie, dass die Sprachunterstützung von Polyglot von Feature zu Feature sehr unterschiedlich ist. Zum Beispiel unterstützt das Tokenisierungssystem fast 200 Sprachen (hauptsächlich, weil es den Unicode-Textsegmentierungsalgorithmus verwendet), und die Stimmungsanalyse unterstützt 136 Sprachen, aber das Tagging von Wortarten unterstützt nur 16.

PyNLPI

PyNLPI (ausgesprochen „Ananas“) verfügt nur über eine grundlegende Liste von Funktionen zur Verarbeitung natürlicher Sprache, verfügt jedoch über einige wirklich nützliche Funktionen zur Datenkonvertierung und Datenverarbeitung für NLP-Datenformate.

Die meisten NLP-Funktionen in PyNLPI sind für grundlegende Aufgaben wie Tokenisierung oder n-Gramm-Extraktion vorgesehen, zusammen mit einigen statistischen Funktionen, die in NLP nützlich sind, wie der Levenshtein-Abstand zwischen Strings oder Markov-Ketten. Diese Funktionen sind der Einfachheit halber in reinem Python implementiert, sodass eine Leistung auf Produktionsebene unwahrscheinlich ist.

PyNLPI eignet sich jedoch hervorragend für die Arbeit mit einigen der exotischeren Datentypen und Formate, die im NLP-Bereich entstanden sind. PyNLPI kann die Datenformate GIZA, Moses ++, SoNaR, Taggerdata und TiMBL lesen und verarbeiten und widmet ein ganzes Modul der Arbeit mit FoLiA, dem XML-Dokumentformat, das zum Kommentieren von Sprachressourcen wie Korpora (Textkörper, die für Übersetzungen oder andere Analysen verwendet werden) verwendet wird. . 

Sie sollten immer dann nach PyNLPI greifen, wenn Sie mit diesen Datentypen arbeiten.

SpaCy

SpaCy, das aus Bequemlichkeitsgründen auf Python und aus Geschwindigkeitsgründen auf Cython tippt, wird als "industrietaugliche Verarbeitung natürlicher Sprache" bezeichnet. Die Entwickler behaupten, dass es in Bezug auf Geschwindigkeit, Modellgröße und Genauigkeit im Vergleich zu NLTK, CoreNLP und anderen Wettbewerbern günstig ist. Der Hauptnachteil von SpaCy ist, dass es relativ neu ist und nur Englisch und einige andere (hauptsächlich europäische) Sprachen abdeckt. Allerdings hat SpaCy zum jetzigen Zeitpunkt bereits die Version 2.2 erreicht.

SpaCy enthält fast alle Funktionen, die in diesen konkurrierenden Frameworks zu finden sind: Sprachkennzeichnung, Analyse von Abhängigkeiten, Erkennung benannter Entitäten, Tokenisierung, Satzsegmentierung, regelbasierte Übereinstimmungsoperationen, Wortvektoren und vieles mehr. SpaCy enthält auch Optimierungen für GPU-Vorgänge - sowohl zur Beschleunigung der Berechnung als auch zum Speichern von Daten auf der GPU, um ein Kopieren zu vermeiden.

Die Dokumentation von Spacy ist ausgezeichnet. Ein Setup-Assistent generiert Befehlszeileninstallationsaktionen für Windows, Linux und macOS sowie für verschiedene Python-Umgebungen (pip, conda usw.). Sprachmodelle werden als Python-Pakete installiert, sodass sie als Teil der Abhängigkeitsliste einer Anwendung verfolgt werden können.

TextBlob

TextBlob ist ein benutzerfreundliches Front-End für die Pattern- und NLTK-Bibliotheken, das beide Bibliotheken in benutzerfreundliche Schnittstellen auf hoher Ebene einbindet. Mit TextBlob verbringen Sie weniger Zeit damit, sich mit den Feinheiten von Pattern und NLTK auseinanderzusetzen, und mehr Zeit damit, Ergebnisse zu erzielen.

TextBlob ebnet den Weg, indem native Python-Objekte und -Syntax genutzt werden. Die Schnellstartbeispiele zeigen, wie zu verarbeitende Texte einfach als Zeichenfolgen behandelt werden und gängige NLP-Methoden wie das Teil-der-Sprache-Tagging als Methoden für diese Zeichenfolgenobjekte verfügbar sind.

Ein weiterer Vorteil von TextBlob ist, dass Sie die Motorhaube anheben und ihre Funktionalität ändern können, wenn Sie sicherer werden. Viele Standardkomponenten, wie das Stimmungsanalysesystem oder der Tokenizer, können nach Bedarf ausgetauscht werden. Sie können auch Objekte auf hoher Ebene erstellen, die Komponenten kombinieren - diesen Stimmungsanalysator, diesen Klassifikator usw. - und diese mit minimalem Aufwand wiederverwenden. Auf diese Weise können Sie mit TextBlob schnell Prototypen erstellen und später verfeinern.