neue-Kennzahl-spacy #94

Merged
3019483 merged 21 commits from neue-Kennzahl-spacy into main 2025-06-29 18:23:42 +02:00
Collaborator

Closes #26
Neues spaCy-Training eingebaut:
neues Format für die Trainingsdaten (.json),
neues Trainingsskript
API-Endpunkt im Flask-Controller zum Triggern des Trainings per Button.

Frontend:
„Neu trainieren“-Button eingebaut,
neue kennzahl Form angepasst
Message-Ausgabe bei Erfolg/Misserfolg.

Closes #26 Neues spaCy-Training eingebaut: neues Format für die Trainingsdaten (.json), neues Trainingsskript API-Endpunkt im Flask-Controller zum Triggern des Trainings per Button. Frontend: „Neu trainieren“-Button eingebaut, neue kennzahl Form angepasst Message-Ausgabe bei Erfolg/Misserfolg.
3019483 was assigned by 1924466 2025-06-25 16:55:35 +02:00
1924466 added 5 commits 2025-06-25 16:55:35 +02:00
1924466 added 1 commit 2025-06-25 16:59:37 +02:00

Leider bekomme ich Fehler vom Koordinator beim Erstellen des Containers. Und bei SpaCy gibt es auch Probleme mit einem Import. Beides im Screenshot zu sehen. Ich habe auch alle Container gelöscht, hat aber nix geholfen...

Leider bekomme ich Fehler vom Koordinator beim Erstellen des Containers. Und bei SpaCy gibt es auch Probleme mit einem Import. Beides im Screenshot zu sehen. Ich habe auch alle Container gelöscht, hat aber nix geholfen...
3019483 reviewed 2025-06-25 22:14:53 +02:00
@ -0,0 +101,4 @@
if not entry or "text" not in entry or "entities" not in entry:
return (
jsonify(
{"error": "Ungültiges Format 'text' und 'entities' erforderlich."}

Die Watermarks von ChatGPT löschen/andern zu normalen Zeichen. Sind ein paar im code zu finden.

Die Watermarks von ChatGPT löschen/andern zu normalen Zeichen. Sind ein paar im code zu finden.
1924466 marked this conversation as resolved
@ -0,0 +28,4 @@
nlp.to_disk("output/model-last")
# nlp.to_disk("model/") # Speichert das Modell

Kommentierter Code auch gerne weg. Auch an anderen paar stellen ;)

Kommentierter Code auch gerne weg. Auch an anderen paar stellen ;)
1924466 marked this conversation as resolved
@ -6,2 +6,3 @@
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile
#RUN bun install --frozen-lockfile
RUN bun install

Wieso hast du das geändert? Also scheint keinen Unterschied zu machen, aber interessiert mich, ob das besser ist?

Wieso hast du das geändert? Also scheint keinen Unterschied zu machen, aber interessiert mich, ob das besser ist?
1924466 marked this conversation as resolved
@ -121,0 +182,4 @@
helperText={
!formData.markedValue?.trim()
? "Markierter Begriff ist erforderlich"
: "Nur der Begriff, der im Satz markiert werden soll (z.B. Core/Core+)"

Watermark

Watermark
1924466 marked this conversation as resolved
@ -248,0 +331,4 @@
};
}
// function appendAndDownload(newEntry: any, existing: any[] = []) {

kann weg

kann weg
1924466 marked this conversation as resolved
1924466 added 2 commits 2025-06-27 10:26:01 +02:00
1924466 added 1 commit 2025-06-27 11:42:04 +02:00

