Blog

Natural Language Processing (NLP) – ein Überblick

Artificial Intelligence, Machine Learning und Natural Language Processing erleben z.Z. einen Aufschwung. Die Gründe dafür sind schnellere Prozessoren (z.B. von NVIDIA), riesige abrufbare Datenbestände im Internet und v.a. auch neue, gute Open Source Software Libaries. Dieser Artikel beschreibt, die wichtigsten darunter.

Da man nicht jedes Mal das Rad neu erfinden will sobald man einen Text analysieren muss, gibt es verschiedene Open-Source Toolkits und Software Bibliotheken, sogenannte Libraries, welche einem die Arbeit vereinfachen. Unter anderem kann man mit solchen Tools herausfinden, ob ein Text eine negative oder positive Konnotation hat.

In diesem Artikel werden wir untersuchen was für Open-Source NLP Libraries es gibt und ob es welche gibt, die besonders geeignet sind für gewisse Analysen und Programmiersprachen.

NLTK

Das Natural Language Toolkit (NLTK) ist eine Plattform welche das Verarbeiten von Texten vereinfacht. Die Plattform basiert auf der weitverbreiteten und beliebten Programmiersprache Python und ermöglicht somit auch die reibungslose Zusammenarbeit mit anderen bekannten und viel genutzten Python-Modulen. NLTK bietet Zugang zu mehr als 50 Linguistischen Korpora und lexikographischen Ressourcen an. Sehr oft wird Textverarbeitung mit Maschinellem Lernen (oder Machine Learning) erweitert oder kombiniert. Dies macht das NLTK umso attraktiver, da es sich mit den bestehenden Machine Learning Libraries in Python wie Scikits.learn oder NumPy/SciPy problemlos einbinden lässt. Zudem ist die NLTK Gemeinschaft gross und wenn man was nicht durch Web-Recherchen findet kann man auch gut in der online Version des Buches (http://www.nltk.org/book/) nachschlagen. Somit können Anfänger sowie Fortgeschrittene mit diesem Toolkit bequem arbeiten.

Die Stanford CoreNLP

Stanford University hat ihre eigene NLP Software mit Open-Source zur Verfügung gestellt und heisst Stanford CoreNLP. Sie basiert auf Java und unterstützt die wichtigsten  NLP-Funktionalitäten wie grammatikalische Analyse, schnelles verarbeiten und analysieren von Texten und Text Analytics. Obwohl es primär für Java programmiert wurde, gibt es zahlreiche APIs (Application Programming Interfaces) welche es ermöglichen die Library auch mit anderen Programmiersprachen zu verwenden. Stanford CoreNLP unterstützt nicht nur mehrere Computersprachen, sondern auch zahlreiche menschliche Sprachen wie Arabisch, Chinesisch, Englisch, Französisch, Deutsch und Spanisch. Die Unterstützung von so vielen gesprochenen Sprachen macht dieses Tool sehr attraktiv, insbesondere für Programme, wo man all diese Sprachen unterstützen muss. Da es so viele Funktionalitäten hat und mehrere Programmiersprachen unterstützt, kann es zum Teil etwas schwer fallen, konkrete Lösungen zu individuellen Problemen zu finden.

Apache OpenNLP

Eine weitere Java NLP Library ist die Apache OpenNLP Library. Wie alle anderen zuvor vorgestellten Software-Bibliotheken steht auch hier die Verarbeitung und Analyse von Texten im Vordergrund. Somit unterstützt Apache OpenNLP unter anderem auch die verbundenen Funktionalitäten wie tokenization, sentence segmentation, part-of-speech tagging und named entity extraction. Je nach Anwendung werden zusätzlich zu Englisch noch weitere Sprachen unterstützt, meistens sind es aber nicht die meistgesprochenen Sprachen, welche unterstützt werden (siehe http://opennlp.sourceforge.net/models-1.5/, man beachte jedoch, dass die aktuelle Version 1.7.2 ist). Es ist eine gute Library um in der NLP-Domäne Fuss zu fassen, da es einige Anleitungen im Internet hat und man sich damit schnell mit den Konzepten vertraut machen kann. Offiziell werden keine weiteren Programmiersprachen unterstützt, allerdings findet man nach kurzem suchen schnell sogenannte Wrapper welche die Benutzung von Apache OpenNLP durch z.B. Python ermöglichen.

MALLET (MAchine Learning for LanguagE Toolkit)

MALLET ist ein Toolkit, welches an der University of Massachusetts entwickelt wurde. Obwohl es eine offizielle Dokumentation gibt, sollte man sich bewusst sein, dass dies kein Tool für Anfänger ist. Viele Funktionalitäten sind nicht mit einprogrammiert und müssen von Null auf gemacht werden. Das ist nicht zwingenderweise etwas schlechtes, da man mit diesem Tool genau das machen kann, was man will. Topic Modeling ist eine der Stärken von MALLET. Dies erlaubt es MALLET einen Text zu nehmen und Wörter zusammenzunehmen, welche einem ähnlichen Thema entsprechen. Auch hier gibt es zwar Wrappers für andere Programmiersprachen, dennoch ist die Haupt-Programmiersprache Java. Viel Unterstützung bei Problemen kann man sich hier nicht erhoffen. Nichts desto trotz ist es ein starkes Tool und wird in der Forschung und Industrie immer wieder benutzt.

 

Natürlich gibt es noch viele weitere Toolkits und Libraries welche hier nicht behandelt wurden. Allerdings decken diese vier schon ein sehr grosses und allgemeines Gebiet ab. Schlussendlich muss auch jeder Entwickler und jede Entwicklerin das beste Tool für sich heraussuchen und damit arbeiten. Dies kann je nach NLP und Machine-Learning-Erfahrung, Programmierkenntnissen und Projekt ganz unterschiedlich sein. Mit etwas Übung und Kreativität lässt sich aber mit allen Tools ganz viel machen!

 

Quellen:

http://www.nltk.org/

https://stanfordnlp.github.io/CoreNLP/

https://nlp.stanford.edu/pubs/lrecstanforddeps_final_final.pdf

https://opennlp.apache.org/

http://mallet.cs.umass.edu/

mlit-ategra-admin

Leave a Reply

Your email address will not be published. Required fields are marked *