code: @Override public void init(boolean expensive) {
      super.init(expensive);
      if (_parms._train != null) { // Can be called without an existing frame, but when present check for a string col
        if (_parms.train().vecs().length == 0 || ! _parms.trainVec().isString())
          error("_train", "The first column of the training input frame has to be column of Strings.");
      }
      if (_parms._vec_size > Word2VecParameters.MAX_VEC_SIZE) error("_vec_size", "Requested vector size of "+_parms._vec_size +" in Word2Vec, exceeds limit of "+Word2VecParameters.MAX_VEC_SIZE+".");
      if (_parms._vec_size < 1) error("_vec_size", "Requested vector size of " + _parms._vec_size + " in Word2Vec, is not allowed.");
      if (_parms._window_size < 1) error("_window_size", "Negative window size not allowed for Word2Vec.  Expected value > 0, received " + _parms._window_size);
      if (_parms._sent_sample_rate < 0.0) error("_sent_sample_rate", "Negative sentence sample rate not allowed for Word2Vec.  Expected a value > 0.0, received " + _parms._sent_sample_rate);
      if (_parms._init_learning_rate < 0.0) error("_init_learning_rate", "Negative learning rate not allowed for Word2Vec.  Expected a value > 0.0, received " + _parms._init_learning_rate);
      if (_parms._epochs < 1) error("_epochs", "Negative epoch count not allowed for Word2Vec.  Expected value > 0, received " + _parms._epochs);
    }
docs: Initialize the ModelBuilder, validating all arguments and preparing the
  training frame.  This call is expected to be overridden in the subclasses
  and each subclass will start with "super.init();".
  
  Verify that at the first column contains strings. Validate _vec_size, _window_size,
  _sent_sample_rate, _init_learning_rate, and epochs for values within range.