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.
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
defmacro __using__(_), do: quote(do: @before_compile ...)Umsetzung
lib/codeqa/metrics/codebase/corpus_cross_entropy.ex,@behaviour CodeQA.Metrics.Codebase.CodebaseMetric.-1/N · Σ log P_corpus(tₙ | tₙ₋₁).%{"cross_entropy" => …, "perplexity_vs_corpus" => …}.Registry.register_codebase_metric/2.Test
test/codeqa/metrics/codebase/corpus_cross_entropy_test.exs.Hinweis
Teilt Korpus-Modell-Aufbau mit #43 und #50 (TF-IDF). Diese drei Codebase-Metriken sollten den Aggregations-Pfad gemeinsam nutzen — nicht dreimal bauen.