title | description | prev | next | type | id |
---|---|---|---|---|---|
Kapitel 1: Wörter, Ausdrücke, Entitäten und Konzepte finden |
Dieses Kapitel zeigt dir die Grundlagen der Textverabeitung mit spaCy. Du lernst die Datenstrukturen kennen, wie du mit trainierten Pipelines arbeitest und wie du sie verwenden kannst, um linguistische Eigenschaften deines Texts vorherzusagen. |
/chapter2 |
chapter |
1 |
Lass uns loslegen mit spaCy! In dieser Übung kannst du ein paar der 60+ verfügbaren Sprachen ausprobieren.
- Nutze
spacy.blank
, um ein leeres deutsches ("de"
)nlp
-Objekt zu erstellen. - Erstelle ein
doc
und drucke seinen Text.
- Nutze
spacy.blank
, um ein leeres englisches ("en"
)nlp
-Objekt zu erstellen. - Erstelle ein
doc
und drucke seinen Text.
- Nutze
spacy.blank
, um ein leeres spanisches ("es"
)nlp
-Objekt zu erstellen. - Erstelle ein
doc
und drucke seinen Text.
Wenn du das nlp
-Objekt mit einem String ausführst, tokenisiert spaCy zuerst
den Text und erstellt ein Doc
-Objekt. In dieser Übung lernst du mehr über das
Doc
sowie über seine Ansichten Token
und Span
.
- Nutze
spacy.blank
, um ein deutschesnlp
-Objekt zu erstellen. - Verarbeite den Text und erstelle ein
Doc
-Objekt, das in der Variabledoc
gespeichert wird. - Wähle den ersten Token des
Doc
-Objekts aus und drucke seinentext
.
Du kannst bei einem Doc
genauso auf einen Index zugreifen, wie bei einer Liste
in Python. Zum Beispiel gibt doc[4]
den Token mit dem Index 4 zurück, also den
fünften Token im Text. Vergiss nicht, dass der erste Index in Python 0 und nicht
1 ist.
- Nutze
spacy.blank
, um ein deutschesnlp
-Objekt zu erstellen. - Verarbeite den Text und erstelle ein
Doc
-Objekt, das in der Variabledoc
gespeichert wird. - Erstelle einen Abschnitt des
Doc
-Objekts für die Tokens "niedliche Katzen" und "niedliche Katzen und Faultiere".
Einen Abschnitt eines Doc
s kannst du genauso erstellen, wie einen Abschnitt
einer Liste in Python, indem du die :
-Notation nutzt. Denke daran, dass der
Index des letzten Tokens ausschließend ist – 0:4
zum Beispiel beschreibt
Token 0 bis hin zu Token 4, aber nicht einschließlich Token 4.
In diesem Beispiel wirst du spaCys Doc
- und Token
-Objekte und lexikalische
Attribute benutzen, um Prozentzahlen in einem Text zu finden. Gesucht werden
zwei aufeinanderfolgende Tokens: eine Zahl und ein Prozentzeichen.
- Benutze das
like_num
Token-Attribut, um zu testen, ob ein Token imdoc
einer Zahl ähnelt. - Wähle den Token aus, der auf den aktuellen Token im Dokument folgt. Der
Index des nächsten Tokens im
doc
isttoken.i + 1
. - Überprüfe, ob das Attribut
text
des nächsten Tokens ein Prozentzeichen "%" ist.
Um den Token an einer bestimmten Position auszuwählen, kannst du auf den Index
von doc
zugreifen. doc[5]
ist zum Beispiel der Token mit dem Index 5.
Was ist nicht in Pipeline-Paketen enthalten, die du mit spaCy laden kannst?
Alle gespeicherten Pipelines enthalten eine config.cfg
, die die zu
initialisierende Sprache und die Namen der zu ladenden Pipeline-Komponenten
festlegt. Des Weiteren enthält sie Details dazu, wie die Pipeline trainiert
wurde und welche Einstellungen genutzt wurden.
Um linguistische Attribute wie Wortarten, Dependenzrelationen oder Entitäten vorherzusagen, enthalten Pipeline-Pakete binäre Gewichte.
Trainierte Pipelines ermöglichen es, basierend auf einer Auswahl an Trainingsbeispielen zu generalisieren. Sobald sie einmal trainiert sind, verwenden sie binäre Gewichte, um Vorhersagen zu treffen. Daher ist es nicht erforderlich, die Trainingsdaten zusammen mit der Pipeline zu speichern.
Pipeline-Pakete enthalten eine strings.json
, die die Einträge im Vokabular der
Pipeline und ihre Zuordnung zu Hashes definiert. Dies ermöglicht spaCy, intern
lediglich in Hashes zu kommunizieren und den dazugehörigen String erst
nachzuschlagen, wenn er gebraucht wird.
Die Pipelines, die wir in diesem Kurs verwenden, sind bereits vorinstalliert. Um mehr Details über die trainierten Pipelines von spaCy und ihren Installationsprozess zu erfahren, schau dir die Dokumentation an.
- Benutze
spacy.load
, um das kleine deutsche Modell"de_core_news_sm"
zu laden. - Verarbeite den Text und drucke den Text des Dokuments.
Um eine Pipeline zu laden, rufe spacy.load
mit dem String-Namen der Pipeline
als Argument auf. Pipeline-Namen unterscheiden sich in Hinblick auf die
Sprachdaten und die Daten, mit denen sie trainiert wurden. Vergewissere dich
daher, dass du den korrekten Namen verwendest.
Du darfst nun eines der von spaCys trainierten Pipeline-Paketen ausprobieren und
seine Vorhersagen in Aktion sehen. Probiere das auch gern mit deinem eigenen
Text aus! Um mehr über die Bedeutung eines Tags oder Labels zu erfahren, kannst
du spacy.explain
in der Schleife aufrufen, zum Beispiel
spacy.explain("PROPN")
oder spacy.explain("ORG")
.
- Verarbeite den Text mithilfe des
nlp
-Objekts und erstelle eindoc
. - Drucke nun für jeden einzelnen Token seinen Text und seine Attribute
.pos_
(Wortart) und.dep_
(Dependenzrelation).
Um ein doc
zu erstellen, rufe das nlp
-Objekt mit einem Text-String als
Argument auf. Denke daran, dass du die Namen der Token-Attribute mit einem
Unterstrich verwenden musst, um den String-Wert zu erhalten.
- Verarbeite den Text und erstelle ein
doc
-Objekt. - Iteriere über die
doc.ents
und drucke den Text und das Attributlabel_
der Entitäten.
Um ein doc
zu erstellen, rufe das nlp
-Objekt mit einem Text-String als
Argument auf. Denke daran, dass du die Namen der Token-Attribute mit einem
Unterstrich verwenden musst, um den String-Wert zu erhalten.
Modelle sind statistisch und liegen nicht immer richtig. Ob ihre Vorhersagen korrekt sind, hängt von den Trainingsdaten und dem Text, den du verarbeitest, ab. Lass uns das an einem Beispiel veranschaulichen.
- Verarbeite einen Text mithilfe des
nlp
-Objekts. - Iteriere über die Entitäten und drucke ihren Text und ihr Label.
- Es scheint, als hat das Modell "IPhone SE" nicht korrekt vorhergesagt. Erstelle eine Span für diese Tokens von Hand.
- Um ein
doc
zu erstellen, rufe dasnlp
-Objekt mit dem Text als Argument auf. Entitäten sind überdoc.ents
verfügbar. - Der einfachste Weg, ein
Span
-Objekt zu erstellen, ist, die Slice-Notation zu verwenden – zum Beispiel,doc[5:10]
für den Token an Position 5 bis hin zu Position 10. Denke daran, dass der letzte Index exkludiert wird.
Lass uns spaCys regelbasierten Matcher
ausprobieren. Du wirst Beispiele aus
der vorherigen Übung verwenden und ein Pattern erstellen, das den Ausdruck
"iPhone X" im Text findet.
- Importiere den
Matcher
vonspacy.matcher
. - Initialisiere ihn mit dem gemeinsamen
vocab
desnlp
-Objekts. - Erstelle ein Pattern, das den
"TEXT"
-Wert von zwei Tokens findet:"iPhone"
und"X"
. - Benutze die Methode
matcher.add
, um das Pattern zum Matcher hinzuzufügen. - Iteriere über die Resultate und drucke die gefundenen Spans vom
start
- bis zumend
-Index.
- Das gemeinsame Vokabular ist als Attribut
nlp.vocab
verfügbar. - Ein Pattern ist eine Liste von Dictionaries mit Attribut-Namen als Schlüsseln.
[{"TEXT": "Hello"}]
findet zum Beispiel einen Token, dessen exakter Text "Hello" ist. - Die Werte
start
undend
eines gefundenen Resultats beschreiben den Start- und End-Index einer gefundenen Span. Um die Span zu drucken, erstelle einen Abschnitt desdoc
s basierend auf demstart
undend
.
In dieser Übung dreht sich alles um komplexere Patterns mit Token-Attributen und Operatoren.
- Schreibe ein Pattern, das nur Erwähnungen der kompletten iOS-Versionen findet: "iOS 7", "iOS 11" und "iOS 10".
- Um einen Token mit einem exakten Text zu finden, kannst du das Attribut
"TEXT"
verwenden. Zum Beispiel,{"TEXT": "Apple"}
findet Tokens mit dem exakten Text "Apple". - Um Tokens mit Zahlen zu finden, kannst du das Attribut
"IS_DIGIT"
verwenden, das nurTrue
zurückgibt, wenn ein Token aus Ziffern besteht.
- Schreibe ein Pattern, das nur Formen des englischen Verbs "download"
(Tokens mit dem Lemma "download") findet, gefolgt von einem Token mit der
Wortart
"PROPN"
(proper noun, Eigenname).
- Um in einem Pattern ein Lemma anzugeben, kannst du das Attribut
"LEMMA"
verwenden.{"LEMMA": "be"}
findet zum Beispiel Tokens wie "is", "was" oder "being". - Um Eigennamen zu finden, sollte das Pattern alle Tokens finden, deren Attribut
"POS"
den Wert"PROPN"
hat.
- Schreibe ein Pattern, das ein oder zwei Adjektive (
"ADJ"
) gefolgt von einem Nomen ("NOUN"
) findet, d.h. ein Adjektiv, ein optionales Adjektiv und ein Nomen.
- Um Adjektive zu finden, suche nach Tokens deren Attribute
"POS"
den Wert"ADJ"
hat. Um Nomen zu finden, suche nach"NOUN"
. - Operatoren können mithilfe des Schlüssels
"OP"
hinzugefügt werden."OP": "?"
zum Beispiel findet einen Token 0 Mal oder öfter.