Flair DEV/TEST scores stark abweichend

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Flair DEV/TEST scores stark abweichend
Flair nimmt automatisch 10% der Samples vom training set als “dev” set, wenn kein dev set explizit übergeben wird. (Abschaltbar mit train_with_dev=True)

Beim Training bekomme ich Ausgaben wie:

2019-06-18 08:35:18,445 EPOCH 58 done: loss 0.0717 - lr 0.0125 - bad epochs 3
2019-06-18 08:36:16,322 DEV : loss 0.04808824136853218 - score 0.9325
2019-06-18 08:39:47,385 TEST : loss 0.21692031621932983 - score 0.7266

Die große Diskrepanz zwischen F1 score für DEV und TEST finde ich bedenklich, weil es mir stark nach overfitting aussieht.

Der Code in https://github.com/zalandoresearch/flair/blob/master/flair/trainers/trainer.py besagt ab Zeile 130

# minimize training loss if training with dev data, else maximize dev score
anneal_mode = "min" if train_with_dev else "max"

D.h. das deep neural net wird darauf trainiert, einen möglichst hohen F1 score mit gerade mal 7% des gesamten Datensatzes zu erreichen?

Kennt jemand Gründe wieso man hier nicht auf ein dev set verzichten sollte? Für mich klingt “minimize training loss” anstelle von “maximize dev score” eigentlich ganz gut.

EDIT: https://nlpers.blogspot.com/2006/08/doing-named-entity-recognition-dont.html könnte ebenfalls ein Argument sein auf das dev set zu verzichten. Würde aber trotzdem gerne andere Meinungen dazu hören.

1 „Gefällt mir“

Nur kurz: klingt logisch was du meinst. Hab leider keine Zeit mehr da noch viel Zeit reinzuinvestieren.

Findet beim Training von einem Netzwerk mit Flair nur sturres Training eines LSTMs statt oder werden da teilweise noch hyperparameter getunet (Dropout, Learning Rate(<-- die auf jeden Fall, …)?
Beim zweiten Fall bräuchte man auf jeden Fall ein dev set quasi als Validation Set.