docstr: This function knows how to call lookup_tokens with the correct
  settings for this model. The default behavior is to wrap the
  numberized text with distinct BOS and EOS tokens. The resulting
  vector would look something like this:
  [BOS, token1_id, . . . tokenN_id, EOS]
  
  The function also takes an optional seq_len parameter which is
  used to customize truncation in case we have multiple text fields.
  By default max_seq_len is used. It's upto the numberize function of
  the class to decide how to use the seq_len param.
  
  For example:
  - In the case of sentence pair classification, we might want both
  pieces of text have the same length which is half of the
  max_seq_len supported by the model.
  - In the case of QA, we might want to truncate the context by a
  seq_len which is longer than what we use for the question.
  
  Args:
      tokens: a list of tokens represent a sentence, each token represented
      by token string, start and end indices.
  
  Returns:
      tokens_ids: List[int], a list of token ids represent a sentence.
      start_indices: List[int], each token start indice in the sentence.
      end_indices: List[int], each token end indice in the sentence.
code: def _lookup_tokens(
      self,
      tokens: List[Tuple[str, int, int]],
      max_seq_len: Optional[int] = None,
  ) -> Tuple[List[int], List[int], List[int]]:
      """
      This function knows how to call lookup_tokens with the correct
      settings for this model. The default behavior is to wrap the
      numberized text with distinct BOS and EOS tokens. The resulting
      vector would look something like this:
      [BOS, token1_id, . . . tokenN_id, EOS]
  
      The function also takes an optional seq_len parameter which is
      used to customize truncation in case we have multiple text fields.
      By default max_seq_len is used. It's upto the numberize function of
      the class to decide how to use the seq_len param.
  
      For example:
      - In the case of sentence pair classification, we might want both
      pieces of text have the same length which is half of the
      max_seq_len supported by the model.
      - In the case of QA, we might want to truncate the context by a
      seq_len which is longer than what we use for the question.
  
      Args:
          tokens: a list of tokens represent a sentence, each token represented
          by token string, start and end indices.
  
      Returns:
          tokens_ids: List[int], a list of token ids represent a sentence.
          start_indices: List[int], each token start indice in the sentence.
          end_indices: List[int], each token end indice in the sentence.
      """
      if max_seq_len is None:
          max_seq_len = self.max_seq_len
  
      return self.vocab_lookup(
          tokens,
          bos_idx=self.vocab.bos_idx,
          eos_idx=self.vocab.eos_idx,
          use_eos_token_for_bos=False,
          max_seq_len=max_seq_len,
      )
  
imports: from typing import Any, Dict, List, Optional, Tuple
  import torch
  from fairseq.data.dictionary import Dictionary
  from fairseq.data.legacy.masked_lm_dictionary import BertDictionary
  from pytext import resources
  from pytext.common.constants import Token
  from pytext.config.component import ComponentType, create_component
  from pytext.data.tensorizers import Tensorizer, TensorizerScriptImpl
  from pytext.data.tokenizers import Tokenizer, WordPieceTokenizer
  from pytext.data.utils import BOS, EOS, MASK, PAD, UNK, Vocabulary
  from pytext.torchscript.tensorizer.tensorizer import VocabLookup
  from pytext.torchscript.utils import pad_2d_mask, ScriptBatchInput
  from pytext.torchscript.vocab import ScriptVocabulary
  from pytext.utils.file_io import PathManager
  from pytext.utils.lazy import lazy_property
  from pytorch.text.fb.utils.transform_utils import pad_2d
label_desc: Use image node_id 2 for calling the BERTTensorizerBaseScriptImpl obj's underlying member method code with example usage: obj._lookup_tokens(tokens, max_seq_len) and returns: self