POS-Tagging mit NLTK und Chunking in NLP [BEISPIELE]

⚡ Intelligente Zusammenfassung

POS-Tagging ordnet jedem Wort in einem Satz eine Wortart zu, während Chunking diese getaggten Wörter zu sinnvollen Phrasen wie Nominalphrasen gruppiert und so eine oberflächliche Struktur hinzufügt, die NLTK mithilfe regulärer Ausdrücke aufbaut. Python.

  • 🏷️ POS-Tagging: Jedes Wort erhält aus seinem Kontext ein grammatikalisches Token wie NN, VB oder JJ.
  • 🌿 Aufteilen: Markierte Wörter werden zu Phrasen gruppiert, ein Prozess, der auch als flaches Parsing bezeichnet wird.
  • 🔤 Workflow: Zuerst den Text tokenisieren, dann pos_tag anwenden und anschließend mit einer RegexpParser-Grammatik parsen.
  • 📊 Zähl-Tags: Counter und FreqDist ermitteln Tag- und Worthäufigkeiten für das Feature Engineering.
  • 🔗 Kollokationen: Bigramme und Trigramme erfassen Wortpaare und -tripel, um stärkere Textmerkmale zu erzielen.
  • 🤖 KI-Nutzung: Maschinelles Lernen und HMM-basierte Tagger behandeln mehrdeutige Wörter probabilistisch.

POS-Tagging mit NLTK und Chunking in der NLP

POS-Tagging

POS-Tagging Die Wortartenbestimmung (Parts of Speech Tagging, PWS-Tagging) ist ein Verfahren, bei dem Wörter in einem Text anhand ihrer Definition und ihres Kontextes einer bestimmten Wortart zugeordnet werden. Sie dient dazu, Texte in einer Sprache zu lesen und jedem Wort eine spezifische Wortart zuzuordnen. Sie wird auch als grammatikalische Kennzeichnung bezeichnet.

Lernen wir anhand eines NLTK-Beispiels zur Wortartenklassifizierung:

Input: Everything to permit us.
Output: [('Everything', NN),('to', TO), ('permit', VB), ('us', PRP)]

Schritte im POS-Etikettierungsbeispiel

  • Text tokenisieren (word_tokenize)
  • Wenden Sie pos_tag auf den obigen Schritt an, d. h. nltk.pos_tag(tokenize_text)

Nachfolgend sind Beispiele für NLTK POS-Etiketten aufgeführt:

Abkürzung Bedeutung
CC koordinierende Konjunktion
CD Kardinalziffer
DT Bestimmer
EX dort existenziell
FW Fremdwort
IN Präposition/untergeordnete Konjunktion
JJ Adjektiv
JJR Adjektiv, Komparativ
JJS Adjektiv, Superlativ
LS Listenmarkt
MD modal
NN Substantiv, Singular
NNS Substantiv Plural
NNP Eigenname, Singular
NNPS Eigenname, Plural
PDT Prädeterminator
POS Genitiv
PRP Personalpronomen
PRP$ Possessiv Pronomen
RB Adverb
RBR Adverb, Komparativ
RBS Adverb, Superlativ
RP Teilchen
TO unendlicher Marker
UH Zwischenruf
VB Verb
GBV Verb Gerundium
VBD Verb Vergangenheitsform
VBN Verb Partizip Perfekt
VBP Verb, Präsens, nicht 3. Person Singular
VBZ Verb, Präsens mit 3. Person Singular
WDT Wh-Bestimmung
WP wh-Pronomen
WRB Wh-Adverb

Die obige NLTK-POS-Tag-Liste enthält alle NLTK-POS-Tags. Der NLTK-POS-Tagger ordnet jedem Wort eines Satzes grammatikalische Informationen zu. Die Installation, der Import und der Download aller POS-NLTK-Pakete sind nun abgeschlossen.

Was ist Chunking im NLP?

Chunking Chunking ist in der NLP ein Prozess, bei dem kleine Informationseinheiten zu größeren zusammengefasst werden. Hauptsächlich dient Chunking dazu, Gruppen von Nominalphrasen zu bilden. Es strukturiert Sätze mithilfe von POS-Tagging und regulären Ausdrücken. Die resultierenden Wortgruppen werden als „Chunks“ bezeichnet. Chunking wird auch als Shallow Parsing bezeichnet.

Bei der flachen Gliederung gibt es maximal eine Ebene zwischen Wurzeln und Blättern, während die tiefe Gliederung mehrere Ebenen umfasst. Die flache Gliederung wird auch als leichte Gliederung oder Chunking bezeichnet.

Regeln für das Chunking

