code: void score(final List<Integer> attributes,
                 List<Double> retval)
      {
          Map <Integer,Integer >   encoder = precomputation_id_encoder;
          // arma.vec hidden_layer = arma.zeros<arma.vec>(hidden_layer_size);
          Matrix hidden_layer = Matrix.zero(hidden_layer_size, 1);
  
          for (int i = 0, off = 0; i < attributes.size(); ++i, off += embedding_size)
          {
              int aid = attributes.get(i);
              int fid = aid * nr_feature_types + i;
              Integer rep = encoder.get(fid);
              if (rep != null)
              {
                  hidden_layer.plusEquals(saved.col(rep));
              }
              else
              {
                  // 使用向量而不是特征本身
                  // W1[0:hidden_layer, off:off+embedding_size] * E[fid:]'
                  hidden_layer.plusEquals(W1.block(0, off, hidden_layer_size, embedding_size).times(E.col(aid)));
              }
          }
  
          hidden_layer.plusEquals(b1);    // 加上偏置
  
          Matrix output = W2.times(new Matrix (hidden_layer.cube())); // 立方激活函数
  //        retval.resize(nr_classes, 0.);
          retval.clear();
          for (int i = 0; i < nr_classes; ++i)
          {
              retval.add(output.get(i, 0));
          }
      }
docs: 给每个类别打分
  @param attributes 属性
  @param retval 返回各个类别的得分