docs: def generate_samples(text,                # type: TokenizedText
                       n_samples=500,       # type: int
                       bow=True,            # type: bool
                       random_state=None,
                       replacement='',      # type: str
                       min_replace=1,       # type: Union[int, float]
                       max_replace=1.0,     # type: Union[int, float]
                       group_size=1,        # type: int
                       ):
      # type: (...) -> Tuple[List[str], np.ndarray, np.ndarray]
      """
      Return ``n_samples`` changed versions of text (with some words removed),
      along with distances between the original text and a generated
      examples. If ``bow=False``, all tokens are considered unique
      (i.e. token position matters).
      """
      kwargs = dict(
          n_samples=n_samples,
          replacement=replacement,
          random_state=random_state,
          min_replace=min_replace,
          max_replace=max_replace,
      )
      if bow:
          num_tokens = len(text.vocab)
          res = text.replace_random_tokens_bow(**kwargs)
      else:
          num_tokens = len(text.tokens)
          res = text.replace_random_tokens(group_size=group_size, **kwargs)
  
      texts, num_removed_vec, masks = zip(*res)
      similarity = cosine_similarity_vec(num_tokens, num_removed_vec)
      return texts, similarity, vstack(masks)