class_docstr: Semantic retrieval model.
  
  Uses a sentence transformer model to encode the dataset and retrieve the top k most similar results to the query.
code: def save_index(self, name: str, cache_directory: str):
      index_file_path = os.path.join(cache_directory, name + ".index")
      self.index.save(index_file_path)
  
      index_data_file_path = os.path.join(
          cache_directory, name + "_data.csv"
      )
      self.index_data.to_csv(index_data_file_path, index=False)
  
imports: import hashlib
  import json
  import os
  from abc import ABC, abstractmethod
  from typing import Any, Callable, Dict, List, Optional, Type, TYPE_CHECKING, Union
  import numpy
  import pandas
  from tqdm import tqdm
  from ludwig.vector_index import FAISS, get_vector_index_cls
  from ludwig.vector_index.base import VectorIndex
  from ludwig.utils.batch_size_tuner import BatchSizeEvaluator
  from ludwig.utils.torch_utils import get_torch_device
label_desc: Use image node_id 5 for calling the SemanticRetrieval obj's underlying member method code with example usage: obj.save_index(name, cache_directory) without return types