class_docstr: Classification normal bias direction. Computes one-dimensional subspace that is the span
  of a specific concept (e.g. gender) as the direction perpendicular to the classification
  boundary of a linear support vector machine fit to classify seed word embedding sets.
  
  !!! Note
      It is uncommon to utilize more than one direction to represent a concept.
  
  Based on: Ravfogel, S., Elazar, Y., Gonen, H., Twiton, M., & Goldberg, Y. (2020).
  [Null It Out: Guarding Protected Attributes by Iterative Nullspace Projection]
  (https://api.semanticscholar.org/CorpusID:215786522). ArXiv, abs/2004.07667.
  
  Implementation and terminology based on Rathore, A., Dev, S., Phillips, J.M., Srikumar,
  V., Zheng, Y., Yeh, C.M., Wang, J., Zhang, W., & Wang, B. (2021).
  [VERB: Visualizing and Interpreting Bias Mitigation Techniques for
  Word Representations](https://api.semanticscholar.org/CorpusID:233168618).
  ArXiv, abs/2104.02797.
class_docstr_tok: ["Classification","normal","bias","direction",".","Computes","one-dimensional","subspace","that","is","the","span","of","a","specific","concept","(","e.g",".","gender",")","as","the","direction","perpendicular","to","the","classification","boundary","of","a","linear","support","vector","machine","fit","to","classify","seed","word","embedding","sets",".","!","!","!","Note","It","is","uncommon","to","utilize","more","than","one","direction","to","represent","a","concept",".","Based","on",":","Ravfogel",",","S.",",","Elazar",",","Y.",",","Gonen",",","H.",",","Twiton",",","M.",",","&","Goldberg",",","Y",".","(","2020",")",".","[","Null","It","Out",":","Guarding","Protected","Attributes","by","Iterative","Nullspace","Projection","]","(","https",":","\/\/api.semanticscholar.org\/CorpusID:215786522",")",".","ArXiv",",","abs\/2004.07667",".","Implementation","and","terminology","based","on","Rathore",",","A.",",","Dev",",","S.",",","Phillips",",","J.M.",",","Srikumar",",","V.",",","Zheng",",","Y.",",","Yeh",",","C.M.",",","Wang",",","J.",",","Zhang",",","W.",",","&","Wang",",","B",".","(","2021",")",".","[","VERB",":","Visualizing","and","Interpreting","Bias","Mitigation","Techniques","for","Word","Representations","]","(","https",":","\/\/api.semanticscholar.org\/CorpusID:233168618",")",".","ArXiv",",","abs\/2104.02797","."]
docstr: # Parameters
  
  !!! Note
      In the examples below, we treat gender identity as binary, which does not accurately
      characterize gender in real life.
  
  seed_embeddings1 : `torch.Tensor`
      A tensor of size (embeddings1_batch_size, ..., dim) containing seed word
      embeddings related to a specific concept group. For example, if the concept is gender,
      seed_embeddings1 could contain embeddings for linguistically masculine words, e.g.
      "man", "king", "brother", etc.
  seed_embeddings2: `torch.Tensor`
      A tensor of size (embeddings2_batch_size, ..., dim) containing seed word
      embeddings related to a different group for the same concept. For example,
      seed_embeddings2 could contain embeddings for linguistically feminine words, , e.g.
      "woman", "queen", "sister", etc.
  
  !!! Note
      seed_embeddings1 and seed_embeddings2 need NOT be the same size. Furthermore,
      the embeddings at the same positions in each of seed_embeddings1 and seed_embeddings2
      are NOT expected to form seed word pairs.
  
  !!! Note
      All tensors are expected to be on the same device.
  
  !!! Note
      This bias direction method is NOT differentiable.
  
  # Returns
  
  bias_direction : `torch.Tensor`
      A unit tensor of size (dim, ) representing the concept subspace.
docstr_tok: ["#","Parameters","!","!","!","Note","In","the","examples","below",",","we","treat","gender","identity","as","binary",",","which","does","not","accurately","characterize","gender","in","real","life",".","seed_embeddings1",":","`","torch.Tensor","`","A","tensor","of","size","(","embeddings1_batch_size",",","...",",","dim",")","containing","seed","word","embeddings","related","to","a","specific","concept","group",".","For","example",",","if","the","concept","is","gender",",","seed_embeddings1","could","contain","embeddings","for","linguistically","masculine","words",",","e.g",".","``","man","''",",","``","king","''",",","``","brother","''",",","etc",".","seed_embeddings2",":","`","torch.Tensor","`","A","tensor","of","size","(","embeddings2_batch_size",",","...",",","dim",")","containing","seed","word","embeddings","related","to","a","different","group","for","the","same","concept",".","For","example",",","seed_embeddings2","could","contain","embeddings","for","linguistically","feminine","words",",",",","e.g",".","``","woman","''",",","``","queen","''",",","``","sister","''",",","etc",".","!","!","!","Note","seed_embeddings1","and","seed_embeddings2","need","NOT","be","the","same","size",".","Furthermore",",","the","embeddings","at","the","same","positions","in","each","of","seed_embeddings1","and","seed_embeddings2","are","NOT","expected","to","form","seed","word","pairs",".","!","!","!","Note","All","tensors","are","expected","to","be","on","the","same","device",".","!","!","!","Note","This","bias","direction","method","is","NOT","differentiable",".","#","Returns","bias_direction",":","`","torch.Tensor","`","A","unit","tensor","of","size","(","dim",",",")","representing","the","concept","subspace","."]
code: def __call__(
      self,
      seed_embeddings1: torch.Tensor,
      seed_embeddings2: torch.Tensor,
  ):
      """
  
      # Parameters
  
      !!! Note
          In the examples below, we treat gender identity as binary, which does not accurately
          characterize gender in real life.
  
      seed_embeddings1 : `torch.Tensor`
          A tensor of size (embeddings1_batch_size, ..., dim) containing seed word
          embeddings related to a specific concept group. For example, if the concept is gender,
          seed_embeddings1 could contain embeddings for linguistically masculine words, e.g.
          "man", "king", "brother", etc.
      seed_embeddings2: `torch.Tensor`
          A tensor of size (embeddings2_batch_size, ..., dim) containing seed word
          embeddings related to a different group for the same concept. For example,
          seed_embeddings2 could contain embeddings for linguistically feminine words, , e.g.
          "woman", "queen", "sister", etc.
  
      !!! Note
          seed_embeddings1 and seed_embeddings2 need NOT be the same size. Furthermore,
          the embeddings at the same positions in each of seed_embeddings1 and seed_embeddings2
          are NOT expected to form seed word pairs.
  
      !!! Note
          All tensors are expected to be on the same device.
  
      !!! Note
          This bias direction method is NOT differentiable.
  
      # Returns
  
      bias_direction : `torch.Tensor`
          A unit tensor of size (dim, ) representing the concept subspace.
      """
  
      # Some sanity checks
      if seed_embeddings1.ndim < 2 or seed_embeddings2.ndim < 2:
          raise ConfigurationError(
              "seed_embeddings1 and seed_embeddings2 must have at least two dimensions."
          )
      if seed_embeddings1.size(-1) != seed_embeddings2.size(-1):
          raise ConfigurationError(
              "All seed embeddings must have same dimensionality."
          )
  
      device = seed_embeddings1.device
      seed_embeddings1 = (
          seed_embeddings1.flatten(end_dim=-2).detach().cpu().numpy()
      )
      seed_embeddings2 = (
          seed_embeddings2.flatten(end_dim=-2).detach().cpu().numpy()
      )
  
      X = np.vstack([seed_embeddings1, seed_embeddings2])
      Y = np.concatenate(
          [
              [0] * seed_embeddings1.shape[0],
              [1] * seed_embeddings2.shape[0],
          ]
      )
  
      classifier = sklearn.svm.SVC(kernel="linear").fit(X, Y)
      bias_direction = torch.Tensor(classifier.coef_[0]).to(device)
  
      return self._normalize_bias_direction(bias_direction)
  
file_path: allennlp/allennlp/fairness/bias_direction.py
imports: import torch
  import sklearn
  import numpy
  from allennlp.common.checks import ConfigurationError
label_desc: Use image node_id 2 for calling the ClassificationNormalBiasDirection obj's underlying member method code with example usage: obj.__call__(seed_embeddings1, seed_embeddings2) and returns: self