File size: 1,910 Bytes
fd77815
528da04
03f4672
fd77815
 
 
03f4672
29406f8
fd77815
 
2d942ee
fd77815
 
 
528da04
 
 
2db0396
528da04
 
 
 
fd77815
390d16b
 
4a0592e
 
 
2d942ee
 
4a0592e
fd77815
528da04
fd77815
 
 
 
 
 
2d942ee
395b5b7
2d942ee
 
 
395b5b7
2d942ee
395b5b7
2d942ee
528da04
 
 
 
2d942ee
528da04
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import streamlit as st
import pandas as pd
from transformers import AutoTokenizer
from transformers import (
    TFAutoModelForSequenceClassification as AutoModelForSequenceClassification,
)
from transformers import pipeline

st.title("Detecting Toxic Tweets")

demo = """Your words are like poison. They seep into my mind and make me feel worthless."""

text = st.text_area("Input text", demo, height=250)

# Add a drop-down menu for model selection
model_options = {
    "DistilBERT Base Uncased (SST-2)": "distilbert-base-uncased-finetuned-sst-2-english",
    "Fine-tuned Toxicity Model": "RobCaamano/toxicity_distilbert",
}
selected_model = st.selectbox("Select Model", options=list(model_options.keys()))

mod_name = model_options[selected_model]

tokenizer = AutoTokenizer.from_pretrained(mod_name)
model = AutoModelForSequenceClassification.from_pretrained(mod_name)

# Update the id2label mapping for the fine-tuned model
if selected_model == "Fine-tuned Toxicity Model":
    toxicity_classes = ["toxic", "severe_toxic", "obscene", "threat", "insult", "identity_hate"]
    model.config.id2label = {i: toxicity_classes[i] for i in range(model.config.num_labels)}

clf = pipeline(
    "text-classification", model=model, tokenizer=tokenizer, return_all_scores=True
)

input = tokenizer(text, return_tensors="tf")

if st.button("Submit", type="primary"):
    results = clf(text)[0]
    max_class = max(results, key=lambda x: x["score"])
    
    tweet_portion = text[:50] + "..." if len(text) > 50 else text

    # Create and display the table
    if selected_model == "Fine-tuned Toxicity Model":
        column_name = "Highest Toxicity Class"
    else:
        column_name = "Prediction"
    
    df = pd.DataFrame(
        {
            "Tweet (portion)": [tweet_portion],
            column_name: [max_class["label"]],
            "Probability": [max_class["score"]],
        }
    )
    st.table(df)