Skip to content

feat(metrics): Cross-Entropy gegen Korpus-Modell (Vorhersagbarkeit durch globales Modell) #51

Description

@aspala

Was & Warum

Wie gut sagt ein über die gesamte Codebase trainiertes Token-Modell dieses File vorher? Niedrige Cross-Entropy = generischer, dem Modell bekannter Code; hohe = überraschend (exotische Macros/Syntax, die sonst nirgends vorkommt).

Ergänzt #43 (KL/JS, verteilungsbasiert) um ein sequenzbasiertes Outlier-Signal — nutzt das Korpus-Bigram-Modell statt nur Unigramme.

Skala

Verhalten Beispiel erwartete Cross-Entropy
niedrig generischer Context-Code niedrig
mittel moderate Abweichung mittel
hoch defmacro __using__(_), do: quote(do: @before_compile ...) hoch

Umsetzung

  • Codebase-Metric: lib/codeqa/metrics/codebase/corpus_cross_entropy.ex, @behaviour CodeQA.Metrics.Codebase.CodebaseMetric.
  • Schritt 1: Korpus-Unigram- + Bigram-Modell über alle Files (mit Laplace-Smoothing). Schritt 2: pro File mittlere Cross-Entropy -1/N · Σ log P_corpus(tₙ | tₙ₋₁).
  • Output je File: %{"cross_entropy" => …, "perplexity_vs_corpus" => …}.
  • Registrieren via Registry.register_codebase_metric/2.
  • Edge-Cases: einzelnes File → entartetes Modell, dokumentieren.

Test

  • test/codeqa/metrics/codebase/corpus_cross_entropy_test.exs.
  • Assertion: File mit Korpus-typischen Sequenzen → niedrige Cross-Entropy; File mit einzigartigen Macro-Sequenzen → hohe Cross-Entropy + perplexity_vs_corpus.

Hinweis

Teilt Korpus-Modell-Aufbau mit #43 und #50 (TF-IDF). Diese drei Codebase-Metriken sollten den Aggregations-Pfad gemeinsam nutzen — nicht dreimal bauen.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions