File size: 6,055 Bytes
97e7535
8287113
97e7535
8287113
fe236fd
f4fc59a
84e4d0d
3a33e93
 
2241007
 
3a33e93
68d35b6
2241007
 
68d35b6
2241007
 
68d35b6
3a33e93
 
 
68d35b6
3a33e93
 
2241007
9e77097
2241007
 
97c3c4d
 
f7e6b0e
31f9923
97c3c4d
4a5fd41
 
31f9923
4a5fd41
 
 
 
97c3c4d
4a5fd41
362371a
4a5fd41
8d7ce6b
4a5fd41
7efbd03
81876f0
362371a
5787e93
81876f0
16ef8a7
8051b5d
3a33e93
8051b5d
5787e93
81876f0
 
5787e93
81876f0
84e4d0d
 
362371a
84e4d0d
3a33e93
84e4d0d
362371a
84e4d0d
2241007
81876f0
c93e814
1388718
3a33e93
2241007
84e4d0d
2241007
84e4d0d
1388718
 
81876f0
 
2241007
81876f0
2241007
 
 
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import gradio as gr
import torch

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

#"Google T5-base","Google MT5-small","Google Pegasus","Facebook Bart-large","Facebook DistilBART"
def summarize(inputs,model,summary_length):
  prefix = ""
  if model=="Google T5-base":
        tokenizer = AutoTokenizer.from_pretrained("Einmalumdiewelt/T5-Base_GNAD")
        model = AutoModelForSeq2SeqLM.from_pretrained("Einmalumdiewelt/T5-Base_GNAD")
        prefix = "summarize: "
  elif model=="Google Pegasus":
        tokenizer = AutoTokenizer.from_pretrained("Einmalumdiewelt/PegasusXSUM_GNAD")
        model = AutoModelForSeq2SeqLM.from_pretrained("Einmalumdiewelt/PegasusXSUM_GNAD")
  elif model=="Facebook Bart-large":
        tokenizer = AutoTokenizer.from_pretrained("Einmalumdiewelt/BART_large_CNN_GNAD")
        model = AutoModelForSeq2SeqLM.from_pretrained("Einmalumdiewelt/BART_large_CNN_GNAD")
  elif model=="Google MT5-small":
        tokenizer = AutoTokenizer.from_pretrained("Einmalumdiewelt/MT5_small_sum-de_GNAD")
        model = AutoModelForSeq2SeqLM.from_pretrained("Einmalumdiewelt/MT5_small_sum-de_GNAD")
        prefix = "summarize: "
  elif model=="Facebook DistilBART":
        tokenizer = AutoTokenizer.from_pretrained("Einmalumdiewelt/DistilBART_CNN_GNAD")
        model = AutoModelForSeq2SeqLM.from_pretrained("Einmalumdiewelt/DistilBART_CNN_GNAD")
  
  device = "cpu"
  #"cuda" if torch.cuda.is_available() else "CPU"
  model.to(device)
  
  
  #print(str(inputs))
  print(str(prefix)+str(inputs))
  
  #define model inputs          
  inputs = tokenizer(
        prefix + inputs,
        max_length=512,
        truncation=True,
        padding="max_length",
        return_tensors='pt').to(device)
        
  #generate preds      
  preds = model.generate(**inputs,max_length=summary_length+25,min_length=summary_length-25)
  #we decode the predictions to store them
  decoded_predictions = tokenizer.batch_decode(preds, skip_special_tokens=True)
  #return 
  return decoded_predictions[0]

description = "Quickly summarize your German text in a few sentences. \nOur algorithms were fine-tuned on high-quality German news articles. Inference can take up to 60 seconds, so feel free to look at a few of the provided examples, first."

title = "Finally there's a German \ntext summarization algorithm."

#article = "MT5-small introduced by Xue et al. https://arxiv.org/abs/2010.11934 (2020)."

