Natural Language Processing (NLP) ist ein Teilgebiet des maschinellen Lernens, das es Computern ermöglicht, menschliche Sprache zu verstehen, zu analysieren, zu manipulieren und zu generieren. NLP begegnet Ihnen in Ihrem Alltag – von der Spam-Erkennung über die Autokorrektur bis hin zu Ihrem digitalen Assistenten („Hey, Siri?“). Sie können sogar auf NLP stoßen und es nicht einmal bemerken. In diesem Artikel zeige ich Ihnen, wie Sie Ihre eigenen NLP-Projekte mit dem Natural Language Toolkit (NLTK) entwickeln, aber bevor wir in das Tutorial eintauchen, schauen wir uns einige alltägliche Beispiele für NLP an.
Beispiele für NLP Machine Learning
- E-Mail-Spamfilter
- Autokorrektur
- Textvorhersage
- Spracherkennung
- Informationsrückgewinnung
- Informationsextraktion
- Maschinenübersetzung
- Textvereinfachung
- Stimmungsanalyse
- Textzusammenfassung
- Anfrageantwort
- Natürliche Sprachgenerierung
Erste Schritte mit NLP
NLTK ist eine beliebte Open-Source-Suite von Python-Bibliotheken. Anstatt alle Ihre NLP-Tools von Grund auf neu zu erstellen, bietet NLTK alle gängigen NLP-Aufgaben, sodass Sie sofort loslegen können. In diesem Tutorial zeige ich Ihnen, wie Sie grundlegende NLP-Aufgaben ausführen und einen Klassifikator für maschinelles Lernen verwenden, um vorherzusagen, ob eine SMS ist Spam (eine schädliche, bösartige oder unerwünschte Nachricht oder Ham (etwas, das Sie vielleicht tatsächlich lesen möchten. Sie finden den gesamten Code unten in diesem Github Repo.
Das Wichtigste zuerst, Sie sollten NLTK installieren.
Typ !pip install nltk
in einem Jupyter-Notizbuch. Wenn es in cmd nicht funktioniert, geben Sie ein conda install -c conda-forge nltk
. Darüber hinaus sollten Sie nicht viel tun müssen.
Importieren der NLTK-Bibliothek
import nltk
nltk.download()
Dieser Code gibt uns eine NLTK-Downloader-Anwendung, die bei allen NLP-Aufgaben hilfreich ist.
Wie Sie sehen, habe ich Stopwords Corpus bereits in meinem System installiert, wodurch überflüssige Wörter entfernt werden. Sie können die Pakete installieren, die für Ihr Projekt am nützlichsten sind.
Bereiten Sie Ihre Daten für NLP vor
Lesen von In-Text-Daten
Unsere Daten kommen in strukturierter oder unstrukturierter Form zu uns. Ein strukturiertes Format hat ein wohldefiniertes Muster. Excel und Google Sheets sind beispielsweise strukturierte Daten. Alternativ haben unstrukturierte Daten kein erkennbares Muster (zB Bilder, Audiodateien, Social-Media-Beiträge). Zwischen diesen beiden Datentypen können wir feststellen, dass wir ein halbstrukturiertes Format haben. Sprache ist ein großartiges Beispiel für halbstrukturierte Daten.

Wie wir aus dem obigen Code sehen können, ist es für einen Computer (und einen Menschen!) schwer zu interpretieren, wenn wir halbstrukturierte Daten lesen. Wir können Pandas verwenden, um unsere Daten zu verstehen.

Mit Hilfe von Pandas können wir unsere halbstrukturierten Daten jetzt klarer sehen und interpretieren.
So bereinigen Sie Ihre Daten
Das Bereinigen Ihrer Textdaten ist erforderlich, um Attribute hervorzuheben, die unser System für maschinelles Lernen erfassen soll. Die Bereinigung (oder Vorverarbeitung) der Daten besteht normalerweise aus drei Schritten.
So bereinigen Sie Ihre Daten für NLP
- Satzzeichen entfernen
- Tokenisieren
- Stoppwörter entfernen
- Stengel
- Lemmatisieren
1. Satzzeichen entfernen
Satzzeichen können einem Satz einen grammatikalischen Kontext geben, der das menschliche Verständnis unterstützt. Aber für unseren Vektorisierer, der die Anzahl der Wörter und nicht den Kontext zählt, bringt die Interpunktion keinen Mehrwert. Also müssen wir alle Sonderzeichen entfernen. Zum Beispiel: „Wie geht es dir?“ wird: Wie geht es dir?
So geht’s:
In body_text_clean
, sehen Sie, dass wir alle Satzzeichen entfernt haben. Ich bin zu Ive und WILL geworden!! Wird WILLE.
2.Tokenisieren
Beim Tokenisieren wird Text in Einheiten wie Sätze oder Wörter unterteilt. Mit anderen Worten, diese Funktion gibt zuvor unstrukturiertem Text Struktur. Beispiel: Plata o Plomo wird zu ‘Plata’,’o’,’Plomo’.

In body_text_tokenized
, haben wir alle Wörter als Token generiert.
3. Stoppwörter entfernen
Stoppwörter sind gebräuchliche Wörter, die wahrscheinlich in jedem Text vorkommen. Sie sagen uns nicht viel über unsere Daten, daher entfernen wir sie. Auch dies sind Wörter, die für das menschliche Verständnis gut sind, aber Ihr maschinelles Lernprogramm verwirren werden. Zum Beispiel: Silber oder Blei ist fein für mich wird Silber, Blei, fein.

In body_text_nostop
, entfernen wir alle unnötigen Wörter wie „been“, „for“ und „the“.
4. Stamm
Stemming hilft, ein Wort auf seine Stammform zu reduzieren. Es ist oft sinnvoll, verwandte Wörter auf die gleiche Weise zu behandeln. Es entfernt Suffixe wie „ing“, „ly“, „s“ durch einen einfachen regelbasierten Ansatz. Stemming reduziert den Wortkörper, aber oft gehen die eigentlichen Wörter gewissermaßen verloren. Beispiel: „Berechtigung“ oder „Berechtigt“ wird zu „Berechtigung“.
Hinweis: Einige Suchmaschinen behandeln Wörter mit demselben Stamm als Synonyme.

In body_text_stemmed
, Wörter wie entry und goes werden auf entri und goe abgegrenzt, obwohl sie im Englischen nichts bedeuten.
5. Lemmatisieren
Das Lemmatisieren leitet die Wurzelform („Lemma“) eines Wortes ab. Diese Praxis ist robuster als das Stammen, da sie einen wörterbuchbasierten Ansatz (dh eine morphologische Analyse) für das Wurzelwort verwendet. Aus “Berechtigung” oder “Berechtigt” wird beispielsweise “Berechtigung”.
Kurz gesagt, Wortstammbildung ist in der Regel schneller, da das Ende des Wortes einfach abgeschnitten wird, ohne jedoch den Kontext des Wortes zu verstehen. Das Lemmatisieren ist langsamer, aber genauer, da es eine fundierte Analyse erfordert, die den Kontext des Wortes berücksichtigt.

In body_text_stemmed
, können wir sehen, dass Wörter wie „Chancen“ auf „Chance“ lemmatisiert sind, aber auf „Chance“ abstammen.
Daten vektorisieren
Die Vektorisierung ist der Prozess der Codierung von Text als Ganzzahlen, um Merkmalsvektoren zu erstellen, damit Algorithmen des maschinellen Lernens Sprache verstehen können.
Methoden zur Vektorisierung von Daten für NLP
- Wortschatz
- N-Gramm
- TF-IDF
1. Beutel mit Worten
Bag-of-Words (BoW) oder CountVectorizer beschreibt das Vorhandensein von Wörtern in den Textdaten. Dieser Vorgang ergibt ein Ergebnis von eins, wenn im Satz vorhanden, und null, wenn es fehlt. Dieses Modell erstellt daher in jedem Textdokument einen Wortschatz mit einer Dokumentenmatrixanzahl.
from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer(analyzer=clean_text)
X_counts = count_vect.fit_transform(data['body_text'])
print(X_counts.shape)
print(count_vect.get_feature_names())
Wir wenden BoW auf die an body_text
so wird die Anzahl jedes Wortes in der Dokumentenmatrix gespeichert. (Überprüfen Sie das Repo).
2. N-Gramm
N-Grams sind einfach alle Kombinationen von benachbarten Wörtern oder Buchstaben der Länge n
die wir in unserem Quelltext finden. N-Gramm mit n=1
heißen Unigramme, n=2
sind Bigramme und so weiter.

Unigramme enthalten normalerweise nicht viele Informationen im Vergleich zu Bigrammen oder Trigrammen. Das Grundprinzip hinter N-Grammen ist, dass sie erfassen, welcher Buchstabe oder welches Wort wahrscheinlich auf ein bestimmtes Wort folgt. Je länger das N-Gramm (höher n
), desto mehr Kontext müssen Sie verwenden.
from sklearn.feature_extraction.text import CountVectorizer
ngram_vect = CountVectorizer(ngram_range=(2,2),analyzer=clean_text) # It applies only bigram vectorizer
X_counts = ngram_vect.fit_transform(data['body_text'])
print(X_counts.shape)
print(ngram_vect.get_feature_names())
Wir haben N-Gram auf die angewendet body_text
, sodass die Anzahl jeder Wortgruppe in einem Satz in der Dokumentenmatrix gespeichert wird. (Überprüfen Sie das Repo).
3. TF-IDF
TF-IDF berechnet die relative Häufigkeit, mit der ein Wort in einem Dokument vorkommt, im Vergleich zu seiner Häufigkeit in allen Dokumenten. Es ist nützlicher als die Begriffshäufigkeit, um Schlüsselwörter in jedem Dokument zu identifizieren (hohe Häufigkeit in diesem Dokument, niedrige Häufigkeit in anderen Dokumenten).
Hinweis: Wir verwenden TF-IDF für Suchmaschinen-Scoring, Textzusammenfassung und Dokumenten-Clustering. Lesen Sie meinen Artikel über Empfehlungssysteme, um mehr über TF-IDF zu erfahren.
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vect = TfidfVectorizer(analyzer=clean_text)
X_tfidf = tfidf_vect.fit_transform(data['body_text'])
print(X_tfidf.shape)
print(tfidf_vect.get_feature_names())
Wir haben TF-IDF im body_text angewendet, sodass die relative Anzahl jedes Wortes in den Sätzen in der Dokumentenmatrix gespeichert wird. (Überprüfen Sie das Repo).
Hinweis: Vektorisierer geben spärliche Matrizen aus, in denen die meisten Einträge null sind. Im Interesse einer effizienten Speicherung wird eine Sparse-Matrix gespeichert, wenn Sie nur Orte der Nicht-Null-Elemente speichern.
Feature-Engineering
Feature-Erstellung
Feature Engineering ist der Prozess, bei dem Domänenwissen der Daten verwendet wird, um Features zu erstellen, die maschinelle Lernalgorithmen zum Funktionieren bringen. Da Feature-Engineering Domänenkenntnisse erfordert, kann es schwierig sein, Features zu erstellen, aber sie sind Ihre Zeit auf jeden Fall wert.

body_len
zeigt die Länge von Wörtern ohne Leerzeichen in einem Nachrichtentext an.punct%
zeigt den Prozentsatz der Satzzeichen in einem Nachrichtentext an.
Lohnt sich Ihre Funktion?

Wir können deutlich sehen, dass Spams im Vergleich zu Hams eine hohe Anzahl von Wörtern haben. So body_len
ist ein gutes Unterscheidungsmerkmal.
Schauen wir uns jetzt an punct%
.

Spam hat einen höheren Prozentsatz an Satzzeichen, aber nicht so weit von Ham entfernt. Dies ist überraschend, da Spam-E-Mails oft viele Satzzeichen enthalten. Angesichts des offensichtlichen Unterschieds können wir dies jedoch immer noch als nützliche Funktion bezeichnen.
Erstellen von Klassifikatoren für maschinelles Lernen
Modellauswahl
Wir verwenden eine Ensemble-Methode des maschinellen Lernens. Durch die gemeinsame Verwendung mehrerer Modelle erzeugt ihre Kombination robustere Ergebnisse als ein einzelnes Modell (zB Support Vector Machine, Naive Bayes). Ensemble-Methoden sind die erste Wahl für viele Kaggle-Wettbewerbe. Wir konstruieren Random-Forest-Algorithmen (dh mehrere zufällige Entscheidungsbäume) und verwenden die Aggregate jedes Baums für die endgültige Vorhersage. Dieser Prozess kann sowohl für Klassifikations- als auch für Regressionsprobleme verwendet werden und folgt einer zufälligen Verpackungsstrategie.
- Rastersuche: Dieses Modell sucht erschöpfend nach Gesamtparameterkombinationen in einem gegebenen Raster, um das beste Modell zu bestimmen.
- Kreuzvalidierung: Dieses Modell unterteilt einen Datensatz in k Teilmengen und wiederholt das Verfahren k-mal. Dieses Modell verwendet auch in jeder Iteration eine andere Teilmenge als Testmenge.

Die mean_test_score
zum n_estimators=150
und max_depth
gibt das beste Ergebnis. Hier, n_estimators
ist die Anzahl der Bäume im Wald (Gruppe von Entscheidungsbäumen) und max_depth
ist die maximale Anzahl von Ebenen in jedem Entscheidungsbaum.

Ebenso die mean_test_score
zum n_estimators=150
und max_depth=90
gibt das beste Ergebnis.
Zukünftige Verbesserungen
Sie können GradientBoosting, XgBoost zum Klassifizieren verwenden. GradientBoosting wird eine Weile dauern, da es einen iterativen Ansatz erfordert, indem schwache Lernende kombiniert werden, um starke Lernende zu schaffen und sich dabei auf Fehler früherer Iterationen zu konzentrieren. Kurz gesagt folgt GradientBoosting im Vergleich zu Random Forest einem sequentiellen Ansatz und nicht einem zufälligen parallelen Ansatz.
Unser NLP-Klassifikator für maschinelles Lernen
Wir kombinieren alle oben besprochenen Abschnitte, um einen Spam-Ham-Klassifizierer zu erstellen.
Random Forest bietet eine Genauigkeit von 97,7 Prozent. Wir erhalten einen hochwertigen F1-Score aus dem Modell. Diese Verwirrungsmatrix sagt uns, dass wir 965 Hams und 123 Spams richtig vorhergesagt haben. Wir haben null Hams fälschlicherweise als Spam identifiziert und 26 Spams wurden fälschlicherweise als Hams vorhergesagt. Diese Fehlerquote ist in Anbetracht der Tatsache gerechtfertigt, dass die Erkennung von Spams als Hams besser ist, als möglicherweise wichtige Hams an einen SMS-Spamfilter zu verlieren.
Spamfilter sind nur ein Beispiel für NLP, dem Sie täglich begegnen. Hier sind andere, die Ihr Leben jeden Tag beeinflussen (und einige möchten Sie vielleicht ausprobieren!). Hoffentlich hilft Ihnen dieses Tutorial, mehr davon selbst auszuprobieren.
-
E-Mail-Spamfilter – Ihr „Junk“-Ordner
-
Autokorrektur — Textnachrichten, Textverarbeitungsprogramme
-
Textvorhersage — Suchmaschinen, Textnachrichten
-
Spracherkennung — digitale Assistenten wie Siri, Alexa
-
Informationsrückgewinnung — Google findet relevante und ähnliche Ergebnisse
-
Informationsextraktion — Gmail schlägt Ereignisse aus E-Mails vor, die Sie Ihrem Kalender hinzufügen können
-
Maschinenübersetzung — Google Translate übersetzt Sprache von einer Sprache in eine andere
-
Textvereinfachung — Rewordify vereinfacht die Bedeutung von Sätzen
-
Stimmungsanalyse —Hater News gibt uns die Stimmung des Benutzers
-
Textzusammenfassung — Reddits autotldr gibt eine Zusammenfassung einer Einreichung
-
Anfrageantwort — Antworten von IBM Watson auf eine Frage
-
Natürliche Sprachgenerierung — Generierung von Text aus Bild- oder Videodaten
Dieser Artikel wurde ursprünglich auf Towards Data Science veröffentlicht.