From ed77c3a7075f472901fa87696d82d3c24eb10eb0 Mon Sep 17 00:00:00 2001 From: Franck Dary <franck.dary@etu.univ-amu.fr> Date: Fri, 22 Feb 2019 11:02:27 +0100 Subject: [PATCH] Fixed error related to unused default actions --- trainer/src/Trainer.cpp | 4 ++++ transition_machine/include/Classifier.hpp | 4 ++++ transition_machine/src/Classifier.cpp | 8 ++++++++ 3 files changed, 16 insertions(+) diff --git a/trainer/src/Trainer.cpp b/trainer/src/Trainer.cpp index 16a4362..ca8ef45 100644 --- a/trainer/src/Trainer.cpp +++ b/trainer/src/Trainer.cpp @@ -233,6 +233,9 @@ void Trainer::train() if (pAction == oAction) pActionIsZeroCost = true; + if (oAction.empty()) + oAction = tm.getCurrentClassifier()->getDefaultAction(); + if (oAction.empty()) { if (trainConfig.endOfTapes()) @@ -241,6 +244,7 @@ void Trainer::train() trainConfig.stackPop(); break; } + fprintf(stderr, "ERROR (%s) : Unable to find any zero cost action. Aborting.\n", ERRINFO); fprintf(stderr, "State : %s\n", tm.getCurrentState().c_str()); trainConfig.printForDebug(stderr); diff --git a/transition_machine/include/Classifier.hpp b/transition_machine/include/Classifier.hpp index 656d289..338325e 100644 --- a/transition_machine/include/Classifier.hpp +++ b/transition_machine/include/Classifier.hpp @@ -77,6 +77,10 @@ class Classifier public : + /// @brief If the ActionScript has a default action, get it. + /// + /// @return The default action name, or an empty string. + std::string getDefaultAction() const; /// @brief Return how many errors will an action introduce. /// /// @param config The current config. diff --git a/transition_machine/src/Classifier.cpp b/transition_machine/src/Classifier.cpp index a1ecb64..c1c9998 100644 --- a/transition_machine/src/Classifier.cpp +++ b/transition_machine/src/Classifier.cpp @@ -260,6 +260,14 @@ std::vector<std::string> Classifier::getZeroCostActions(Config & config) return result; } +std::string Classifier::getDefaultAction() const +{ + if (as->hasDefaultAction) + return as->getActionName(0); + + return std::string(); +} + float Classifier::trainOnExample(Config & config, int gold) { auto fd = fm->getFeatureDescription(config); -- GitLab