NLP (Verarbeitung natürlicher Sprache)NLP (Verarbeitung natürlicher Sprache)
Bild vom Autor

Das Bereinigen und Vorverarbeiten von Daten ist oft eine der entmutigendsten und zugleich kritischsten Phasen beim Erstellen datengestützter KI- und maschineller Lernlösungen, und Textdaten bilden hier keine Ausnahme.

Dieses Tutorial bricht das Eis bei der Herausforderung, Textdaten für NLP-Aufgaben vorzubereiten, wie sie Sprachmodelle (LMs) lösen können. Indem Sie Ihre Textdaten in Pandas-DataFrames kapseln, helfen Ihnen die folgenden Schritte dabei, Ihren Textual content für die Verarbeitung durch NLP-Modelle und -Algorithmen vorzubereiten.

Laden Sie die Daten in einen Pandas DataFrame

Um dieses Tutorial einfach zu halten und sich auf das Verständnis der notwendigen Schritte zur Textbereinigung und Vorverarbeitung zu konzentrieren, betrachten wir eine kleine Stichprobe von vier Textdateninstanzen mit einem Attribut, die in eine Pandas-DataFrame-Instanz verschoben werden. Von nun an werden wir jeden Vorverarbeitungsschritt auf dieses DataFrame-Objekt anwenden.

import pandas as pd
information = {'textual content': ("I like cooking!", "Baking is enjoyable", None, "Japanese delicacies is nice!")}
df = pd.DataFrame(information)
print(df)

Ausgabe:

    textual content
0   I like cooking!
1   Baking is enjoyable
2   None
3   Japanese delicacies is nice!

Umgang mit fehlenden Werten

Ist Ihnen in einer der Beispieldateninstanzen der Wert „Keine“ aufgefallen? Dies wird als fehlender Wert bezeichnet. Fehlende Werte werden häufig aus verschiedenen Gründen erfasst, oft unbeabsichtigt. Unterm Strich heißt das: Sie müssen sie verarbeiten. Der einfachste Ansatz besteht darin, Instanzen mit fehlenden Werten einfach zu erkennen und zu entfernen, wie im folgenden Code beschrieben:

df.dropna(subset=('textual content'), inplace=True)
print(df)

Ausgabe:

    textual content
0    I like cooking!
1    Baking is enjoyable
3    Japanese delicacies is nice!

Normalisieren Sie den Textual content, um ihn konsistent zu machen

Beim Normalisieren von Textual content werden Elemente standardisiert oder vereinheitlicht, die in verschiedenen Fällen in unterschiedlichen Formaten auftreten können, beispielsweise Datumsformate, vollständige Namen oder Groß-/Kleinschreibung. Der einfachste Ansatz zum Normalisieren unseres Textes besteht darin, ihn wie folgt vollständig in Kleinbuchstaben umzuwandeln.

df('textual content') = df('textual content').str.decrease()
print(df)

Ausgabe:

        textual content
0             i like cooking!
1               baking is enjoyable
3  japanese delicacies is nice!

Rauschen entfernen

Rauschen sind unnötige oder unerwartet erfasste Daten, die, wenn sie nicht angemessen behandelt werden, die nachfolgenden Modellierungs- oder Vorhersageprozesse behindern können. In unserem Beispiel gehen wir davon aus, dass Satzzeichen wie „!“ für die nachfolgende NLP-Aufgabe nicht erforderlich sind. Daher entfernen wir das Rauschen, indem wir Satzzeichen im Textual content mithilfe eines regulären Ausdrucks erkennen. Das Python-Paket „re“ wird zum Arbeiten und Durchführen von Textoperationen basierend auf der Übereinstimmung mit regulären Ausdrücken verwendet.

import re
df('textual content') = df('textual content').apply(lambda x: re.sub(r'(^ws)', '', x))
print(df)

Ausgabe:

         textual content
0             i like cooking
1              baking is enjoyable
3  japanese delicacies is nice

Den Textual content tokenisieren

Die Tokenisierung ist wohl der wichtigste Schritt bei der Textvorverarbeitung – neben der Kodierung von Textual content in eine numerische Darstellung – vor der Verwendung von NLP und Sprachmodellen. Dabei wird jeder Textual content-Enter in einen Vektor von Blöcken oder Tokens aufgeteilt. Im einfachsten Szenario sind Tokens meistens Wörtern zugeordnet, aber in einigen Fällen, wie etwa bei zusammengesetzten Wörtern, kann ein Wort zu mehreren Tokens führen. Bestimmte Satzzeichen (sofern sie nicht zuvor als Rauschen entfernt wurden) werden manchmal auch als eigenständige Tokens identifiziert.

