import transformers
import gradio as gr
import numpy as np
import tensorflow as tf
def encode(sentences, tokenizer, sequence_length):
return tokenizer.batch_encode_plus(
sentences,
max_length=sequence_length, # set the length of the sequences
add_special_tokens=True, # add [CLS] and [SEP] tokens
return_attention_mask=True,
return_token_type_ids=False, # not needed for this type of ML task
pad_to_max_length=True, # add 0 pad tokens to the sequences less than max_length
return_tensors='tf'
)
hs_detection_model_1 = tf.keras.models.load_model('./model_1', compile=True)
hs_detection_model_2 = tf.keras.models.load_model('./model_2', compile=True)
def model_inference(sentence):
encoded_model1_sentence = encode([sentence], transformers.BertTokenizer.from_pretrained('dbmdz/bert-base-german-cased'), 300)
encoded_model2_sentence = encode([sentence], transformers.BertTokenizer.from_pretrained('dbmdz/bert-base-german-uncased'), 512)
predictions_1 = hs_detection_model_1.predict(encoded_model1_sentence.values()).flatten()
predictions_2 = hs_detection_model_2.predict(encoded_model2_sentence.values()).flatten()
return {'Hassrede': float(predictions_1[0])}, {'Hassrede': float(predictions_2[0])}
title = "HS-Detector Demonstrator (deutsch)"
description = """
Ausgangsmodell
Modell: Bert ('dbmdz/bert-base-german-cased')
Dataset: germeval18_hasoc19_rp21_combi_dataset
(77.161 Einträge mit einem Hassrede-Anteil von 17,7%)
Fine-Tuning Parameter: 2 Epochen, 300 Token pro Eintrag, 2e-5 LR
Evaluationsergebnisse:
Balanced Accuracy: 0.756
(Accuracy: 0.880)
Binary F1-Score: 0.625
Binary Precision: 0.699
Binary Recall: 0.565
MCC score: 0.559
AUROC score: 0.756
Challenger-Modell
Modell: Bert ('dbmdz/bert-base-german-uncased')
Dataset: germeval18_hasoc19_rp21_combi_dataset_no-url_no-address
(~77.161 Einträge mit einem Hassrede-Anteil von 17,7%)
Fine-Tuning Parameter: 2 Epochen, 512 Token pro Eintrag, 2e-5 LR
Evaluationsergebnisse:
Balanced Accuracy: 0.749
(Accuracy: 0.867)
Binary F1-Score: 0.602
Binary Precision: 0.642
Binary Recall: 0.567
MCC score: 0.524
AUROC score: 0.749
"""
# Dataset: germeval18_hasoc19_rp21_glasebach22_combi_dataset_no-addr.csv
(84.239 Einträge mit einem Hassrede-Anteil von 18,2%)
article = """Die Eingaben werden nicht geloggt. Klassifikator einfach ausprobieren.
Unter dem Button 'Ersteller' kann inspiziert werden, welche Satz-Bestandteile für die Modelle vermutlich entscheident waren.
Dabei werden automatisiert Satzteile verändert und die Auswirkungen auf die jeweils abgefragten Predictions beobachtet."""
input_sentence_text = gr.inputs.Textbox(lines=5, placeholder="Geben Sie hier den Satz ein, der von den Modellen auf Hassrede geprüft werden soll.")
output_predictions = [gr.outputs.Label(label="Prediction of initial model", num_top_classes=1), gr.outputs.Label(label="Prediction of challenging model", num_top_classes=1)]
ui = gr.Interface(fn=model_inference, inputs=input_sentence_text, outputs=output_predictions, title=title, article=article, description=description, interpretation="default",
flagging_options=["incorrect", "ambiguous", "other"], theme="huggingface", css=".confidence {color: black !important}")
ui.launch(enable_queue=True)