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

from sklearn.feature_extraction.text import CountVectorizer

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

from sklearn.feature_extraction.text import TfidfVectorizer

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

bigram_vectorizer = CountVectorizer(ngram_range=(2, 2))
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

  1. CBOW(Continuous Bag of Words): Vorhersage des aktuellen Wortes aus dem Kontext
  2. Skip-gram: den Kontext aus dem aktuellen Wort vorhersagen

Code-Implementierung

Beispiel

from gensim.models import Word2Vec

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

from gensim.models import FastText

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

  1. RoBERTa: optimierte Trainingsstrategie
  2. DistilBERT: leichtgewichtige Version von BERT
  3. ALBERT: Parameter-Sharing reduziert die Modellgröße

Codebeispiel

Beispiel

from transformers import BertTokenizer, BertModel

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:

  1. Pretraining-Phase: allgemeine Sprachrepräsentationen auf groß angelegten Korpora trainieren
  2. 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

  1. PV-DM(Distributed Memory): ähnlich wie CBOW, fügt Dokument-ID hinzu
  2. PV-DBOW(Distributed Bag of Words): ähnlich wie Skip-gram

Codebeispiel

Beispiel

from gensim.models import Doc2Vec
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

  1. Mittelwertbildung: den Mittelwert der Wortvektoren bilden
  2. SIF: geglätteter, nach inverser Frequenz gewichteter Durchschnitt
  3. BERT-Satzvektoren: das [CLS]-Token verwenden oder alle Wortvektoren mitteln

Codebeispiel (mit Sentence-BERT)

Beispiel

from sentence_transformers import SentenceTransformer

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.decomposition import LatentDirichletAllocation
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:

  1. Traditionelle Methoden: Einfach und effizient, geeignet für kleine Datenmengen
  2. Wortvektoren: Erfassen semantische Beziehungen, geringe Dimensionalität
  3. Kontextbewusste Modelle: Dynamische Repräsentation, beste Leistung, aber hoher Rechenaufwand
  4. 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