class_docstr: The implementation of the verbalizer in `WARP <https://aclanthology.org/2021.acl-long.381/>`_
  
  Args:
      tokenizer (:obj:`PreTrainedTokenizer`): The tokenizer of the current pre-trained model to point out the vocabulary.
      classes (:obj:`List[Any]`): The classes (or labels) of the current task.
      label_words (:obj:`Union[List[str], List[List[str]], Dict[List[str]]]`, optional): The label words that are projected by the labels.
      prefix (:obj:`str`, optional): The prefix string of the verbalizer (used in PLMs like RoBERTa, which is sensitive to prefix space)
      multi_token_handler (:obj:`str`, optional): The handling strategy for multiple tokens produced by the tokenizer.
      post_log_softmax (:obj:`bool`, optional): Whether to apply log softmax post processing on label_logits. Default to True.
class_docstr_tok: ["The","implementation","of","the","verbalizer","in","`","WARP","<","https",":","\/\/aclanthology.org\/2021.acl-long.381\/",">","`","_","Args",":","tokenizer","(",":","obj",":","`","PreTrainedTokenizer","`",")",":","The","tokenizer","of","the","current","pre-trained","model","to","point","out","the","vocabulary",".","classes","(",":","obj",":","`","List","[","Any","]","`",")",":","The","classes","(","or","labels",")","of","the","current","task",".","label_words","(",":","obj",":","`","Union","[","List","[","str","]",",","List","[","List","[","str","]","]",",","Dict","[","List","[","str","]","]","]","`",",","optional",")",":","The","label","words","that","are","projected","by","the","labels",".","prefix","(",":","obj",":","`","str","`",",","optional",")",":","The","prefix","string","of","the","verbalizer","(","used","in","PLMs","like","RoBERTa",",","which","is","sensitive","to","prefix","space",")","multi_token_handler","(",":","obj",":","`","str","`",",","optional",")",":","The","handling","strategy","for","multiple","tokens","produced","by","the","tokenizer",".","post_log_softmax","(",":","obj",":","`","bool","`",",","optional",")",":","Whether","to","apply","log","softmax","post","processing","on","label_logits",".","Default","to","True","."]
docstr: In basic manual template, the parameters are generated from label words directly.
  In this implementation, the label_words should not be tokenized into more than one token.
docstr_tok: ["In","basic","manual","template",",","the","parameters","are","generated","from","label","words","directly",".","In","this","implementation",",","the","label_words","should","not","be","tokenized","into","more","than","one","token","."]
code: def generate_parameters(self) -> List:
      r"""In basic manual template, the parameters are generated from label words directly.
      In this implementation, the label_words should not be tokenized into more than one token.
      """
      words_ids = []
      for word in self.label_words:
          if isinstance(word, list):
              logger.warning(
                  "Label word for a class is a list, only use the first word."
              )
          word = word[0]
          word_ids = self.tokenizer.encode(
              word, add_special_tokens=False
          )
          if len(word_ids) > 1:
              logger.warning(
                  "Word {} is split into multiple tokens: {}. \
                      If this is not what you expect, try using another word for this verbalizer".format(
                      word,
                      self.tokenizer.convert_ids_to_tokens(word_ids),
                  )
              )
          words_ids.append(word_ids)
  
      max_len = max([len(ids) for ids in words_ids])
      words_ids_mask = [
          [1] * len(ids) + [0] * (max_len - len(ids))
          for ids in words_ids
      ]
      words_ids = [
          ids + [0] * (max_len - len(ids)) for ids in words_ids
      ]
  
      words_ids_tensor = torch.tensor(words_ids)
      words_ids_mask = torch.tensor(words_ids_mask)
      self.label_words_ids = nn.Parameter(
          words_ids_tensor, requires_grad=False
      )
      self.label_words_mask = nn.Parameter(
          words_ids_mask, requires_grad=False
      )
  
      init_data = self.original_head_last_layer[
          self.label_words_ids, :
      ] * self.label_words_mask.to(
          self.original_head_last_layer.dtype
      ).unsqueeze(
          -1
      )
      init_data = init_data.sum(dim=1) / self.label_words_mask.sum(
          dim=-1, keepdim=True
      )
  
      if isinstance(self.head, torch.nn.Linear):
          self.head.weight.data = init_data
          self.head.weight.data.requires_grad = True
      else:
          """
          getattr(self.head, self.head_last_layer_full_name).weight.data = init_data
          getattr(self.head, self.head_last_layer_full_name).weight.data.requires_grad=True # To be sure
          """
          self.head_last_layer.weight.data = init_data
          self.head_last_layer.weight.data.requires_grad = True
  
imports: from inspect import Parameter
  import json
  from os import stat
  from transformers.file_utils import ModelOutput
  from transformers.tokenization_utils import PreTrainedTokenizer
  from transformers.utils.dummy_pt_objects import PreTrainedModel
  from yacs.config import CfgNode
  from openprompt.data_utils import InputFeatures
  import re
  from openprompt import Verbalizer
  from typing import *
  import torch
  import torch.nn
  import torch.nn.functional
  from openprompt.utils.logging import logger
  import copy
  from transformers.modeling_outputs import CausalLMOutputWithCrossAttentions, Seq2SeqLMOutput, MaskedLMOutput
  from transformers.models.t5 import T5ForConditionalGeneration
label_desc: Use image node_id 6 for calling the SoftVerbalizer obj's underlying member method code with example usage: obj.generate_parameters() without return types