Es gibt beim traininer von dem daten die schon drinn waren probleme. Teilweise sind es deine Test daten (die weg mussen) aber auch von Rendite "/usr/local/lib/python3.12/site-packages/spacy/training/iob_utils.py:149: UserWarning:
ährliche Ausschüttung*
84,..." with entities "[(96,
'RENDITE'), (49, 53, 'AUSSCHÜTTUNGSREND...". Use
ck the alignment. Misaligned entities ('-') will be ignored during"

Sehe screenshot.

Es gibt beim traininer von dem daten die schon drinn waren probleme. Teilweise sind es deine Test daten (die weg mussen) aber auch von Rendite "/usr/local/lib/python3.12/site-packages/spacy/training/iob_utils.py:149: UserWarning: ährliche Ausschüttung* 84,..." with entities "[(96, 'RENDITE'), (49, 53, 'AUSSCHÜTTUNGSREND...". Use ck the alignment. Misaligned entities ('-') will be ignored during" Sehe screenshot.
3025495 approved these changes 2025-06-27 19:52:36 +02:00
@ -0,0 +1,8 @@
FROM python:3.11-slim
Collaborator

Wofür benötigst du die Datei? Der nutzt eigentlich zusammen mit dem validate-service das Dockerfile ein Verzeichnis weiter oben.

Wofür benötigst du die Datei? Der nutzt eigentlich zusammen mit dem validate-service das Dockerfile ein Verzeichnis weiter oben.
Poster
Collaborator

Stimmt, das war nur zum Testen – ich räum das wieder auf. Wir brauchen dieses Dockerfile nicht

Stimmt, das war nur zum Testen – ich räum das wieder auf. Wir brauchen dieses Dockerfile nicht
1924466 marked this conversation as resolved
@ -11,6 +11,8 @@ COPY requirements.txt /app
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
RUN pip install flask-cors
Collaborator

requirements bitte nicht einzeln im Dockerfile installieren, du hast sie schon in der requirement.txt.

requirements bitte nicht einzeln im Dockerfile installieren, du hast sie schon in der requirement.txt.
Poster
Collaborator

Danke für den Hinweis – die Zeile nehme ich wieder raus, ist ja schon in der requirements.txt drin.

Danke für den Hinweis – die Zeile nehme ich wieder raus, ist ja schon in der requirements.txt drin.
@ -0,0 +1,33 @@
from flask import Flask, request, jsonify
Collaborator

Was macht die datei? Ich sehe keine stelle, an die die referenziert wird und die Flask-App wird glaube ich auch nicht gestartet

Was macht die datei? Ich sehe keine stelle, an die die referenziert wird und die Flask-App wird glaube ich auch nicht gestartet
Poster
Collaborator

Wird aktuell gar nicht genutzt – ich hatte die Datei nur kurz verwendet, um Trainingsdaten von einer Python-Liste in JSON umzuwandeln. Kann gelöscht werden

Wird aktuell gar nicht genutzt – ich hatte die Datei nur kurz verwendet, um Trainingsdaten von einer Python-Liste in JSON umzuwandeln. Kann gelöscht werden
@ -0,0 +1,18 @@
import json
Collaborator

Die Datei wird glaube ich auch nirgends verwendet

Die Datei wird glaube ich auch nirgends verwendet
Poster
Collaborator

Wird aktuell gar nicht genutzt – kann raus, war nur ein Testfile. Lösch ich direkt.

Wird aktuell gar nicht genutzt – kann raus, war nur ein Testfile. Lösch ich direkt.
@ -38,2 +38,4 @@
ports:
- 5050:5000
volumes:
- ./backend/spacy-service/spacy_training:/app/spacy_training
Collaborator

Hiermit tauschen der Coordinator und spaCy Daten über eine gemeinsame Datei aus. Das bedeutet, dass beide auf denselben Ordner zugreifen, der in zwei Container eingebunden ist. Das funktioniert zwar, widerspricht aber unserer gewünschten Architektur. Unser Ziel ist es, dass unsere Services ausschließlich über REST-Schnittstellen kommunizieren, um eine klarere und besser skalierbare Struktur zu haben.

Aktuell werden zwei Dateien für diese Kommunikation genutzt:

  • annotation_data.json: (die Trainingsdaten)
  • training_running.json: (der Status des Training, also ob ein Training gerade läuft oder abgeschlossen ist.)

Trainingsdaten:

Für die Trainingsdaten hast du im spacy-service schon die Methode, damit spacy die Daten verwalten kann (app.py Zeile 53):

@app.route("/append-training-entry", methods=["POST"])
def append_training_entry():
    entry = request.get_json()

Für die Anpassung sollte es reichen, wenn du im Coordinator die Daten an die API weiterleitest (spacy_controller.py Zeile 111)

@spacy_controller.route("/append-training-entry", methods=["POST"])
def append_training_entry():
  request.post(f"{SPACY_URL}/append-training-entry", data) # von der idee her, hier die daten weiterleiten

Status des Trainings:

Hierfür brauchst du im coordinator/controller/spacy_controller.py einen neuen API-Endpunkt, um den Status zu empfangen.

@spacy_controller.route('/training/status', methods=['POST'])
def update_training_status():
    data = request.json
    running_status = data.get('running')
    # Hier kannst du den Status verarbeiten, z.B. speichern oder weiterleiten
    return jsonify({"status": "success", "running": running_status})

In spacy-service/spacy_training/ner_training Zeile 69 rufst du den API-Endpunkt des Controllers auf:

  response = requests.post(f"{CONTROLLER_URL}/training/status", json={"running": False})
if response.status_code == 200:
    print("Status erfolgreich aktualisiert")
else:
    print("Fehler beim Aktualisieren des Status")
Hiermit tauschen der Coordinator und spaCy Daten über eine gemeinsame Datei aus. Das bedeutet, dass beide auf denselben Ordner zugreifen, der in zwei Container eingebunden ist. Das funktioniert zwar, widerspricht aber unserer gewünschten Architektur. Unser Ziel ist es, dass unsere Services ausschließlich über REST-Schnittstellen kommunizieren, um eine klarere und besser skalierbare Struktur zu haben. Aktuell werden zwei Dateien für diese Kommunikation genutzt: * annotation_data.json: (die Trainingsdaten) * training_running.json: (der Status des Training, also ob ein Training gerade läuft oder abgeschlossen ist.) #### Trainingsdaten: Für die Trainingsdaten hast du im spacy-service schon die Methode, damit spacy die Daten verwalten kann (app.py Zeile 53): ```python @app.route("/append-training-entry", methods=["POST"]) def append_training_entry(): entry = request.get_json() ``` Für die Anpassung sollte es reichen, wenn du im Coordinator die Daten an die API weiterleitest (spacy_controller.py Zeile 111) ```python @spacy_controller.route("/append-training-entry", methods=["POST"]) def append_training_entry(): request.post(f"{SPACY_URL}/append-training-entry", data) # von der idee her, hier die daten weiterleiten ``` #### Status des Trainings: Hierfür brauchst du im coordinator/controller/spacy_controller.py einen neuen API-Endpunkt, um den Status zu empfangen. ```python @spacy_controller.route('/training/status', methods=['POST']) def update_training_status(): data = request.json running_status = data.get('running') # Hier kannst du den Status verarbeiten, z.B. speichern oder weiterleiten return jsonify({"status": "success", "running": running_status}) ``` In spacy-service/spacy_training/ner_training Zeile 69 rufst du den API-Endpunkt des Controllers auf: ```python response = requests.post(f"{CONTROLLER_URL}/training/status", json={"running": False}) if response.status_code == 200: print("Status erfolgreich aktualisiert") else: print("Fehler beim Aktualisieren des Status") ```
Poster
Collaborator

Vielen Dank für die ausführliche Erklärung!
Ich habe den Code wie von dir beschrieben angepasst und die Änderung umgesetzt.
Bitte teste noch einmal, ob jetzt alles wie erwartet funktioniert.

Vielen Dank für die ausführliche Erklärung! Ich habe den Code wie von dir beschrieben angepasst und die Änderung umgesetzt. Bitte teste noch einmal, ob jetzt alles wie erwartet funktioniert.
@ -23,6 +23,7 @@
"@tanstack/react-router": "^1.114.3",
"@tanstack/react-router-devtools": "^1.114.3",
"@tanstack/router-plugin": "^1.114.3",
"file-saver": "^2.0.5",
Collaborator

Ich habe keine stelle gefunden, wo du die bibliothek verwendest. Ist die noch von deinen versuchen, die Datei direkt aus dem Frontend zu bearbeiten?

Ich habe keine stelle gefunden, wo du die bibliothek verwendest. Ist die noch von deinen versuchen, die Datei direkt aus dem Frontend zu bearbeiten?
Poster
Collaborator

Guter Punkt – die file-saver-Bibliothek war ein Testversuch,

Guter Punkt – die `file-saver`-Bibliothek war ein Testversuch,
3025495 approved these changes 2025-06-27 19:56:27 +02:00
3025495 left a comment
Collaborator

Ich habe bemerkt, dass die Datei annotation_data.json zweimal im Repository liegt: einmal im Root-Verzeichnis und einmal in spacy-service/spacy_training. Aus Konsistenzgründen wäre es sinnvoll, nur eine Version dieser Datei zu behalten. Überlege bitte, ob beide Versionen wirklich notwendig sind, oder ob eine davon gelöscht werden kann, um Redundanzen zu vermeiden.

Ich habe bemerkt, dass die Datei annotation_data.json zweimal im Repository liegt: einmal im Root-Verzeichnis und einmal in spacy-service/spacy_training. Aus Konsistenzgründen wäre es sinnvoll, nur eine Version dieser Datei zu behalten. Überlege bitte, ob beide Versionen wirklich notwendig sind, oder ob eine davon gelöscht werden kann, um Redundanzen zu vermeiden.
Collaborator

Bei der Überprüfung, ob der Wert in dem Beispielsatz vorkommt, ist mir aufgefallen, dass wenn man nach dem Wert ein Leerzeichen hat, er meckert, dass er den Wert nicht im Beispielsatz findet. Am besten prüfst du nur bis zum letzten Zeichen vor dem Leerzeichen, ich habe nämlich schon paar Minuten damit verschwendet den Fehler zu suchen.

Bei der Überprüfung, ob der Wert in dem Beispielsatz vorkommt, ist mir aufgefallen, dass wenn man nach dem Wert ein Leerzeichen hat, er meckert, dass er den Wert nicht im Beispielsatz findet. Am besten prüfst du nur bis zum letzten Zeichen vor dem Leerzeichen, ich habe nämlich schon paar Minuten damit verschwendet den Fehler zu suchen.
3023730 closed this pull request 2025-06-28 11:34:55 +02:00
3023730 reopened this pull request 2025-06-28 11:35:01 +02:00
3023730 added 1 commit 2025-06-28 11:46:37 +02:00
Poster
Collaborator

Es gibt beim traininer von dem daten die schon drinn waren probleme. Teilweise sind es deine Test daten (die weg mussen) aber auch von Rendite "/usr/local/lib/python3.12/site-packages/spacy/training/iob_utils.py:149: UserWarning:
ährliche Ausschüttung*
84,..." with entities "[(96,
'RENDITE'), (49, 53, 'AUSSCHÜTTUNGSREND...". Use
ck the alignment. Misaligned entities ('-') will be ignored during"

Sehe screenshot.

Es gibt beim traininer von dem daten die schon drinn waren probleme. Teilweise sind es deine Test daten (die weg mussen) aber auch von Rendite "/usr/local/lib/python3.12/site-packages/spacy/training/iob_utils.py:149: UserWarning:
ährliche Ausschüttung*
84,..." with entities "[(96,
'RENDITE'), (49, 53, 'AUSSCHÜTTUNGSREND...". Use
ck the alignment. Misaligned entities ('-') will be ignored during"

Sehe screenshot.

ich hab die ungültigen Einträge aus der annotation_data.json bereinigt. Die meisten davon waren Dummy-Daten – auch der „Rendite“-Satz war ein Test von Frau Kohler.
Ich hab jetzt alles rausgeschmissen, was nicht valide oder token-aligned war.

> Es gibt beim traininer von dem daten die schon drinn waren probleme. Teilweise sind es deine Test daten (die weg mussen) aber auch von Rendite "/usr/local/lib/python3.12/site-packages/spacy/training/iob_utils.py:149: UserWarning: > ährliche Ausschüttung* > 84,..." with entities "[(96, > 'RENDITE'), (49, 53, 'AUSSCHÜTTUNGSREND...". Use > ck the alignment. Misaligned entities ('-') will be ignored during" > > Sehe screenshot. > Es gibt beim traininer von dem daten die schon drinn waren probleme. Teilweise sind es deine Test daten (die weg mussen) aber auch von Rendite "/usr/local/lib/python3.12/site-packages/spacy/training/iob_utils.py:149: UserWarning: > ährliche Ausschüttung* > 84,..." with entities "[(96, > 'RENDITE'), (49, 53, 'AUSSCHÜTTUNGSREND...". Use > ck the alignment. Misaligned entities ('-') will be ignored during" > > Sehe screenshot. ich hab die ungültigen Einträge aus der annotation_data.json bereinigt. Die meisten davon waren Dummy-Daten – auch der „Rendite“-Satz war ein Test von Frau Kohler. Ich hab jetzt alles rausgeschmissen, was nicht valide oder token-aligned war.
Poster
Collaborator

Bei der Überprüfung, ob der Wert in dem Beispielsatz vorkommt, ist mir aufgefallen, dass wenn man nach dem Wert ein Leerzeichen hat, er meckert, dass er den Wert nicht im Beispielsatz findet. Am besten prüfst du nur bis zum letzten Zeichen vor dem Leerzeichen, ich habe nämlich schon paar Minuten damit verschwendet den Fehler zu suchen.

Danke, erledigt.

> Bei der Überprüfung, ob der Wert in dem Beispielsatz vorkommt, ist mir aufgefallen, dass wenn man nach dem Wert ein Leerzeichen hat, er meckert, dass er den Wert nicht im Beispielsatz findet. Am besten prüfst du nur bis zum letzten Zeichen vor dem Leerzeichen, ich habe nämlich schon paar Minuten damit verschwendet den Fehler zu suchen. Danke, erledigt.
Poster
Collaborator

Ich habe bemerkt, dass die Datei annotation_data.json zweimal im Repository liegt: einmal im Root-Verzeichnis und einmal in spacy-service/spacy_training. Aus Konsistenzgründen wäre es sinnvoll, nur eine Version dieser Datei zu behalten. Überlege bitte, ob beide Versionen wirklich notwendig sind, oder ob eine davon gelöscht werden kann, um Redundanzen zu vermeiden.

im Root-Verzeichnis war versehntlich daort kopiert, ich habe es gelöscht , danke

> Ich habe bemerkt, dass die Datei annotation_data.json zweimal im Repository liegt: einmal im Root-Verzeichnis und einmal in spacy-service/spacy_training. Aus Konsistenzgründen wäre es sinnvoll, nur eine Version dieser Datei zu behalten. Überlege bitte, ob beide Versionen wirklich notwendig sind, oder ob eine davon gelöscht werden kann, um Redundanzen zu vermeiden. im Root-Verzeichnis war versehntlich daort kopiert, ich habe es gelöscht , danke
1924466 added 2 commits 2025-06-29 00:44:18 +02:00
1924466 added 1 commit 2025-06-29 04:58:00 +02:00
1924466 added 1 commit 2025-06-29 11:09:49 +02:00
1924466 added 1 commit 2025-06-29 11:17:10 +02:00
1924466 added 1 commit 2025-06-29 11:22:03 +02:00
1924466 added 1 commit 2025-06-29 11:26:03 +02:00
1924466 added 2 commits 2025-06-29 11:52:08 +02:00
1924466 added 1 commit 2025-06-29 16:34:54 +02:00
1924466 added 1 commit 2025-06-29 16:59:43 +02:00
3019483 merged commit 5d0a5ab3c3 into main 2025-06-29 18:23:42 +02:00
3019483 deleted branch neue-Kennzahl-spacy 2025-06-29 18:23:42 +02:00
Sign in to join this conversation.
There is no content yet.