Spaces:
Sleeping
Sleeping
| import joblib | |
| import pandas as pd | |
| from src.models.vader_model import get_vader_prediction | |
| from src.models.lr_model import get_lr_prediction | |
| from src.models.bert_model import get_bert_prediction | |
| from src.config import META_MODEL_PATH, META_THRESHOLD_PATH | |
| from src.features.intensifiers import has_negative_intensifier | |
| # Load trained meta-model | |
| meta_model = joblib.load(META_MODEL_PATH) | |
| # Load the decision threshold tuned on the validation set during training | |
| # (see src/models/meta_model.py). Falls back to 0.5 only if a threshold | |
| # file isn't present, e.g. on an older artifact set. | |
| try: | |
| FAILURE_THRESHOLD = joblib.load(META_THRESHOLD_PATH) | |
| except FileNotFoundError: | |
| FAILURE_THRESHOLD = 0.5 | |
| def predict_failure(text): | |
| vader_pred, vader_score = get_vader_prediction(text) | |
| lr_pred, lr_confidence = get_lr_prediction(text) | |
| bert_pred, bert_confidence, bert_entropy = ( | |
| get_bert_prediction(text) | |
| ) | |
| vader_lr_disagreement = int( | |
| vader_pred != lr_pred | |
| ) | |
| lr_bert_disagreement = int( | |
| lr_pred != bert_pred | |
| ) | |
| vader_bert_disagreement = int( | |
| vader_pred != bert_pred | |
| ) | |
| negative_intensifier = has_negative_intensifier(text) | |
| features = pd.DataFrame([{ | |
| "vader_pred": vader_pred, | |
| "vader_score": vader_score, | |
| "lr_pred": lr_pred, | |
| "lr_confidence": lr_confidence, | |
| "bert_pred": bert_pred, | |
| "bert_confidence": bert_confidence, | |
| "bert_entropy": bert_entropy, | |
| "vader_lr_disagreement": vader_lr_disagreement, | |
| "lr_bert_disagreement": lr_bert_disagreement, | |
| "vader_bert_disagreement": vader_bert_disagreement, | |
| "has_negative_intensifier": negative_intensifier | |
| }]) | |
| failure_probability = meta_model.predict_proba( | |
| features | |
| )[0][1] | |
| warning = ( | |
| "TRANSFORMER MAY FAIL" | |
| if failure_probability >= FAILURE_THRESHOLD | |
| else "Prediction appears reliable" | |
| ) | |
| return { | |
| "text": text, | |
| "vader_prediction": int(vader_pred), | |
| "lr_prediction": int(lr_pred), | |
| "bert_prediction": int(bert_pred), | |
| "bert_label": "positive" if bert_pred == 1 else "negative", | |
| "vader_label": "positive" if vader_pred == 1 else "negative", | |
| "lr_label": "positive" if lr_pred == 1 else "negative", | |
| "bert_confidence": round( | |
| float(bert_confidence), | |
| 4 | |
| ), | |
| "lr_confidence": round( | |
| float(lr_confidence), | |
| 4 | |
| ), | |
| "vader_score": round( | |
| float(abs(vader_score)), | |
| 4 | |
| ), | |
| "bert_entropy": round( | |
| float(bert_entropy), | |
| 4 | |
| ), | |
| "failure_probability": round( | |
| float(failure_probability), | |
| 4 | |
| ), | |
| "failure_threshold": round( | |
| float(FAILURE_THRESHOLD), | |
| 4 | |
| ), | |
| "is_failure_risk": bool(failure_probability >= FAILURE_THRESHOLD), | |
| "vader_agrees": bool(vader_pred == bert_pred), | |
| "lr_agrees": bool(lr_pred == bert_pred), | |
| "has_negative_intensifier": bool(negative_intensifier), | |
| "warning": warning | |
| } | |
| if __name__ == "__main__": | |
| while True: | |
| text = input("\nEnter text: ") | |
| if text.lower() == "exit": | |
| break | |
| result = predict_failure(text) | |
| print("\nRESULT:\n") | |
| for key, value in result.items(): | |
| print(f"{key}: {value}") |