examples = [["summarize: Maschinelles Lernen ist ein Oberbegriff für die „künstliche“ Generierung von Wissen aus Erfahrung: Ein künstliches System lernt aus Beispielen und kann diese nach Beendigung der Lernphase verallgemeinern. Dazu bauen Algorithmen beim maschinellen Lernen ein statistisches Modell auf, das auf Trainingsdaten beruht und welches gegen die Testdaten getestet wird. Das heißt, es werden nicht einfach die Beispiele auswendig gelernt (siehe Überanpassung), sondern Muster und Gesetzmäßigkeiten in den Lerndaten erkannt. So kann das System auch unbekannte Daten beurteilen (Lerntransfer) oder aber am Lernen unbekannter Daten scheitern (Überanpassung; englisch overfitting). Aus dem weiten Spektrum möglicher Anwendungen seien hier genannt: automatisierte Diagnose­verfahren, Erkennung von Kreditkartenbetrug, Aktienmarkt­analysen, Klassifikation von Nukleotidsequenzen, Sprach- und Texterkennung sowie autonome Systeme.","Google T5-base",150],["summarize: Am 15. Juli 2021 war die KI des britischen Unternehmens Deepmind auch für kommerzielle Unternehmen freigegeben worden. Rund ein Jahr später hat Alphafold fast alle 3D-Strukturen des Protein-Universums erfasst. Damit lässt sich eine der wichtigsten Fragen der Molekularbiologie vergleichsweise mühelos beantworten: die nämlich, zu welcher Form sich die Kette eines Proteins ausbildet. Die 3D-Struktur eines Moleküls ist entscheidend für seine Funktionen. Wer sie kennt, kann zudem leichter herausfinden, ob und mit welchen Wirkstoffen sich das Protein beeinflussen lassen könnte. Am 28. Juli 2022 gab Googles Schwesterunternehmen Deepmind nun bekannt, dass die KI die 3D-Strukturen von über 200 Millionen Proteinen entschlüsselt hat. „Im Wesentlichen kann man sich vorstellen, dass es das gesamte Proteinuniversum abdeckt“, wird Demis Hassabis, Gründer und CEO von Deepmind, in einem Bericht von Cnet zitiert. Zum Vergleich: Beim Start von Alphafold in Open Source waren 350.000 3D-Proteine identifiziert. Laut Hassabis haben seitdem mehr als 500.000 Wissenschaftler:innen die bestehende Datenbank genutzt, um über 200 Millionen Strukturen anzuzeigen. „Und diese prädiktiven Strukturen haben Wissenschaftlern geholfen, brillante neue Entdeckungen zu machen“, heißt es vonseiten des Deepmind-CEOs. Demnach konnten unter anderem Enzymforscher:innen Alphafold dazu nutzen, um Lösungen zur Bekämpfung von Kunststoffabfällen zu entwickeln.","Google T5-base",150]]

#interface = gr.Interface.load("models/Einmalumdiewelt/T5-Base_GNAD",
#            title=title,
#            description=description,
#            examples=examples)

# text input box
txt=gr.Textbox(lines=15, label="I want to summarize this:", placeholder="Paste your German text in here.")
# dropdown model selection
drop=gr.Dropdown(["Google T5-base","Google MT5-small","Google Pegasus","Facebook Bart-large","Facebook DistilBART"],label="Choose a fine-tuned architecture.")
# slider summary length selection
slide=gr.Slider(50, 250, step=50, label="Select a preferred summary length (+/- 25 tokens).", value=100)
# text output box
out=gr.Textbox(lines=5, label="Here's your summary:")
            
interface = gr.Interface(summarize,
            inputs=[
            txt,
            # Selection of models for inference
            drop,
            # Length of summaries
            slide],
            # ouptut
            outputs=out,
            title=title,
            description=description,
            examples=examples)
            
# launch interface                    
if __name__ == "__main__":
    interface.launch(share=True)