From 2465f80b37691e1a88e0fbe38d0e2876be9b22db Mon Sep 17 00:00:00 2001
From: Franck Dary <franck.dary@lis-lab.fr>
Date: Mon, 17 Feb 2020 10:48:53 +0100
Subject: [PATCH] When printing scores on dev, show metrics

---
 decoder/include/Decoder.hpp  | 10 +++++-----
 decoder/src/Decoder.cpp      | 14 +++++++-------
 trainer/src/macaon_train.cpp |  6 +++---
 3 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/decoder/include/Decoder.hpp b/decoder/include/Decoder.hpp
index e576e0e..4eabde1 100644
--- a/decoder/include/Decoder.hpp
+++ b/decoder/include/Decoder.hpp
@@ -15,7 +15,7 @@ class Decoder
   private :
 
   std::string getMetricOfColName(const std::string & colName) const;
-  std::vector<float> getScores(const std::set<std::string> & colNames, float (Decoder::* metric2score)(const std::string &) const) const;
+  std::vector<std::pair<float,std::string>> getScores(const std::set<std::string> & colNames, float (Decoder::* metric2score)(const std::string &) const) const;
   float getMetricScore(const std::string & metric, std::size_t scoreIndex) const;
   float getPrecision(const std::string & metric) const;
   float getF1Score(const std::string & metric) const;
@@ -27,10 +27,10 @@ class Decoder
   Decoder(ReadingMachine & machine);
   void decode(BaseConfig & config, std::size_t beamSize, bool debug);
   void evaluate(const Config & config, std::filesystem::path modelPath, const std::string goldTSV);
-  std::vector<float> getF1Scores(const std::set<std::string> & colNames) const;
-  std::vector<float> getAlignedAccs(const std::set<std::string> & colNames) const;
-  std::vector<float> getRecalls(const std::set<std::string> & colNames) const;
-  std::vector<float> getPrecisions(const std::set<std::string> & colNames) const;
+  std::vector<std::pair<float,std::string>> getF1Scores(const std::set<std::string> & colNames) const;
+  std::vector<std::pair<float,std::string>> getAlignedAccs(const std::set<std::string> & colNames) const;
+  std::vector<std::pair<float,std::string>> getRecalls(const std::set<std::string> & colNames) const;
+  std::vector<std::pair<float,std::string>> getPrecisions(const std::set<std::string> & colNames) const;
 };
 
 #endif
diff --git a/decoder/src/Decoder.cpp b/decoder/src/Decoder.cpp
index 6f209dd..0c0f9bb 100644
--- a/decoder/src/Decoder.cpp
+++ b/decoder/src/Decoder.cpp
@@ -92,32 +92,32 @@ float Decoder::getAlignedAcc(const std::string & metric) const
   return getMetricScore(metric, 3);
 }
 
-std::vector<float> Decoder::getF1Scores(const std::set<std::string> & colNames) const
+std::vector<std::pair<float,std::string>> Decoder::getF1Scores(const std::set<std::string> & colNames) const
 {
   return getScores(colNames, &Decoder::getF1Score);
 }
 
-std::vector<float> Decoder::getAlignedAccs(const std::set<std::string> & colNames) const
+std::vector<std::pair<float,std::string>> Decoder::getAlignedAccs(const std::set<std::string> & colNames) const
 {
   return getScores(colNames, &Decoder::getAlignedAcc);
 }
 
-std::vector<float> Decoder::getRecalls(const std::set<std::string> & colNames) const
+std::vector<std::pair<float,std::string>> Decoder::getRecalls(const std::set<std::string> & colNames) const
 {
   return getScores(colNames, &Decoder::getRecall);
 }
 
-std::vector<float> Decoder::getPrecisions(const std::set<std::string> & colNames) const
+std::vector<std::pair<float,std::string>> Decoder::getPrecisions(const std::set<std::string> & colNames) const
 {
   return getScores(colNames, &Decoder::getPrecision);
 }
 
-std::vector<float> Decoder::getScores(const std::set<std::string> & colNames, float (Decoder::* metric2score)(const std::string &) const) const
+std::vector<std::pair<float,std::string>> Decoder::getScores(const std::set<std::string> & colNames, float (Decoder::* metric2score)(const std::string &) const) const
 {
-  std::vector<float> scores;
+  std::vector<std::pair<float, std::string>> scores;
 
   for (auto & colName : colNames)
-    scores.push_back((this->*metric2score)(getMetricOfColName(colName)));
+    scores.emplace_back(std::make_pair((this->*metric2score)(getMetricOfColName(colName)), getMetricOfColName(colName)));
 
   return scores; 
 }
diff --git a/trainer/src/macaon_train.cpp b/trainer/src/macaon_train.cpp
index f762c3d..936d16c 100644
--- a/trainer/src/macaon_train.cpp
+++ b/trainer/src/macaon_train.cpp
@@ -99,13 +99,13 @@ int main(int argc, char * argv[])
       fmt::print(stderr, "\r{:80}\rDecoding dev...", " ");
     decoder.decode(devConfig, 1, debug);
     decoder.evaluate(devConfig, modelPath, devTsvFile);
-    std::vector<float> devScores = decoder.getF1Scores(machine.getPredicted());
+    std::vector<std::pair<float,std::string>> devScores = decoder.getF1Scores(machine.getPredicted());
     std::string devScoresStr = "";
     float devScoreMean = 0;
     for (auto & score : devScores)
     {
-      devScoresStr += fmt::format("{:5.2f}%,", score);
-      devScoreMean += score;
+      devScoresStr += fmt::format("{}({:5.2f}%),", score.second, score.first);
+      devScoreMean += score.first;
     }
     if (!devScoresStr.empty())
       devScoresStr.pop_back();
-- 
GitLab