Dieser Code zerlegt jeden unserer drei Texteinträge in einzelne Wörter (Tokens) und fügt sie als neue Spalte in unseren DataFrame ein. Anschließend zeigt er die aktualisierte Datenstruktur mit ihren beiden Spalten an. Der verwendete vereinfachte Tokenisierungsansatz wird als einfache Whitespace-Tokenisierung bezeichnet: Er verwendet lediglich Leerzeichen als Kriterium zum Erkennen und Trennen von Tokens.

df('tokens') = df('textual content').str.break up()
print(df)

Ausgabe:

          textual content                          tokens
0             i like cooking              (i, love, cooking)
1              baking is enjoyable               (baking, is, enjoyable)
3  japanese delicacies is nice  (japanese, delicacies, is, nice)

Stoppwörter entfernen

Sobald der Textual content tokenisiert ist, filtern wir unnötige Token heraus. Dies ist typischerweise bei Stoppwörtern der Fall, wie den Artikeln „a/an, the“ oder Konjunktionen, die dem Textual content keine tatsächliche Semantik hinzufügen und für eine spätere effiziente Verarbeitung entfernt werden sollten. Dieser Prozess ist sprachabhängig: Der folgende Code verwendet die NLTK-Bibliothek, um ein Wörterbuch englischer Stoppwörter herunterzuladen und diese aus den Token-Vektoren herauszufiltern.

import nltk
nltk.obtain('stopwords')
stop_words = set(stopwords.phrases('english'))
df('tokens') = df('tokens').apply(lambda x: (phrase for phrase in x if phrase not in stop_words))
print(df('tokens'))

Ausgabe:

0               (love, cooking)
1                 (baking, enjoyable)
3    (japanese, delicacies, nice)

Stemming und Lemmatisierung

Quick geschafft! Stemming und Lemmatisierung sind zusätzliche Schritte zur Textvorverarbeitung, die je nach der jeweiligen Aufgabe manchmal verwendet werden können. Stemming reduziert jedes Token (Wort) auf seine Foundation- oder Stammform, während Lemmatisierung es je nach Kontext weiter auf seine Lemma- oder Basiswörterbuchform reduziert, z. B. „finest“ -> „good“. Der Einfachheit halber wenden wir in diesem Beispiel nur Stemming an, indem wir den in der NLTK-Bibliothek implementierten PorterStemmer verwenden, unterstützt durch den Wordnet-Datensatz von Wort-Stamm-Assoziationen. Die resultierenden gestielten Wörter werden in einer neuen Spalte im DataFrame gespeichert.

from nltk.stem import PorterStemmer
nltk.obtain('wordnet')
stemmer = PorterStemmer()
df('stemmed') = df('tokens').apply(lambda x: (stemmer.stem(phrase) for phrase in x))
print(df(('tokens','stemmed')))

Ausgabe:

          tokens                   stemmed
0             (love, cooking)              (love, cook dinner)
1               (baking, enjoyable)               (bake, enjoyable)
3  (japanese, delicacies, nice)  (japanes, cuisin, nice)

Konvertieren Sie Textual content in numerische Darstellungen

Und nicht zuletzt verstehen Computeralgorithmen, einschließlich KI/ML-Modelle, nicht die menschliche Sprache, sondern Zahlen. Daher müssen wir unsere Wortvektoren in numerische Darstellungen abbilden, die allgemein als Embedding-Vektoren oder einfach Embedding bezeichnet werden. Das folgende Beispiel konvertiert tokenisierten Textual content in der Spalte „Token“ und verwendet einen TF-IDF-Vektorisierungsansatz (einer der beliebtesten Ansätze in der guten alten Zeit der klassischen NLP), um den Textual content in numerische Darstellungen umzuwandeln.

from sklearn.feature_extraction.textual content import TfidfVectorizer
df('textual content') = df('tokens').apply(lambda x: ' '.be part of(x))
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(df('textual content'))
print(X.toarray())

Ausgabe:

((0.         0.70710678 0.         0.         0.         0.       0.70710678)
(0.70710678 0.         0.         0.70710678 0.         0.        0.        )
(0.         0.         0.57735027 0.         0.57735027 0.57735027        0.        ))

Und das ist es! So unverständlich es uns auch erscheinen magazine, diese numerische Darstellung unseres vorverarbeiteten Textes ist das, was intelligente Systeme, einschließlich NLP-Modelle, verstehen und bei anspruchsvollen Sprachaufgaben wie der Klassifizierung von Stimmungen in Texten, der Zusammenfassung oder sogar der Übersetzung in eine andere Sprache außergewöhnlich intestine bewältigen können.

Der nächste Schritt wäre, diese numerischen Darstellungen in unser NLP-Modell einzuspeisen, damit es seine Magie entfalten kann.

Iván Palomares Carrascosa ist ein führender Experte, Autor, Redner und Berater in den Bereichen KI, maschinelles Lernen, Deep Studying und LLMs. Er schult und leitet andere bei der Nutzung von KI in der realen Welt an.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert