public int getMaxDepth() {
   int maxDepth = 0;
   for (LanguageModel languageModel : languageModels) {
     int d = languageModel.getMaxDepth();
     if (d > maxDepth) {
       maxDepth = d;
     }
   }
   return maxDepth;
 }
 public void allocate() throws IOException {
   if (!allocated) {
     allocated = true;
     vocabulary = new HashSet<String>();
     for (LanguageModel model : languageModels) {
       model.allocate();
       vocabulary.addAll(model.getVocabulary());
     }
   }
 }
 public void deallocate() {
   allocated = false;
   for (LanguageModel model : languageModels) {
     model.deallocate();
   }
 }