code: def encode_target(self, target, source_oovs):
      
      tokens = target.strip().split()
      ids = []
      ids_extend = []
      for t in tokens:
        if t in self._token_to_id:
          i = self._token_to_id[t]
          ids.append(i)
          ids_extend.append(i)
        else:
          ids.append(self._token_to_id[self._replace_oov])
          if t in source_oovs:
            vocab_idx = self.vocab_size + source_oovs[t]
            ids_extend.append(vocab_idx)
          else:
            ids_extend.append(self._token_to_id[self._replace_oov])
      if self._reverse:
        return ids[::-1], ids_extend[::-1]
      else:
        return ids, ids_extend
docs: Converts a space-separated string of tokens to lists of ids.
  
      Also store a version of extened vocabulary IDs.
      For target OOVs that are in the source, encode them using the temporary
      vocab IDs.
      For target OOVs not in the source, encode them as <UNK>
  
      Args:
        target: target string
        source_oovs: source OOV words stored in dict, key is the word, value is
        the order in which they appear in the source starting from 0
  
      Returns:
        ids: list of integers
        ids_extend: list of integers including extended vocabulary IDs.