diff --git a/decoder/include/Decoder.hpp b/decoder/include/Decoder.hpp
index e576e0ed50183510b69e2ec693a50ac2e084a45c..4eabde1a2cf4fe8e664494fd974e42952ad2dfa2 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 6f209dd88066081f64e1896fba06e42294fa93f3..0c0f9bbe8c6564049f169e59e02c728ff13d11e0 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 f762c3d7246295a609e573c5a1f72c7c1ea7d6b4..936d16cb52fb18c8703539db728ec83055a4c36a 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();