docs: @Override
    public void printProbsDocument(List<IN> document) {
  
      Pair<int[][][], int[]> p = documentToDataAndLabels(document);
      int[][][] data = p.first();
  
      // FactorTable[] factorTables =
      // CRFLogConditionalObjectiveFunction.getCalibratedCliqueTree(weights, data,
      // labelIndices, classIndex.size());
      CRFCliqueTree cliqueTree = CRFCliqueTree.getCalibratedCliqueTree(weights, data, labelIndices, classIndex.size(),
          classIndex, flags.backgroundSymbol);
  
      // for (int i = 0; i < factorTables.length; i++) {
      for (int i = 0; i < cliqueTree.length(); i++) {
        IN wi = document.get(i);
        System.out.print(wi.get(CoreAnnotations.TextAnnotation.class) + '\t');
        for (Iterator<String> iter = classIndex.iterator(); iter.hasNext();) {
          String label = iter.next();
          int index = classIndex.indexOf(label);
          // double prob = Math.pow(Math.E, factorTables[i].logProbEnd(index));
          double prob = cliqueTree.prob(i, index);
          System.out.print(label + '=' + prob);
          if (iter.hasNext()) {
            System.out.print("\t");
          } else {
            System.out.print("\n");
          }
        }
      }
    }