Es gibt keine vordefinierten Regeln, aber Sie können sie je nach Bedarf kombinieren. Angenommen, Sie möchten Substantiv, Verb (Vergangenheit), Adjektiv und nebenordnende Konjunktion in einem Satz identifizieren. Dann können Sie die folgende Regel verwenden:

chunk:{***?}

Die folgende Tabelle erklärt die Bedeutung der verschiedenen Symbole:

Name des Symbols Beschreibung
. Beliebiges Zeichen außer neuer Zeile
* Kombiniere 0 oder mehr Wiederholungen
? Kombiniere 0 oder 1 Wiederholungen

Um die Regel besser zu verstehen, schreiben wir nun den Code.

from nltk import pos_tag
from nltk import RegexpParser
text ="learn php from guru99 and make study easy".split()
print("After Split:",text)
tokens_tag = pos_tag(text)
print("After Token:",tokens_tag)
patterns= """mychunk:{***?}"""
chunker = RegexpParser(patterns)
print("After Regex:",chunker)
output = chunker.parse(tokens_tag)
print("After Chunking",output)

Ausgang:

After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy']
After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')]
After Regex: chunk.RegexpParser with 1 stages:
RegexpChunkParser with 1 rules:
       '***?'>
After Chunking (S
  (mychunk learn/JJ)
  (mychunk php/NN)
  from/IN
  (mychunk guru99/NN and/CC)
  make/VB
  (mychunk study/NN easy/JJ))

Die Schlussfolgerung aus der obigen Wortart-Kennzeichnung Python Ein Beispiel dafür ist, dass „make“ ein Verb ist, das nicht in der Regel enthalten ist, daher wird es nicht als mychunk gekennzeichnet.

Anwendungsfall Chunking

Chunking wird zur Entitätserkennung eingesetzt. Eine Entität ist derjenige Teil eines Satzes, anhand dessen eine Maschine die Bedeutung einer beliebigen Intention ableiten kann.

Example:
Temperature of New York.
Here Temperature is the intention and New York is an entity.

Chunking dient also dazu, Teilmengen von Token auszuwählen. Der folgende Code veranschaulicht die Funktionsweise von Chunking. In diesem Beispiel sehen Sie ein Diagramm, das einem Chunk einer Nominalphrase entspricht.

 import nltk
text = "learn php from guru99"
tokens = nltk.word_tokenize(text)
print(tokens)
tag = nltk.pos_tag(tokens)
print(tag)
grammar = "NP: {
?*}" cp =nltk.RegexpParser(grammar) result = cp.parse(tag) print(result) result.draw() # It will draw the pattern graphically which can be seen in Noun Phrase chunking

Ausgang:

['learn', 'php', 'from', 'guru99']  -- These are the tokens
[('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')]   -- These are the pos_tag
(S (NP learn/JJ php/NN) from/IN (NP guru99/NN))        -- Noun Phrase Chunking

Nominalphrasen-Chunking-Diagramm

Nominalphrasen-Chunking-Diagramm

Aus dem Diagramm lässt sich schließen, dass „learn“ und „guru99“ zwei unterschiedliche Token sind, die jedoch als Nominalphrase kategorisiert werden, während das Token „from“ keiner Nominalphrase angehört. Chunking dient dazu, verschiedene Token in denselben Chunk zu kategorisieren. Das Ergebnis hängt von der gewählten Grammatik ab. Darüber hinaus wird Chunking in NLTK verwendet, um Muster zu taggen und Textkorpora zu analysieren.

Zählen von POS-Etiketten

Wir haben verschiedene besprochen pos_tag Hier lernen Sie, wie man diese Tags zählt. Das Zählen von Tags ist entscheidend für die Textklassifizierung und die Aufbereitung von Merkmalen für die Verarbeitung natürlicher Sprache. Wir schreiben zunächst den funktionierenden Code und erklären anschließend die einzelnen Schritte.

from collections import Counter
import nltk
text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online."
lower_case = text.lower()
tokens = nltk.word_tokenize(lower_case)
tags = nltk.pos_tag(tokens)
counts = Counter( tag for word,  tag in tags)
print(counts)

Ausgang:

Counter({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1, 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})

Erläuterung des Codes:

  1. Verwenden Sie das Counter-Paket aus dem Modul collections. Counter ist eine Unterklasse von Dictionary, die Elemente als Schlüssel und deren Anzahl als Werte speichert.
  2. Importieren Sie nltk, um den Text zu tokenisieren.
  3. Schreiben Sie den Text, dessen pos_tag Sie zählen möchten.
  4. Alle Wörter vor der Tokenisierung in Kleinbuchstaben umwandeln.
  5. Die Wörter werden durch word_tokenize geleitet und der pos_tag jedes Tokens berechnet.
  6. Der Zähler zählt dann das gesamte Vorkommen jedes Tags im Text.

