Spaces:
Sleeping
Sleeping
intro-tab (#7)
Browse files- Put Introduction into separate Tab (fac72ad1067c8dc1cfd6c9701921f140a4bd1490)
Co-authored-by: Mättu <[email protected]>
resources/markdown/einführung.md
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# NLP Demo-Seite
|
2 |
+
Spätestens seit der Veröffentlichung von ChatGPT geniessen moderne Sprachmodelle grosse öffentliche Aufmerksamkeit. Allerdings ist es für nicht-Experten schwierig einzuschätzen, inwiefern diese in ihrem Arbeitsumfeld eingesetzt werden könnten. Damit auch sie sich ein Bild von Möglichkeiten und Limitierungen von grossen Sprachmodellen machen können, haben wir diese interaktive Webseite entwickelt.
|
3 |
+
|
4 |
+
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.
|
5 |
+
|
6 |
+
#### GPT als Beispiel für ein Foundation Model
|
7 |
+
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.
|
8 |
+
|
9 |
+
#### Anwendung von Foundation Models
|
10 |
+
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.
|
11 |
+
|
12 |
+
#### Modellgrösse
|
13 |
+
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.
|
14 |
+
|
15 |
+
#### Über diese Demoseite
|
16 |
+
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.
|
17 |
+
|
18 |
+
Die Demoseite wurde am Institut für Public Sector Transformation der Berner Fachhochschule entwickelt.
|
resources/tabs/app_tab.yml
CHANGED
@@ -1,5 +1,6 @@
|
|
1 |
title: NLP Demo-Seite
|
2 |
dependencies:
|
|
|
3 |
- interfaces/gpt2_interface.yml
|
4 |
- tabs/legal_tab.yml
|
5 |
- interfaces/qa_interface.yml
|
|
|
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
|
src/nlp_circle_demo/wrapped_gradio_objects.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1 |
import gradio as gr
|
2 |
import yaml
|
|
|
3 |
|
4 |
|
5 |
class WrappedGradioObject:
|
@@ -15,6 +16,11 @@ class WrappedGradioObject:
|
|
15 |
with open(path) as f:
|
16 |
return yaml.safe_load(f)
|
17 |
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
class GradioInterfaceWrapper(WrappedGradioObject):
|
20 |
@classmethod
|
@@ -71,8 +77,26 @@ class GradioTabWrapper(WrappedGradioObject):
|
|
71 |
return GradioInterfaceWrapper.from_yaml(full_path)
|
72 |
if path.startswith("tabs"):
|
73 |
return GradioTabWrapper.from_yaml(full_path)
|
|
|
|
|
74 |
raise ValueError(
|
75 |
"Gradio Object Type could not be inferred from path name. Make sure "
|
76 |
-
"that all interface object yamls are in resources/interfaces,
|
77 |
-
"all tab object yamls are in resources/tabs
|
|
|
78 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import gradio as gr
|
2 |
import yaml
|
3 |
+
import os
|
4 |
|
5 |
|
6 |
class WrappedGradioObject:
|
|
|
16 |
with open(path) as f:
|
17 |
return yaml.safe_load(f)
|
18 |
|
19 |
+
@staticmethod
|
20 |
+
def read_file(path):
|
21 |
+
with open(path) as f:
|
22 |
+
return f.read()
|
23 |
+
|
24 |
|
25 |
class GradioInterfaceWrapper(WrappedGradioObject):
|
26 |
@classmethod
|
|
|
77 |
return GradioInterfaceWrapper.from_yaml(full_path)
|
78 |
if path.startswith("tabs"):
|
79 |
return GradioTabWrapper.from_yaml(full_path)
|
80 |
+
if path.startswith("markdown"):
|
81 |
+
return GradioMarkdownWrapper.from_markdown(full_path)
|
82 |
raise ValueError(
|
83 |
"Gradio Object Type could not be inferred from path name. Make sure "
|
84 |
+
"that all interface object yamls are in resources/interfaces, "
|
85 |
+
"all tab object yamls are in resources/tabs, and all markdown objects "
|
86 |
+
"are in resources/markdown."
|
87 |
)
|
88 |
+
|
89 |
+
|
90 |
+
class GradioMarkdownWrapper(WrappedGradioObject):
|
91 |
+
@classmethod
|
92 |
+
def from_markdown(cls, path):
|
93 |
+
"""Creates text from markdown. The title is inferred from the file name."""
|
94 |
+
content = cls.read_file(path)
|
95 |
+
title = cls.title_from_path(path)
|
96 |
+
return cls(title, gr.Markdown(content))
|
97 |
+
|
98 |
+
@staticmethod
|
99 |
+
def title_from_path(path):
|
100 |
+
_, last = os.path.split(path)
|
101 |
+
name, _ = os.path.splitext(last)
|
102 |
+
return name.capitalize()
|