File size: 7,875 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
 
 
 
00bb1d1
 
 
 
 
 
 
 
4a5fd41
8d7ce6b
4a5fd41
7efbd03
81876f0
00bb1d1
3a33e93
00bb1d1
5787e93
00bb1d1
81876f0
 
5787e93
81876f0
84e4d0d
 
362371a
84e4d0d
3a33e93
84e4d0d
00bb1d1
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
88
89
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
  if summary_length==25:
        # make sure models actually generate something
        preds = model.generate(**inputs,max_length=summary_length+5,min_length=summary_length-20)    
  else:
        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. All examples are out-of-sample texts from German news providers."

title = "Finally  German \ntext summarization algorithm."

examples = [["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",50],["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",50],["Der Schweizer Carlo Janka hat im südkoreanischen Jeongseon den Super-G gewonnen. Es war der erste Schweizer Sieg im alpinen Weltcup der Männer seit über einem Jahr und Jankas erster Super-G-Erfolg überhaupt. Während Andreas Sander auf den zehnten Rang fuhr, siegte der Riesenslalom-Olympiasieger von 2010 mit einer Zeit von 1:26,16 klar vor dem Italiener Christof Innerhofer (+0,82 Sekunden) und dem Österreicher Vincent Kriechmayr (+1,06). Janka hatte zuletzt im Januar 2015 die Kombination in Wengen gewonnen, davor aber vier Jahre lang gar nicht. Der 30-Jährige kämpft seit Jahren mit Rückenproblemen. Bei der Weltcup-Abfahrt zwei Wochen zuvor auf der Streif in Kitzbühel hatte er als Dritter überrascht. Der Super-G-Kurs auf der eigens für Olympia gebauten Strecke in Jeongseon erwies sich vor allem wegen der Sprünge als sehr tückisch. Zahlreiche Fahrer schieden aus, darunter auch Kjetil Jansrud aus Norwegen, der am Vortag die Abfahrt gewonnen hatte.Bei minus zwölf Grad und strahlendem Sonnenschein zog der deutsche Alpinchef Wolfgang Maier ein positives Fazit nach dem ersten Testlauf für die Winterspiele in zwei Jahren. \"Bis Olympia wird noch viel verändert, und wir müssen auch noch viel arbeiten, um beim Material mit diesen kalten Bedingungen zurecht zu kommen\", sagte Maier. \"Aber wir haben gesehen, dass wir uns im Spitzenbereich bewegen können.\"Ein Sonderlob gab es für die Veranstalter. \"Das war eine außergewöhnlich gute Piste\", betonte Maier. \"Dafür, dass es ein komplett neu aus dem Boden gestampftes Skigebiet ist, haben sie das wirklich gut gemacht. Im November stand hier nicht mal ein Lift.\" rae/dpa/sid","Google T5-base",50]]
#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(25, 150, step=25, label="Select a preferred summary length (+/- 25 tokens).", value=50)
# 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)