Skip to content

query: German full-sentence questions pick wrong BFS seeds — stopwords outscore the actual keyword #1900

Description

@ReichardtA

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions