2016-05-07 6 views
2

Verwenden von Python 2.7 Anaconda auf Windows 10Wie berechnet man Perplexität für ein mit Keras trainiertes Sprachmodell?

Ich habe ein GRU neuronales Netz trainiert ein Sprachmodell keras zu bauen mit:

print('Build model...') 
model = Sequential() 
model.add(GRU(512, return_sequences=True, input_shape=(maxlen, len(chars)))) 
model.add(Dropout(0.2)) 
model.add(GRU(512, return_sequences=False)) 
model.add(Dropout(0.2)) 
model.add(Dense(len(chars))) 
model.add(Activation('softmax')) 

model.compile(loss='categorical_crossentropy', optimizer='rmsprop') 

Wie berechne ich die Ratlosigkeit dieses Sprachmodell? Zum Beispiel bietet NLTK eine Perplexitätsberechnungsfunktion für seine Modelle an.

Antwort

3

Ich sehe, dass Sie auch das Keras-Tutorial zum Sprachmodell gefolgt sind, das nach meinem Verständnis nicht ganz korrekt ist. Dies liegt an der Tatsache, dass das Sprachmodell die Wahrscheinlichkeit jeder Untersequenz schätzen sollte, z. B. P (c_1, c_2..c_N) = P (c_1) P (c_2 | c_1) .. P (c_N | c_N-1. ..c_1) Angenommen, Ihre Eingabe ist eine Matrix mit der Form sequence_length X # characters und Ihr Ziel ist das Zeichen, das der Sequenz folgt. Die Ausgabe Ihres Modells liefert nur den letzten Ausdruck P (c_N | c_N-1 ... c_1)

Nachdem die Perplexität P (c_1, c_2..c_N)^{- 1/N} ist, können Sie nicht alle Begriffe erhalten. Aus diesem Grund empfehle ich, den Layer TimeDistributedDense zu verwenden. Es gibt Ihnen eine Matrix von Sequenz_Länge X # -Zeichen, wobei jede Zeile eine Wahrscheinlichkeitsverteilung über die Zeichen ist, rufen Sie es proba

Aus jeder Zeile von Proba benötigen Sie die Spalte, die die Vorhersage für das richtige Zeichen enthält:

correct_proba = proba [np.arange (maxlen), yTest],

vorausgesetzt yTest ist ein Vektor, der den Index des korrekten Zeichens bei jedem Zeitschritt

Dann ist die Perplexität für eine Folge (und Sie enthält muss über alle deine Trainingsfolgen liegen) ist

np.power (2, -np.sum (np.log (correct_proba) Achse = 1)/maxlen)

PS. Ich hätte die Erklärung lieber in Latex geschrieben

+0

Hallo, danke fürs Beantworten! Das ändert sich so sehr. Haben Sie Ihre Version auf einem Datensatz implementiert? Könnte ich mit Ihnen in Kontakt treten? – ishido

+0

Mein Vergnügen :) Ja, ich trainiere auf dem öffentlichen FCE-Datensatz - mailt mir bei btd26 bei cam dot ac dot uk – layser

Verwandte Themen