docs: public void writeModel(String path) {
          try (FileOutputStream fso = new FileOutputStream(path)) {
              ObjectOutputStream oos = new ObjectOutputStream(new GZIPOutputStream(fso));
              oos.writeUTF(CRFModel.VERSION);
              oos.writeObject(status);
              oos.writeObject(config.getTemplate());
              Map<String, float[]> map = featureTree.toMap();
              MapCount<Integer> mc = new MapCount<>();
              for (float[] v : map.values()) {
                  mc.add(v.length);
              }
              for (Entry<Integer, Double> entry : mc.get().entrySet()) {
                  int win = entry.getKey();
                  oos.writeInt(win);// 宽度
                  oos.writeInt(entry.getValue().intValue());// 个数
                  for (Entry<String, float[]> e : map.entrySet()) {
                      if (e.getValue().length == win) {
                          oos.writeUTF(e.getKey());
                          float[] value = e.getValue();
                          for (int i = 0; i < win; i++) {
                              oos.writeFloat(value[i]);
                          }
                      }
                  }
              }
              oos.writeInt(0);
              oos.writeInt(0);
              oos.flush();
          } catch (FileNotFoundException e) {
              logger.warn("文件没有找到", e);
          } catch (IOException e) {
              logger.warn("IO异常", e);
          }
      }