File size: 9,310 Bytes
ac28b61 aadc235 ac28b61 185459e 6c24ba1 1c1cc62 ac28b61 aadc235 ac28b61 aadc235 ac28b61 031a2c1 ac28b61 031a2c1 ac28b61 031a2c1 ac28b61 031a2c1 ac28b61 031a2c1 ac28b61 031a2c1 ac28b61 031a2c1 ac28b61 031a2c1 ac28b61 031a2c1 ac28b61 |
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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
import streamlit as st
import requests
from bs4 import BeautifulSoup
from sentence_transformers import SentenceTransformer, util
from itertools import combinations
import numpy as np
import torch
import json
import os
import sys
# Load an embedding model
model = SentenceTransformer('mixedbread-ai/deepset-mxbai-embed-de-large-v1')
ideal_embedding = torch.load("ideal_embedding.pt", weights_only=True, map_location=torch.device("cpu"))
keywords = json.loads(os.getenv('KEYWORDS'))
region_keywords = json.loads(os.getenv('REGION_KEYWORDS'))
max_relevance = float(os.getenv("MAX_RELEVANCE"))
min_relevance = float(os.getenv("MIN_RELEVANCE"))
max_completeness = float(os.getenv("MAX_COMPLETENESS"))
min_completeness = float(os.getenv("MIN_COMPLETENESS"))
max_regional_completeness = float(os.getenv("MAX_REGIONAL_COMPLETENESS"))
min_regional_completeness = float(os.getenv("MIN_REGIONAL_COMPLETENESS"))
def fetch_wikipedia_content(url):
try:
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
paragraphs = soup.find_all('p')
content = ' '.join([para.text for para in paragraphs])
return content
except Exception as e:
st.error(f"Error fetching article: {e}")
return None
def evaluate_contexts(student_texts):
scores = {"relevance": [], "completeness": 0, "depth": [], "regional_completeness": None}
all_found_keywords = set()
regional_keyword_coverage = {region: 0 for region in region_keywords}
combined_text = " ".join(student_texts)
for text in student_texts:
student_embedding = model.encode(text, convert_to_tensor=True)
relevance_score = util.cos_sim(student_embedding, ideal_embedding).item()
scores["relevance"].append(relevance_score)
found_keywords = [keyword for keyword in keywords if keyword in text]
unique_keyword_count = len(set(found_keywords))
all_found_keywords.update(found_keywords)
# Calculate overall scores
scores["relevance"] = np.mean(scores["relevance"])
scores["completeness"] = len(all_found_keywords) / len(keywords)
scores["depth"] = np.mean(scores["depth"])
# Regional completeness: Check for region-specific keyword coverage
for region, words in region_keywords.items():
regional_coverage = sum(1 for keyword in words if keyword in combined_text) / len(words)
regional_keyword_coverage[region] = regional_coverage
total_regional_keywords_found = sum(1 for region in region_keywords if any(keyword in combined_text for keyword in region_keywords[region]))
total_regional_keywords = sum(len(words) for words in region_keywords.values())
scores["regional_completeness"] = np.mean(list(regional_keyword_coverage.values()))
return scores
# Streamlit UI
st.title("🎄 Weihnachts-Traditionen: Kontextbewertung für KI")
st.markdown("""
<style>
.description-section {
padding: 20px;
border-radius: 5px;
}
</style>
""", unsafe_allow_html=True)
st.markdown(
"""
<div class="description-section">
<h2>📝 Hintergrund</h2>
<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.
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>
<h3>🎄 Der Kontext der Weihnachtsfrage:</h3>
<p>Weihnachten wird in Deutschland mit vielen Traditionen gefeiert, von denen einige allgemein bekannt und andere regionalspezifisch sind.
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>
<h3>🎯 Ziel der Aufgabe:</h3>
<p>Die Aufgabe besteht darin, verschiedene Suchstrategien auszuprobieren und Links zu Wikipedia-Artikeln zu sammeln, die die folgende Frage optimal beantworten:</p>
<blockquote><strong>„Welche unterschiedlichen Bräuche, Symbole und Traditionen prägen das Weihnachtsfest in Deutschland, und welche regionalen Unterschiede gibt es dabei?“</strong></blockquote>
<h3>🔍 Schritt-für-Schritt-Anleitung:</h3>
<ol>
<li>Beginne mit einer einfachen Suchanfrage auf <a href="https://de.wikipedia.org">Wikipedia</a> (z.B. Weihnachten).</li>
<li>Um spezifischere Artikel zu finden, nutze präzise Suchtechniken wie:
<ul>
<li><strong>Schlüsselwörter:</strong> Mach die Suchanfrage spezifischer oder allgemeiner.</li>
<li><strong>Exakte Übereinstimmungen:</strong> Nutze Anführungszeichen für exakte Phrasen (z.B. „Weihnachtsbräuche in Norddeutschand“).</li>
<li><strong>Textsuche:</strong> Suche nach Artikeln, die den Begriff im Text enthalten (z.B. intext: Weihnachten).</li>
<li><strong>Artikelanzahl begrenzen:</strong> Konzentriere dich auf die besten Ergebnisse.</li>
</ul>
</li>
</ol>
<h3>📋 Kriterien für die Bewertung:</h3>
<p>Nachdem du bis zu 8 Wikipedia-Links eingegeben hast, wird die Anwendung die Artikel anhand dieser Kriterien bewerten:</p>
<ul>
<li><strong>Relevanz:</strong> Passt der Artikelinhalt gut zur Frage?</li>
<li><strong>Vollständigkeit:</strong> Werden alle wichtigen Begriffe erwähnt?</li>
<li><strong>Regionale Abdeckung:</strong> Werden regionale Unterschiede beschrieben?</li>
</ul>
<h3>🎓 Warum ist dies wichtig?</h3>
<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.
Du erfährst auch, wie Weihnachten in Deutschland gefeiert wird und bekommst einen Einblick in die einzigartigen regionalen Bräuche.
Die Auswahl der passenden Quellen ist wichtig, um sich ein vollständiges und genaues Bild von einem Thema zu machen.</p>
</div>
""",
unsafe_allow_html=True
)
st.write("---")
st.subheader("🔗 Gib die Artikel-Links ein")
# Input for Wikipedia links
num_links = st.number_input("Wie viele Artikel willst du eingeben? (1-8)", min_value=1, max_value=8, value=1)
urls = []
for i in range(num_links):
url = st.text_input(f"Link zu Artikel {i + 1}", placeholder="Wikipedia URL")
urls.append(url)
if st.button("Bewertung durchführen"):
student_texts = []
# Fetch and process content from each URL
for url in urls:
if url:
content = fetch_wikipedia_content(url)
if content:
student_texts.append(content)
if len(student_texts) >= 1:
scores = evaluate_contexts(student_texts)
# Display scores and explanations
st.write("---")
st.subheader("📊 Bewertungsergebnisse")
st.write(f"**Relevanz:** {scores['relevance']:.2f} - Übereinstimmung der Inhalte mit der Fragestellung.")
st.write(f"**Vollständigkeit:** {scores['completeness']:.2f} - Abdeckung aller wichtigen Schlüsselbegriffe.")
st.write(f"**Regionale Abdeckung:** {scores['regional_completeness']:.2f} - Traditionen aus verschiedenen Regionen abgedeckt.")
# Detailed feedback
feedback = []
if scores["relevance"] > max_relevance:
feedback.append("Hohe Relevanz der gefundenen Artikel")
if scores["relevance"] > min_relevance and scores["relevance"] <= max_relevance:
feedback.append("Die Relevanz der gefundenen Artikel ist bereits gut aber könnte noch verbessert werden")
if scores["relevance"] <=min_relevance:
feedback.append("Die Relevanz der gefundenen Artikel ist nicht hoch und muss verbessert werden.")
if scores["completeness"] > max_completeness:
feedback.append("Hohe Vollständigkeit der gefundenen Artikel")
if scores["completeness"] > min_completeness and scores["completeness"] <= max_completeness:
feedback.append("Die Vollständigkeit ist bereits hoch aber einige wichtige Begriffe fehlen noch.")
if scores["completeness"] <= min_completeness:
feedback.append("Die Vollständigkeit gering; wichtige Begriffe fehlen.")
if scores["regional_completeness"] > max_regional_completeness:
feedback.append("Regionale Unterschiede sind ausreichend abgedeckt.")
if scores["regional_completeness"] > min_regional_completeness and scores["regional_completeness"] <= max_regional_completeness:
feedback.append("Regionale Unterschiede sind bereits gut abgedeckt aber könntent noch verbessert werden.")
if scores["regional_completeness"] <= min_regional_completeness:
feedback.append("Regionale Unterschiede sind nicht ausreichend abgedeckt.")
if feedback:
st.write("---")
st.subheader("🔍 Feedback")
for item in feedback:
st.write("- " + item)
if scores["relevance"] > 0.8 and scores["completeness"] > 0.8 and scores["regional_completeness"] > 0.7:
st.write("🎉 Die Auswahl der Artikel ist sehr gut!")
else:
st.error("Bitte gib einen Link zu Wikipedia-Artikeln ein.") |