code: def create_pretraining_model(nlp, tok2vec):
      
      output_size = nlp.vocab.vectors.data.shape[1]
      output_layer = chain(
          LN(Maxout(300, pieces=3)), Affine(output_size, drop_factor=0.0)
      )
      # This is annoying, but the parser etc have the flatten step after
      # the tok2vec. To load the weights in cleanly, we need to match
      # the shape of the models' components exactly. So what we cann
      # "tok2vec" has to be the same set of processes as what the components do.
      tok2vec = chain(tok2vec, flatten)
      model = chain(tok2vec, output_layer)
      model = masked_language_model(nlp.vocab, model)
      model.tok2vec = tok2vec
      model.output_layer = output_layer
      model.begin_training([nlp.make_doc("Give it a doc to infer shapes")])
      return model
docs: Define a network for the pretraining. We simply add an output layer onto
      the tok2vec input model. The tok2vec input model needs to be a model that
      takes a batch of Doc objects (as a list), and returns a list of arrays.
      Each array in the output needs to have one row per token in the doc.