docs: @Override
    public CcgParser getModelFromParameters(SufficientStatistics parameters) {
      ListSufficientStatistics parameterList = parameters.coerceToList();
      
      List<SufficientStatistics> lexiconParameterList = parameterList
          .getStatisticByName(LEXICON_PARAMETERS).coerceToList().getStatistics();
      List<CcgLexicon> lexicons = Lists.newArrayList();
      for (int i = 0; i < lexiconFamilies.size(); i++) {
        lexicons.add(lexiconFamilies.get(i).getModelFromParameters(lexiconParameterList.get(i)));
      }
      
      List<SufficientStatistics> lexiconScorerParameterList = parameterList
          .getStatisticByName(LEXICON_SCORER_PARAMETERS).coerceToList().getStatistics();
      List<LexiconScorer> lexiconScorers = Lists.newArrayList();
      for (int i = 0; i < lexiconScorerFamilies.size(); i++) {
        lexiconScorers.add(lexiconScorerFamilies.get(i).getModelFromParameters(
            lexiconScorerParameterList.get(i)));
      }
      
      DiscreteFactor wordSkipFactor = null;
      if (wordSkipFamily != null) {
        wordSkipFactor = wordSkipFamily.getModelFromParameters(
            parameterList.getStatisticByName(WORD_SKIP_PARAMETERS)).coerceToDiscrete();
      }
  
      DiscreteFactor dependencyDistribution = dependencyFamily.getModelFromParameters(
          parameterList.getStatisticByName(DEPENDENCY_PARAMETERS)).coerceToDiscrete();
  
      DiscreteFactor wordDistanceDistribution = wordDistanceFamily.getModelFromParameters(
          parameterList.getStatisticByName(WORD_DISTANCE_PARAMETERS)).coerceToDiscrete();
      DiscreteFactor puncDistanceDistribution = puncDistanceFamily.getModelFromParameters(
          parameterList.getStatisticByName(PUNC_DISTANCE_PARAMETERS)).coerceToDiscrete();
      DiscreteFactor verbDistanceDistribution = verbDistanceFamily.getModelFromParameters(
          parameterList.getStatisticByName(VERB_DISTANCE_PARAMETERS)).coerceToDiscrete();
  
      DiscreteFactor syntaxDistribution = syntaxFamily.getModelFromParameters(
          parameterList.getStatisticByName(SYNTAX_PARAMETERS)).coerceToDiscrete();
      DiscreteFactor unaryRuleDistribution = unaryRuleFamily.getModelFromParameters(
          parameterList.getStatisticByName(UNARY_RULE_PARAMETERS)).coerceToDiscrete();
      DiscreteFactor headedSyntaxDistribution = headedBinaryRuleFamily.getModelFromParameters(
          parameterList.getStatisticByName(HEADED_SYNTAX_PARAMETERS)).coerceToDiscrete();
  
      DiscreteFactor rootSyntaxDistribution = rootSyntaxFamily.getModelFromParameters(
          parameterList.getStatisticByName(ROOT_SYNTAX_PARAMETERS)).coerceToDiscrete();
      DiscreteFactor headedRootSyntaxDistribution = headedRootSyntaxFamily.getModelFromParameters(
          parameterList.getStatisticByName(HEADED_ROOT_SYNTAX_PARAMETERS)).coerceToDiscrete();
  
      return new CcgParser(lexicons, lexiconScorers, wordSkipWordVar, wordSkipFactor,
          dependencyHeadVar, dependencySyntaxVar, dependencyArgNumVar, dependencyArgVar,
          dependencyHeadPosVar, dependencyArgPosVar, dependencyDistribution,
          wordDistanceVar, wordDistanceDistribution, puncDistanceVar, puncDistanceDistribution,
          puncTagSet, verbDistanceVar, verbDistanceDistribution, verbTagSet,
          leftSyntaxVar, rightSyntaxVar, parentSyntaxVar, syntaxDistribution,
          unaryRuleInputVar, unaryRuleVar, unaryRuleDistribution,
          headedBinaryRulePredicateVar, headedBinaryRulePosVar, headedSyntaxDistribution, searchMoveVar,
          compiledSyntaxDistribution, rootSyntaxVar, rootPredicateVar, rootPosVar, rootSyntaxDistribution,
          headedRootSyntaxDistribution, normalFormOnly);
    }