diff --git a/decoder/include/Decoder.hpp b/decoder/include/Decoder.hpp
index ab0153ea1511eebdd267759e1c9b978520e3acc9..bdec405e338d3af97b03b14bdd960ca493b3d114 100644
--- a/decoder/include/Decoder.hpp
+++ b/decoder/include/Decoder.hpp
@@ -26,7 +26,7 @@ class Decoder
 
   Decoder(ReadingMachine & machine);
   void decode(BaseConfig & config, std::size_t beamSize, float beamThreshold, bool debug, bool printAdvancement);
-  void evaluate(const Config & config, std::filesystem::path modelPath, const std::string goldTSV);
+  void evaluate(const Config & config, std::filesystem::path modelPath, const std::string goldTSV, const std::set<std::string> & predicted);
   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;
diff --git a/decoder/src/Decoder.cpp b/decoder/src/Decoder.cpp
index a6635649f35bd3f86e46055ce5cace255470c378..73d8984244ef05f069c989feaaaae0975888939a 100644
--- a/decoder/src/Decoder.cpp
+++ b/decoder/src/Decoder.cpp
@@ -135,7 +135,7 @@ std::string Decoder::getMetricOfColName(const std::string & colName) const
   return colName;
 }
 
-void Decoder::evaluate(const Config & config, std::filesystem::path modelPath, const std::string goldTSV)
+void Decoder::evaluate(const Config & config, std::filesystem::path modelPath, const std::string goldTSV, const std::set<std::string> & predicted)
 {
   evaluation.clear();
   auto predictedTSV = (modelPath/"predicted_dev.tsv").string();
@@ -143,7 +143,7 @@ void Decoder::evaluate(const Config & config, std::filesystem::path modelPath, c
   config.print(predictedTSVFile);
   std::fclose(predictedTSVFile);
 
-  std::FILE * evalFromUD = popen(fmt::format("{} {} {}", "../scripts/conll18_ud_eval.py", goldTSV, predictedTSV).c_str(), "r");
+  std::FILE * evalFromUD = popen(fmt::format("{} {} {} -x {}", "../scripts/conll18_ud_eval.py", goldTSV, predictedTSV, util::join(",", std::vector<std::string>(predicted.begin(), predicted.end()))).c_str(), "r");
 
   char buffer[1024];
   while (!std::feof(evalFromUD))
diff --git a/trainer/src/MacaonTrain.cpp b/trainer/src/MacaonTrain.cpp
index bc14ee5fbb43ded500ab4c74b2a6d9f0f5ec7767..6d7266e18228d3dd130bd668bdec2972c0dabbb9 100644
--- a/trainer/src/MacaonTrain.cpp
+++ b/trainer/src/MacaonTrain.cpp
@@ -253,7 +253,7 @@ int MacaonTrain::main()
     {
       BaseConfig devConfig(mcd, computeDevScore ? (devRawFile.empty() ? devTsvFile : "") : devTsvFile, devRawFile);
       decoder.decode(devConfig, 1, 0.0, debug, printAdvancement);
-      decoder.evaluate(devConfig, modelPath, devTsvFile);
+      decoder.evaluate(devConfig, modelPath, devTsvFile, machine.getPredicted());
       devScores = decoder.getF1Scores(machine.getPredicted());
     }
     else