Kapitel 1. Einführung in NLP
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Was glaubst du, was dein Computer kann? Dir E-Mails zeigen? Ein paar Dateien bearbeiten? Vielleicht eine Excel-Tabelle erstellen?
Aber was wäre, wenn wir dir sagen würden, dass dein Computer lesen kann?
from
transformers
import
pipeline
classifier
=
pipeline
(
'sentiment-analysis'
)
classifier
(
'I am reading the greatest NLP book ever!'
)
[{'label': 'POSITIVE', 'score': 0.9996862411499023}]
text_generator
=
pipeline
(
"text-generation"
)
text_generator
(
"Welcome to the "
,
max_length
=
5
,
do_sample
=
False
)
Und, am beeindruckendsten, verstehen:
nlp
=
pipeline
(
"question-answering"
)
context
=
"""
Natural language processing (NLP) is a subfield of linguistics,
computer science, and artificial intelligence concerned with the
interactions between computers and human language, in particular
how to program computers to process and analyze large amounts of
natural language data. The result is a computer capable of
"understanding" the contents of documents, including the contextual
nuances of the language within them. The technology can then accurately
extract information and insights contained in the documents as well
as categorize and organize the documents themselves.
"""
nlp
(
question
=
"What is NLP?"
,
context
=
context
)
{'score': 0.9869255423545837, 'start': 1, 'end': 28, 'answer': 'Natural language processing'}
Was einst eine ferne Zukunftsvision war, ist nicht nur da, sondern für jeden mit einem Computer und einer Internetverbindung zugänglich. Die Fähigkeit, natürliche Sprache zu verstehen und mit ihr zu kommunizieren - eines der wertvollsten Güter, die die Menschheit im Laufe ihrer Existenz entwickelt hat - kann jetzt von Maschinen genutzt werden.
"Natürlich!", rufst du aus. "Die Technologie wird immer besser, und wir haben schon seit Ewigkeiten eine Spracherkennung und Google Translate!"
Aber noch vor fünf Jahren war "NLP" etwas, das eher für TechCrunch-Artikel als für produktive Codebasen geeignet war. In den letzten drei Jahren sind die Fortschritte in diesem Bereich exponentiell gestiegen. Die Modelle, die heute in der Produktion eingesetzt werden, sind den obskursten Forschungsergebnissen aus vergangenen Tagen weit überlegen.
Aber wir wollen nicht voreilig sein. Bevor wir tiefer einsteigen, wollen wir mit einem Überblick über das Thema beginnen. Sobald wir die Grundlagen behandelt haben, werden wir fortgeschrittenere Themen vorstellen. Unser Ziel ist es, dir dabei zu helfen, Intuition und Erfahrung im Umgang mit NLP aufzubauen, damit du am Ende des Buches in der Lage bist, echte Anwendungen zu entwickeln, die der Welt einen echten Mehrwert bringen.
In der ersten Hälfte dieses Kapitels werden wir NLP definieren, einige kommerzielle Anwendungen der Technologie untersuchen und die Entwicklung des Fachgebiets seit seinen Anfängen in den 1950er Jahren nachvollziehen.
In der zweiten Hälfte des Kapitels stellen wir eine sehr leistungsfähige NLP-Bibliothek vor, die in Unternehmen beliebt ist, und verwenden sie, um grundlegende NLP-Aufgaben durchzuführen. Diese Aufgaben sind zwar elementar, aber wenn sie kombiniert werden, können Computer natürliche Sprachdaten auf komplexe Weise verarbeiten und analysieren, was erstaunliche kommerzielle Anwendungen wie Chatbots und Voicebots ermöglicht.
In gewisser Weise ähnelt der Prozess, in dem Maschinen lernen, Sprache zu verarbeiten, der Art und Weise, wie Kleinkinder Sprache lernen, indem sie zunächst Wörter murmeln und herumfummeln, um dann später in ganzen Sätzen und Absätzen zu sprechen. Im weiteren Verlauf des Buches werden wir auf den grundlegenden NLP-Aufgaben aufbauen, die in diesem Kapitel behandelt werden.
Was ist NLP?
Beginnen wir damit, zu definieren, was natürliche Sprachverarbeitung ist. Hier ist die Definition von NLP auf Wikipedia (abgerufen im März 2021):
Natürliche Sprachverarbeitung (NLP) ist ein Teilgebiet der Linguistik, der Informatik, der Informationstechnik und der künstlichen Intelligenz, das sich mit der Interaktion zwischen Computern und menschlichen (natürlichen) Sprachen befasst, insbesondere damit, wie man Computer so programmiert, dass sie große Mengen an natürlichen Sprachdaten verarbeiten und analysieren können.
Die Herausforderungen bei der Verarbeitung natürlicher Sprache ( ) umfassen häufig die Spracherkennung, das Verstehen natürlicher Sprache und die Generierung natürlicher Sprache.
Packen wir diese Definition einmal aus. Wenn wir von "natürlicher Sprache" sprechen, meinen wir "menschliche Sprache" im Gegensatz zu Programmiersprachen. Natürliche Sprache bezieht sich nicht nur auf Textdaten, sondern auch auf Sprach- und Audiodaten.
Toll, aber was ist, wenn Computer jetzt mit großen Mengen an Text-, Sprach- und Audiodaten arbeiten können? Warum ist das so wichtig?
Stell dir mal eine Sekunde lang eine Welt ohne Sprache vor. Wie würden wir per Text oder Sprache kommunizieren? Wie würden wir Bücher lesen, Musik hören oder Filme und Fernsehsendungen verstehen? Das Leben, wie wir es kennen, würde aufhören zu existieren; wir würden in der Zeit der Höhlenmenschen feststecken, die zwar in der Lage sind, Informationen visuell zu verarbeiten, aber nicht in der Lage sind, ihr Wissen mit anderen zu teilen oder auf irgendeine sinnvolle Weise zu kommunizieren.1
Wenn Maschinen nur mit numerischen und visuellen Daten arbeiten können, aber keine natürliche Sprache verarbeiten können, wären sie in der Anzahl und Vielfalt ihrer Anwendungen in der realen Welt eingeschränkt. Ohne die Fähigkeit, mit natürlicher Sprache umzugehen, werden Maschinen niemals in der Lage sein, sich der allgemeinen künstlichen Intelligenz oder irgendetwas, das der menschlichen Intelligenz heute ähnelt, anzunähern.
Glücklicherweise können Maschinen jetzt endlich Daten in natürlicher Sprache einigermaßen gut verarbeiten. Sehen wir uns an, welche kommerziellen Anwendungen aufgrund dieser relativ neu entdeckten Fähigkeit von Computern, mit natürlichsprachlichen Daten zu arbeiten, möglich sind.
Beliebte Anwendungen
Dank der Fortschritte im NLP sind Maschinen in der Lage, ein breites Spektrum an natürlichsprachlichen Aufgaben zu bewältigen, zumindest rudimentär. Hier sind einige gängige Anwendungen von NLP:
- Maschinelle Übersetzung
-
Maschinelle Übersetzung ist der Prozess, bei dem Maschinen von einer Sprache in eine andere übersetzen, ohne dass ein Mensch eingreifen muss. Das bei weitem bekannteste Beispiel dafür ist Google Translate, das über 100 Sprachen unterstützt und täglich von über 500 Millionen Menschen genutzt wird. Als es 2006 auf den Markt kam, war die Leistung von Google Translate deutlich schlechter als heute. Heute nähert sich die Leistung schnell dem Niveau menschlicher Experten an.2
- Spracherkennung
-
Es mag schockierend klingen, aber Spracherkennungstechnologie gibt es schon seit über 50 Jahren. Bis vor Kurzem, mit dem Aufkommen von Deep Learning, war keine der Spracherkennungssoftwares leistungsfähig oder hatte sich durchgesetzt. Heute sind Amazon Alexa, Apple Siri, Google Assistant, Microsoft Cortana, digitale Sprachassistenten in deinem Auto und andere Software in der Lage, Sprache mit einer so hohen Genauigkeit zu erkennen, dass die Software die Informationen in Echtzeit verarbeiten und auf eine meist vernünftige Weise antworten kann. Noch vor 15 Jahren war die Fähigkeit solcher Maschinen, Sprache zu erkennen und in einer kohärenten Weise zu antworten, miserabel.
- Frage beantworten
-
Damit diese digitalen Assistenten den Menschen, die Fragen stellen, ein angenehmes Erlebnis bieten, ist die Spracherkennung nur die erste Hälfte der Aufgabe. Die Software muss (a) die Sprache erkennen und (b) anhand der erkannten Sprache eine passende Antwort geben. Diese zweite Hälfte wird als Fragebeantwortung (QA) bezeichnet.
- Text-Zusammenfassung
-
Eine der häufigsten Aufgaben, die Menschen jeden Tag erledigen, vor allem in Bürojobs, ist es, lange Dokumente zu lesen und den Inhalt zusammenzufassen. Maschinen sind jetzt in der Lage, diese Zusammenfassung zu übernehmen und eine kürzere Zusammenfassung eines längeren Textdokuments zu erstellen. Die Textzusammenfassung verringert die Lesezeit für Menschen. Menschen, die täglich viele Texte analysieren (z. B. Anwälte, Anwaltsgehilfen, Wirtschaftsanalytiker, Studenten usw.), können die maschinell erstellten kurzen Zusammenfassungen langer Dokumente durchsehen und dann anhand der Zusammenfassungen die relevanten Dokumente auswählen, um sie gründlicher zu lesen.
- Chatbots
-
Wenn du dich in letzter Zeit auf umgesehen hast, ist dir vielleicht aufgefallen, dass es auf immer mehr Websites einen Chatbot gibt, der sich automatisch meldet, um mit dem menschlichen Nutzer zu kommunizieren. Der Chatbot begrüßt den Menschen in der Regel freundlich und unaufdringlich und stellt ihm dann Fragen, um den Zweck und die Absicht des Besuchs auf der Website zu ermitteln. Der Chatbot versucht dann, alle Fragen des Nutzers automatisch und ohne menschliches Zutun zu beantworten. Solche Chatbots automatisieren jetzt den digitalen Kundenkontakt.
- Text-to-Speech und Sprache-zu-Text
-
Software ist jetzt in der Lage , Text ganz einfach in originalgetreues Audio zu konvertieren. Google Cloud Text-to-Speech kann zum Beispiel Text in mehr als 180 Stimmen in über 30 Sprachen in menschenähnliche Sprache umwandeln. Ebenso kann Google Cloud Speech-to-Text Audio in Text für über 120 Sprachen umwandeln und bietet damit ein wirklich globales Angebot.
- Voicebots
-
Vor zehn Jahren waren automatisierte Voice-Agenten schwerfällig. Wenn Menschen nicht auf eine ziemlich begrenzte Art und Weise antworteten (z. B. mit Ja- oder Nein-Antworten), konnten die Voice-Agenten am Telefon die Informationen nicht verarbeiten. Heute können KI-Sprachroboter wie die von VOIQ die Anrufe von Vertriebs-, Marketing- und Kundenerfolgsteams ergänzen und automatisieren.
- Text- und Audiogenerierung
-
Vor Jahren beruhte die Texterstellung auf Templates und regelbasierten Systemen. Das schränkte den Anwendungsbereich ein. Heute kann Software mithilfe von maschinellem Lernen Text und Audio generieren, was den Anwendungsbereich erheblich erweitert. Gmail ist jetzt zum Beispiel in der Lage, ganze Sätze vorzuschlagen, die auf früheren Sätzen basieren, die du verfasst hast, und das während du tippst. Die natürliche Spracherzeugung eignet sich zwar am besten für kurze Textabschnitte (Teilsätze), aber schon bald könnten solche Systeme in der Lage sein, recht gute lange Inhalte zu produzieren. Eine beliebte kommerzielle Anwendung für die Generierung natürlicher Sprache ist Data-to-Text-Software, die Zusammenfassungen von Datenbanken und Datensätzen in Textform erstellt. Data-to-Text-Software umfasst sowohl die Datenanalyse als auch die Texterstellung. Zu den Unternehmen in diesem Bereich gehören Narrative Science und Automated Insights.
- Stimmungsanalyse
-
Mit der explosionsartigen Zunahme von Inhalten in den sozialen Medien ( ) wächst die Notwendigkeit, die Analyse der Kundenstimmung zu automatisieren und Tweets, Posts und Kommentare nach Stimmungen wie positiv, negativ, neutral, wütend, traurig oder glücklich zu analysieren. Diese Software wird auch als Emotions-KI bezeichnet.
- Informationsextraktion
-
Eine große Herausforderung im NLP ist strukturierte Daten aus unstrukturierten und/oder halbstrukturierten Dokumenten zu erstellen. Software zur Erkennung benannter Entitäten kann zum Beispiel Personen, Organisationen, Orte, Daten und Währungen aus langen Texten wie Nachrichten extrahieren. Zur Informationsextraktion gehört auch die Beziehungsextraktion, d.h. die Identifizierung der Beziehungen zwischen Entitäten, falls vorhanden.
Die Zahl der NLP-Anwendungen in Unternehmen ist in den letzten zehn Jahren explodiert. Sie reicht von der Spracherkennung und der Beantwortung von Fragen bis hin zu Voicebots und Chatbots, die in der Lage sind, selbständig natürliche Sprache zu erzeugen. Das ist erstaunlich, wenn man bedenkt, wo das Feld noch vor ein paar Jahrzehnten stand.
Um den aktuellen Fortschritt im NLP zu verdeutlichen, lass uns die Entwicklung des NLP von seinen Ursprüngen im Jahr 1950 bis heute nachvollziehen.
Geschichte
Den Bereich der Verarbeitung natürlicher Sprache gibt es schon seit fast 70 Jahren. Am berühmtesten ist wohl Alan Turing , der 1950 mit der Entwicklung des Turing-Tests den Grundstein für diesen Bereich legte. Mit dem Turing-Test wird die Fähigkeit einer Maschine getestet, eine Intelligenz zu zeigen, die von der eines Menschen nicht zu unterscheiden ist. Damit eine Maschine den Turing-Test besteht, muss sie menschenähnliche Antworten geben, so dass ein menschlicher Prüfer nicht erkennen kann, ob die Antworten von einem Menschen oder einer Maschine stammen (d. h. die Antworten der Maschine haben menschliche Qualität).3
Der Turing-Test löste eine bedeutende Debatte im damals noch jungen Bereich der künstlichen Intelligenz aus und spornte die Forscher dazu an, Modelle zur Verarbeitung natürlicher Sprache zu entwickeln, die als Bausteine für eine Maschine dienen sollten, die eines Tages den Turing-Test bestehen könnte - eine Suche, die bis heute andauert.
Wie der gesamte Bereich der künstlichen Intelligenz hat auch NLP viele Höhen und Tiefen erlebt und ist von Hype-Zyklen zu KI-Wintern geschwankt. Im Jahr 1954 entwickelten die Georgetown University und IBM erfolgreich ein System, das mehr als 60 russische Sätze automatisch ins Englische übersetzen konnte. Damals dachten die Forscher an der Georgetown University, dass die maschinelle Übersetzung innerhalb von drei bis fünf Jahren ein gelöstes Problem sein würde. Der Erfolg in den USA spornte auch die Sowjetunion an, ähnliche Anstrengungen zu unternehmen. Der Erfolg von Georgetown-IBM und die Mentalität des Kalten Krieges führten dazu, dass in diesen frühen Jahren mehr Mittel für NLP bereitgestellt wurden.
Doch 1966 war der Fortschritt ins Stocken geraten, und das Automatic Language Processing Advisory Committee (ALPAC) - eine US-Regierungsbehörde, die die Fortschritte in der Computerlinguistik bewerten sollte - veröffentlichte einen ernüchternden Bericht. Darin wurde festgestellt, dass die maschinelle Übersetzung teurer, ungenauer und langsamer ist als die menschliche Übersetzung und dass es unwahrscheinlich ist, dass sie in naher Zukunft das Niveau der menschlichen Übersetzung erreichen wird. Der Bericht führte dazu, dass die Mittel für die Forschung im Bereich der maschinellen Übersetzung gekürzt wurden. Nach dem Bericht wurde die Forschung auf diesem Gebiet fast ein Jahrzehnt lang eingestellt.
Trotz dieser Rückschläge erlebte das Feld des NLP in den 1970er Jahren einen Aufschwung. In den 1980er Jahren hatte sich die Rechenleistung deutlich erhöht und die Kosten waren ausreichend gesunken, so dass sich das Feld für viele weitere Forscherinnen und Forscher auf der ganzen Welt öffnete.
Ende der 1980er Jahre erlangte NLP mit der Veröffentlichung der ersten statistischen maschinellen Übersetzungssysteme unter der Leitung von Forschern des Thomas J. Watson Research Center von IBM wieder an Bedeutung . Vor dem Aufkommen der statistischen maschinellen Übersetzung beruhte die maschinelle Übersetzung auf von Menschenhand erstellten Regeln für Sprache. Diese Systeme wurden als regelbasierte maschinelle Übersetzung bezeichnet. Die Regeln halfen dabei, Fehler zu korrigieren und zu kontrollieren, die den maschinellen Übersetzungssystemen normalerweise unterliefen, aber die Ausarbeitung solcher Regeln war einmühsamer und langwieriger Prozess. Wenn die maschinellen Übersetzungssysteme auf Kanten stießen, für die keine Regeln entwickelt worden waren, schlugen sie fehl, manchmal auf ungeheuerliche Weise.
Die statistische maschinelle Übersetzung hat dazu beigetragen, dass weniger Regeln von Menschenhand erstellt werden müssen, und sie stützt sich viel stärker auf das Lernen aus Daten. Unter Verwendung eines zweisprachigen Korpus mit Paralleltexten als Daten (d. h. zwei Texte, die bis auf die Sprache, in der sie geschrieben sind, identisch sind), zerlegten solche Systeme Sätze in kleine Teilmengen und übersetzten diese Teilmengen Segment für Segment von der Ausgangssprache in die Zielsprache. Je mehr Daten (d.h. zweisprachige Textkorpusse) das System hatte, desto besser war die Übersetzung. Die statistische maschinelle Übersetzung blieb bis zum Aufkommen der neuronalen maschinellen Übersetzung Mitte der 2010er Jahre die am häufigsten untersuchte und verwendete maschinelle Übersetzungsmethode.
In den 1990er Jahren führten diese Erfolge dazu, dass die Forscher über die Texterkennung hinaus auch die Spracherkennung einführten. Wie die maschinelle Übersetzung gab es auch die Spracherkennung bereits seit den frühen 1950er Jahren, beflügelt durch die ersten Erfolge von Bell Labs und IBM. Aber Spracherkennungssysteme hatten starke Einschränkungen. In den 1960er Jahren konnten solche Systeme zum Beispiel Sprachbefehle zum Schachspielen entgegennehmen, aber sonst nicht viel tun.
Mitte der 1980er Jahre wandte IBM den statistischen Ansatz auf die Spracherkennung an und brachte eine sprachgesteuerte Schreibmaschine namens Tangora auf den Markt, die einen Wortschatz von 20.000 Wörtern verarbeiten konnte.
Auch die DARPA, die Bell Labs und die Carnegie Mellon University hatten Ende der 1980er Jahre ähnliche Erfolge zu verzeichnen. Spracherkennungssoftware verfügte zu diesem Zeitpunkt über einen größeren Wortschatz als der durchschnittliche Mensch und konnte eine kontinuierliche Spracherkennung durchführen - ein Meilenstein in der Geschichte der Spracherkennung.
In den 1990er Jahren verließen mehrere Forscher/innen in diesem Bereich die Forschungslabore und Universitäten, um in der Industrie zu arbeiten, was zu mehr kommerziellen Anwendungen von Spracherkennung und maschineller Übersetzung führte.
Die heutigen NLP-Schwergewichte, wie Google, stellten 2007 ihre ersten Mitarbeiter/innen für die Spracherkennung ein. Auch die US-Regierung mischte damals mit: Die National Security Agency begann, große Mengen aufgezeichneter Gespräche nach bestimmten Schlüsselwörtern zu markieren, um den NSA-Analysten die Suche zu erleichtern.
Anfang der 2010er Jahre begannen NLP-Forscher sowohl in der Wissenschaft als auch in der Industrie, mit tiefen neuronalen Netzen für NLP-Aufgaben zu experimentieren. Frühe Deep-Learning-Erfolge wurden mit einer Deep-Learning-Methode erzielt, die Long Short Term Memory (LSTM) genannt wird. Im Jahr 2015 nutzte Google eine solche Methode, um Google Voice zu überarbeiten.
Deep-Learning-Methoden führten zu dramatischen Leistungsverbesserungen bei NLP-Aufgaben, was dazu führte, dass mehr Geld in diesen Bereich investiert wurde. Diese Erfolge haben dazu geführt, dass NLP-Software viel stärker in unser tägliches Leben integriert wird.
So verfügten Autos in den frühen 2010er Jahren über eine Spracherkennungssoftware, die nur eine begrenzte Anzahl von Sprachbefehlen verarbeiten konnte. Heute verfügen Autos über eine Technologie, die eine viel breitere Palette von natürlichsprachlichen Befehlen verarbeiten kann und den Kontext und die Absicht viel deutlicher erkennen kann.
Wenn wir heute zurückblicken, war der Fortschritt im Bereich NLP langsam, aber stetig: Von regelbasierten Systemen in den Anfängen über statistische maschinelle Übersetzung in den 1980er Jahren bis hin zu Systemen, die auf neuronalen Netzen basieren, in den 2010er Jahren. Während die akademische Forschung in diesem Bereich schon seit geraumer Zeit intensiv betrieben wird, hat sich NLP erst in jüngster Zeit zu einem Mainstream-Thema entwickelt. Schauen wir uns die wichtigsten Wendepunkte der letzten Jahre an, die dazu beigetragen haben, dass NLP heute zu einem der heißesten Themen der KI geworden ist .
Wendepunkte
NLP und Computer Vision sind beide Teilgebiete der künstlichen Intelligenz, aber Computer Vision hat bisher mehr kommerzielle Erfolge erzielt. Die Computer Vision hatte ihren Wendepunkt im Jahr 2012 (der sogenannte "ImageNet"-Moment), als die auf Deep Learning basierende Lösung AlexNet die bisherige Fehlerquote von Computer Vision Modellen dezimierte.
In den Jahren seit 2012 hat die Computer Vision Anwendungen wie das automatische Markieren von Fotos und Videos, selbstfahrende Autos, kassenlose Geschäfte, die Authentifizierung von Geräten durch Gesichtserkennung, radiologische Diagnosen und vieles mehr ermöglicht.
NLP ist im Vergleich dazu ein relativer Spätzünder gewesen. NLP schlug ab 2014 Wellen mit der Veröffentlichung von Amazon Alexa, einer überarbeiteten Apple Siri, Google Assistant und Microsoft Cortana. Auch Google brachte 2016 eine stark verbesserte Version von Google Translate auf den Markt, und heute sind Chatbots und Voicebots viel häufiger anzutreffen.
Aber erst 2018 hatte NLP seinen ganz eigenen ImageNet-Moment mit der Veröffentlichung großer vortrainierter Sprachmodelle, die mit der Transformer-Architektur trainiert wurden; das bemerkenswerteste davon war Googles BERT, das im November 2018 auf den Markt kam.
Im Jahr 2019 sorgten generative Modelle wie OpenAIs GPT-2 für Furore, denn sie generierten neue Inhalte on the fly auf der Grundlage früherer Inhalte - ein bis dahin unüberwindbares Kunststück. Im Jahr 2020 veröffentlichte OpenAI eine noch größere und beeindruckendere Version, GPT-3, die auf den bisherigen Erfolgen aufbaut.
Auf dem Weg ins Jahr 2021 und darüber hinaus ist NLP kein experimenteller Teilbereich der KI mehr. Zusammen mit der Computer Vision ist NLP jetzt bereit, viele breit angelegte Anwendungen im Unternehmen zu haben. Mit diesem Buch möchten wir dir einige Konzepte und Werkzeuge vorstellen, die dir helfen werden, einige dieser Anwendungen in deinem Unternehmen zu entwickeln.
Ein letztes Wort
Es gibt nicht nur einen einzigen Ansatz zur Lösung von NLP-Aufgaben. Die drei heute vorherrschenden Ansätze sind regelbasiert, traditionelles maschinelles Lernen (statistikbasiert) und neuronale Netzwerke.
Schauen wir uns die einzelnen Ansätze an:
- Regelbasiertes NLP
-
Herkömmliche NLP-Software stützt sich in hohem Maße auf von Menschen erstellte Sprachregeln; Fachexperten, in der Regel Linguisten, erstellen diese Regeln mithilfe von regulären Ausdrücken und Mustervergleichen. Regelbasiertes NLP ist für eng begrenzte Anwendungsfälle gut geeignet, lässt sich aber in der Regel nicht gut verallgemeinern. Um ein solches System zu verallgemeinern, sind immer mehr Regeln erforderlich, was das regelbasierte NLP im Vergleich zu anderen NLP-Ansätzen zu einer arbeitsintensiven und spröden Lösung macht. Hier sind Beispiele für Regeln in einem regelbasierten System: Wörter, die auf -ing enden, sind Verben, Wörter, die auf -er oder -est enden, sind Adjektive, Wörter, die auf 's enden, sind Possessivwörter usw. Stell dir vor, wie viele Regeln wir von Hand erstellen müssten, um ein System zu entwickeln, das eine große Menge an natürlichen Sprachdaten analysieren und verarbeiten kann. Nicht nur die Erstellung von Regeln wäre ein wahnsinnig schwieriger und langwieriger Prozess, sondern wir müssten uns auch mit den vielen Fehlern auseinandersetzen, die bei der Verwendung solcher Regeln auftreten würden. Wir müssten Regeln für Regeln erstellen, um alle Eckfälle für jede einzelne Regel zu berücksichtigen.
- Traditionelles (oder klassisches) maschinelles Lernen
-
Das traditionelle maschinelle Lernen stützt sich weniger auf Regeln und mehr auf Daten. Es verwendet einen statistischen Ansatz, bei dem Wahrscheinlichkeitsverteilungen von Wörtern auf der Grundlage eines großen annotierten Korpus erstellt werden. Der Mensch spielt nach wie vor eine wichtige Rolle: Fachleute müssen die Merkmale bearbeiten, um die Leistung des maschinellen Lernmodells zu verbessern. Zu den Merkmalen gehören Großschreibung, Singular und Plural, umgebende Wörter usw. Nachdem du diese Merkmale erstellt hast, musst du ein traditionelles ML-Modell trainieren, um NLP-Aufgaben zu erfüllen, z. B. die Textklassifizierung. Da traditionelles ML einen statistischen Ansatz verwendet, um zu bestimmen, wann bestimmte Merkmale oder Regeln zur Verarbeitung von Sprache anzuwenden sind, ist traditionelles ML-basiertes NLP einfacher zu erstellen und zu pflegen als ein regelbasiertes System. Außerdem lässt es sich besser verallgemeinern als regelbasiertes NLP.
- Neuronale Netze
-
Neuronale Netze beheben die Unzulänglichkeiten des traditionellen maschinellen Lernens. Anstatt den Menschen mit der Entwicklung von Merkmalen zu beauftragen, "lernen" neuronale Netze die wichtigen Merkmale durch Repräsentationslernen. Um gute Leistungen zu erbringen, brauchen diese neuronalen Netze nur eine große Menge an Daten. Die Datenmenge, die diese neuronalen Netze benötigen, um gute Leistungen zu erbringen, ist beträchtlich, aber im heutigen Internetzeitalter ist es nicht allzu schwer, an Daten zu kommen. Man kann sich neuronale Netze als sehr leistungsfähige Funktionsannäherer oder "Regelersteller" vorstellen. Diese Regeln und Merkmale sind um einiges differenzierter und komplexer als die von Menschen erstellten Regeln, was ein automatisiertes Lernen und eine stärkere Verallgemeinerung des Systems bei der Verarbeitung natürlichsprachlicher Daten ermöglicht.
Von diesen drei Zweigen ist der auf neuronalen Netzen basierende Zweig des NLP, der durch den Aufstieg sehr tiefer neuronaler Netze (d.h. Deep Learning) vorangetrieben wurde, der leistungsstärkste und derjenige, der in den letzten Jahren zu vielen kommerziellen Hauptanwendungen des NLP geführt hat.
In diesem Buch werden wir uns vor allem auf neuronale Netzwerke konzentrieren, aber auch traditionelle maschinelle Lernansätze untersuchen. Erstere sind bei vielen NLP-Aufgaben auf dem neuesten Stand der Technik, aber traditionelles maschinelles Lernen wird immer noch aktiv in kommerziellen Anwendungen eingesetzt.
Wir werden uns nicht so sehr auf das regelbasierte NLP konzentrieren, aber da es schon seit Jahrzehnten existiert, wirst du keine Schwierigkeiten haben, andere Ressourcen zu diesem Thema zu finden. Das regelbasierte NLP hat einen Platz unter den beiden anderen Ansätzen, aber normalerweise nur für die Behandlung von Kanten.
NLP Grundlagen
Nachdem wir nun NLP definiert, die aktuellen Anwendungen erkundet, seine Geschichte und Wendepunkte behandelt und die verschiedenen Ansätze zur Lösung von NLP-Aufgaben geklärt haben, wollen wir unsere Reise mit den grundlegendsten Aufgaben im NLP beginnen.
Wir werden eine der beliebtesten Open-Source-Bibliotheken für den Einsatz in kommerziellen NLP-Anwendungen nutzen, um diese Aufgaben zu erfüllen: spacy
.
Bevor wir spacy
verwenden, wollen wir diese grundlegenden NLP-Aufgaben besprechen. Wie wir in der Einleitung des Kapitels gesagt haben, sind sie ziemlich elementar, so wie man einem Kind die Grundlagen der Sprache beibringt. Aber diese grundlegenden NLP-Aufgaben helfen uns, wenn wir sie kombinieren, komplexere Aufgaben zu bewältigen, die letztendlich die wichtigsten NLP-Anwendungen von heute ermöglichen.
Maschinen müssen wie wir erst gehen, bevor sie laufen.
NLP-Aufgaben definieren
Zu Beginn des Kapitels haben wir unter verschiedene NLP-Anwendungen vorgestellt, die heute in Mode sind, darunter die folgenden:
-
Maschinelle Übersetzung
-
Spracherkennung
-
Frage beantworten
-
Text-Zusammenfassung
-
Chatbots
-
Umwandlung von Text in Sprache und Sprache in Text
-
Voicebots
-
Text- und Audiogenerierung
-
Stimmungsanalyse
-
Informationsextraktion
Damit Maschinen diese komplexen Anwendungen ausführen können, müssen sie mehrere kleinere, mundgerechtere NLP-Aufgaben ausführen. Mit anderen Worten: Um erfolgreiche kommerzielle NLP-Anwendungen zu entwickeln, müssen wir die NLP-Aufgaben beherrschen, die als Bausteine für diese Anwendungen dienen.
Es ist wichtig anzumerken, dass moderne NLP-Modelle, die auf neuronalen Netzen basieren, diese "Aufgaben" durch das Training des neuronalen Netzes automatisch ausführen, d.h. das neuronale Netz lernt von selbst, wie es einige dieser Aufgaben ausführt. Wir, die Betreiber, müssen diese Aufgaben nicht explizit ausführen.
Diese Aufgaben sind aus diesem Grund etwas veraltet, aber sie sind auch heute noch relevant, sowohl um ein besseres Verständnis dafür zu entwickeln, wie Maschinen lernen, mit natürlicher Sprache zu arbeiten, als auch für die Arbeit mit NLP-Modellen, die nicht auf neuronalen Netzwerken basieren. Klassisches, nicht auf neuronalen Netzen basierendes NLP ist in Unternehmen immer noch gang und gäbe, auch wenn es in der modernen Forschung heute nicht mehr gefragt ist. Aus diesen Gründen lohnt es sich, diese Aufgaben zu lernen.
Hier sind einige dieser NLP-Aufgaben, die du ohne weiteres erledigen kannst:
- Tokenisierung
-
Tokenisierung ist der Prozess der Zerlegung von Text in minimale sinnvolle Einheiten wie Wörter, Satzzeichen, Symbole usw. Der Satz "Wir leben in Paris" könnte zum Beispiel in vier Token zerlegt werden: Wir, leben, in, Paris. Die Tokenisierung ist normalerweise der erste Schritt eines jeden NLP-Prozesses. Die Tokenisierung ist ein notwendiger Schritt, weil die Maschine die Daten der natürlichen Sprache in die grundlegendsten Elemente (oder Token) zerlegen muss, damit sie jedes Element im Kontext der anderen Elemente analysieren kann. Andernfalls müsste sie einen langen Text oder ein langes Audiomaterial so analysieren, als wäre es ein einzelnes Element, was das Problem für die Maschine unlösbar macht. So wie ein Sprachanfänger einen Satz in kleinere Teile zerlegt, um die Informationen Wort für Wort zu lernen und zu verarbeiten, muss eine Maschine das Gleiche tun. Selbst bei komplexen numerischen Berechnungen zerlegen Maschinen das Problem in Grundelemente und führen Aufgaben wie Addition, Subtraktion, Multiplikation und Division von zwei Zahlenreihen aus. Der große Vorteil der Maschine besteht darin, dass sie dies in einem Tempo und in einem Umfang tun kann, wie es kein Mensch kann. Nachdem die Tokenisierung den Text in minimale sinnvolle Einheiten zerlegt hat, muss die Maschine jeder Einheit Metadaten zuordnen, die ihr weitere Informationen darüber liefern, wie sie jede Einheit im Kontext anderer Einheiten verarbeiten kann.
- Part-of-Speech-Tagging
-
Part-of-Speech-Tagging (POS-Tagging) ist der Prozess der Zuordnung von Wortarten zu Token, z. B. Substantiv, Pronomen, Verb, Adverb, Adjektiv, Konjunktion, Präposition, Interjektion usw. Für "Wir leben in Paris" sind die Wortarten: Pronomen, Verb, Präposition und Substantiv. Durch das Part-of-Speech-Tagging erhält jedes Token ein paar mehr Metadaten, die es der Maschine erleichtern, Beziehungen zwischen jedem Token und jedem anderen Token herzustellen. In dem Satz "Ich schieße den Ball" sind "ich" und "Ball" beides Substantive und "schießen" ist ein Verb. Anhand dieser Metadaten können wir ableiten, dass "kicken" das "Ich" und den "Ball" irgendwie miteinander verbindet, so dass wir eine Beziehung zwischen den Wörtern herstellen können. Aus diesem Grund sind die Wortarten so wichtig. Wenn wir nicht wüssten, dass einige Wörter Substantive und andere Verben sind, wäre die Maschine nicht in der Lage, die Beziehungen zwischen den Tokens zu erkennen.
- Parsing von Abhängigkeiten
-
Dependency Parsing beinhaltet die Kennzeichnung der Beziehungen zwischen den einzelnen Token, wodurch dem Satz eine syntaktische Struktur zugewiesen wird. Sobald die Beziehungen gekennzeichnet sind, kann der gesamte Satz als eine Reihe von Beziehungen zwischen Tokensätzen strukturiert werden. Für die Maschine ist es einfacher, den Text zu verarbeiten, wenn sie die inhärente Struktur des Textes erkannt hat. Stell dir vor, wie schwierig es für dich wäre, einen Satz zu verstehen, wenn du alle Wörter des Satzes in ungeordneter Reihenfolge vorgesetzt bekämst und du keine Vorkenntnisse über die Regeln der Grammatik hättest. Ähnlich verhält es sich mit der Struktur des Textes, den die Maschine in Token umgewandelt hat, bevor sie das Dependency Parsing durchführt. Sobald die Struktur erkennbar ist, wird die Verarbeitung des Textes ein wenig einfacher.
Das Parsen von Abhängigkeiten kann knifflig sein, daher ist der beste Weg, es zu verstehen, die Beziehungen mithilfe eines Parse-Baums zu visualisieren. AllenNLP hat unter eine tolle Demo zum Parsen von Abhängigkeiten veröffentlicht, mit der wir den Abhängigkeitsgraphen in Abbildung 1-1 erstellt haben. Dieser Abhängigkeitsgraph ermöglicht es uns, die Beziehungen zwischen den Token zu visualisieren. Wie du in der Abbildung sehen kannst, ist "Wir" das Personalpronomen (PRP) und das nominale Subjekt (NSUBJ) von "leben", das das Verb in der dritten Person Singular Präsens (VBP) ist. "Leben" ist mit der Präposition phrase (PREP) "in Paris" verbunden. "In" ist die Präposition (IN), und "Paris" ist das Objekt der Präposition (POBJ) und ist selbst ein singuläres Eigenname (NNP). Diese Beziehungen sind sehr komplex zu modellieren und ein Grund, warum es sehr schwierig ist, eine Sprache wirklich fließend zu beherrschen. Die meisten von uns wenden die Regeln der Grammatik spontan an, weil sie die Sprache durch jahrelange Erfahrung gelernt haben. Eine Maschine führt dieselbe Art von Analyse durch, aber um natürliche Sprache zu verarbeiten, muss sie diese Operationen in rasender Geschwindigkeit nacheinander ausführen.
- Chunking
-
Beim Chunking werden verwandte Token zu einem einzigen Token zusammengefasst, indem verwandte Substantivgruppen, verwandte Verbgruppen usw. gebildet werden. Zum Beispiel könnte "New York City" als ein einziges Token/Chunk behandelt werden, anstatt als drei separate Token. Chunking ist der Prozess, der dies möglich macht. Das Chunking ist wichtig, nachdem die Maschine den Originaltext in Token zerlegt, die Wortarten identifiziert und markiert hat, wie jedes Token mit anderen Token im Text zusammenhängt. Das Chunking fasst ähnliche Token zusammen und erleichtert so die Analyse des Textes. Anstatt zum Beispiel "New", "York" und "City" als drei separate Token zu behandeln, können wir daraus schließen, dass sie miteinander verwandt sind und sie zu einer einzigen Gruppe (oder einem Chunk) zusammenfassen. Dann können wir den Chunk mit anderen Chunks im Text in Beziehung setzen. Wenn wir dies für die gesamte Menge an Token getan haben, haben wir eine viel kleinere Menge an Token und Chunks, mit denen wir arbeiten können.
- Lemmatisierung
-
Lemmatisierung ist der Prozess der Umwandlung von Wörtern in ihre Grundformen. Die Lemmatisierung wandelt zum Beispiel "Pferde" in "Pferd", "schlief" in "schlafen" und "größte" in "groß" um. Sie ermöglicht es der Maschine, die Textverarbeitung zu vereinfachen, die sie durchführen muss. Anstatt mit einer Variante des Grundworts zu arbeiten, kann sie direkt mit dem Grundwort arbeiten, nachdem sie die Lemmatisierung durchgeführt hat.
- Stemming
-
Stemming ist ein Prozess der mit der Lemmatisierung verwandt, aber einfacher ist. Beim Stemming werden Wörter auf ihre Wortstämme reduziert. Stemming-Algorithmen sind in der Regel regelbasiert. Zum Beispiel würde das Wort "größte" zu "groß" reduziert werden, aber das Wort "schlief" würde überhaupt nicht reduziert werden. Das Stemming führt manchmal zu unsinnigen Teilwörtern. Aus diesem Grund ziehen wir die Lemmatisierung dem Stemming vor. Bei der Lemmatisierung wird ein Wort in seine Grundform oder kanonische Form gemäß dem Wörterbuch zurückgeführt. Im Vergleich zum Stemming ist dies jedoch ein aufwändigeres Verfahren, da die Wortart des Wortes bekannt sein muss, damit es gut funktioniert.
Hinweis
Tokenisierung, Part-of-Speech-Tagging, Dependency Parsing, Chunking, Lemmatisierung und Stemming sind Aufgaben zur Verarbeitung natürlicher Sprache für nachgelagerte NLP-Anwendungen; mit anderen Worten, diese Aufgaben sind Mittel zum Zweck. Die nächsten beiden "Aufgaben" - Named Entity Recognition und Entity Linking - sind technisch gesehen keine Aufgaben der natürlichen Sprache, sondern eher NLP-Anwendungen. Named Entity Recognition und Entity Linking können selbst Ziele sein und sind nicht nur Mittel zum Zweck. Da sie aber auch für nachgelagerte NLP-Anwendungen verwendet werden, zählen wir sie hier zu den "Aufgaben".
- Erkennung benannter Entitäten
-
Named Entity Recognition (NER) ist der Prozess der Zuordnung von Bezeichnungen zu bekannten Objekten (oder Entitäten) wie Personen, Organisationen, Orten, Daten, Währungen usw. In "Wir wohnen in Paris" würde "Paris" als Ort markiert werden. NER ist sehr leistungsfähig. Sie ermöglicht es Maschinen, die wichtigsten Token mit Named-Entity-Tags zu versehen, und das ist sehr wichtig für NLP-Anwendungen zur Informationsbeschaffung. Wenn wir zum Beispiel nach dem ehemaligen US-Präsidenten George W. Bush in einer Reihe von Dokumenten suchen wollen, möchten wir, dass die Maschine alle Personen in allen Dokumenten mit Hilfe der Named-Entity-Recognition markiert und wir dann innerhalb dieser Liste von Personen nach den relevanten Dokumenten suchen, die wir weiter untersuchen wollen.
- Entitätsverknüpfung
-
Entity Linking ist der Prozess der Disambiguierung von Entitäten in einer externen Datenbank, bei dem Text in einer Form mit einer anderen verknüpft wird. Dies ist sowohl für Anwendungen zur Entitätsauflösung (z. B. Deduplizierung von Datensätzen) als auch für Anwendungen zur Informationsgewinnung wichtig. Im Beispiel von George W. Bush würden wir alle Instanzen von "George W. Bush" in "George W. Bush" auflösen wollen, aber nicht in "George H. W. Bush", George W. Bushs Vater und ebenfalls ein ehemaliger US-Präsident. Diese Auflösung und die Verknüpfung mit der korrekten Version von Präsident Bush ist ein kniffliger, heikler Prozess, den eine Maschine aber durchführen kann, wenn sie über den gesamten Textkontext verfügt. Sobald eine Maschine die Entitätserkennung und -verknüpfung durchgeführt hat, wird das Abrufen von Informationen zum Kinderspiel, was heute eine der wichtigsten kommerziellen Anwendungen von NLP ist.
Dies ist nur ein kurzer Überblick über die grundlegendsten NLP-Aufgaben. Du wirst diese Aufgaben weiter erforschen wollen; es gibt zahlreiche Ressourcen im Internet. Aber für den Anfang reichen diese Informationen aus.
Da du nun die grundlegenden NLP-Aufgaben kennst, die als Bausteine für anspruchsvollere NLP-Anwendungen dienen, wollen wir die Open-Source-NLP-Bibliothek spacy
nutzen, um einige dieser grundlegenden NLP-Aufgaben durchzuführen.
Einrichten der Programmierumgebung
Um die grundlegenden NLP-Aufgaben durchzuführen, müssen wir zunächst unsereProgrammierumgebung einrichten.
In diesem Buch werden wir eine der einfachsten Programmierumgebungen verwenden, die Datenwissenschaftlern heute zur Verfügung stehen: Googles Colaboratory. Google Colab ist eine kostenlose Jupyter Notebook-Umgebung, die komplett in der Cloud läuft. In Kapitel 2 werden wir Google Colab und alternative Programmierumgebungen ausführlicher besprechen.
Wir werden GitHub als Repository für die Programmierung verwenden.4
Wenn du es vorziehst, den Code lokal auf deinem Rechner auszuführen, findest du auf unserem GitHub-Repos eine Anleitung zum Einrichten deiner lokalen Umgebung.
Beginnen wir also damit, die grundlegenden NLP-Aufgaben zu kodieren.
spaCy, fast.ai, und Hugging Face
In diesem Buch verwenden wir die Open-Source-Softwarebibliotheken , die von drei großen Unternehmen angeboten werden: spacy
fast.ai und Hugging Face, um NLP zu betreiben. Diese Bibliotheken sind auf hohem Niveau angesiedelt und nehmen uns einen Großteil der Arbeit ab, die wir sonst auf niedriger Ebene erledigen müssten. Betrachte diese Bibliotheken als schöne Hüllen, mit denen wir NLP schnell anwenden können. Alle drei Bibliotheken sind leistungsfähig und kommerziell nutzbar. Du kannst jede der drei Bibliotheken für deine eigene Arbeit nutzen, du musst dich nicht für alle drei entscheiden. Trotzdem ist es ratsam, sich in allen drei Bibliotheken gut auszukennen, denn sie haben ihre jeweiligen Stärken und Schwächen, und manchmal ist eine von ihnen schneller als die andere in der Lage, die neuesten Fortschritte im NLP zu übernehmen. Bevor wir in diesem Kapitel mit spacy
weitermachen, wollen wir alle drei kurz vorstellen. In Kapitel 2 werden wir mit fast.ai und Hugging Face arbeiten.
spaCy
Erstmals veröffentlicht im Jahr 2015, spacy
ist eine quelloffene Bibliothek für NLP mit rasanter Leistung, die sowohl Python als auch Cython nutzt. Vor spacy
war das Natural Language Toolkit (NLTK) die führende NLP-Bibliothek unter Forschern, aber NLTK war veraltet (es wurde erstmals 2001 veröffentlicht) und skalierte schlecht. spacy
Das NLTK war die erste moderne NLP-Bibliothek, die für ein kommerzielles Publikum gedacht war und die Skalierbarkeit in der Produktion im Blick hatte. Heute ist NLTK eine der wichtigsten Bibliotheken für NLP-Anwendungen in Unternehmen. Sie unterstützt mehr als 64 Sprachen und sowohl TensorFlow als auch PyTorch.
Vor 2021 basierte spacy
2.x auf rekurrenten neuronalen Netzen (RNNs), die wir später in diesem Buch behandeln werden, und nicht auf den branchenführenden transformatorbasierten Modellen. Ab Januar 2021 unterstützt spacy
nun auch die modernsten transformatorbasierten Pipelines und festigt damit seine Position unter den wichtigsten NLP-Bibliotheken von heute.
spacy
Der Erfinder von und das Mutterunternehmen , Explosion AI, bieten auch eine hervorragende Annotationsplattform namens Prodigy an, die wir in Kapitel 3 verwenden werden. Von den drei Bibliotheken ist spacy
die ausgereifteste und erweiterungsfähigste, da ihre Entwickler in den letzten mehr als sechs Jahren viele Integrationen geschaffen und unterstützt haben. Sie eignet sich heute am besten für den Produktionseinsatz.
fast.ai
fast.ai (das Unternehmen) hat 2018 seine Open-Source-Bibliothek fastai
veröffentlicht, die auf PyTorch aufbaut. fast.ai, das Unternehmen, hat sich einen Namen gemacht, indem es Massive Open Online Courses (MOOCs) für Programmierer anbietet, die eine praktische Einführung in das maschinelle Lernen wünschen, und die Bibliothek fastai
spiegelt diesen Ethos wider. Sie enthält High-Level-Komponenten, mit denen Programmierer/innen schnell und einfach Ergebnisse auf dem neuesten Stand der Technik erzielen können. Gleichzeitig verfügt fastai
über Low-Level-Komponenten, die Forscherinnen und Forscher mischen und anpassen können, um eigene Probleme zu lösen. Die Macher von fastai
haben auch ULMFiT entwickelt, eine der ersten Transfer-Learning-Methoden im NLP, die wir in Kapitel 2 verwenden werden. Für diejenigen, die neben einer schnellen und einfach zu bedienenden Bibliothek auch Kursarbeit und Videos wünschen, ist fastai
eine gute Option. Allerdings ist sie weniger ausgereift und für die Produktion weniger geeignet als spacy
und Hugging Face.
Umarmendes Gesicht
Hugging Face wurde 2016 gegründet und ist das jüngste Unternehmen auf , aber wahrscheinlich das am besten finanzierte und am schnellsten wachsende der drei Unternehmen; das Unternehmen hat im März 2021 eine 40 Millionen Dollar schwere Serie B aufgenommen. Hugging Face konzentriert sich ausschließlich auf NLP und hilft Praktikern dabei, NLP-Anwendungen mit Hilfe modernster Transformatoren zu entwickeln. Die Bibliothek, genannt Transformers, wurde für PyTorch und TensorFlow entwickelt und unterstützt über 100 Sprachen. Es ist sogar möglich, für die Entwicklung und den Einsatz von PyTorch und TensorFlow ziemlich nahtlos zu wechseln. Hugging Face hat auch eine Pipeline-API für die Produktion von NLP-Modellen. Wir sind sehr gespannt auf die Zukunft von Hugging Face und empfehlen dir, dich ausreichend mit der Bibliothek vertraut zu machen.
NLP-Aufgaben mit SpaCy durchführen
Lass uns nun spacy
für unsere NLP-Aufgaben verwenden.
Zuerst installieren wir spacy
. Weitere Informationen zur Installation von findest du auf der offiziellen SpaCy-Website. Wenn du spacy
noch nicht installiert hast, bekommst du mit diesen Befehlen alles, was du brauchst (wenn du sie in einem Notebook ausführst, setze vor jede Zeile ein !
Zeichen):
pip install -U spacy[
cuda110,transformers,lookups]==
3.0.3 pip install -U spacy-lookups-data==
1.0.0 pip install cupy-cuda110==
8.5.0 python -m spacy download en_core_web_trf
Vorgefertigte Sprachmodelle herunterladen
spacy
verfügt über vortrainierte Sprachmodelle für den sofortigen Einsatz. Vortrainierte Modelle sind Modelle, die bereits mit vielen Daten trainiert wurden und mit denen wir Inferenzen durchführen können.
Diese vortrainierten Sprachmodelle helfen uns bei der Lösung grundlegender NLP-Aufgaben, aber fortgeschrittene Nutzer können sie gerne mit spezifischeren Daten deiner Wahl feinabstimmen. So kannst du die Leistung für deine speziellen Aufgaben noch weiter verbessern.
Bei der Feinabstimmung wird ein bereits trainiertes Modell weiter trainiert (d.h. die Feinabstimmung des Modells), und zwar auf einem spezifischeren Textkorpus, der für den Bereich des Nutzers relevant ist.5 Wenn wir z. B. im Finanzwesen arbeiten, könnten wir ein allgemeines, vorab trainiertes Sprachmodell auf Finanzdokumente abstimmen, um ein finanzspezifisches Sprachmodell zu erstellen. Dieses finanzspezifische Sprachmodell würde bei finanzbezogenen NLP-Aufgaben eine noch bessere Leistung erbringen als das allgemeine, vortrainierte Sprachmodell.
spacy
unterteilt seine vortrainierten Sprachmodelle in zwei Gruppen: Kernmodelle und Einstiegsmodelle. Die Kernmodelle sind Allzweckmodelle und helfen uns, die grundlegenden NLP-Aufgaben zu lösen. Die Starter-Modelle sind Basismodelle, die für das Transfer-Lernen nützlich sind. Diese Modelle haben vortrainierte Gewichte, die du für die Initialisierung und Feinabstimmung deiner eigenen Modelle verwenden kannst. Betrachte die Kernmodelle als gebrauchsfertige Modelle und die Basismodelle als Do-it-yourself-Starterkits.
Wir werden die fertigen Kernmodelle verwenden, um die grundlegenden NLP-Aufgaben zu erledigen. Importieren wir zunächst das Kernmodell:6
# Import spacy and download language model
import
spacy
nlp
=
spacy
.
load
(
"en_core_web_trf"
)
Jetzt führen wir die erste der NLP-Aufgaben durch: die Tokenisierung.
Tokenisierung
Mit der Tokenisierung beginnt jede NLP-Arbeit. Bevor die Maschine den Text verarbeiten kann, muss sie ihn in mundgerechte Token zerlegen. Durch die Tokenisierung wird der Text in Wörter, Satzzeichen usw. unterteilt.
spacy
führt automatisch die gesamte NLP-Pipeline aus, wenn du ein Sprachmodell auf den Daten laufen lässt (d.h. nlp(SENTENCE)
). Um jedoch nur den Tokenizer zu isolieren, werden wir nur den Tokenizer mitnlp.tokenizer(SENTENCE)
aufrufen.
Dann drucken wir die Länge der Token und die einzelnen Token aus:
# Tokenization
sentence
=
nlp
.
tokenizer
(
"We live in Paris."
)
# Length of sentence
(
"The number of tokens: "
,
len
(
sentence
))
# Print individual words (i.e., tokens)
(
"The tokens: "
)
for
words
in
sentence
:
(
words
)
The number of tokens: 5 The tokens: We live in Paris .
Die Länge der Token ist 5, und die einzelnen Token sind "We
, live
,in
, Paris
, ."
. Der Punkt am Ende des Satzes ist ein eigenes Token.
Beachte, dass der spacy
Tokenizer Zeilenumbrüche (\n
), Tabulatoren (\t
) und Leerzeichen, die über ein einzelnes Leerzeichen hinausgehen ("
), als Token behandeln wird.
Lass uns den Tokenizer an einem etwas komplexeren Beispiel ausprobieren.
Wir laden öffentlich zugängliche Jeopardy-Fragen und lassen dann das gesamte spacy
Sprachmodell auf einige der Fragen laufen:
import
pandas
as
pd
import
os
cwd
=
os
.
getcwd
()
# Import Jeopardy Questions
data
=
pd
.
read_csv
(
cwd
+
'/data/jeopardy_questions/jeopardy_questions.csv'
)
data
=
pd
.
DataFrame
(
data
=
data
)
# Lowercase, strip whitespace, and view column names
data
.
columns
=
map
(
lambda
x
:
x
.
lower
()
.
strip
(),
data
.
columns
)
# Reduce size of data
data
=
data
[
0
:
1000
]
# Tokenize Jeopardy Questions
data
[
"question_tokens"
]
=
data
[
"question"
]
.
apply
(
lambda
x
:
nlp
(
x
))
Wir haben jetzt Token für jede der 1.000 Jeopardy-Fragen erstellt.
Um sicherzugehen, dass das richtig funktioniert hat, sehen wir uns die erste Frage und die erstellten Token an:
# View first question
example_question
=
data
.
question
[
0
]
example_question_tokens
=
data
.
question_tokens
[
0
]
(
"The first questions is:"
)
(
example_question
)
The first questions is: For the last 8 years of his life, Galileo was under house arrest for espousing > this man's theory
# Print individual tokens of first question
(
"The tokens from the first question are:"
)
for
tokens
in
example_question_tokens
:
(
tokens
)
The tokens from the first question are: For the last 8 years of his life , Galileo was under house arrest for espousing this man 's theory
Dies ist die erste grundlegende NLP-Aufgabe, die Maschinen ausführen; jetzt können wir zu den anderen NLP-Aufgaben übergehen. Gut gemacht!
Part-of-Speech-Tagging
Nach der Tokenisierung müssen Maschinen jedes Token mit relevanten Metadaten versehen, z. B. mit dem Part-of-Speech jedes Tokens. Genau das werden wir jetzt tun.
Da wir das gesamte Sprachmodell spacy
auf die Jeopardy-Fragenangewendet haben, enthalten die erzeugten Tokens bereits viele der bedeutungsvollen Attribute/Metadaten, die uns wichtig sind.
spacy
verwendet vorgeladene statistische Modelle, um die Wortart jedes Tokens vorherzusagen. Wir haben das statistische Modell für die englische Sprache bereits mit diesem Code geladen: spacy.load("en_core_web_sm")
.
Werfen wir einen Blick auf die POS-Tagging-Attribute für die Token in der ersten Frage:
# Print Part-of-speech tags for tokens in the first question
(
"Here are the Part-of-speech tags for each token in the first question:"
)
for
token
in
example_question_tokens
:
(
token
.
text
,
token
.
pos_
,
spacy
.
explain
(
token
.
pos_
))
Here are the Part-of-speech tags for each token in the first question: For ADP adposition the DET determiner last ADJ adjective 8 NUM numeral years NOUN noun of ADP adposition his PRON pronoun life NOUN noun , PUNCT punctuation Galileo PROPN proper noun was AUX auxiliary under ADP adposition house NOUN noun arrest NOUN noun for ADP adposition espousing VERB verb this DET determiner man NOUN noun 's PART particle theory NOUN noun
Das erste Token "Für" ist als Adposition markiert (z. B. in, zu, während); das zweite Token "die" ist ein Determinator (z. B. ein, an, die); das dritte Token "letzte" ist ein Adjektiv, das vierte Token "8" ist ein Zahlwort; das fünfte Token "Jahre" ist ein Substantiv usw.
Tabelle 1-1 zeigt die vollständige Liste aller möglichen POS-Tags, einschließlich Beschreibungen und Beispielen für jedes einzelne.7
POS | Beschreibung | Beispiel |
---|---|---|
|
Adjektiv |
Groß, alt, grün, unverständlich, erste |
|
Position |
In, zu, während |
|
Adverb |
Sehr, morgen, unten, wo, dort |
|
Auxiliary |
Ist, hat (getan), wird (tun), sollte (tun) |
|
Konjunktion |
Und, oder, aber |
|
Koordinierende Verbindung |
Und, oder, aber |
|
Bestimmungswort |
A, an, die |
|
Zwischenruf |
Psst, autsch, bravo, hallo |
|
Nomen |
Mädchen, Katze, Baum, Luft, Schönheit |
|
Ziffern |
1, 2017, eins, siebenundsiebzig, IV, MMXIV |
|
Partikel |
s, nicht |
|
Pronomen |
Ich, du, er, sie, ich selbst, sie selbst, jemand |
|
Eigenname |
Mary, John, London, NATO, HBO |
|
Zeichensetzung |
., (, ), ? |
|
Unterordnende Konjunktion |
Wenn, während, dass |
|
Symbol |
×, %, §, ©, +, -, ×, ÷, =, :), |
|
Verb |
Laufen, läuft, läuft, essen, aß, essen |
|
Andere |
Sfpksdpsxmsa |
|
Raum |
|
Nachdem wir mit dem Tokenizer Token für jeden Satz erstellt und mit dem Part-of-Speech-Tagging jedes Token mit aussagekräftigen Attributen versehen haben, wollen wir nun die Beziehung zwischen den einzelnen Token und den anderen Token des Satzes kennzeichnen. Mit anderen Worten: Wir wollen die Struktur der Token anhand der von uns erstellten Part-of-Speech-Metadaten ermitteln.
Parsing von Abhängigkeiten
Beim Dependency Parsing geht es darum, diese Beziehungen zwischen den Token zu finden. Sobald wir diesen Schritt durchgeführt haben, können wir die Beziehungen mithilfe eines Dependency Parsing Graphen visualisieren.
Lass uns zunächst die Tags für das Parsen von Abhängigkeiten für jedes der Token in der erstenFrage ansehen:
# Print Dependency Parsing tags for tokens in the first question
for
token
in
example_question_tokens
:
(
token
.
text
,
token
.
dep_
,
spacy
.
explain
(
token
.
dep_
))
For prep prepositional modifier the det determiner last amod adjectival modifier 8 nummod numeric modifier years pobj object of preposition of prep prepositional modifier his poss possession modifier life pobj object of preposition , punct punctuation Galileo nsubj nominal subject was ROOT None under prep prepositional modifier house compound compound arrest pobj object of preposition for prep prepositional modifier espousing pcomp complement of preposition this det determiner man poss possession modifier 's case case marking theory dobj direct object
Das erste Token "Für" ist als präpositionaler Modifikator gekennzeichnet; das zweite Token "die" ist ein Determinator; das dritte Token "letzte" ist ein adjektivischer Modifikator; das vierte Token "8" ist ein numerischer Modifikator; das fünfte Token "Jahre" ist das Objekt der Präposition; und so weiter.
In Tabelle 1-2 sind alle möglichen syntaktischen Abhängigkeits-Tags aufgelistet, einschließlich Beschreibungen und Beispielen für jedes einzelne.8
Etikett | Beschreibung |
---|---|
|
Satzmodifikator des Substantivs (adjektivischer Satz) |
|
Adverbialer Satzmodifikator |
|
Adverbialer Modifikator |
|
Adjektivischer Modifikator |
|
Appositioneller Modifikator |
|
Auxiliary |
|
Kennzeichnung der Fälle |
|
Koordinierende Verbindung |
|
Satzergänzung |
|
Klassifikator |
|
Verbindung |
|
Konjunktion |
|
Kopula |
|
Satzglied Subjekt |
|
Nicht spezifizierte Abhängigkeit |
|
Bestimmungswort |
|
Diskurselement |
|
Versetztes Element |
|
Schimpfwort |
|
Korrigierter Mehrwortausdruck |
|
Flacher Mehrwortausdruck |
|
Passt zu |
|
Indirektes Objekt |
|
Liste |
|
Markierung |
|
Nominaler Modifikator |
|
Nominelles Thema |
|
Numerischer Modifikator |
|
Objekt |
|
Schief nominal |
|
Waise |
|
Parataxis |
|
Zeichensetzung |
|
Aufgehobene Disfluency |
|
Wurzel |
|
Vocative |
|
Offene Ergänzung des Satzes |
Diese Tags helfen dabei, die Beziehungen zwischen den Token zu definieren. Anhand dieser Tags können wir die Beziehungsstruktur zwischen den Token, aus denen der Satz besteht, verstehen.
Das Parsen von Abhängigkeiten ist schwer zu entpacken, also nutzen wir den integrierten Visualizer von spacy
, um einen besseren Überblick über die Abhängigkeiten zwischen den Token zu bekommen:
# Visualize the dependency parse
from
spacy
import
displacy
displacy
.
render
(
example_question_tokens
,
style
=
'dep'
,
jupyter
=
True
,
options
=
{
'distance'
:
120
})
Abbildung 1-2 zeigt den ersten Teil des geparsten Satzes.
Beachte die Bedeutung von "für" und "Jahre" in der Präpositionalphrase - mehrere Token werden diesen beiden zugeordnet.
Abbildung 1-3 zeigt den zweiten Teil des geparsten Satzes.
Das Token "war" verbindet sich mit dem Nominalsubjekt "Galilei" und zwei Präpositionalphrasen: "unter Hausarrest" und "weil er die Theorie dieses Mannes vertrat".
Diese Zahlen zeigen, wie bestimmte Token gruppiert werden können und wie die Gruppen von Token miteinander in Beziehung stehen. Dies ist ein wesentlicher Schritt im NLP. Zuerst zerlegt die Maschine den Satz in einzelne Token. Dann ordnet sie jedem Token Metadaten zu (z. B. die Wortart) und verbindet die Token dann anhand ihrer Beziehung zueinander.
Kommen wir nun zum Chunking, das eine andere Form der Gruppierung zusammengehöriger Token ist.
Chunking
Lass uns den Satz "Meine Eltern leben in New York City" auf mit Chunking bearbeiten:
# Print tokens for example sentence without chunking
for
token
in
nlp
(
"My parents live in New York City."
):
(
token
.
text
)
My parents live in New York City .
Beim Chunking werden zusammengehörige Token zu einem einzigen Token zusammengefasst.
Mit Chunking identifiziert das Sprachmodell spacy
"Meine Eltern" und "New York City" als Substantiv-Chunks, ähnlich wie ein Mensch einen Satz parsen würde:
# Print chunks for example sentence
for
chunk
in
nlp
(
"My parents live in New York City."
)
.
noun_chunks
:
(
chunk
.
text
)
My parents New York City
Indem verwandte Token in Chunks gruppiert werden, fällt es der Maschine leichter, den Satz zu verarbeiten. Anstatt jedes Token isoliert zu betrachten, erkennt die Maschine nun, dass bestimmte Token mit anderen zusammenhängen - ein notwendiger Schritt im NLP.
Lemmatisierung
Jetzt gehen wir einen Schritt weiter und führen eine Lemmatisierung durch. Bei der Lemmatisierung werden Wörter in ihre Grundform (oder kanonische Form) umgewandelt, z. B. "Pferde" in "Pferd", "schlief" in "schlafen" und "größte" in "groß". Genau wie beim Part-of-Speech-Tagging, Dependency Parsing und Chunking hilft die Lemmatisierung der Maschine bei der "Verarbeitung" der Token. Mit der Lemmatisierung kann die Maschine die Token vereinfachen, indem sie einige von ihnen in ihre einfachsten Formen umwandelt.
Stemming ist ein verwandtes Konzept, aber Stemming ist einfacher. Beim Stemming werden Wörter auf ihre Wortstämme reduziert, wobei oft ein regelbasierter Ansatz verwendet wird.
Die Lemmatisierung ist ein schwierigerer Prozess, führt aber in der Regel zu besseren Ergebnissen; das Stemming erzeugt manchmal unsinnige Ergebnisse (Nichtwörter). Tatsächlich unterstützt spacy
nicht einmal das Stemming, sondern nur die Lemmatisierung.
Wir erstellen einen Datenrahmen, in dem wir die ursprüngliche und die lemmatisierte Version der Token nebeneinander speichern und anzeigen können:
# Print lemmatization for tokens in the first question
lemmatization
=
pd
.
DataFrame
(
data
=
[],
\columns
=
[
"original"
,
"lemmatized"
])
i
=
0
for
token
in
example_question_tokens
:
lemmatization
.
loc
[
i
,
"original"
]
=
token
.
text
lemmatization
.
loc
[
i
,
"lemmatized"
]
=
token
.
lemma_
i
=
i
+
1
lemmatization
Original | Lemmatisiert | |
---|---|---|
0 | Für | für |
1 | die | die |
2 | zuletzt | zuletzt |
3 | 8 | 8 |
4 | Jahre | Jahr |
5 | von | von |
6 | seine | seine |
7 | Leben | Leben |
8 | , | , |
9 | Galileo | Galileo |
10 | war | sein. |
11 | unter | unter |
12 | Haus | Haus |
13 | verhaften | verhaften |
14 | für | für |
15 | zu unterstützen. | befürworte |
16 | diese | diese |
17 | Mann | Mann |
18 | 's | 's |
19 | Theorie | Theorie |
Wie du sehen kannst, werden Wörter wie "Jahre", "war" und "espousing" in ihre Grundformen lemmatisiert. Die anderen Token liegen bereits in ihrer Grundform vor, sodass die lemmatisierte Ausgabe mit dem Original identisch ist. Durch die Lemmatisierung werden Token nach Möglichkeit in ihre einfachsten Formen zerlegt, um der Maschine das Parsen von Sätzen zu erleichtern.
Erkennung benannter Entitäten
Alles, was wir bisher gemacht haben - Tokenisierung, Part-of-Speech-Tagging, Dependency Parsing, Chunking und Lemmatisierung -, zusammengenommen, macht es Maschinen möglich, komplexere NLP-Aufgaben zu erledigen. Ein Beispiel für eine komplexe NLP-Aufgabe ist die Erkennung von benannten Entitäten (Named Entity Recognition, NER), bei der bemerkenswerte Entitäten in natürlicher Sprache analysiert und mit dem entsprechenden Klassenlabel versehen werden. NER kennzeichnet zum Beispiel Personennamen mit dem Label "Person" und Städtenamen mit dem Label "Ort".
NER ist nur möglich, weil die Maschine in der Lage ist, eine Textklassifizierung mithilfe der Metadaten durchzuführen, die durch die zuvor behandelten NLP-Aufgaben erzeugt wurden. Ohne die Metadaten aus den früheren NLP-Aufgaben hätte es die Maschine sehr schwer, NER durchzuführen, weil sie nicht genug Merkmale hätte, um Namen von Personen als "Person", Namen von Städten als "Ort" usw. zu klassifizieren.
NER ist eine wertvolle NLP-Aufgabe, denn viele Unternehmen müssen eine große Menge an Dokumenten verarbeiten, und die einfache Kennzeichnung bemerkenswerter Entitäten mit dem passenden Klassenlabel ist ein sinnvoller erster Schritt bei der Analyse der Textinformationen, insbesondere für Aufgaben der Informationsbeschaffung (z. B. das möglichst schnelle Auffinden benötigter Informationen).
Zu diesen Dokumenten gehören Verträge, Mietverträge, Immobilienkaufverträge, Finanzberichte, Nachrichtenartikel usw. Vor der Named Entity Recognition mussten Menschen solche Dokumente von Hand beschriften (in vielen Unternehmen tun sie das immer noch). Mit der Named Entity Recognition kann diese Aufgabe nun auf algorithmische Weise erledigt werden.
spacy
Das NER-Modell von ist in der Lage, viele Arten von bemerkenswerten Entitäten ("Objekte der realen Welt") zu benennen. Tabelle 1-3 zeigt die aktuellen Entitätstypen, die das spacy
Modell erkennen kann.
Typ | Beschreibung |
---|---|
|
Menschen, auch fiktive |
|
Nationalitäten oder religiöse oder politische Gruppen |
|
Gebäude, Flughäfen, Autobahnen, Brücken, etc. |
|
Unternehmen, Behörden, Institutionen usw. |
|
Länder, Städte, Staaten |
|
Nicht-GPE-Standorte, Gebirgszüge, Gewässer |
|
Gegenstände, Fahrzeuge, Lebensmittel usw. (keine Dienstleistungen) |
|
Benannte Wirbelstürme, Schlachten, Kriege, Sportereignisse, etc. |
|
Titel von Büchern, Liedern, etc. |
|
Benannte Dokumente, die zu Gesetzen gemacht wurden |
|
Jede benannte Sprache |
|
Absolute oder relative Daten oder Zeiträume |
|
Zeiten kleiner als ein Tag |
|
Prozentsatz, einschließlich % |
|
Monetäre Werte, einschließlich Einheit |
|
Messungen, z. B. von Gewicht oder Entfernung |
|
"Erster", "Zweiter", usw. |
|
Ziffern, die nicht unter eine andere Art fallen |
Es ist sehr wichtig zu wissen, dass die NER im Kern ein Klassifizierungsmodell ist. Anhand des Kontexts, in dem das Token von Interesse ist, sagt das NER-Modell den Entitätstyp des Tokens von Interesse voraus. NER ist ein statistisches Modell, und der Datenkorpus, auf dem das Modell trainiert wurde, spielt eine große Rolle. Um eine bessere Leistung zu erzielen, werden die Entwickler dieser Modelle in den Unternehmen die NER-Basismodelle auf ihren jeweiligen Dokumentenkorpus abstimmen, um eine bessere Leistung als das NER-Basismodell zu erreichen.
Probieren wir das spacy
NER-Modell aus. Wir werden NER auf den ersten Satz des Wikipedia-Artikels (Zugriff im März 2021) anwenden, der George Washington, den ersten Präsidenten der Vereinigten Staaten, beschreibt. Hier ist der Satz:
George Washington war ein amerikanischer Politiker, Militärgeneral, Staatsmann und Gründervater, der von 1789 bis 1797 als erster Präsident der Vereinigten Staaten diente.
Wie du siehst, gibt es hier mehrere Objekte aus der realen Welt zu erkennen, darunter "George Washington" und "die Vereinigten Staaten":
# Print NER results
example_sentence
=
"George Washington was an American political leader,
\
military general, statesman, and Founding Father who served as the
\
first president of the United States from 1789 to 1797.
\n
"
(
example_sentence
)
(
"Text Start End Label"
)
doc
=
nlp
(
example_sentence
)
for
token
in
doc
.
ents
:
(
token
.
text
,
token
.
start_char
,
token
.
end_char
,
token
.
label_
)
George Washington was an American political leader, military general, statesman, > and Founding Father who served as the first president of the United States > from 1789 to 1797. Text Start End Label George Washington 0 17 PERSON American 25 33 NORP first 119 124 ORDINAL the United States 138 155 GPE 1789 to 1797 161 173 DATE
Die Ausgabe besteht aus vier Elementen. Erstens der Text, aus dem die Entität besteht. Dabei kann es sich um ein einzelnes Token oder eine Gruppe von Token handeln, die die gesamte Entität bilden. Zweitens, die Anfangsposition des Textes im Satz. Drittens, die Endposition des Textes im Satz. Viertens, die Bezeichnung der Entität.
Um den Wert von NER noch deutlicher zu machen, verwenden wir den integrierten Visualizer von spacy
, um diesen Satz mit den relevanten Entity Labels zu visualisieren:
# Visualize NER results
displacy
.
render
(
doc
,
style
=
'ent'
,
jupyter
=
True
,
options
=
{
'distance'
:
120
})
Wie du in Abbildung 1-4 sehen kannst, leistet das spacy
NER-Modell gute Arbeit bei der Beschriftung der Entitäten. "George Washington" ist eine Person, und der Text beginnt bei Index 0 und endet bei Index 17. Seine Nationalität ist "amerikanisch", "Erster" ist eine Ordnungszahl, "die Vereinigten Staaten" ist eine geopolitische Einheit und "1789 bis 1797" ist ein Datum.
Der Satz wird mit farblich gekennzeichneten Etiketten je nach Entitätstyp schön dargestellt. Dies ist eine leistungsstarke und sinnvolle NLP-Aufgabe; du kannst dir vorstellen, wie diese maschinengesteuerte Kennzeichnung im großen Maßstab ohne Menschen einen großen Mehrwert für Unternehmen bringen kann, die mit vielen Textdaten arbeiten. Um ein solches Modell überhaupt zu trainieren, brauchst du natürlich viele Menschen, die Textdaten kommentieren. Und du brauchst vielleicht auch Menschen, um mit Kanten in der Produktion umzugehen. Du wirst nie ganz ohne Menschen auskommen, aber vielleicht kannst du auf einen weitgehend menschenfreien Prozess erreichen.
Named Entity Linking
Eine weitere komplexe, aber sehr nützliche NLP-Aufgabe in Unternehmen ist das Named Entity Linking (NEL). NEL löst eine Textentität in einen eindeutigen Identifikator in einer Wissensdatenbank auf. Mit anderen Worten: NEL löst die Entität in deinem Ausgangstext in eine kanonische Version in einer Wissensdatenbank auf. Versuchen wir, alle Entitäten, die Personen heißen, mit dem Knowledge Graph von Google zu verknüpfen. Wir rufen die Google Knowledge Graph API auf, um die Verknüpfung der benannten Entitäten durchzuführen.9
Hier ist die Funktion, die diesen API-Aufruf ausführt:
# Import libraries
import
requests
# Define Google Knowledge Graph API Result function
def
returnGraphResult
(
query
,
key
,
entityType
):
if
entityType
==
"PERSON"
:
=
f
"https://kgsearch.googleapis.com/v1/entities:search
\
?query={query}&key={key}"
resp
=
requests
.
get
(
)
url
=
resp
.
json
()[
'itemListElement'
][
0
][
'result'
]
\[
'detailedDescription'
][
'url'
]
description
=
resp
.
json
()[
'itemListElement'
][
0
][
'result'
]
\[
'detailedDescription'
][
'articleBody'
]
return
url
,
description
else
:
return
"no_match"
,
"no_match"
Führen wir die Entity-Verknüpfung an unserem Beispiel George Washington durch:
# Print Wikipedia descriptions and URLs for entities
for
token
in
doc
.
ents
:
url
,
description
=
returnGraphResult
(
token
.
text
,
key
,
token
.
label_
)
(
token
.
text
,
token
.
label_
,
url
,
description
)
Hier ist die Ausgabe:
- George Washington
-
PERSON https://en.wikipedia.org/wiki/George_Washington George Washington was an American political leader, military general, statesman, and Founding Father, who also served as the first President of the United States from 1789 to 1797.
- Amerikanisch
-
NORP no_match no_match
- erste
-
ORDINAL no_match no_match
- die Vereinigten Staaten
-
GPE no_match no_match
- 1789 bis 1797
-
DATE no_match no_match
Wie du sehen kannst, ist George Washington eine PERSON
und wird erfolgreich mit der Wikipedia-URL und -Beschreibung "George Washington" verlinkt. Die anderen sind nicht vom Entitätstyp PERSON
und werden nicht verlinkt. Falls gewünscht, könnten wir auch die anderen benannten Entitäten, wie z. B. die Vereinigten Staaten, mit den entsprechenden Wikipedia-Artikeln verlinken.
NEL hat viele Anwendungsfälle in Unternehmen, vor allem weil die Notwendigkeit, Informationen mit einer Taxonomie zu verknüpfen, immer wieder auftaucht (z. B. die Verknüpfung von Börsenkursen, Arzneimitteln, börsennotierten Unternehmen, Konsumgütern usw. mit kanonischen Versionen in einer Taxonomie oder Wissensdatenbank).
Fazit
In diesem Kapitel haben wir NLP definiert und seine Ursprünge behandelt, einschließlich einiger kommerzieller Anwendungen, die heute in Unternehmen beliebt sind. Dann haben wir einige grundlegende NLP-Aufgaben definiert und sie mit der sehr leistungsfähigen NLP-Bibliothek spacy
ausgeführt. Um das in diesem Kapitel Gelernte zu vertiefen, solltest du mehr Zeit mitspacy
verbringen und die online verfügbare Dokumentation lesen.
Die Aufgaben, die wir durchgeführt haben, sind zwar sehr einfach, aber in Kombination mit NLP-Aufgaben wie Tokenisierung, Part-of-Speech-Tagging, Dependency Parsing, Chunking und Lemmatisierung können Maschinen sogar noch komplexere NLP-Aufgaben wie NER und Entity Linking durchführen. Wir hoffen, dass unser Überblick über diese Aufgaben dir dabei geholfen hat, ein Gefühl dafür zu bekommen, wie Maschinen natürliche Sprache entpacken und verarbeiten können, und dass wir damit einen Teil des Themas entmystifiziert haben.
Bei den meisten komplexen NLP-Anwendungen müssen diese Aufgaben heute nicht mehr manuell ausgeführt werden, sondern neuronale Netze lernen, diese Aufgaben selbständig zu erledigen. Im nächsten Kapitel werden wir einige der modernsten Ansätze mit der Transformer-Architektur und großen, vortrainierten Sprachmodellen von fast.ai und Hugging Face vorstellen, um zu zeigen, wie einfach es heute ist, mit NLP loszulegen. Später im Buch kehren wir zu den Grundlagen zurück (die wir dir in diesem Kapitel nur kurz angerissen haben) und helfen dir, dein NLP-Grundlagenwissen auszubauen.
1 Einer der größten Sprünge in der Geschichte der Menschheit war die Entwicklung einer menschlichen (auch "natürlichen") Sprache, die es den Menschen ermöglichte, miteinander zu kommunizieren, Gruppen zu bilden und als kollektive Einheiten von Menschen zu agieren, anstatt als Einzelpersonen.
2 Weitere Informationen findest du in einem Artikel des New York Times Magazine aus dem Jahr 2016 über die neuronale maschinelle Übersetzung von Google.
3 Mehr dazu findest du im Wikipedia-Artikel über den Turing-Test.
4 Mehr über GitHub erfährst du auf der GitHub-Website und in der Anleitung von Google Colab zur Integration mit GitHub.
5 Der Vorgang, ein für eine Aufgabe entwickeltes Modell als Ausgangspunkt für ein Modell für eine zweite Aufgabe zu verwenden, wird als Transferlernen bezeichnet.
6 Ein spacy
Sprachmodell ist nicht dasselbe wie das, was wir in der NLP-Literatur allgemein als Sprachmodell bezeichnen. Weitere Informationen zur Sprachmodellierung findest du in Kapitel 2.
7 Weitere Informationen findest du in der spacy
POS-Dokumentation.
8 Weitere Informationen findest du in der Dokumentationspacy
.
9 Du brauchst deinen eigenen Google Knowledge Graph API-Schlüssel, um diesen API-Aufruf auf deinem Computer durchzuführen. Zur Veranschaulichung werden wir unseren eigenen API-Schlüssel verwenden.
Get Angewandte natürliche Sprachverarbeitung im Unternehmen now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.