code: def begin_training(self, get_gold_tuples=None, sgd=None, component_cfg=None, **cfg):
          
          if get_gold_tuples is None:
              get_gold_tuples = lambda: []
          # Populate vocab
          else:
              for _, annots_brackets in get_gold_tuples():
                  for annots, _ in annots_brackets:
                      for word in annots[1]:
                          _ = self.vocab[word]  # noqa: F841
          if cfg.get("device", -1) >= 0:
              util.use_gpu(cfg["device"])
              if self.vocab.vectors.data.shape[1] >= 1:
                  self.vocab.vectors.data = Model.ops.asarray(self.vocab.vectors.data)
          link_vectors_to_models(self.vocab)
          if self.vocab.vectors.data.shape[1]:
              cfg["pretrained_vectors"] = self.vocab.vectors.name
          if sgd is None:
              sgd = create_default_optimizer(Model.ops)
          self._optimizer = sgd
          if component_cfg is None:
              component_cfg = {}
          for name, proc in self.pipeline:
              if hasattr(proc, "begin_training"):
                  kwargs = component_cfg.get(name, {})
                  kwargs.update(cfg)
                  proc.begin_training(
                      get_gold_tuples,
                      pipeline=self.pipeline,
                      sgd=self._optimizer,
                      **kwargs
                  )
          return self._optimizer
docs: Allocate models, pre-process training data and acquire a trainer and
          optimizer. Used as a contextmanager.
  
          get_gold_tuples (function): Function returning gold data
          component_cfg (dict): Config parameters for specific components.
          **cfg: Config parameters.
          RETURNS: An optimizer.
  
          DOCS: https://spacy.io/api/language#begin_training