docs: def k_nearest_approx(self, vec, k):
          """Get the k nearest neighbors of a vector (in terms of cosine similarity).
  
          :param (np.array) vec: query vector
          :param (int) k: number of top neighbors to return
  
          :return (list[tuple[str, float]]): a list of (word, cosine similarity) pairs, in descending order
          """
          if not hasattr(self, 'lshf'):
              self.lshf = self._init_lsh_forest()
  
          # TODO(kelvin): make this inner product score, to be consistent with k_nearest
          distances, neighbors = self.lshf.kneighbors([vec], n_neighbors=k, return_distance=True)
          scores = np.subtract(1, distances)
          nbr_score_pairs = self._word_to_score(np.squeeze(neighbors), np.squeeze(scores))
  
          return sorted(nbr_score_pairs.items(), key=lambda x: x[1], reverse=True)