Häufigkeitsverteilung

Die Häufigkeitsverteilung gibt an, wie oft ein bestimmtes Ergebnis eines Experiments auftritt. Sie dient dazu, die Häufigkeit jedes einzelnen Wortes in einem Dokument zu ermitteln. Frequenzabstand Klasse definiert durch die nltk.probability Modul. Der Zähler wird bei jeder Stichprobenentnahme um eins erhöht.

Für jedes beliebige Wort können wir überprüfen, wie oft es in einem Dokument vorkommt. Zum Beispiel:

  • Zählmethode: freq_dist.count('and') gibt die Anzahl der Vorkommen von 'and' zurück. Es wird als Zählmethode bezeichnet.
  • Frequenzmethode: freq_dist.freq('and') gibt die Häufigkeit einer gegebenen Stichprobe zurück.

Wir werden ein kleines Programm schreiben, das die Häufigkeitsverteilung jedes Wortes im Text berechnet.

import nltk
a = "Guru99 is the site where you can find the best tutorials for Software Testing     Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please     visit the site guru99.com and much more."
words = nltk.tokenize.word_tokenize(a)
fd = nltk.FreqDist(words)
fd.plot()

Erklärung des Codes:

  1. Importieren Sie das nltk-Modul.
  2. Schreiben Sie den Text, dessen Wortverteilung Sie ermitteln müssen.
  3. Jedes Wort im Text wird in Tokens zerlegt, die als Eingabe für das FreqDist-Modul von nltk dienen.
  4. Wende jedes Wort in Form einer Liste auf nltk.FreqDist an.
  5. Stelle die Wörter mithilfe der Funktion plot() in einem Diagramm dar.

Hinweis: Matplotlib muss installiert sein, um das Diagramm anzuzeigen. Es zählt das Vorkommen jedes Wortes im Text und unterstützt die textbasierte Stimmungsanalyse. Der Schlüsselbegriff ist „Tokenisierung“: Nach der Tokenisierung wird jedes Wort daraufhin überprüft, wie oft es vorkommt.

Kollokationen: Bigramme und Trigramme

Kollokationen sind Wortpaare, die in einem Dokument häufig gemeinsam vorkommen. Sie werden berechnet, indem die Anzahl dieser Wortpaare zur Gesamtwortzahl des Dokuments ins Verhältnis gesetzt wird.

Betrachten wir Wörter wie ultraviolette Strahlen und infrarote Strahlen. Die Wörter ultraviolett und Strahlen werden nicht einzeln verwendet und können daher als Kollokation betrachtet werden. Ein weiteres Beispiel ist die Computertomographie (CT), da wir nicht CT und Scan getrennt sagen. Kollokationen lassen sich in zwei Typen einteilen:

  • Bigramme: Kombination aus zwei Wörtern
  • Trigramme: Kombination aus drei Wörtern

Bigramme und Trigramme bieten aussagekräftigere und nützlichere Funktionen für das Feature-Beispiel.tracDiese sind besonders nützlich bei der textbasierten Stimmungsanalyse.

Bigramme Beispiel Code:

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

Ausgang:

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

Beispiel für Trigramme Code:

Manchmal ist es für die statistische Analyse und Häufigkeitszählung wichtig, ein Paar aus drei Wörtern im Satz zu sehen. Dies spielt wiederum eine entscheidende Rolle bei der Formung NLP Merkmale der natürlichen Sprachverarbeitung sowie textbasierte Stimmungsanalyse. Derselbe Code wird zur Berechnung der Trigramme verwendet.

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.trigrams(Tokens))
print(output)

Ausgang:

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]

Sätze markieren

Das Taggen eines Satzes bedeutet, ihm je nach Kontext Etiketten wie Verb oder Nomen hinzuzufügen. Die Identifizierung von POS-Tags ist komplex, daher ist ein allgemeines Taggen manuell nicht möglich, da manche Wörter je nach Satzstruktur mehrdeutige Bedeutungen haben. Die Umwandlung des Textes in eine Liste ist ein wichtiger Schritt vor dem Taggen, da jedes Wort durchlaufen und auf ein bestimmtes Tag geprüft wird.

import nltk
text = "Hello Guru99, You have to build a very good site, and I love visiting your site."
sentence = nltk.sent_tokenize(text)
for sent in sentence:
	 print(nltk.pos_tag(nltk.word_tokenize(sent)))

Code Erläuterung:

  1. Code um nltk (das natürliche Language ToolKit, das Submodule wie Sentence Tokenize und Word Tokenize enthält).
  2. Text, dessen Tags gedruckt werden sollen.
  3. Satztokenisierung.
  4. Es wird eine For-Schleife implementiert, in der Wörter aus dem Satz tokenisiert und das Tag jedes Wortes als Ausgabe ausgegeben wird.

