kapllan
commited on
Commit
·
6f57942
1
Parent(s):
ee15f20
First commit to migrate the nlp-demo page.
Browse files- README.md +7 -6
- app.py +5 -0
- flagged/log.csv +4 -0
- poetry.lock +0 -0
- poetry.toml +2 -0
- pyproject.toml +20 -0
- requirements.txt +1 -0
- resources/interfaces/gbert_interface.yml +22 -0
- resources/interfaces/gpt2_interface.yml +19 -0
- resources/interfaces/legal_german_roberta_interface.yml +30 -0
- resources/interfaces/ner_interface.yml +13 -0
- resources/interfaces/qa_interface.yml +27 -0
- resources/interfaces/summarization_interface.yml +35 -0
- resources/interfaces/zero_shot_interface.yml +49 -0
- resources/markdown/einführung.md +15 -0
- resources/pages/intro.yml +4 -0
- resources/tabs/app_tab.yml +9 -0
- resources/tabs/legal_tab.yml +4 -0
- resources/templates/template_interface.yml +20 -0
- resources/templates/template_tab.yml +3 -0
- src/nlp_circle_demo/__pycache__/bfh_theme.cpython-310.pyc +0 -0
- src/nlp_circle_demo/__pycache__/interface.cpython-310.pyc +0 -0
- src/nlp_circle_demo/wrapped_gradio_objects.py +143 -0
README.md
CHANGED
@@ -1,12 +1,13 @@
|
|
1 |
---
|
2 |
-
title: Nlp Demo
|
3 |
-
emoji:
|
4 |
-
colorFrom:
|
5 |
-
colorTo:
|
6 |
sdk: gradio
|
7 |
-
sdk_version: 4.
|
8 |
app_file: app.py
|
9 |
pinned: false
|
|
|
10 |
---
|
11 |
|
12 |
-
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
1 |
---
|
2 |
+
title: Nlp Circle Demo
|
3 |
+
emoji: 🔥
|
4 |
+
colorFrom: green
|
5 |
+
colorTo: green
|
6 |
sdk: gradio
|
7 |
+
sdk_version: 4.39.0
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
+
python_version: 3.10.5
|
11 |
---
|
12 |
|
13 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
app.py
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from src.nlp_circle_demo.wrapped_gradio_objects import GradioTabWrapper
|
2 |
+
|
3 |
+
if __name__ == "__main__":
|
4 |
+
demo = GradioTabWrapper.from_yaml("resources/tabs/app_tab.yml")
|
5 |
+
demo.launch()
|
flagged/log.csv
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Input,Summary,flag,username,timestamp
|
2 |
+
Hello my name is,"Hello my name is Mark O'Keeffe, and I need to get out of here right here on the floor. I don't want this, you're not going to take my picture with the camera on you. What's taking my picture",,,2023-02-13 09:26:59.995980
|
3 |
+
Hello my name is,"Hello my name is Mark O'Keeffe, and I need to get out of here right here on the floor. I don't want this, you're not going to take my picture with the camera on you. What's taking my picture",,,2023-02-13 09:27:01.256913
|
4 |
+
Paris is the <mask> of France.,,,,,2023-02-13 14:53:47.770858
|
poetry.lock
ADDED
The diff for this file is too large to render.
See raw diff
|
|
poetry.toml
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
[virtualenvs]
|
2 |
+
create = false
|
pyproject.toml
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[tool.poetry]
|
2 |
+
name = "nlp-circle-demo"
|
3 |
+
version = "0.1.0"
|
4 |
+
description = ""
|
5 |
+
authors = ["Your Name <[email protected]>"]
|
6 |
+
readme = "README.md"
|
7 |
+
packages = []
|
8 |
+
|
9 |
+
[tool.poetry.dependencies]
|
10 |
+
python = "^3.10"
|
11 |
+
gradio = "^3.26.0"
|
12 |
+
pyyaml = "^6.0"
|
13 |
+
|
14 |
+
[tool.poetry.dev-dependencies]
|
15 |
+
pre-commit = "^3.2"
|
16 |
+
black = "^23.3"
|
17 |
+
|
18 |
+
[build-system]
|
19 |
+
requires = ["poetry-core"]
|
20 |
+
build-backend = "poetry.core.masonry.api"
|
requirements.txt
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
pyyaml
|
resources/interfaces/gbert_interface.yml
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: German BERT
|
2 |
+
name: huggingface/deepset/gbert-large
|
3 |
+
description: >
|
4 |
+
Hier zeigen wir ein Vergleichsmodell, welches ebenfalls maskierte Wörter (hier mit dem Stichwort [MASK]) zu erraten
|
5 |
+
versucht. Dieses Modell wurde allerdings nicht auf rechtliche Sprache spezialisiert, weshalb die prognostizierten
|
6 |
+
Wörter deutlich weniger spezifisch sind. Beide Modelle sind gleich gross und haben 354 Millionen Parameter.
|
7 |
+
examples:
|
8 |
+
# This is how we can do nested lists
|
9 |
+
- >
|
10 |
+
Die Beschwerdeführerin rügt sodann eine Verletzung des Verhältnismässigkeitsprinzips. Sie ist der
|
11 |
+
Auffassung, dass die Publikationstätigkeit der WEKO den Grundsatz der [MASK] gemäss Art. 5 Abs. 2
|
12 |
+
und Art. 36 BV wahren müsse.
|
13 |
+
- >
|
14 |
+
In der Folge leitete E. beim [MASK] Zürich zwei Prozesse gegen seine frühere Arbeitgeberin ein. Im einen
|
15 |
+
verlangte er Lohnfortzahlung, Genugtuung und die Ausstellung eines Arbeitszeugnisses; im andern Ersatz für
|
16 |
+
Schaden, der ihm aus dem Verhalten der Bank entstanden sei.
|
17 |
+
- >
|
18 |
+
Der variable Teil der Vergütung aller Mitarbeiter, die der Verwaltungsrat in eigener Kompetenz beschliessen
|
19 |
+
kann, darf nicht grösser als 15 Prozent des ausgewiesenen Reingewinnes sein. Will der Verwaltungsrat eine
|
20 |
+
höhere variable Gesamtvergütung, muss er diese an der [MASK] beantragen und begründen.
|
21 |
+
|
22 |
+
|
resources/interfaces/gpt2_interface.yml
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: GPT2 # will be used as tab title and for the link.
|
2 |
+
name: huggingface/gpt2 # path to model
|
3 |
+
description: >
|
4 |
+
GPT2 ist ein Foundation Modell, welches im Jahr 2019 darauf trainiert wurde, Texte weiterzuschreiben:
|
5 |
+
Wort für Wort wählt das Modell die wahrscheinlichste Fortsetzung des Textes, und kann so ganze
|
6 |
+
Sätze und Texte bilden. Da das Modell allerdings für heutige Standards nur sehr klein ist, sind die
|
7 |
+
resultierenden Texte nicht allzu beeindruckend. <br>
|
8 |
+
|
9 |
+
Das heute so populäre ChatGPT-Modell basiert auf der genau gleichen Technologie, nur hat es sehr viel
|
10 |
+
mehr Speicherplatz zur Verfügung und wurde mit einem grösseren Textkorpus trainiert. ChatGPT hat genau
|
11 |
+
die gleichen Probleme wie dieses deutlich kleinere GPT2-Modell - es kann semantische
|
12 |
+
Fehler machen, es ist in unterschiedlichen Sprachen unterschiedlich gut, und es bildet die Vorurteile des
|
13 |
+
Trainingsdatensatzes ab - nur kann es all seine Mängel deutlich besser hinter eindrücklichen Sätzen verstecken.
|
14 |
+
|
15 |
+
examples:
|
16 |
+
- Paris is the capital of
|
17 |
+
- My dad works as a
|
18 |
+
- My mother works as a
|
19 |
+
- Auf Deutsch funktioniert das Modell deutlich
|
resources/interfaces/legal_german_roberta_interface.yml
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: Legal German RoBERTa
|
2 |
+
name: huggingface/joelito/legal-german-roberta-large
|
3 |
+
description: >
|
4 |
+
Statt ein öffentlich verfügbares Foundation-Modell zu verwenden, können wir auch selbst solche Modelle
|
5 |
+
trainieren. Auf dieser Seite zeigen wir ein solches Modell, welches an unserem Institut auf einem Textkorpus
|
6 |
+
mit rechtlicher Sprache vortrainiert wurde. Dadurch soll das Modell Textverarbeitungsaufgaben im Legal-
|
7 |
+
Bereich deutlich besser lösen können als generische Modelle. <br>
|
8 |
+
|
9 |
+
Die zwei hier gezeigten Foundation-Modelle wurden etwas anders trainiert als das vorher gezeigte GPT2-Modell:
|
10 |
+
Wir nehmen einen Text und maskieren ein Wort davon (mit dem Stichwort <mask>). Das Modell lernt nun, wie es
|
11 |
+
dieses Wort voraussagen kann. Im Gegensatz zu GPT2 können die Modelle also auch vorausschauen - dafür sind sie
|
12 |
+
weniger gut für Textgenerierung geeignet. <br>
|
13 |
+
|
14 |
+
Wenn wir dem Modell nun verschiedene Beispiele von aktuellen Bundesgerichtsentscheiden mit einem maskierten Wort
|
15 |
+
zeigen, macht es mit hoher Zuverlässigkeit einen guten Vorschlag, welches Wort fehlen könnte. Zum Vergleich
|
16 |
+
zeigen wir im Tab "German BERT" ein gleich grosses generisches Modell, welches die Aufgabe deutlich weniger gut löst.
|
17 |
+
|
18 |
+
examples:
|
19 |
+
- >
|
20 |
+
Die Beschwerdeführerin rügt sodann eine Verletzung des Verhältnismässigkeitsprinzips. Sie ist der
|
21 |
+
Auffassung, dass die Publikationstätigkeit der WEKO den Grundsatz der <mask> gemäss Art. 5 Abs. 2
|
22 |
+
und Art. 36 BV wahren müsse.
|
23 |
+
- >
|
24 |
+
In der Folge leitete E. beim <mask> Zürich zwei Prozesse gegen seine frühere Arbeitgeberin ein.
|
25 |
+
Im einen verlangte er Lohnfortzahlung, Genugtuung und die Ausstellung eines Arbeitszeugnisses; im
|
26 |
+
andern Ersatz für Schaden, der ihm aus dem Verhalten der Bank entstanden sei.
|
27 |
+
- >
|
28 |
+
Der variable Teil der Vergütung aller Mitarbeiter, die der Verwaltungsrat in eigener Kompetenz beschliessen
|
29 |
+
kann, darf nicht grösser als 15 Prozent des ausgewiesenen Reingewinnes sein. Will der Verwaltungsrat eine
|
30 |
+
höhere variable Gesamtvergütung, muss er diese an der <mask> beantragen und begründen.
|
resources/interfaces/ner_interface.yml
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: Named Entity Recognition # will be used as tab title and for the link.
|
2 |
+
name: huggingface/harshildarji/gbert-legal-ner # path to model
|
3 |
+
description: >
|
4 |
+
Bei dieser Aufgabe geht es darum, automatisch Eigennamen oder Entitäten, engl. named entities,
|
5 |
+
in einem Text zu erkennen und einer Klasse zuzuordnen. So wäre beispielsweise Max Mustermann ein
|
6 |
+
Eigenname der Klasse Person; Berner Fachhochschule wäre ein Eigenname der Klasse Organisation. Das
|
7 |
+
hier verwendete Beispielmodell wurde auf juristische Texte des Deutschen trainiert und erkennt
|
8 |
+
Eigennamen, die für die juristischen Domäne relevant sind, wie zum Beispiel Lawyer (= Anwalt) oder
|
9 |
+
Law (=Gesetz).'
|
10 |
+
examples:
|
11 |
+
- >
|
12 |
+
1. Das Bundesarbeitsgericht ist gemäß § 9 Abs. 2 Satz 2 ArbGG iVm. § 201 Abs. 1 Satz 2 GVG für
|
13 |
+
die beabsichtigte Klage gegen den Bund zuständig.
|
resources/interfaces/qa_interface.yml
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: Question Answering
|
2 |
+
name: huggingface/deepset/gelectra-large-germanquad
|
3 |
+
description: >
|
4 |
+
Hier handelt es sich um ein Modell, welches auf eine spezifische Aufgabe spezialisiert wurde
|
5 |
+
(im Fachjargon "Finetuning" genannt):
|
6 |
+
In einem Text die Antwort auf eine gestellte Frage zu finden. Ausgangspunkt bildete das mehrsprachige
|
7 |
+
XLM-RoBERTa Modell mit 270M Parameter. Dieses Foundation Modell wurde anschliessend
|
8 |
+
mit zahlreichen Beispielen von Texten, Fragen und gefundenen Antworten weitertrainiert,
|
9 |
+
um diese spezifische Aufgabe zu lösen.
|
10 |
+
examples:
|
11 |
+
-
|
12 |
+
- Mein Name ist Wolfgang und ich lebe in Berlin
|
13 |
+
- Wo wohne ich?
|
14 |
+
-
|
15 |
+
- >
|
16 |
+
Der Amazonas-Regenwald, auf Englisch auch als Amazonien oder Amazonas-Dschungel bekannt,
|
17 |
+
ist ein feuchter Laubwald, der den größten Teil des Amazonas-Beckens Südamerikas bedeckt.
|
18 |
+
Dieses Becken umfasst 7.000.000 Quadratkilometer (2.700.000 Quadratmeilen), von denen
|
19 |
+
5.500.000 Quadratkilometer (2.100.000 Quadratmeilen) vom Regenwald bedeckt sind. Diese
|
20 |
+
Region umfasst Gebiete von neun Nationen. Der größte Teil des Waldes befindet sich in
|
21 |
+
Brasilien mit 60% des Regenwaldes, gefolgt von Peru mit 13%, Kolumbien mit 10% und geringen
|
22 |
+
Mengen in Venezuela, Ecuador, Bolivien, Guyana, Suriname und Französisch-Guayana. Staaten
|
23 |
+
oder Abteilungen in vier Nationen enthalten \"Amazonas\" in ihren Namen. Der Amazonas
|
24 |
+
repräsentiert mehr als die Hälfte der verbleibenden Regenwälder des Planeten und umfasst
|
25 |
+
den größten und artenreichsten tropischen Regenwald der Welt mit geschätzten 390 Milliarden
|
26 |
+
Einzelbäumen, die in 16.000 Arten unterteilt sind.
|
27 |
+
- Welcher Name wird auch verwendet, um den Amazonas-Regenwald auf Englisch zu beschreiben?
|
resources/interfaces/summarization_interface.yml
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: Text-Zusammenfassung # will be used as tab title and for the link.
|
2 |
+
name: huggingface/Einmalumdiewelt/T5-Base_GNAD # path to model
|
3 |
+
description: >
|
4 |
+
Hier wurde ein sogenanntes T5-Sprachmodell auf den Task der Text-Zusammenfassung
|
5 |
+
spezialisiert. Das Modell versteht nur Deutsch und hat 220 Millionen Parameter.
|
6 |
+
examples:
|
7 |
+
- >
|
8 |
+
Innovation Booster Swiss Smart Cities.
|
9 |
+
Der Innovation Booster Swiss Smart Cities unterstützt die Entwicklung von vernetzten
|
10 |
+
Lösungen von Anfang an und erleichtert radikale Innovationsprojekte in grösserem Umfang
|
11 |
+
mit höheren Risiken und Gewinnen, die durch isolierte lokale Projekte allein nicht zu
|
12 |
+
stemmen sind. Smarte urbane Lösungen erfordern die Beteiligung eines breiten Spektrums von
|
13 |
+
Akteuren, die von den Bürgern über die Privatwirtschaft bis hin zu Behörden und Hochschulen
|
14 |
+
reichen. Der Booster bringt diese Akteure aus allen Regionen der Schweiz zusammen; in einem
|
15 |
+
Co-Creation-Ansatz werden sie Lösungen für wichtige Herausforderungen moderner Städte entwickeln,
|
16 |
+
die alle Dimensionen einer Smart City umfassen. Dazu führt der Booster regelmässige Aufrufe für
|
17 |
+
Ideen durch, welche von einer Jury bewertet werden. Erfolgreiche Innovationsteams können mit
|
18 |
+
bis zu CHF 25000 gefördert werden. Es geht dabei um eine Anschubfinanzierung für gute Ideen
|
19 |
+
im ersten Stadium eines Innovationsprozesses, um diese soweit weiterzuentwickeln bzw. zu validieren,
|
20 |
+
dass danach eine echte Entwicklung zur Marktreife möglich wird. Die Förderung und Anschubfinanzierung
|
21 |
+
von neuen Ideen wird so einen grossen Schub in den Smart-City-Entwicklungen in der Schweiz auslösen
|
22 |
+
und so zur weiteren Digitalisierung im öffentlichen Sektor beitragen.
|
23 |
+
- >
|
24 |
+
Demokratie Labor Basel
|
25 |
+
Digitalisierung, Klimawandel, zunehmende nationalistischer Tendenzen und die damit verbundene politische
|
26 |
+
Polarisierung der Gesellschaft üben einen wachsenden Problem- und Reformdruck auf moderne Demokratien aus.
|
27 |
+
Die Schweizer Demokratie hat sich jedoch in den letzten 100 Jahren institutionell kaum verändert.
|
28 |
+
Entsprechend gross ist der Bedarf nach einer Anpassung der Beteiligungs- und Mitwirkungsinstrumente.
|
29 |
+
Das Projekt will Reformansätze für mehr Bürger*innenbeteiligung entwickeln und testen.
|
30 |
+
Ausgehend von den existierenden politischen Strukturen werden über einen Zeitraum von drei Jahren von SRB
|
31 |
+
und der BFH neue Ansätze zur demokratischen Partizipation, Meinungsbildung und Mitbestimmung identifiziert,
|
32 |
+
experimentell auf ihre Praxistauglichkeit getestet und in konkrete Umsetzungsvorschläge überführt. In
|
33 |
+
einzelnen Projekten werden bereits technische Lösungen skizziert oder auch Prototypen der entsprechenden
|
34 |
+
Instrumente entwickelt. Insgesamt beinhaltet das Projekt zehn Reformansätze.
|
35 |
+
|
resources/interfaces/zero_shot_interface.yml
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: Zero-Shot Interface
|
2 |
+
name: huggingface/Sahajtomar/German_Zeroshot
|
3 |
+
description: >
|
4 |
+
Bei dieser Aufgabe handelt es sich um eine Textklassifizierungsaufgabe. Das heißt, das Modell
|
5 |
+
bekommt einen Textinhalt vorgelegt und muss aus einer Liste vordefinierter Labels entscheiden,
|
6 |
+
welches dieser Labels den Inhalt des Textes am besten beschreibt. Der Krux bei der ganzen Sache ist,
|
7 |
+
dass das Modell keine Spezialisierung für die Labels erfahren hat und sozusagen beim ersten Mal die
|
8 |
+
richtige Auswahl treffen muss; daher zero shot, denn es hat nur einen Versuch. Erreicht wird dies, in
|
9 |
+
dem ein vortrainiertes Modell auf einen Datensatz für Natural Language Inference (dt. natürlichsprachliche
|
10 |
+
Inferenz oder Rückschluss auf natürliche Sprache) spezialisiert wird. Bei dieser Aufgabe bekommt
|
11 |
+
das Modell zwei Texte vorgelegt und muss lernen, in welchem Verhältnis die beiden Texte zueinanderstehen.
|
12 |
+
Folgende Klassen stehen dabei zur Auswahl:
|
13 |
+
|
14 |
+
Entailment: Text A ist eine logische Schlussfolgerung von Text B
|
15 |
+
|
16 |
+
Contradiction: Text A steht im Widerspruch zu Text B
|
17 |
+
|
18 |
+
Neutral: es lassen sich keine Schlussfolgerungen dieser Art ziehen
|
19 |
+
</br>
|
20 |
+
Nehmen wir als Beispiel den Ausgangstext «Die Kinder lächeln und winken in die Kamera». Nach der Spezialisierung
|
21 |
+
sollte das Modell in der Lage sein zu sagen, dass die Aussage «Es sind Kinder anwesend.» eine logische
|
22 |
+
Schlussfolgerung des Ausgangstextes ist, während die Aussage «Die Kinder runzeln die Stirn.» im Widerspruch
|
23 |
+
zum Ausgangstext steht.
|
24 |
+
</br>
|
25 |
+
Es hat sich gezeigt, dass Modelle, die auf Natural Language Inference spezialisiert wurden, auch sehr gut darin sind,
|
26 |
+
Texten thematisch passende Labels zuzuordnen. Wenn wir wieder den Ausgangstext von vorhin nehmen, wäre das Modell in
|
27 |
+
der Lage zu sagen, dass von den möglichen Kandidatenlabels [Wirtschaft, Familie, Feier, Tragödie] Familie und Feier
|
28 |
+
diejenigen Labels sind, die den Inhalt des Textes am besten beschreiben.</br></br>Das hier verwendete Beispielmodell
|
29 |
+
wurde auf deutschsprachige Texte trainiert.
|
30 |
+
examples:
|
31 |
+
-
|
32 |
+
- >
|
33 |
+
COVID-19 (Akronym von englisch coronavirus disease 2019, deutsch Coronavirus-Krankheit-2019), in den
|
34 |
+
deutschsprachigen Ländern umgangssprachlich meist nur als „Corona“ oder „Covid“ bezeichnet, ist eine
|
35 |
+
meldepflichtige Infektionskrankheit mit einem breiten aber unspezifischen Symptomspektrum, die durch eine
|
36 |
+
Infektion (Ansteckung) mit dem Betacoronavirus SARS-CoV-2 verursacht wird. Das Virus wurde erstmals im
|
37 |
+
Dezember 2019 in Wuhan (Volksrepublik China) beschrieben. Es verbreitete sich sehr schnell weltweit und ist
|
38 |
+
Ursache der COVID-19-Pandemie. Bis 18. Oktober 2022 wurden weltweit rund 622 Millionen COVID-Infizierte registriert,
|
39 |
+
es wird aber in vielen Ländern eine hohe Dunkelziffer vermutet. Laut einer Schätzung der Weltgesundheitsorganisation
|
40 |
+
(WHO) gab es zwischen Anfang 2020 und Ende 2021 eine weltweite, durch COVID-19 verursachte Übersterblichkeit von
|
41 |
+
14,83 Millionen Toten.
|
42 |
+
-
|
43 |
+
- Wirtschaft
|
44 |
+
- Familie
|
45 |
+
- Politik
|
46 |
+
- Finanzen
|
47 |
+
- Medizin
|
48 |
+
- Gesundheit
|
49 |
+
- True
|
resources/markdown/einführung.md
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Grundsätzlich sind Sprachmodelle nichts als statistische Modelle, welche die menschliche Sprache abbilden. Sie werden zunächst mit sehr zahlreichen Texten auf gewisse, sehr allgemeine Aufgaben "vortrainiert", wodurch sie die Grundstruktur der Sprache erlernen können. Solche allgemeinen Modelle werden "Foundation Models" genannt.
|
2 |
+
|
3 |
+
#### GPT als Beispiel für ein Foundation Model
|
4 |
+
Eine solche Aufgabe ist es zum Beispiel, das nächste Wort in einem Text vorauszusagen. Um dies lösen zu können, braucht ein Modell einerseits ein Verständnis für Grammatik. Anderseits muss es aber auch lernen, welche Wörter in einem Kontext gemeinsam vorkommen, um stets das richtige Wort voraussagen zu können. Ein Beispiel für ein solches Modell ist GPT-2, welches Sie in der nachfolgenden Demo ausprobieren können. Die vortrainierten Sprachmodelle haben also bereits ein Verständnis für Sprache und bilden daher die Basis für zahlreiche Anwendungen.
|
5 |
+
|
6 |
+
#### Anwendung von Foundation Models
|
7 |
+
Die Anwendung von Foundation Models kann grob in zwei Kategorien unterteilt werden: Bei der **Zero-Shot Anwendung** wird das Modell direkt dafür verwendet, um eine Aufgabe zu lösen. Wir können hierfür einfach ein Modell etwas fragen, und das Modell die Antwort generieren lassen - so wie wir es beispielsweise bei der Verwendung von ChatGPT tun. Beim **Finetuning** wird das Modell hingegen anhand von weiteren Beispielen auf eine ganz bestimmte Anwendung spezialisiert. Dies führt oft noch zu besseren Resultaten als die Zero-Shot-Verwendung, allerdings erfordert die Spezialisierung Beispieldaten für die Aufgabe und ist mit grösserem technischem Aufwand verbunden.
|
8 |
+
|
9 |
+
#### Modellgrösse
|
10 |
+
Die Qualität des Sprachmodells hängt stark von der Grösse des Modells und des Datensatzes ab. Während die Technologien hinter ChatGPT bereits weitestgehend bekannt waren, ist das einzige Geheimnis hinter den verblüffenden Resultaten die Modellgrösse: Das Modell hat 175 Milliarden Parameter und wurde auf über 8 Milliarden Textdokumenten trainiert. Dadurch konnte es ein so gutes Verständnis für Sprache und das Erkennen von thematischen Kontexten erlangen, dass man das Gefühl hat, man interagiere mit einem anderen Menschen.
|
11 |
+
|
12 |
+
#### Über diese Demoseite
|
13 |
+
Mit dieser Demoseite wollen wir eine Intuition für verschiedene Anwendungsmöglichkeiten von Foundation Models vermitteln. In den Reiter "GPT2" und "Legal" kann direkt mit Foundation Models interagiert werden. "Question Answering", "Text-Zusammenfassung" und "Named Entity Recognition" sind beispiele für Modelle, welche mittels Finetuning spezialisiert wurden. Im "Zero-Shot Interface" ist schliesslich ein Beispiel für eine Zero-Shot Verwendung aufgezeigt.
|
14 |
+
|
15 |
+
Die Demoseite wurde am Institut für Public Sector Transformation der Berner Fachhochschule entwickelt.
|
resources/pages/intro.yml
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: Einführung
|
2 |
+
content:
|
3 |
+
- markdown/einführung.md
|
4 |
+
- interfaces/gpt2_interface.yml
|
resources/tabs/app_tab.yml
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: NLP Demo-Seite
|
2 |
+
dependencies:
|
3 |
+
- markdown/einführung.md
|
4 |
+
- interfaces/gpt2_interface.yml
|
5 |
+
- tabs/legal_tab.yml
|
6 |
+
# - interfaces/qa_interface.yml
|
7 |
+
# - interfaces/summarization_interface.yml
|
8 |
+
- interfaces/ner_interface.yml
|
9 |
+
- interfaces/zero_shot_interface.yml
|
resources/tabs/legal_tab.yml
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: Legal # will be used as tab title
|
2 |
+
dependencies:
|
3 |
+
- interfaces/legal_german_roberta_interface.yml
|
4 |
+
- interfaces/gbert_interface.yml
|
resources/templates/template_interface.yml
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: Some Title # will be used as tab title and for the link.
|
2 |
+
name: huggingface/deepset/gelectra-large-germanquad # path to model
|
3 |
+
description: > # Adding > here allows multiline strings
|
4 |
+
This
|
5 |
+
is
|
6 |
+
a
|
7 |
+
string
|
8 |
+
accross
|
9 |
+
multiple
|
10 |
+
lines
|
11 |
+
examples:
|
12 |
+
# This is how we can do nested lists
|
13 |
+
- # First example
|
14 |
+
- Foo
|
15 |
+
- Bar
|
16 |
+
- # Second example
|
17 |
+
- >
|
18 |
+
Hello
|
19 |
+
world
|
20 |
+
- Hello who?
|
resources/templates/template_tab.yml
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
title: Some Title # will be used as tab title
|
2 |
+
dependencies:
|
3 |
+
- templates/template_interface.yaml # provide all dependant interfaces as a list
|
src/nlp_circle_demo/__pycache__/bfh_theme.cpython-310.pyc
ADDED
Binary file (1.06 kB). View file
|
|
src/nlp_circle_demo/__pycache__/interface.cpython-310.pyc
ADDED
Binary file (3.6 kB). View file
|
|
src/nlp_circle_demo/wrapped_gradio_objects.py
ADDED
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import yaml
|
3 |
+
import os
|
4 |
+
|
5 |
+
bfh_blue = gr.themes.utils.colors.Color(
|
6 |
+
c50="#edf0f2",
|
7 |
+
c100="#dbe0e5",
|
8 |
+
c200="#b7c1cb",
|
9 |
+
c300="#93a2b1",
|
10 |
+
c400="#6f8397",
|
11 |
+
c500="#4b647d",
|
12 |
+
c600="#3c5064",
|
13 |
+
c700="#2d3c4b",
|
14 |
+
c800="#1e2832",
|
15 |
+
c900="#0f1419",
|
16 |
+
c950="#070a0c",
|
17 |
+
name="bfh_blue",
|
18 |
+
)
|
19 |
+
|
20 |
+
bfh_yellow = gr.themes.colors.Color(
|
21 |
+
c50="#fff9e6",
|
22 |
+
c100="#fef3cc",
|
23 |
+
c200="#fde799",
|
24 |
+
c300="#fcdb66",
|
25 |
+
c400="#fbcf33",
|
26 |
+
c500="#fac300",
|
27 |
+
c600="#c89c00",
|
28 |
+
c700="#967500",
|
29 |
+
c800="#644e00",
|
30 |
+
c900="#322700",
|
31 |
+
c950="#191300",
|
32 |
+
name="bfh_yellow",
|
33 |
+
)
|
34 |
+
|
35 |
+
|
36 |
+
class BFHTheme(gr.themes.Base):
|
37 |
+
def __init__(
|
38 |
+
self,
|
39 |
+
):
|
40 |
+
super().__init__(
|
41 |
+
primary_hue=bfh_blue,
|
42 |
+
secondary_hue=bfh_yellow,
|
43 |
+
)
|
44 |
+
|
45 |
+
|
46 |
+
class WrappedGradioObject:
|
47 |
+
def __init__(self, title, gradio_element):
|
48 |
+
self.title = title
|
49 |
+
self.gradio_element = gradio_element
|
50 |
+
|
51 |
+
def launch(self):
|
52 |
+
return self.gradio_element.launch()
|
53 |
+
|
54 |
+
@staticmethod
|
55 |
+
def read_yaml(path):
|
56 |
+
with open(path) as f:
|
57 |
+
return yaml.safe_load(f)
|
58 |
+
|
59 |
+
@staticmethod
|
60 |
+
def read_file(path):
|
61 |
+
with open(path) as f:
|
62 |
+
return f.read()
|
63 |
+
|
64 |
+
|
65 |
+
class GradioInterfaceWrapper(WrappedGradioObject):
|
66 |
+
@classmethod
|
67 |
+
def from_yaml(cls, path):
|
68 |
+
"""Initializes Interface from YAML file."""
|
69 |
+
content_dict = cls.read_yaml(path)
|
70 |
+
return cls.create_interface(**content_dict)
|
71 |
+
|
72 |
+
@classmethod
|
73 |
+
def create_interface(cls, name, title, description, examples=None):
|
74 |
+
"""Creates Gradio-Element containing an interface."""
|
75 |
+
description = cls._prepend_link_to_description(name, title, description)
|
76 |
+
interface = gr.load(
|
77 |
+
name,
|
78 |
+
title=None, # Having the Tab-Name is sufficient.
|
79 |
+
description=description,
|
80 |
+
examples=examples,
|
81 |
+
)
|
82 |
+
return cls(title, interface)
|
83 |
+
|
84 |
+
@staticmethod
|
85 |
+
def _prepend_link_to_description(name, title, description):
|
86 |
+
without_huggingface = name.removeprefix("huggingface/")
|
87 |
+
link = f"https://huggingface.co/{without_huggingface}"
|
88 |
+
return f'<a href="{link}">{title}</a> </br> {description}'
|
89 |
+
|
90 |
+
|
91 |
+
class GradioTabWrapper(WrappedGradioObject):
|
92 |
+
@classmethod
|
93 |
+
def from_gradio_object_list(cls, title, gradio_objects):
|
94 |
+
"""Constructs a GradioTabWrapper from a title and a list of WrappedGradioObjects."""
|
95 |
+
interface = gr.TabbedInterface(
|
96 |
+
[obj.gradio_element for obj in gradio_objects],
|
97 |
+
[obj.title for obj in gradio_objects],
|
98 |
+
theme=BFHTheme(),
|
99 |
+
)
|
100 |
+
return cls(title, interface)
|
101 |
+
|
102 |
+
@classmethod
|
103 |
+
def from_yaml(cls, path):
|
104 |
+
content_dict = cls.read_yaml(path)
|
105 |
+
gradio_objects = [
|
106 |
+
cls._read_dependency(dependency)
|
107 |
+
for dependency in content_dict["dependencies"]
|
108 |
+
]
|
109 |
+
return cls.from_gradio_object_list(
|
110 |
+
content_dict["title"],
|
111 |
+
gradio_objects,
|
112 |
+
)
|
113 |
+
|
114 |
+
@staticmethod
|
115 |
+
def _read_dependency(path):
|
116 |
+
full_path = f"resources/{path}"
|
117 |
+
if path.startswith("interfaces"):
|
118 |
+
return GradioInterfaceWrapper.from_yaml(full_path)
|
119 |
+
if path.startswith("tabs"):
|
120 |
+
return GradioTabWrapper.from_yaml(full_path)
|
121 |
+
if path.startswith("markdown"):
|
122 |
+
return GradioMarkdownWrapper.from_markdown(full_path)
|
123 |
+
raise ValueError(
|
124 |
+
"Gradio Object Type could not be inferred from path name. Make sure "
|
125 |
+
"that all interface object yamls are in resources/interfaces, "
|
126 |
+
"all tab object yamls are in resources/tabs, and all markdown objects "
|
127 |
+
"are in resources/markdown."
|
128 |
+
)
|
129 |
+
|
130 |
+
|
131 |
+
class GradioMarkdownWrapper(WrappedGradioObject):
|
132 |
+
@classmethod
|
133 |
+
def from_markdown(cls, path):
|
134 |
+
"""Creates text from markdown. The title is inferred from the file name."""
|
135 |
+
content = cls.read_file(path)
|
136 |
+
title = cls.title_from_path(path)
|
137 |
+
return cls(title, gr.Markdown(content))
|
138 |
+
|
139 |
+
@staticmethod
|
140 |
+
def title_from_path(path):
|
141 |
+
_, last = os.path.split(path)
|
142 |
+
name, _ = os.path.splitext(last)
|
143 |
+
return name.capitalize()
|