  
          self.c = <Transition*>self.mem.alloc(self._size, sizeof(Transition))
  
          for action, label_strs in sorted(labels_by_action.items()):
              for label_str in sorted(label_strs):
                  self.add_action(int(action), label_str)
          self.root_label = self.strings['ROOT']
          self.freqs = {} if _freqs is None else _freqs
          for attr in (TAG, HEAD, DEP, ENT_TYPE, ENT_IOB):
              self.freqs[attr] = defaultdict(int)
 
</s> remove         # Super hacky :(
 </s> add  </s> remove         # Super hacky :(
 </s> add 
            for label_str in label_strs:
  
          self.c = <Transition*>self.mem.alloc(self._size, sizeof(Transition))
  
          for action, label_strs in sorted(labels_by_action.items()):
            for label_str in label_strs:
                  self.add_action(int(action), label_str)
          self.root_label = self.strings['ROOT']
          self.freqs = {} if _freqs is None else _freqs
          for attr in (TAG, HEAD, DEP, ENT_TYPE, ENT_IOB):
              self.freqs[attr] = defaultdict(int)
keep keep keep keep replace keep keep keep keep keep
 WIP on add_label bug during NER training

Currently when a new label is introduced to NER during training,
it causes the labels to be read in in an unexpected order. This
invalidates the model. 
spacy/syntax/transition_system.pyx