Methoden der Textrepräsentation
Textrepräsentation ist eine grundlegende Aufgabe in der natürlichen Sprachverarbeitung (NLP), die unstrukturierte Textdaten in numerische Formen umwandelt, die Computer verarbeiten können.
Dieser Artikel stellt systematisch häufig verwendete Methoden der Textrepräsentation in NLP vor, von traditionellen Methoden bis hin zu modernen Deep-Learning-Techniken, und hilft Lesern, dieses Kernkonzept vollständig zu verstehen.
Traditionelle Textrepräsentation
Bag-of-Words-Modell
Das Bag-of-Words-Modell ist eine der einfachsten Methoden zur Textrepräsentation; es behandelt Text als ungeordnete Sammlung von Wörtern.
Grundlegende Konzepte
- Ignoriert Wortreihenfolge und Grammatik, konzentriert sich nur darauf, ob Wörter vorkommen
- Vokabular aufbauen und die Vorkommen jedes Wortes im Dokument zählen
- Die endgültige Repräsentation ist ein hochdimensionaler dünnbesetzter Vektor.
Codebeispiel
Beispiel
Korpus = [
'Dies ist das erste Dokument.',
'Dieses Dokument ist das zweite Dokument.',
'Und dies ist das dritte.',
'Ist dies das erste Dokument?'
]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names_out())
print(X.toarray())
Vor- und Nachteile-Analyse
✅ Vorteile:
- Einfache Implementierung, hohe Recheneffizienz
- Geeignet für kleine Datensätze und einfache Aufgaben
❌ Nachteile:
- Ignoriert Wortreihenfolge und semantische Informationen
- Problem der hochdimensionalen Dünnbesetztheit
- Kann Synonyme und polyseme Wörter nicht verarbeiten
TF-IDF
TF-IDF (Termfrequenz-inverse Dokumentfrequenz) ist eine Verbesserung gegenüber dem Bag-of-Words-Modell, die die Wichtigkeit von Wörtern im gesamten Korpus berücksichtigt.
Berechnungsformel
- TF (Termfrequenz):
The number of times a word appears in a document / total number of words in the document - IDF (Inverse Dokumentfrequenz):
log(文档总数 / 包含该词的文档数) - TF-IDF = TF × IDF
Code-Implementierung
Beispiel
tfidf_vectorizer = TfidfVectorizer()
X_tfidf = tfidf_vectorizer.fit_transform(corpus)
print(tfidf_vectorizer.get_feature_names_out())
print(X_tfidf.toarray())
Vor- und Nachteile
✅ Vorteile:
- Reduziert den Einfluss häufiger Wörter und hebt wichtige Wörter hervor
- Bessere Leistung als das einfache Bag-of-Words-Modell
❌ Nachteile:
- Kann semantische Beziehungen weiterhin nicht erfassen
- Das Problem der hohen Dimensionalität besteht weiterhin
N-Gramm-Modell
Das N-Gramm-Modell berücksichtigt die Wortreihenfolge und repräsentiert Text durch Kombinationen von n aufeinanderfolgenden Wörtern.
Gängige Typen
- Unigramm (1-Gramm): ein einzelnes Wort
- Bigramm (2-Gramm): Kombination aus zwei aufeinanderfolgenden Wörtern
- Trigramm (3-Gramm): Kombination aus drei aufeinanderfolgenden Wörtern
Codebeispiel
Beispiel
X_bigram = bigram_vectorizer.fit_transform(corpus)
print(bigram_vectorizer.get_feature_names_out())
Vor- und Nachteile
✅ Vorteile:
- Erfasst lokale Wortstellungsinformationen
- Kann Phrasen und feste Kollokationen darstellen
❌ Nachteile:
- Das Problem der Dimensionsexplosion ist gravierender
- Kann immer noch nicht mit Fernabhängigkeiten umgehen
Wortvektordarstellung
Word2Vec-Prinzipien und Implementierung
Word2Vec ist eine auf neuronalen Netzen basierende Methode zur Wortvektordarstellung, die 2013 von Google vorgeschlagen wurde.
Zwei Modellarchitekturen
- CBOW(Continuous Bag of Words): Vorhersage des aktuellen Wortes aus dem Kontext
- Skip-gram: den Kontext aus dem aktuellen Wort vorhersagen
Code-Implementierung
Beispiel
Sätze = [["Katze", "sagt", "miau"], ["Hund", "sagt", "wuff"]]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
# Wortvektoren abrufen
vector = model.wv['Katze']
# Ähnliche Wörter finden
similar_words = model.wv.most_similar('Katze')
Funktionen
- Niedrigdimensionale dichte Vektoren (normalerweise 50-300 Dimensionen)
- Kann semantische und syntaktische Beziehungen zwischen Wörtern erfassen
- Unterstützt Vektoroperationen (z. B. König - Mann + Frau ≈ Königin)
GloVe-Wortvektoren
GloVe (Global Vectors for Word Representation) kombiniert die Vorteile globaler statistischer Informationen und lokaler Kontextfenster.
Kernidee
- Basiert auf einer Wort-Kookkurrenzmatrix
- Das Optimierungsziel besteht darin, das Skalarprodukt zweier Wortvektoren gleich dem Logarithmus ihrer Kookkurrenzanzahl zu machen
Vergleich mit Word2Vec
| Merkmal | Word2Vec | GloVe |
|---|---|---|
| Trainingsmethode | Lokales Fenster | Globale Statistiken |
| Recheneffizienz | Relativ hoch | Relativ gering |
| Leistung bei kleinen Datensätzen | Besser | Durchschnittlich |
| Leistung bei großen Datensätzen | Gut | Besser |
FastText
FastText ist ein von Facebook entwickeltes Wortvektor-Modell, das sich durch die Berücksichtigung von Subwort-Informationen auszeichnet.
Hauptfunktionen
- Stellt Wörter als eine Menge von Zeichen-n-Grammen dar
- Kann mit Wörtern außerhalb des Vokabulars (OOV) umgehen
- Besonders geeignet für morphologisch reiche Sprachen
Codebeispiel
Beispiel
model = FastText(sentences, vector_size=100, window=5, min_count=1, workers=4)
# Auch Wörter, die nicht im Wörterbuch sind, können Vektoren erhalten.
vector = model.wv['unseenword']
Kontextbewusste Repräsentationen
ELMo-Modell
ELMo (Embeddings from Language Models) ist eine der frühesten kontextabhängigen Methoden zur Wortrepräsentation.
Kernfunktionen
- Basierend auf bidirektionalen LSTM-Sprachmodellen
- Die Repräsentation eines Wortes hängt vom gesamten Eingabesatz ab
- Erzeugt mehrschichtige Repräsentationen (kann Semantik auf verschiedenen Ebenen kombinieren)
Architekturdiagramm

