title: NLP Update cannot be used with tuples after spacy 3 update
body: <p>here's my code for training a pre existing model. I'm receiving this error message due to updates in SpaCy but I couldn't solve the problem.</p>
  <p>ValueError: [E989] <code>nlp.update()</code> was called with two positional arguments. This may be due to a backwards-incompatible change to the format of the training data in spaCy 3.0 onwards. The 'update' function should now be called with a batch of Example objects, instead of <code>(text, annotation)</code> tuples.</p>
  <pre><code>def train_spacy(train_data, labels, iterations, dropout = 0.5, display_freq = 1):
      
   
      valid_f1scores=[]
      test_f1scores=[]
      nlp = spacy.load(&quot;en_core_web_md&quot;)
      if 'ner' not in nlp.pipe_names:
          ner = nlp.create_pipe('ner')
          nlp.add_pipe(ner)
      else:
          ner = nlp.get_pipe(&quot;ner&quot;)
          
      #add entity labels to the NER pipeline
      for i in labels:
          ner.add_label(i)
          
      other_pipes = [pipe for pipe in nlp.pipe_names if pipe != 'ner']
      with nlp.disable_pipes(*other_pipes):
          optimizer = nlp.create_optimizer()
          for itr in range(iterations):
              random.shuffle(train_data) #shuffle the train data before each iteration
              losses = {}
              batches = minibatch(train_data, size = compounding(16.0, 64.0, 1.5))
              for batch in batches:
                  texts, annotations = zip(*batch)
                  nlp.update(
                  texts,
                  annotations,
                  drop = dropout,
                  sgd = optimizer,
                  losses = losses)
              #if itr % display_freq == 0:
              # print(&quot;Iteration {} Loss: {}&quot;.format(itr + 1, losses))
              scores = evaluate(nlp, VALID_DATA)
              valid_f1scores.append(scores[&quot;textcat_f&quot;])
              print('====================================')
              print('Iteration = ' +str(itr))
              print('Losses = ' +str(losses))
              print('====================VALID DATA====================')
              
              print('F1-score = ' +str(scores[&quot;textcat_f&quot;]))
              print('Precision = ' +str(scores[&quot;textcat_p&quot;]))
              print('Recall = ' +str(scores[&quot;textcat_r&quot;]))
              scores = evaluate(nlp,TEST_DATA)
              test_f1scores.append(scores[&quot;textcat_f&quot;])
              print('====================TEST DATA====================')
              print('F1-score = ' +str(scores[&quot;textcat_f&quot;]))
              print('Precision = ' +str(scores[&quot;textcat_p&quot;]))
              print('Recall = ' +str(scores[&quot;textcat_r&quot;]))
              print('====================================')
          
          return nlp,valid_f1scores,test_f1scores
  
  #train and save the NER model
  ner,valid_f1scores,test_f1scores = train_spacy(TRAIN_DATA, LABELS, 20)
  ner.to_disk(&quot;C:\\NERdata\\spacy_example&quot;)
  </code></pre>