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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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