in src/setfit/span/modeling.py [0:0]
def create_model_card(self, path: str, model_name: Optional[str] = None) -> None:
"""Creates and saves a model card for a SetFit model.
Args:
path (str): The path to save the model card to.
model_name (str, *optional*): The name of the model. Defaults to `SetFit Model`.
"""
if not os.path.exists(path):
os.makedirs(path)
# If the model_path is a folder that exists locally, i.e. when create_model_card is called
# via push_to_hub, and the path is in a temporary folder, then we only take the last two
# directories
model_path = Path(model_name)
if model_path.exists() and Path(tempfile.gettempdir()) in model_path.resolve().parents:
model_name = "/".join(model_path.parts[-2:])
is_aspect = isinstance(self, AspectModel)
aspect_model = "setfit-absa-aspect"
polarity_model = "setfit-absa-polarity"
if model_name is not None:
if is_aspect:
aspect_model = model_name
if model_name.endswith("-aspect"):
polarity_model = model_name[: -len("-aspect")] + "-polarity"
else:
polarity_model = model_name
if model_name.endswith("-polarity"):
aspect_model = model_name[: -len("-polarity")] + "-aspect"
# Only once:
if self.model_card_data.absa is None and self.model_card_data.model_name:
from spacy import __version__ as spacy_version
self.model_card_data.model_name = self.model_card_data.model_name.replace(
"SetFit", "SetFit Aspect Model" if is_aspect else "SetFit Polarity Model", 1
)
self.model_card_data.tags.insert(1, "absa")
self.model_card_data.version["spacy"] = spacy_version
self.model_card_data.absa = {
"is_absa": True,
"is_aspect": is_aspect,
"spacy_model": self.spacy_model,
"aspect_model": aspect_model,
"polarity_model": polarity_model,
}
if self.model_card_data.task_name is None:
self.model_card_data.task_name = "Aspect Based Sentiment Analysis (ABSA)"
self.model_card_data.inference = False
with open(os.path.join(path, "README.md"), "w", encoding="utf-8") as f:
f.write(self.generate_model_card())