Skip to content

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

@aspala

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
    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