Keras Tokenizer

Um die Liste der Worte eines Textes zu erstellen gibt es in Keras einen Tokenizer

#!/usr/bin/env python

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences

sentences = [
    'Die Katze fliegt nicht.',
    'Der Hund kann Katzen nicht leiden.',
]
tokenizer = Tokenizer(num_words = 100, oov_token='<OOV>')
tokenizer.fit_on_texts(sentences)

word_index = tokenizer_word_index
sequences  = tokenizer.texts_to_sequences(sentences)

print(word_index)
print(sequences)
print(tokenizer.texts_to_sequences(['Der Esel fliegt auch nicht']))

padded = pad_sequences(sequences, padding='post', truncating='post', maxlen=6)
print(padded)


In diesem Beispiel wird im Tokenizer-Konstruktor ein optionales Argument oov_token (out-of-vocabulary) mitgegeben. Wozu das gut ist wird weiter unten klar werden.

Durch tokenizer.tokenizer_fit_on_texts(sentences) wird intern eine Liste aller vorkommenden Wort aufgebaut. <OOV> wird weiter unten geklärt.

Auf die Liste der Worte kann mit tokenizer.word_index zugegriffen werden.

{'<OOV>': 1, 'nicht': 2, 'die': 3, 'katze': 4, 'fliegt': 5, 'der': 6, 'hund': 7, 'kann': 8, 'katzen': 9, 'leiden': 10}

Sobald die Liste aller Worte aufgebaut wurde, können beliebige Sätze in Index-Sequenzen umgewandelt werden.

[[3, 4, 5, 2], [6, 7, 8, 9, 2, 10]]

Im Tokenizer-Konstruktor wird noch ein Argument out-of-vocabulary mitgegeben. Dadurch wird im Wortindex ein Platzhalter für unbekannte Worte erstellt. Immer wenn tokenizer.text_to_sequence ein unbekanntes Wort sieht, wird dies durch den Index des Wortes <OOV> ersetzt. Im Beispielsatz sind Esel und auch unbekannte Worte und deshalb steht der Index 1 an den entsprechenden Positionen.

[[6, 1, 5, 1, 2]]

Damit die Sequenzen in einem LSTM oder GRU gelernt werden können, müssen sie gleiche Längen haben. Das wird durch pad_sequences() erreicht.

[[ 3  4  5  2  0  0]
 [ 6  7  8  9  2 10]]

Series Navigation<< Darstellung von Text im Kontext von NLPLSTM Sammelsurium >>