Beschreibung
graphify query "<question>" liefert bei deutschen Fragesätzen (Form: "was hat sich bei X geändert") konsistent irrelevante Ergebnisse — unabhängig vom eigentlichen Suchbegriff X. Reproduziert mit vier verschiedenen Fragen im selben Repo, alle vier landeten auf denselben drei falschen Seed-Nodes (generische Markdown-Überschriften statt domänenspezifischer Treffer).
Root Cause
_query_graph_text in graphify/serve.py tokenisiert die Frage naiv per question.split() und behält jedes Wort >2 Zeichen als Suchbegriff — es gibt keine Stopword-Filterung (weder Deutsch noch generell). Bei "was hat sich bei X geändert" werden was, hat, sich, bei, geändert gleichwertig zum eigentlichen Suchbegriff X gescort.
Das eigentliche Problem liegt in _score_nodes/_compute_idf: geändert (diakritik-gestrippt geandert) matcht per Prefix gegen geänderte — und "Geänderte Dateien" ist eine wiederkehrende Markdown-Überschrift, die in mehreren Spec-Docs des Repos vorkommt. Weil dieser Substring nur in relativ wenigen Nodes exakt vorkommt, bekommt geandert einen hohen IDF-Wert, obwohl es ein generisches Füllwort ist. Kombiniert mit den anderen Stopwords übersteigt der Score der generischen Überschriften-Nodes (~678) den Score der tatsächlich relevanten, domänenspezifischen Treffer (~486 für den reinen Suchbegriff, fällt in der kombinierten Query komplett aus den Top 10).
Reproduktion
from graphify.serve import _score_nodes
# volle Frage:
_score_nodes(G, ["was","hat","sich","bei","<suchbegriff>","geandert"])
# -> Top-Treffer: generische "Geänderte Dateien"/"Was wird gesichert?"-Überschriften (Score ~678)
# nur das Keyword:
_score_nodes(G, ["<suchbegriff>"])
# -> korrekt: die tatsächlich relevanten, domänenspezifischen Nodes (Score ~487)
Erwartetes Verhalten
Stopwords (deutsch mindestens: was/wie/hat/sich/bei/ist/sind/wird/wurde/geändert/etc., idealerweise sprachunabhängig via Frequenzliste) sollten vor dem Scoring herausgefiltert werden, oder der IDF sollte nicht rein auf Substring-Dokumentfrequenz basieren, wenn wiederkehrende Markdown-Überschriften im Corpus vorhanden sind.
Workaround (aktuell empfohlen)
Statt vollständiger Fragesätze reine Stichworte verwenden, z.B. graphify query "<Feature> Änderungen" statt "was hat sich bei <Feature> geändert".
Umgebung
- graphify Version: 0.8.14 (PyPI-Paketname
graphifyy)
- Python 3.14.2, Windows 11
- Graph: 5285 nodes, 7837 edges, 330 communities
Beschreibung
graphify query "<question>"liefert bei deutschen Fragesätzen (Form: "was hat sich bei X geändert") konsistent irrelevante Ergebnisse — unabhängig vom eigentlichen SuchbegriffX. Reproduziert mit vier verschiedenen Fragen im selben Repo, alle vier landeten auf denselben drei falschen Seed-Nodes (generische Markdown-Überschriften statt domänenspezifischer Treffer).Root Cause
_query_graph_textingraphify/serve.pytokenisiert die Frage naiv perquestion.split()und behält jedes Wort >2 Zeichen als Suchbegriff — es gibt keine Stopword-Filterung (weder Deutsch noch generell). Bei "was hat sich bei X geändert" werdenwas,hat,sich,bei,geändertgleichwertig zum eigentlichen SuchbegriffXgescort.Das eigentliche Problem liegt in
_score_nodes/_compute_idf:geändert(diakritik-gestripptgeandert) matcht per Prefix gegengeänderte— und "Geänderte Dateien" ist eine wiederkehrende Markdown-Überschrift, die in mehreren Spec-Docs des Repos vorkommt. Weil dieser Substring nur in relativ wenigen Nodes exakt vorkommt, bekommtgeanderteinen hohen IDF-Wert, obwohl es ein generisches Füllwort ist. Kombiniert mit den anderen Stopwords übersteigt der Score der generischen Überschriften-Nodes (~678) den Score der tatsächlich relevanten, domänenspezifischen Treffer (~486 für den reinen Suchbegriff, fällt in der kombinierten Query komplett aus den Top 10).Reproduktion
Erwartetes Verhalten
Stopwords (deutsch mindestens: was/wie/hat/sich/bei/ist/sind/wird/wurde/geändert/etc., idealerweise sprachunabhängig via Frequenzliste) sollten vor dem Scoring herausgefiltert werden, oder der IDF sollte nicht rein auf Substring-Dokumentfrequenz basieren, wenn wiederkehrende Markdown-Überschriften im Corpus vorhanden sind.
Workaround (aktuell empfohlen)
Statt vollständiger Fragesätze reine Stichworte verwenden, z.B.
graphify query "<Feature> Änderungen"statt"was hat sich bei <Feature> geändert".Umgebung
graphifyy)