BERT und seine Varianten
BERT (Bidirectional Encoder Representations from Transformers) ist ein von Google vorgeschlagenes vortrainiertes Sprachmodell.
Wichtige Innovationen
- Transformer-Architektur
- Trainingsziel des Masked Language Model (MLM)
- Next Sentence Prediction (NSP)-Aufgabe
Häufige Varianten
- RoBERTa: optimierte Trainingsstrategie
- DistilBERT: leichtgewichtige Version von BERT
- ALBERT: Parameter-Sharing reduziert die Modellgröße
Codebeispiel
Beispiel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
inputs = tokenizer("Hallo, mein Hund ist süß", return_tensors="pt")
outputs = model(**inputs)
last_hidden_states = outputs.last_hidden_state
Überblick über vortrainierte Sprachmodelle
Moderne NLP nutzt hauptsächlich das Paradigma aus Pretraining + Fine-Tuning:
- Pretraining-Phase: allgemeine Sprachrepräsentationen auf groß angelegten Korpora trainieren
- Fine-Tuning-Phase: Modellparameter an aufgabenspezifischen Daten anpassen
Modellvergleich
| Modell | Echtzeit | Hauptfunktionen |
|---|---|---|
| Word2Vec | 2013 | Statische Wortvektoren |
| GloVe | 2014 | Globale Statistiken + lokales Fenster |
| ELMo | 2018 | Bidirektionales LSTM, kontextabhängig |
| BERT | 2018 | Transformer, bidirektionaler Kontext |
| GPT-3 | 2020 | Unidirektionaler Transformer, starke Generierungsfähigkeit |
Darstellungen auf Dokumentebene
Doc2Vec
Doc2Vec ist eine Erweiterung von Word2Vec, die direkt Vektorrepräsentationen von Dokumenten lernen kann.
Zwei Modelle
- PV-DM(Distributed Memory): ähnlich wie CBOW, fügt Dokument-ID hinzu
- PV-DBOW(Distributed Bag of Words): ähnlich wie Skip-gram
Codebeispiel
Beispiel
from gensim.models.doc2vec import TaggedDocument
documents = [TaggedDocument(doc, [i]) for i, doc in enumerate(corpus)]
model = Doc2Vec(documents, vector_size=100, window=5, min_count=1, workers=4)
vector = model.infer_vector(["new", "document", "text"])
Satzvektoren und Dokumentvektoren
Häufige Methoden
- Mittelwertbildung: den Mittelwert der Wortvektoren bilden
- SIF: geglätteter, nach inverser Frequenz gewichteter Durchschnitt
- BERT-Satzvektoren: das [CLS]-Token verwenden oder alle Wortvektoren mitteln
Codebeispiel (mit Sentence-BERT)
Beispiel
model = SentenceTransformer('all-MiniLM-L6-v2')
sentences = ["This is an example sentence", "Each sentence is converted"]
embeddings = model.encode(sentences)
Themenmodell (LDA)
Latent Dirichlet Allocation (LDA) ist eine unüberwachte Methode zur Themenmodellierung.
Grundprinzipien
- Repräsentiert ein Dokument als Mischung mehrerer Themen
- Jedes Thema ist eine Wahrscheinlichkeitsverteilung über Wörter
- Gelernt durch Variationsinferenz oder Gibbs-Sampling
Codebeispiel
Beispiel
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
lda = LatentDirichletAllocation(n_components=2)
lda.fit(X)
Anwendungsszenarien
- Dokumenten-Clustering
- Inhaltsempfehlung
- Textzusammenfassung
Zusammenfassung
Die Entwicklung von Textrepräsentationsmethoden hat sich von einfacher Statistik zu Deep Learning entwickelt:
- Traditionelle Methoden: Einfach und effizient, geeignet für kleine Datenmengen
- Wortvektoren: Erfassen semantische Beziehungen, geringe Dimensionalität
- Kontextbewusste Modelle: Dynamische Repräsentation, beste Leistung, aber hoher Rechenaufwand
- Dokumentdarstellung: Erweitert von der Wortebene auf die Dokumentebene
Bei der Wahl von Textrepräsentationsmethoden ist Folgendes zu berücksichtigen:
- Aufgabenanforderungen (ob semantisches Verständnis erforderlich ist)
- Datenumfang
- Rechenressourcen
- Sprachmerkmale
Mit der Entwicklung großer Sprachmodelle entwickeln sich Textrepräsentationstechniken weiterhin rasant, doch das Verständnis dieser grundlegenden Methoden bleibt entscheidend für die Beherrschung von NLP.
Weitere Erweiterungen