ruanchaves commited on
Commit
37f65a8
1 Parent(s): 67e36d3

feat: text simplification

Browse files
Files changed (1) hide show
  1. app.py +108 -0
app.py ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
3
+ import torch
4
+ from collections import Counter
5
+
6
+ article_string = "Author: <a href=\"https://huggingface.co/ruanchaves\">Ruan Chaves Rodrigues</a>. Read more about our <a href=\"https://github.com/ruanchaves/evaluation-portuguese-language-models\">research on the evaluation of Portuguese language models</a>."
7
+
8
+ app_title = "Text simplification (Simplificação Textual)"
9
+
10
+ app_description = """
11
+ Given two versions of the same sentence, this app determines which one is more simple.
12
+ You can either introduce your own sentences by filling in "Sentence A" and "Sentence B" or click on one of the example pairs provided below.
13
+
14
+ (Dado duas versões da mesma frase, este aplicativo determina qual é a mais simples.
15
+ Você pode introduzir suas próprias frases preenchendo os campos "Sentence A" e "Sentence B" ou clicar em um dos pares de exemplo fornecidos abaixo.)
16
+ """
17
+
18
+ app_examples = [
19
+ ["O preço para instalar um DVD player no carro fica entre R$ 2 mil e R$ 5 mil.", "Instalar um DVD player no carro tem preço médio entre R$ 2 mil e R$ 5 mil."],
20
+ ["Especialista alerta para cuidados com os olhos.", "Especialista alerta para cuidados com os olhos."],
21
+ ["Para evitar um novo enfraquecimento político, o governo não pretende influir para que os senadores do PMDB contrários à CPMF sejam substituídos na CCJ.", "O governo não pretende influir para que os senadores do PMDB contrários à CPMF sejam substituídos na CCJ."]
22
+ ]
23
+
24
+ output_textbox_component_description = """
25
+ Output will appear here once the app has finished analyzing the answer.
26
+
27
+ (A saída aparecerá aqui assim que o aplicativo terminar de analisar a resposta.)
28
+ """
29
+
30
+ output_json_component_description = { "breakdown": """
31
+ This box presents a detailed breakdown of the evaluation for each model.
32
+ """,
33
+ "detalhamento": """
34
+ (Esta caixa apresenta um detalhamento da avaliação para cada modelo.)
35
+ """ }
36
+
37
+ score_descriptions = {
38
+ 0: "Sentence A is more simple than Sentence B.",
39
+ 1: "The two sentences are equally simple.",
40
+ 2: "Sentence B is more simple than Sentence A.",
41
+ }
42
+
43
+ score_descriptions_pt = {
44
+ 0: "(A frase A é mais simples que a frase B.)",
45
+ 1: "(As duas frases são igualmente simples.)",
46
+ 2: "(A frase B é mais simples que a frase A.)",
47
+ }
48
+
49
+ model_list = [
50
+ "ruanchaves/mdeberta-v3-base-porsimplessent",
51
+ "ruanchaves/bert-base-portuguese-cased-porsimplessent",
52
+ ]
53
+
54
+ user_friendly_name = {
55
+ "ruanchaves/mdeberta-v3-base-porsimplessent": "mDeBERTa-v3 (PorSimplesSent)",
56
+ "ruanchaves/bert-base-portuguese-cased-porsimplessent": "BERTimbau base (PorSimplesSent)",
57
+ }
58
+
59
+ model_array = []
60
+
61
+ for model_name in model_list:
62
+ row = {}
63
+ row["name"] = model_name
64
+ row["tokenizer"] = AutoTokenizer.from_pretrained(model_name)
65
+ row["model"] = AutoModelForSequenceClassification.from_pretrained(model_name)
66
+ model_array.append(row)
67
+
68
+ def most_frequent(array):
69
+ occurence_count = Counter(array)
70
+ return occurence_count.most_common(1)[0][0]
71
+
72
+ def predict(s1, s2):
73
+ scores = {}
74
+ for row in model_array:
75
+ name = user_friendly_name[row["name"]]
76
+ tokenizer = row["tokenizer"]
77
+ model = row["model"]
78
+ model_input = tokenizer(*([s1], [s2]), padding=True, return_tensors="pt")
79
+ with torch.no_grad():
80
+ output = model(**model_input)
81
+ score = output[0][0].argmax().item()
82
+ scores[name] = score
83
+ average_score = most_frequent(list(scores.values()))
84
+ description = score_descriptions[average_score]
85
+ description_pt = score_descriptions_pt[average_score]
86
+ final_description = description + "\n \n" + description_pt
87
+
88
+ for key, value in scores.items():
89
+ scores[key] = score_descriptions[value]
90
+
91
+ return final_description, scores
92
+
93
+
94
+ inputs = [
95
+ gr.inputs.Textbox(label="Sentence A"),
96
+ gr.inputs.Textbox(label="Sentence B")
97
+ ]
98
+
99
+ outputs = [
100
+ gr.Textbox(label="Evaluation", value=output_textbox_component_description),
101
+ gr.JSON(label="Results by model", value=output_json_component_description)
102
+ ]
103
+
104
+
105
+ gr.Interface(fn=predict, inputs=inputs, outputs=outputs, title=app_title,
106
+ description=app_description,
107
+ examples=app_examples,
108
+ article = article_string).launch()