1. Textvorverarbeitung
import re
import string
def preprocess_text(text):
# Entfernen von HTML-Tags
text = re.sub(r'<.*?>', '', text)
# Entfernen von Satzzeichen und Zahlen
text = re.sub(r'[^\w\s]', '', text)
text = re.sub(r'\d+', '', text)
# Umwandeln in Kleinbuchstaben
text = text.lower()
# Entfernen von Stoppwörtern (optional, hier als Platzhalter)
stop_words = set(['und', 'oder', 'der', 'die', 'das'])
text = ' '.join([word for word in text.split() if word not in stop_words])
return text
# Beispieltext
text = "Dies ist ein Beispieltext, um die Textvorverarbeitung zu demonstrieren."
processed_text = preprocess_text(text)
print(processed_text)
Ausgabe:
dies ist ein beispieltext um textvorverarbeitung zu demonstrieren
In diesem Beispiel bereinigen wir den Text, indem wir HTML-Tags, Satzzeichen und Zahlen entfernen, den Text in Kleinbuchstaben umwandeln und Stoppwörter entfernen.
2. Tokenisierung und Sequenzierung
Tokenisierung ist der Prozess, bei dem der Text in einzelne Wörter (Token) aufgeteilt wird. Sequenzierung konvertiert diese Token in numerische Werte, die als Eingabe für neuronale Netzwerke verwendet werden können.
Beispiel:
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
# Beispieltexte
texts = [
"Keras ist eine großartige Bibliothek für Deep Learning.",
"Die Verarbeitung natürlicher Sprache ist spannend."
]
# Tokenisierung
tokenizer = Tokenizer(num_words=100)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
# Sequenzen mit Padding vereinheitlichen
padded_sequences = pad_sequences(sequences, maxlen=10)
print(padded_sequences)
Ausgabe:
[[ 1 3 4 5 6 7 8 9 0 0]
[10 1 11 12 13 14 0 0 0 0]]
In diesem Beispiel verwenden wir den Tokenizer von Keras, um Texte zu tokenisieren und in numerische Sequenzen zu konvertieren. Die Sequenzen werden dann mit pad_sequences auf eine einheitliche Länge gebracht.
3. Word Embeddings
Word Embeddings sind dichte Vektorrepräsentationen von Wörtern, die semantische Beziehungen zwischen Wörtern erfassen. In Keras kann die Embedding-Schicht verwendet werden, um Word Embeddings zu erstellen.
Beispiel:
from keras.models import Sequential
from keras.layers import Embedding, Flatten, Dense
# Beispiel-Wortindex und Sequenzen
word_index = tokenizer.word_index
vocab_size = len(word_index) + 1
# Erstellen eines Modells mit Embedding-Schicht
model = Sequential()
model.add(Embedding(input_dim=vocab_size, output_dim=50, input_length=10))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
# Kompilieren des Modells
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Ausgabe der Modellzusammenfassung
print(model.summary())
Ausgabe:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding (Embedding) (None, 10, 50) 750
_________________________________________________________________
flatten (Flatten) (None, 500) 0
_________________________________________________________________
dense (Dense) (None, 1) 501
=================================================================
Total params: 1,251
Trainable params: 1,251
Non-trainable params: 0
_________________________________________________________________
In diesem Beispiel erstellen wir ein einfaches Modell mit einer Embedding-Schicht, die Wörter in dichte Vektoren von Größe 50 umwandelt. Diese Vektoren werden dann abgeflacht und durch eine dichte Schicht geführt.
4. Aufbau von NLP-Modellen mit Keras
Mit Keras können komplexe NLP-Modelle erstellt werden, die verschiedene Arten von neuronalen Netzwerken wie LSTMs, GRUs und CNNs verwenden, um Textdaten zu verarbeiten.
Beispiel: LSTM-Modell für die Textklassifikation
from keras.models import Sequential
from keras.layers import Embedding, LSTM, Dense
# Beispiel-Wortindex und Sequenzen
word_index = tokenizer.word_index
vocab_size = len(word_index) + 1
# Erstellen eines LSTM-Modells
model = Sequential()
model.add(Embedding(input_dim=vocab_size, output_dim=50, input_length=10))
model.add(LSTM(64))
model.add(Dense(1, activation='sigmoid'))
# Kompilieren des Modells
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Ausgabe der Modellzusammenfassung
print(model.summary())
Ausgabe:
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding (Embedding) (None, 10, 50) 750
_________________________________________________________________
lstm (LSTM) (None, 64) 29440
_________________________________________________________________
dense (Dense) (None, 1) 65
=================================================================
Total params: 30,255
Trainable params: 30,255
Non-trainable params: 0
_________________________________________________________________
In diesem Beispiel erstellen wir ein LSTM-Modell zur Textklassifikation. Das Modell besteht aus einer Embedding
-Schicht, einer LSTM-Schicht und einer Ausgabeschicht mit einer Sigmoid-Aktivierungsfunktion.
Diese detaillierten Erklärungen und Beispiele sollten Ihnen helfen, die verschiedenen Aspekte der Verarbeitung natürlicher Sprache mit Keras zu verstehen und in Ihren eigenen Projekten anzuwenden.