In einem Korpus gibt es zwei Arten von POS-Taggern:

1. Regelbasierter POS-Tagger: Bei Wörtern mit mehrdeutiger Bedeutung wird ein regelbasierter Ansatz unter Berücksichtigung des Kontextes angewendet. Dies geschieht durch die Analyse der Bedeutung des vorhergehenden oder nachfolgenden Wortes. Wörter werden daher anhand der Grammatikregeln einer bestimmten Sprache, wie Groß- und Kleinschreibung sowie Zeichensetzung, kategorisiert. Ein Beispiel hierfür ist der Brill-Tagger.

2. Stochastischer POS-Tagger: Bei dieser Methode werden Ansätze wie Häufigkeits- oder Wahrscheinlichkeitsanalysen angewendet. Wenn ein Wort im Trainingsdatensatz überwiegend mit einem bestimmten Tag versehen ist, wird ihm dieses Tag auch im Testsatz zugewiesen. Da das Wort-Tag nicht nur von seinem eigenen Tag, sondern auch von den vorherigen Tags abhängt, ist diese Methode nicht immer präzise.

POS-Etikettierung mit Hidden-Markov-Modell

Tagging-Probleme lassen sich auch mithilfe eines Hidden-Markov-Modells (HMM) modellieren. Dabei werden Eingabe-Token als beobachtbare Sequenz und Tags als verborgene Zustände betrachtet. Ziel ist es, die Sequenz dieser verborgenen Zustände zu bestimmen. Beispielsweise ist x = x₁, x₂, …, xₙ, wobei x die Token-Sequenz und y = y₁, y₂, y₃, y₄, …, yn die verborgene Sequenz darstellt.

Wie funktioniert das Hidden-Markov-Modell (HMM)?

Das HMM verwendet eine gemeinsame Verteilung P(x, y), wobei x die Eingabe-Tokenfolge und y die Tagfolge ist. Die Tagfolge für x ist das Argmax über y₁…yn von p(x₁, x₂, …, xₙ, y₁, y₂, y₃, …). Wir haben die Tags aus dem Text kategorisiert, aber Statistiken zu diesen Tags sind unerlässlich. Daher werden im nächsten Schritt diese Tags für die statistische Analyse gezählt.

Häufig gestellte Fragen

POS-Tagging ordnet jedem einzelnen Wort seine Wortart zu, beispielsweise Nomen oder Verb. Chunking geht noch einen Schritt weiter und gruppiert diese getaggten Wörter zu Phrasen wie Nominalphrasen, wodurch der Satz eine flachere Struktur erhält.

Flaches Parsen, auch Chunking oder leichtes Parsen genannt, beschränkt die Anzahl der Ebenen zwischen Wurzeln und Blättern auf maximal eine. Es identifiziert Phrasengrenzen, ohne einen vollständigen Syntaxbaum zu erstellen, wodurch es schneller als tiefes Parsen ist.

Chunking gruppiert getaggte Wörter zu Phrasen, wodurch ein System Entitäten wie Personen, Orte, Daten oder Produkte erkennen kann. Die Erkennung benannter Entitäten basiert auf diesen Chunks.tract sinnvolle Werte aus dem Rohtext extrahieren.

Die Funktion `nltk.pos_tag()` weist Wörtern Wortart-Tags zu. Zuerst wird der Text mit `word_tokenize` tokenisiert, anschließend wird die Tokenliste an `pos_tag` übergeben, die jedes Wort zusammen mit seinem Tag (z. B. NN, VB oder JJ) zurückgibt.

Ja. Moderne KI-Tagger, die mit maschinellem Lernen und tiefen neuronalen Netzen trainiert wurden, lösen mehrdeutige Wörter auf, indem sie den Kontext aus großen Korpora lernen und so eine höhere Genauigkeit als regelbasierte Methoden bei realen Texten erreichen.

Stochastische Tagger verwenden Wahrscheinlichkeiten, die aus Trainingsdaten gelernt werden. Maschinelles Lernen schätzt die Wahrscheinlichkeit jedes Tags für ein Wort in Abhängigkeit von den umgebenden Tags und wählt dann die Sequenz mit der höchsten Gesamtwahrscheinlichkeit aus.

Neben NLTKBeliebte Optionen sind unter anderem geräumig für schnelle Produktionspipelines, Stanford CoreNLP und Hugging Face Transformers für transformatorbasiertes Tagging.

In einer Chunk-Grammatik steht ein Punkt für jedes Zeichen außer einem Zeilenumbruch, ein Sternchen für null oder mehr Wiederholungen und ein Fragezeichen für null oder eine Wiederholung des vorhergehenden POS-Tag-Musters.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: