code: def main(lang="en", output_dir=None, n_iter=25):
      
      nlp = spacy.blank(lang)
      # add the tagger to the pipeline
      # nlp.create_pipe works for built-ins that are registered with spaCy
      tagger = nlp.create_pipe("tagger")
      # Add the tags. This needs to be done before you start training.
      for tag, values in TAG_MAP.items():
          tagger.add_label(tag, values)
      nlp.add_pipe(tagger)
  
      optimizer = nlp.begin_training()
      for i in range(n_iter):
          random.shuffle(TRAIN_DATA)
          losses = {}
          # batch up the examples using spaCy's minibatch
          batches = minibatch(TRAIN_DATA, size=compounding(4.0, 32.0, 1.001))
          for batch in batches:
              texts, annotations = zip(*batch)
              nlp.update(texts, annotations, sgd=optimizer, losses=losses)
          print("Losses", losses)
  
      # test the trained model
      test_text = "I like blue eggs"
      doc = nlp(test_text)
      print("Tags", [(t.text, t.tag_, t.pos_) for t in doc])
  
      # save model to output directory
      if output_dir is not None:
          output_dir = Path(output_dir)
          if not output_dir.exists():
              output_dir.mkdir()
          nlp.to_disk(output_dir)
          print("Saved model to", output_dir)
  
          # test the save model
          print("Loading from", output_dir)
          nlp2 = spacy.load(output_dir)
          doc = nlp2(test_text)
          print("Tags", [(t.text, t.tag_, t.pos_) for t in doc])
docs: Create a new model, set up the pipeline and train the tagger. In order to
      train the tagger with a custom tag map, we're creating a new Language
      instance with a custom vocab.