          if len(entity_encodings) > 0:
              if not (len(priors) == len(entity_encodings) == len(context_docs) == len(type_vectors)):
                  raise RuntimeError(Errors.E147.format(method="update", msg="vector lengths not equal"))
  
              entity_encodings = self.model.ops.asarray(entity_encodings, dtype="float32")
  
              context_encodings, bp_context = self.model.tok2vec.begin_update(context_docs, drop=drop)
              mention_encodings = [list(context_encodings[i]) + list(entity_encodings[i]) + priors[i] + type_vectors[i]
                                   for i in range(len(entity_encodings))]
              pred, bp_mention = self.model.begin_update(self.model.ops.asarray(mention_encodings, dtype="float32"), drop=drop)
 
</s> remove         if len(entity_encodings) > 0:
            if not (len(priors) == len(entity_encodings) == len(context_docs) == len(type_vectors)):
                raise RuntimeError(Errors.E147.format(method="update", msg="vector lengths not equal"))
 </s> add         context_encodings, bp_context = self.model.begin_update(context_docs, drop=drop)
        loss, d_scores = self.get_similarity_loss(scores=context_encodings, golds=golds, docs=None)
        bp_context(d_scores, sgd=sgd) </s> remove             context_encodings, bp_context = self.model.tok2vec.begin_update(context_docs, drop=drop)
            mention_encodings = [list(context_encodings[i]) + list(entity_encodings[i]) + priors[i] + type_vectors[i]
                                 for i in range(len(entity_encodings))]
            pred, bp_mention = self.model.begin_update(self.model.ops.asarray(mention_encodings, dtype="float32"), drop=drop)
 </s> add     def get_similarity_loss(self, docs, golds, scores):
        entity_encodings = []
        for gold in golds:
            for entity, kb_dict in gold.links.items():
                for kb_id, value in kb_dict.items():
                    # this loss function assumes we're only using positive examples
                    if value:
                        entity_encoding = self.kb.get_vector(kb_id)
                        entity_encodings.append(entity_encoding) </s> remove             loss, d_scores = self.get_loss(scores=pred, golds=golds, docs=docs)
            mention_gradient = bp_mention(d_scores, sgd=sgd)
 </s> add         entity_encodings = self.model.ops.asarray(entity_encodings, dtype="float32") </s> remove                     type_vector = [0 for i in range(len(type_to_int))]
                    if len(type_to_int) > 0:
                        type_vector[type_to_int[gold_ent.label_]] = 1

                    # store data
                    entity_encodings.append(entity_encoding)
                    context_docs.append(doc)
                    type_vectors.append(type_vector)

                    if self.cfg.get("prior_weight", 1) > 0:
                        priors.append([prior_prob])
                    else:
                        priors.append([0])
 </s> add                 for kb_id, value in kb_dict.items():
                    # Currently only training on the positive instances
                    if value:
                        context_docs.append(doc) </s> remove                             mention_encodings = [list(context_encoding) + list(entity_encodings[i])
                                                 + list(prior_probs[i]) + type_vector
                                                 for i in range(len(entity_encodings))]
                            scores = self.model(self.model.ops.asarray(mention_encodings, dtype="float32"))
 </s> add                              # cosine similarity
                            sims = xp.dot(entity_encodings, context_enc_t) / (norm_1 * norm_2)
                            scores = prior_probs + sims - (prior_probs*sims)
        if losses is not None:
            losses[self.name] += loss
        return loss
          if len(entity_encodings) > 0:
              if not (len(priors) == len(entity_encodings) == len(context_docs) == len(type_vectors)):
                  raise RuntimeError(Errors.E147.format(method="update", msg="vector lengths not equal"))
  
        if losses is not None:
            losses[self.name] += loss
        return loss
  
              context_encodings, bp_context = self.model.tok2vec.begin_update(context_docs, drop=drop)
              mention_encodings = [list(context_encodings[i]) + list(entity_encodings[i]) + priors[i] + type_vectors[i]
                                   for i in range(len(entity_encodings))]
              pred, bp_mention = self.model.begin_update(self.model.ops.asarray(mention_encodings, dtype="float32"), drop=drop)
keep keep keep keep replace keep keep keep keep keep
 CLI scripts for entity linking (wikipedia & generic) (#4091)

* document token ent_kb_id

* document span kb_id

* update pipeline documentation

* prior and context weights as bool's instead

* entitylinker api documentation

* drop for both models

* finish entitylinker documentation

* small fixes

* documentation for KB

* candidate documentation

* links to api pages in code

* small fix

* frequency examples as counts for consistency

* consistent documentation about tensors returned by predict

* add entity linking to usage 101

* add entity linking infobox and KB section to 101

* entity-linking in linguistic features

* small typo corrections

* training example and docs for entity_linker

* predefined nlp and kb

* revert back to similarity encodings for simplicity (for now)

* set prior probabilities to 0 when excluded

* code clean up

* bugfix: deleting kb ID from tokens when entities were removed

* refactor train el example to use either model or vocab

* pretrain_kb example for example kb generation

* add to training docs for KB + EL example scripts

* small fixes

* error numbering

* ensure the language of vocab and nlp stay consistent across serialization

* equality with =

* avoid conflict in errors file

* add error 151

* final adjustements to the train scripts - consistency

* update of goldparse documentation

* small corrections

* push commit

* turn kb_creator into CLI script (wip)

* proper parameters for training entity vectors

* wikidata pipeline split up into two executable scripts

* remove context_width

* move wikidata scripts in bin directory, remove old dummy script

* refine KB script with logs and preprocessing options

* small edits

* small improvements to logging of EL CLI script 
spacy/pipeline/pipes.pyx