Dyra1204 commited on
Commit
b9d2c5c
·
verified ·
1 Parent(s): 9a236c1

Upload core/explainer.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. core/explainer.py +16 -3
core/explainer.py CHANGED
@@ -2,7 +2,6 @@ import re
2
  from typing import Any, Dict, List, Tuple
3
 
4
  import numpy as np
5
- import shap
6
  import torch
7
  from transformers import DistilBertForSequenceClassification, DistilBertTokenizer
8
 
@@ -10,6 +9,16 @@ from transformers import DistilBertForSequenceClassification, DistilBertTokenize
10
  class SHAPExplainer:
11
  def __init__(self, model_path: str = "."):
12
  print("🚀 Initializing SHAP Explainer...")
 
 
 
 
 
 
 
 
 
 
13
  self.model = DistilBertForSequenceClassification.from_pretrained(model_path)
14
  self.tokenizer = DistilBertTokenizer.from_pretrained(model_path)
15
 
@@ -40,9 +49,13 @@ class SHAPExplainer:
40
 
41
  self.model_predict = model_predict
42
 
 
 
 
 
43
  try:
44
- masker = shap.maskers.Text(tokenizer=self.tokenizer)
45
- self.explainer = shap.Explainer(self.model_predict, masker=masker)
46
  print("✅ SHAP Explainer initialized successfully!")
47
  except Exception as e:
48
  print(f"❌ Error initializing SHAP: {e}")
 
2
  from typing import Any, Dict, List, Tuple
3
 
4
  import numpy as np
 
5
  import torch
6
  from transformers import DistilBertForSequenceClassification, DistilBertTokenizer
7
 
 
9
  class SHAPExplainer:
10
  def __init__(self, model_path: str = "."):
11
  print("🚀 Initializing SHAP Explainer...")
12
+ # Import shap lazily to avoid triggering optional plotting imports
13
+ # during app startup (e.g., Spaces reload scanner).
14
+ try:
15
+ import shap # type: ignore
16
+
17
+ self._shap = shap
18
+ except Exception as e:
19
+ print(f"⚠️ SHAP import failed; falling back to heuristic explainer: {e}")
20
+ self._shap = None
21
+
22
  self.model = DistilBertForSequenceClassification.from_pretrained(model_path)
23
  self.tokenizer = DistilBertTokenizer.from_pretrained(model_path)
24
 
 
49
 
50
  self.model_predict = model_predict
51
 
52
+ if self._shap is None:
53
+ self.explainer = None
54
+ return
55
+
56
  try:
57
+ masker = self._shap.maskers.Text(tokenizer=self.tokenizer)
58
+ self.explainer = self._shap.Explainer(self.model_predict, masker=masker)
59
  print("✅ SHAP Explainer initialized successfully!")
60
  except Exception as e:
61
  print(f"❌ Error initializing SHAP: {e}")