debojit01's picture
added the feedback option for future training data
b62a757 verified
raw
history blame
2.17 kB
import gradio as gr
from transformers import pipeline
import pandas as pd
import os
# Initialize detector
detector = pipeline("text-classification", model="debojit01/fake-review-detector")
# CSV file setup
FEEDBACK_FILE = "training_data.csv"
if not os.path.exists(FEEDBACK_FILE):
pd.DataFrame(columns=["text", "label"]).to_csv(FEEDBACK_FILE, index=False)
def predict(text):
result = detector(text)[0]
if result["label"] == "LABEL_0": # Real
return {"Real": result["score"], "Fake": 1 - result["score"]}
else: # Fake (LABEL_1)
return {"Real": 1 - result["score"], "Fake": result["score"]}
def save_feedback(text, prediction, is_correct):
"""Save feedback only when user submits"""
if is_correct is None: # No feedback provided
return "Prediction shown"
predicted_label = "Real" if prediction["Real"] > 0.5 else "Fake"
true_label = predicted_label if is_correct else ("Fake" if predicted_label == "Real" else "Real")
new_data = pd.DataFrame({"text": [text], "label": [true_label]})
new_data.to_csv(FEEDBACK_FILE, mode='a', header=not os.path.exists(FEEDBACK_FILE), index=False)
return "Thank you for your feedback!"
with gr.Blocks() as app:
gr.Markdown("## Fake Review Detector")
with gr.Row():
review_input = gr.Textbox(label="Enter Review")
predict_btn = gr.Button("Predict")
output_label = gr.Label(label="Prediction")
with gr.Row(visible=False) as feedback_row:
feedback_radio = gr.Radio(
["Correct", "Incorrect"],
label="Is this prediction accurate?"
)
feedback_btn = gr.Button("Submit Feedback")
status_text = gr.Textbox(label="Status", interactive=False)
def show_prediction(text):
prediction = predict(text)
return prediction, gr.Row(visible=True), ""
predict_btn.click(
show_prediction,
inputs=review_input,
outputs=[output_label, feedback_row, status_text]
)
feedback_btn.click(
save_feedback,
inputs=[review_input, output_label, feedback_radio],
outputs=status_text
)
app.launch()