7 Characteristic-Engineering-Methods für Textdaten
Bild vom Herausgeber
Einführung
Immer mehr auf KI und maschinellem Lernen basierende Systeme ernähren sich davon Textdaten – Sprachmodelle sind heute ein bemerkenswertes Beispiel. Es ist jedoch wichtig zu beachten, dass Maschinen nicht wirklich Sprache, sondern Zahlen verstehen. Anders ausgedrückt: einige Characteristic-Engineering In der Regel sind Schritte erforderlich, um Rohtextdaten in nützliche numerische Datenfunktionen umzuwandeln, die diese Systeme verarbeiten und daraus Rückschlüsse ziehen können.
In diesem Artikel werden sieben einfach zu implementierende Methods zum Durchführen von Characteristic Engineering für Textdaten vorgestellt. Abhängig von der Komplexität und den Anforderungen des spezifischen Modells, in das Sie Ihre Daten einspeisen möchten, benötigen Sie möglicherweise einen mehr oder weniger anspruchsvollen Satz dieser Methods.
- Nummern 1 bis 5 werden typischerweise für klassisches maschinelles Lernen im Umgang mit Textual content verwendet, einschließlich Entscheidungsbaumbasierte Modellezum Beispiel.
- Nummer 6 und 7 sind für Deep-Studying-Modelle wie wiederkehrende neuronale Netze und Transformatoren unverzichtbar, obwohl Nummer 2 (Stemming und Lemmatisierung) möglicherweise dennoch erforderlich ist, um die Leistung dieser Modelle zu verbessern.
1. Stoppwörter entfernen
Das Entfernen von Stoppwörtern trägt dazu bei, die Dimensionalität zu reduzieren: etwas Unverzichtbares für bestimmte Modelle, die unter dem sogenannten Fluch der Dimensionalität leiden können. Gebräuchliche Wörter, die Ihre Daten hauptsächlich stören, wie Artikel, Präpositionen und Hilfsverben, werden entfernt, sodass nur diejenigen erhalten bleiben, die den größten Teil der Semantik im Quelltext vermitteln.
Hier erfahren Sie, wie Sie dies in nur wenigen Codezeilen tun (Sie können einfach ersetzen). phrases mit einer Textliste, aufgeteilt in eigene Wörter). Wir werden verwenden NLTK für die englische Stoppwortliste:
import nltk nltk.obtain(’stopwords‘) from nltk.corpus import stopwords Phrases = („This“, „is“, „a“, „crane“, „with“, „black“, „feathers“, „on“, „its“, „head“) stop_set = set(stopwords.phrases(‚english‘)) filtered = (w für w in Wörtern, wenn w.decrease() nicht in stop_set) print(gefiltert)
|
Import nltk nltk.herunterladen(‚Stoppwörter‘) aus nltk.Korpus Import Stoppwörter Worte = („Das“,„Ist“,„A“,„Kran“, „mit“, „Schwarz“, „Federn“, „An“, „es ist“, „Kopf“) stop_set = Satz(Stoppwörter.Worte(‚Englisch‘)) gefiltert = (w für w In Worte Wenn w.untere() nicht In stop_set) drucken(gefiltert) |
2. Stemming und Lemmatisierung
Die Reduzierung von Wörtern auf ihre Stammform kann dazu beitragen, Varianten (z. B. verschiedene Zeitformen eines Verbs) zu einem einheitlichen Merkmal zusammenzuführen. In Deep-Studying-Modellen, die auf Texteinbettungen basieren, werden normalerweise morphologische Aspekte erfasst, daher ist dieser Schritt selten erforderlich. Wenn die verfügbaren Daten jedoch sehr begrenzt sind, können sie dennoch nützlich sein, da sie die Knappheit verringern und das Modell dazu bringen, sich auf die Kernwortbedeutungen zu konzentrieren, anstatt redundante Darstellungen zu assimilieren.
from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem(„operating“))
|
aus nltk.Stängel Import PorterStemmer Stemmer = PorterStemmer() drucken(Stemmer.Stängel(„läuft“)) |
3. Zählbasierte Vektoren: Bag of Phrases
Einer der einfachsten Ansätze, Textual content im klassischen maschinellen Lernen in numerische Merkmale umzuwandeln, ist der Bag of Phrases-Ansatz. Es kodiert einfach die Worthäufigkeit in Vektoren. Das Ergebnis ist eine zweidimensionale Anordnung von Wortzahlen, die einfache Grundmerkmale beschreiben: etwas, das für die Erfassung der Gesamtpräsenz und Relevanz von Wörtern in Dokumenten nützlich ist, aber begrenzt ist, weil es wichtige Aspekte für das Verständnis der Sprache wie Wortreihenfolge, Kontext oder semantische Beziehungen nicht erfasst.
Dennoch könnte es sich am Ende um einen einfachen, aber effektiven Ansatz handeln, beispielsweise für nicht allzu komplexe Textklassifizierungsmodelle. Benutzen scikit-lernen:
aus sklearn.feature_extraction.textual content import CountVectorizer cv = CountVectorizer() print(cv.fit_transform((„Hund beißt Mann“, „Mann beißt Hund“, „Kranich überrascht Mann“)).toarray())
|
aus sklearn.feature_extraction.Textual content Import CountVectorizer Lebenslauf = CountVectorizer() drucken(Lebenslauf.fit_transform((„Hund beißt Mann“, „Mann beißt Hund“, „Kranich versetzt Menschen in Erstaunen“)).toarray()) |
4. TF-IDF-Characteristic-Extraktion
Time period Frequency – Inverse Doc Frequency (TF-IDF) ist seit langem einer der Eckpfeiler der Verarbeitung natürlicher Sprache. Es geht einen Schritt über Bag of Phrases hinaus und berücksichtigt die Häufigkeit von Wörtern und ihre Gesamtrelevanz nicht nur auf der Ebene einzelner Texte (Dokumente), sondern auch auf Datensatzebene. Beispielsweise werden in einem Textdatensatz mit 200 Textteilen oder Dokumenten Wörter, die häufig in einer bestimmten, engen Teilmenge von Texten vorkommen, aber insgesamt in wenigen Texten der vorhandenen 200 vorkommen, als äußerst related erachtet: Dies ist die Idee hinter der inversen Häufigkeit. Dadurch erhalten einzigartige und wichtige Wörter ein höheres Gewicht.
Durch die Anwendung auf den folgenden kleinen Datensatz mit drei Texten wird jedem Wort in jedem Textual content eine TF-IDF-Wichtigkeitsgewichtung zwischen 0 und 1 zugewiesen:
aus sklearn.feature_extraction.textual content import TfidfVectorizer tfidf = TfidfVectorizer() print(tfidf.fit_transform((„Hund beißt Mann“, „Mann beißt Hund“, „Kranich überrascht Mann“)).toarray())
|
aus sklearn.feature_extraction.Textual content Import TfidfVectorizer tfidf = TfidfVectorizer() drucken(tfidf.fit_transform((„Hund beißt Mann“, „Mann beißt Hund“, „Kranich versetzt Menschen in Erstaunen“)).toarray()) |
5. Satzbasierte N-Gramm
Satzbasierte N-Gramme helfen dabei, die Interaktion zwischen Wörtern zu erfassen, zum Beispiel „new“ und „york“. Mit der CountVectorizer Klasse von scikit-lernenkönnen wir die Semantik auf Phrasenebene erfassen, indem wir die festlegen ngram_range Parameter zum Einbinden von Sequenzen aus mehreren Wörtern. Stellen Sie es zum Beispiel auf ein (1,2) erstellt Merkmale, die sowohl einzelnen Wörtern (Unigrammen) als auch Kombinationen aus zwei aufeinanderfolgenden Wörtern (Bigrammen) zugeordnet sind.
aus sklearn.feature_extraction.textual content import CountVectorizer cv = CountVectorizer(ngram_range=(1,2)) print(cv.fit_transform((„New York ist groß“, „Tokio ist noch größer“)).toarray())
|
aus sklearn.feature_extraction.Textual content Import CountVectorizer Lebenslauf = CountVectorizer(ngram_range=(1,2)) drucken(Lebenslauf.fit_transform((„New York ist groß“, „Tokio ist noch größer“)).toarray()) |
6. Reinigung und Tokenisierung
Obwohl es in Python-Bibliotheken viele spezialisierte Tokenisierungsalgorithmen gibt, z TransformatorenDer grundlegende Ansatz, auf dem sie basieren, besteht darin, Satzzeichen, Groß- und Kleinschreibung und andere Symbole zu entfernen, die nachgeschaltete Modelle möglicherweise nicht verstehen. Eine einfache Bereinigungs- und Tokenisierungspipeline könnte darin bestehen, Textual content in Wörter aufzuteilen, in Kleinbuchstaben zu schreiben und Satzzeichen oder andere Sonderzeichen zu entfernen. Das Ergebnis ist eine Liste sauberer, normalisierter Worteinheiten oder Token.
Der re Mit der Bibliothek zur Verarbeitung regulärer Ausdrücke kann ein einfacher Tokenizer wie dieser erstellt werden:
import re textual content = „Hallo, Welt!!!“ tokens = re.findall(r’bw+b‘, textual content.decrease()) print(tokens)
|
Import Re Textual content = „Hallo Welt!!!“ Token = Re.findall(R‚bw+b‘, Textual content.untere()) drucken(Token) |
7. Dichte Funktionen: Worteinbettungen
Abschließend noch einer der Höhepunkte und leistungsstärksten Ansätze, um heutzutage Textual content in maschinenlesbare Informationen umzuwandeln: Worteinbettungen. Sie eignen sich hervorragend zum Erfassen von Semantiken, beispielsweise von Wörtern mit ähnlicher Bedeutung wie „Shogun“ und „Samurai“ oder „Aikido“ und „Jiujitsu“, die als numerisch ähnliche Vektoren (Einbettungen) kodiert sind. Im Wesentlichen werden Wörter mithilfe vordefinierter Ansätze wie Word2Vec oder Word2Vec in einen Vektorraum abgebildet spacig:
import spacy # Verwenden Sie ein spaCy-Modell mit Vektoren (z. B. „en_core_web_md“) nlp = spacy.load(„en_core_web_md“) vec = nlp(„canine“).vector print(vec(:5)) # Wir drucken nur einige Dimensionen des dichten Einbettungsvektors
|
Import spacig # Verwenden Sie ein spaCy-Modell mit Vektoren (z. B. „en_core_web_md“) nlp = spacig.laden(„en_core_web_md“) vec = nlp(„Hund“).Vektor drucken(vec(:5)) # Wir drucken nur einige Dimensionen des dichten Einbettungsvektors |
Die Ausgabedimensionalität des Einbettungsvektors, in den jedes Wort umgewandelt wird, wird durch den spezifischen Einbettungsalgorithmus und das verwendete Modell bestimmt.
Zusammenfassung
In diesem Artikel wurden sieben nützliche Methods vorgestellt, um Rohtextdaten zu verstehen, wenn sie für maschinelles Lernen und Deep-Studying-Modelle verwendet werden, die Aufgaben der Verarbeitung natürlicher Sprache wie Textklassifizierung und -zusammenfassung ausführen.
