docs: def run(self, **kwargs):
          """
          Calls MALLET's `train-topic` method.
          """
          #$ bin/mallet train-topics --input mytopic-input.mallet
          #> --num-topics 100
          #> --output-doc-topics /Users/erickpeirson/doc_top
          #> --word-topic-counts-file /Users/erickpeirson/word_top
          #> --output-topic-keys /Users/erickpeirson/topic_keys
  
          if not os.path.exists(self.mallet_bin):
              raise IOError("MALLET path invalid or non-existent.")
  
          for attr in ['Z', 'max_iter']:
              if not hasattr(self, attr):
                  raise AttributeError('Please set {0}'.format(attr))
  
          self.ll = []
          self.num_iters = 0
          logger.debug('run() with k={0} for {1} iterations'.format(self.Z, self.max_iter))
  
          prog = re.compile(u'\<([^\)]+)\>')
          ll_prog = re.compile(r'(\d+)')
          p = subprocess.Popen([
                      self.mallet_bin,
                      'train-topics',
                      '--input', self.input_path,
                      '--num-topics', unicode(self.Z),
                      '--num-iterations', unicode(self.max_iter),
                      '--output-doc-topics', self.dt,
                      '--word-topic-counts-file', self.wt,
                      '--output-model', self.om],
                  stdout=subprocess.PIPE,
                  stderr=subprocess.PIPE)
  
          # Handle output of MALLET in real time.
          while p.poll() is None:
              l = p.stderr.readline()
  
              # Keep track of LL/topic.
              try:
                  this_ll = float(re.findall(u'([-+]\d+\.\d+)', l)[0])
                  self.ll.append(this_ll)
              except IndexError:  # Not every line will match.
                  pass
  
              # Keep track of modeling progress.
              try:
                  this_iter = float(prog.match(l).groups()[0])
                  progress = int(100. * this_iter/self.max_iter)
                  print 'Modeling progress: {0}%.\r'.format(progress),
              except AttributeError:  # Not every line will match.
                  pass
  
          self.num_iters += self.max_iter
          self.load()