docs: public static Word2Vec readWord2VecFromText(@NonNull File vectors, @NonNull File hs, @NonNull File h_codes,
                                                  @NonNull File h_points, @NonNull VectorsConfiguration configuration) throws IOException {
          // first we load syn0
          Pair<InMemoryLookupTable, VocabCache> pair = loadTxt(vectors);
          InMemoryLookupTable lookupTable = pair.getFirst();
          lookupTable.setNegative(configuration.getNegative());
          if (configuration.getNegative() > 0)
              lookupTable.initNegative();
          VocabCache<VocabWord> vocab = (VocabCache<VocabWord>) pair.getSecond();
  
          // now we load syn1
          BufferedReader reader = new BufferedReader(new FileReader(hs));
          String line = null;
          List<INDArray> rows = new ArrayList<>();
          while ((line = reader.readLine()) != null) {
              String[] split = line.split(" ");
              double array[] = new double[split.length];
              for (int i = 0; i < split.length; i++) {
                  array[i] = Double.parseDouble(split[i]);
              }
              rows.add(Nd4j.create(array, new long[]{array.length}, lookupTable.getSyn0().dataType()));
          }
          reader.close();
  
          // it's possible to have full model without syn1
          if (!rows.isEmpty()) {
              INDArray syn1 = Nd4j.vstack(rows);
              lookupTable.setSyn1(syn1);
          }
  
          // now we transform mappings into huffman tree points
          reader = new BufferedReader(new FileReader(h_points));
          while ((line = reader.readLine()) != null) {
              String[] split = line.split(" ");
              VocabWord word = vocab.wordFor(decodeB64(split[0]));
              List<Integer> points = new ArrayList<>();
              for (int i = 1; i < split.length; i++) {
                  points.add(Integer.parseInt(split[i]));
              }
              word.setPoints(points);
          }
          reader.close();
  
  
          // now we transform mappings into huffman tree codes
          reader = new BufferedReader(new FileReader(h_codes));
          while ((line = reader.readLine()) != null) {
              String[] split = line.split(" ");
              VocabWord word = vocab.wordFor(decodeB64(split[0]));
              List<Byte> codes = new ArrayList<>();
              for (int i = 1; i < split.length; i++) {
                  codes.add(Byte.parseByte(split[i]));
              }
              word.setCodes(codes);
              word.setCodeLength((short) codes.size());
          }
          reader.close();
  
          Word2Vec.Builder builder = new Word2Vec.Builder(configuration).vocabCache(vocab).lookupTable(lookupTable)
                  .resetModel(false);
  
          TokenizerFactory factory = getTokenizerFactory(configuration);
  
          if (factory != null)
              builder.tokenizerFactory(factory);
  
          Word2Vec w2v = builder.build();
  
          return w2v;
      }