Rahul Sharma commited on
Commit
ac28b61
·
verified ·
1 Parent(s): 1c2abe8

create app.py

Browse files
Files changed (1) hide show
  1. app.py +225 -0
app.py ADDED
@@ -0,0 +1,225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import requests
3
+ from bs4 import BeautifulSoup
4
+ from sentence_transformers import SentenceTransformer, util
5
+ from itertools import combinations
6
+ import numpy as np
7
+
8
+ # Load an embedding model
9
+ model = SentenceTransformer('mixedbread-ai/deepset-mxbai-embed-de-large-v1')
10
+
11
+ # Ideal answer for comparison
12
+ ideal_answer = """
13
+ Das Weihnachtsfest in Deutschland ist geprägt von einer Vielzahl an Bräuchen, Symbolen und Traditionen, die regional unterschiedliche Ausprägungen haben.
14
+ Neben allgemeinen, landesweiten Traditionen existieren in den einzelnen Regionen eigene Bräuche, die das Weihnachtsfest besonders machen.
15
+
16
+ Allgemeine Bräuche und Symbole
17
+ Zu den bekanntesten Symbolen und Bräuchen, die landesweit verbreitet sind, zählen der Adventskranz, der Weihnachtsbaum, der Nikolaustag, der Weihnachtsmarkt sowie bestimmte kulinarische Spezialitäten.
18
+ Diese Traditionen schaffen eine festliche Atmosphäre und symbolisieren für viele Deutsche die Weihnachtszeit.
19
+
20
+ Advent und Adventskranz: Der Advent, die Vorbereitungszeit auf Weihnachten, beginnt am vierten Sonntag vor Weihnachten.
21
+ In dieser Zeit wird oft ein Adventskranz mit vier Kerzen aufgestellt, von denen jeden Sonntag eine weitere angezündet wird.
22
+ Dieser Brauch ist besonders im ganzen Land verbreitet und symbolisiert die wachsende Vorfreude auf das Fest.
23
+
24
+ Weihnachtsbaum: Der Weihnachtsbaum ist das zentrale Symbol des Weihnachtsfestes in Deutschland.
25
+ Meistens wird er am Heiligen Abend aufgestellt und mit Kerzen, Kugeln und manchmal auch selbstgebasteltem Schmuck dekoriert.
26
+ Der Brauch stammt ursprünglich aus dem Elsass und verbreitete sich im 19. Jahrhundert über ganz Deutschland.
27
+
28
+ Nikolaustag: Am 6. Dezember wird der Nikolaustag gefeiert. Kinder stellen am Abend vorher ihre Stiefel vor die Tür, die über Nacht vom „Nikolaus“ mit Süßigkeiten und kleinen Geschenken gefüllt werden.
29
+ Dieser Brauch ist in vielen Regionen verbreitet, zeigt jedoch in einigen Gebieten, besonders in Süddeutschland, Abweichungen, da dort oft der „Knecht Ruprecht“ oder „Krampus“ den Nikolaus begleitet.
30
+
31
+ Weihnachtsmärkte: Weihnachtsmärkte sind in Deutschland besonders beliebt und gehören zur Adventszeit.
32
+ Sie bieten regionale Spezialitäten, Weihnachtsdekoration und handgemachte Geschenke. Bekannte Weihnachtsmärkte gibt es in Städten wie Nürnberg, Dresden und München.
33
+ Diese Märkte variieren in ihrem Angebot und Charakter je nach Region, was besonders für Touristen attraktiv ist.
34
+
35
+ Weihnachtsessen: Traditionell wird am Heiligen Abend oft eine einfache Mahlzeit wie Kartoffelsalat mit Würstchen serviert, während das Festessen am ersten Weihnachtstag stattfindet.
36
+ Gänsebraten, Rotkohl und Klöße sind typische Speisen für das Weihnachtsessen. Auch hier gibt es regionale Unterschiede: Im Süden Deutschlands werden oft Bratwürste serviert, während im Norden Fischgerichte beliebter sind.
37
+
38
+ Regionale Unterschiede
39
+ Die regionalen Unterschiede beim Weihnachtsfest in Deutschland zeigen sich nicht nur in der Art der Bräuche, sondern auch in speziellen Traditionen:
40
+
41
+ Bayern und der Alpenraum: In Bayern und im Alpenraum gibt es besonders reichhaltige Bräuche. Hier ist das „Krippenspiel“ weit verbreitet, bei dem die Geburt Jesu in einem kleinen Theaterstück nachgestellt wird.
42
+ In vielen Dörfern und Städten findet auch das „Christkindl-Anschießen“ statt, bei dem Schützenvereine am Heiligen Abend Böllerschüsse abfeuern, um das Christkind willkommen zu heißen.
43
+
44
+ Norddeutschland: In Norddeutschland sind Weihnachtslieder und das Singen von Shanties, also traditionellen Seemannsliedern, häufig Teil der Festlichkeiten.
45
+ Auch die Dekoration unterscheidet sich leicht, mit einem stärkeren Fokus auf maritime Symbole. Der Weihnachtsmann braven Kindern am Heiligen Abend Geschenke.
46
+
47
+ Sachsen und das Erzgebirge: Sachsen, insbesondere das Erzgebirge, ist bekannt für seinen reich verzierten Weihnachtsschmuck und das Kunsthandwerk.
48
+ Schwibbögen, Räuchermännchen und Nussknacker sind Symbole dieser Region und stammen ursprünglich aus der Bergbaugeschichte des Erzgebirges, in der Licht eine besondere Rolle spielte.
49
+
50
+ Rheinland: Im Rheinland ist die Tradition des Sternsingens weit verbreitet. Kinder ziehen als „Heilige Drei Könige“ verkleidet von Haus zu Haus und singen Lieder, um Spenden für wohltätige Zwecke zu sammeln.
51
+ Diese Tradition wird zwar auch in anderen Teilen Deutschlands gepflegt, hat jedoch im Rheinland eine besonders lange Geschichte.
52
+ """
53
+
54
+ def fetch_wikipedia_content(url):
55
+ try:
56
+ response = requests.get(url)
57
+ soup = BeautifulSoup(response.text, 'html.parser')
58
+ paragraphs = soup.find_all('p')
59
+ content = ' '.join([para.text for para in paragraphs])
60
+ return content
61
+ except Exception as e:
62
+ st.error(f"Error fetching article: {e}")
63
+ return None
64
+
65
+ def evaluate_contexts(student_texts):
66
+ ideal_embedding = model.encode(ideal_answer, convert_to_tensor=True)
67
+ scores = {"relevance": [], "completeness": 0, "depth": [], "regional_completeness": None}
68
+
69
+ # Define keywords and region-specific terms
70
+ keywords = ["Advent", "Adventskranz", "Weihnachtsbaum", "Nikolaus", "Weihnachtsmarkt", "Weihnachtsessen",
71
+ "Weihnachtslieder", "Weihnachtsschmuck", "Krippenspiel", "Weihnachtsgebäck", "Bescherung", "Wichteln"]
72
+ region_keywords = {
73
+ "Süddeutschland": ["Christkind", "Krampus", "Böllerschüsse"],
74
+ "Norddeutschland": ["Weihnachtsmann", "Weihnachtslieder"],
75
+ "Ostdeutschland": ["Schwibbogen", "Weihnachtspyramide", "Nussknacker"],
76
+ "Westdeutschland": ["Sternsingen", "Adventskalender"]
77
+ }
78
+
79
+ all_found_keywords = set()
80
+ regional_keyword_coverage = {region: 0 for region in region_keywords}
81
+ combined_text = " ".join(student_texts)
82
+
83
+ for text in student_texts:
84
+ student_embedding = model.encode(text, convert_to_tensor=True)
85
+ relevance_score = util.cos_sim(student_embedding, ideal_embedding).item()
86
+ scores["relevance"].append(relevance_score)
87
+
88
+ found_keywords = [keyword for keyword in keywords if keyword in text]
89
+ unique_keyword_count = len(set(found_keywords))
90
+ all_found_keywords.update(found_keywords)
91
+
92
+ # Calculate overall scores
93
+ scores["relevance"] = np.mean(scores["relevance"])
94
+ scores["completeness"] = len(all_found_keywords) / len(keywords)
95
+ scores["depth"] = np.mean(scores["depth"])
96
+
97
+ # Regional completeness: Check for region-specific keyword coverage
98
+ for region, words in region_keywords.items():
99
+ regional_coverage = sum(1 for keyword in words if keyword in combined_text) / len(words)
100
+ regional_keyword_coverage[region] = regional_coverage
101
+
102
+ total_regional_keywords_found = sum(1 for region in region_keywords if any(keyword in combined_text for keyword in region_keywords[region]))
103
+ total_regional_keywords = sum(len(words) for words in region_keywords.values())
104
+
105
+ scores["regional_completeness"] = np.mean(list(regional_keyword_coverage.values()))
106
+
107
+ return scores
108
+
109
+ # Streamlit UI
110
+ st.title("🎄 Weihnachts-Traditionen: Kontextbewertung für KI")
111
+
112
+ st.markdown("""
113
+ <style>
114
+ .description-section {
115
+ padding: 20px;
116
+ border-radius: 5px;
117
+ }
118
+ </style>
119
+ """, unsafe_allow_html=True)
120
+
121
+ st.markdown(
122
+ """
123
+ <div class="description-section">
124
+ <h2>📝 Aufgabe und Hintergrund</h2>
125
+ <p>In dieser Übung lernst du, wie du Informationen effektiv auswählst und auswertest, um eine abgerundete Antwort für ein KI-Modell zu erstellen.
126
+ Diese Aufgabe hilft dir, die wichtigsten Informationsquellen zu einem Thema zu finden, und vertieft dein Verständnis dafür, wie du einer KI einen Kontext geben kannst, um bessere und relevantere Antworten zu erhalten.</p>
127
+
128
+ <h3>🎄 Der Kontext der Weihnachtsfrage:</h3>
129
+ <p>Weihnachten wird in Deutschland mit vielen Traditionen gefeiert, von denen einige allgemein bekannt und andere regionalspezifisch sind.
130
+ Indem du recherchierst und relevante Inhalte auswählst, hilfst du der KI, eine Antwort zu formulieren, die den Charakter und die Vielfalt von Weihnachten in Deutschland einfängt.</p>
131
+
132
+ <h3>🎯 Ziel der Aufgabe:</h3>
133
+ <p>Die Aufgabe besteht darin, verschiedene Suchstrategien auszuprobieren und Links zu Wikipedia-Artikeln zu sammeln, die die folgende Frage optimal beantworten:</p>
134
+ <blockquote><strong>„Welche unterschiedlichen Bräuche, Symbole und Traditionen prägen das Weihnachtsfest in Deutschland, und welche regionalen Unterschiede gibt es dabei?“</strong></blockquote>
135
+
136
+ <h3>🔍 Schritt-für-Schritt-Anleitung:</h3>
137
+ <ol>
138
+ <li>Beginne mit einer einfachen Suchanfrage auf Wikipedia (z.B. site:de.wikipedia.org Weihnachten).</li>
139
+ <li>Um spezifischere Artikel zu finden, nutze präzise Suchtechniken wie:
140
+ <ul>
141
+ <li><strong>Schlüsselwörter:</strong> Mach die Suchanfrage spezifischer oder allgemeiner.</li>
142
+ <li><strong>Exakte Übereinstimmungen:</strong> Nutze Anführungszeichen für exakte Phrasen (z.B. „Weihnachtsbräuche in Norddeutschand“).</li>
143
+ <li><strong>Textsuche:</strong> Suche nach Artikeln, die den Begriff im Text enthalten (z.B. intext: Weihnachten).</li>
144
+ <li><strong>Artikelanzahl begrenzen:</strong> Konzentriere dich auf die besten Ergebnisse.</li>
145
+ </ul>
146
+ </li>
147
+ </ol>
148
+
149
+ <h3>📋 Kriterien für die Bewertung:</h3>
150
+ <p>Nachdem du bis zu 8 Wikipedia-Links eingegeben hast, wird die Anwendung die Artikel anhand dieser Kriterien bewerten:</p>
151
+ <ul>
152
+ <li><strong>Relevanz:</strong> Passt der Artikelinhalt gut zur Frage?</li>
153
+ <li><strong>Vollständigkeit:</strong> Werden alle wichtigen Begriffe erwähnt?</li>
154
+ <li><strong>Regionale Abdeckung:</strong> Werden regionale Unterschiede beschrieben?</li>
155
+ </ul>
156
+
157
+ <h3>🎓 Warum ist dies wichtig?</h3>
158
+ <p>Diese Aufgabe veranschaulicht, wie du eine künstliche Intelligenz unterstützen kannst, indem du sorgfältig ausgewählte Informationen bereitstellst, um eine detaillierte Antwort zu erstellen.
159
+ Du erfährst auch, wie Weihnachten in Deutschland gefeiert wird und bekommst einen Einblick in die einzigartigen regionalen Bräuche.
160
+ Die Auswahl der passenden Quellen ist wichtig, um sich ein vollständiges und genaues Bild von einem Thema zu machen.</p>
161
+ </div>
162
+ """,
163
+ unsafe_allow_html=True
164
+ )
165
+
166
+ st.write("---")
167
+ st.subheader("🔗 Gib die Artikel-Links ein")
168
+
169
+ # Input for Wikipedia links
170
+ num_links = st.number_input("Wie viele Artikel willst du eingeben? (1-8)", min_value=1, max_value=8, value=1)
171
+ urls = []
172
+ for i in range(num_links):
173
+ url = st.text_input(f"Link zu Artikel {i + 1}", placeholder="Wikipedia URL")
174
+ urls.append(url)
175
+
176
+ if st.button("Bewertung durchführen"):
177
+ student_texts = []
178
+
179
+ # Fetch and process content from each URL
180
+ for url in urls:
181
+ if url:
182
+ content = fetch_wikipedia_content(url)
183
+ if content:
184
+ student_texts.append(content)
185
+
186
+ if len(student_texts) >= 1:
187
+ scores = evaluate_contexts(student_texts)
188
+
189
+ # Display scores and explanations
190
+ st.write("---")
191
+ st.subheader("📊 Bewertungsergebnisse")
192
+ st.write(f"**Relevanz:** {scores['relevance']:.2f} - Übereinstimmung der Inhalte mit der Fragestellung.")
193
+ st.write(f"**Vollständigkeit:** {scores['completeness']:.2f} - Abdeckung aller wichtigen Schlüsselbegriffe.")
194
+ st.write(f"**Regionale Abdeckung:** {scores['regional_completeness']:.2f} - Traditionen aus verschiedenen Regionen abgedeckt.")
195
+
196
+ # Detailed feedback
197
+ feedback = []
198
+ if scores["relevance"] > 0.8:
199
+ feedback.append("Hohe Relevanz der gefundenen Artikel")
200
+ if scores["relevance"] > 0.6 and scores["relevance"] <= 0.8:
201
+ feedback.append("Die Relevanz der gefundenen Artikel ist bereits gut aber könnte noch verbessert werden")
202
+ if scores["relevance"] <=0.6:
203
+ feedback.append("Die Relevanz der gefundenen Artikel ist nicht hoch und muss verbessert werden.")
204
+ if scores["completeness"] > 0.8:
205
+ feedback.append("Hohe Vollständigkeit der gefundenen Artikel")
206
+ if scores["completeness"] > 0.5 and scores["completeness"] <= 0.8:
207
+ feedback.append("Die Vollständigkeit ist bereits hoch aber einige wichtige Begriffe fehlen noch.")
208
+ if scores["completeness"] <= 0.5:
209
+ feedback.append("Die Vollständigkeit gering; wichtige Begriffe fehlen.")
210
+ if scores["regional_completeness"] > 0.7:
211
+ feedback.append("Regionale Unterschiede sind ausreichend abgedeckt.")
212
+ if scores["regional_completeness"] > 0.5 and scores["regional_completeness"] <= 0.7:
213
+ feedback.append("Regionale Unterschiede sind bereits gut abgedeckt aber könntent noch verbessert werden.")
214
+ if scores["regional_completeness"] <= 0.5:
215
+ feedback.append("Regionale Unterschiede sind nicht ausreichend abgedeckt.")
216
+
217
+ if feedback:
218
+ st.write("---")
219
+ st.subheader("🔍 Feedback")
220
+ for item in feedback:
221
+ st.write("- " + item)
222
+ if scores["relevance"] > 0.8 and scores["completeness"] > 0.8 and scores["regional_completeness"] > 0.7:
223
+ st.write("🎉 Die Auswahl der Artikel ist sehr gut!")
224
+ else:
225
+ st.error("Bitte gib einen Link zu Wikipedia-Artikeln ein.")