feat(axes): profils modaux pour Krumhansl-Kessler — validés, optionnels - #22
Merged
Conversation
KK ne connaît que majeur et mineur, et lit une pièce mixolydienne à la sous-dominante. Deux profils comblent le trou, construits et non mesurés sur des auditeurs comme les originaux : chaque mode est son parent dont le degré caractéristique est échangé avec son voisin chromatique — le dorien un mineur qui monte sa sixte, le mixolydien un majeur qui descend sa septième, le reste du profil parent intact. Dorien et mixolydien seulement : les deux modes dont make_corpus écrit la vérité terrain, donc les deux qu'on sait valider. `estimate_key(hist, MODAL_PROFILES)` les utilise ; le défaut ne bouge pas. Validé sur deux graines de contrôle fraîches (23 et 31, 311 morceaux non modulants), à histogramme identique : tonique juste graine 23 graine 31 brut 0.743 0.667 brut+modes 0.809 0.730 Par mode, cumul des deux graines : dorien 45/58 → 58/58, mixolydien 9/54 → 21/54, mineur 69/102 inchangé, majeur 96/97 → 91/97 — le prix. Le mode suit la tonique : toute erreur de mode est déjà une erreur de tonique. Deux résultats nuls du même lot : sur les loops isolés les profils ne changent rien (0.400 avant et après — il n'y a pas de quoi trancher dans quatre mesures), et sur l'histogramme du moteur le gain existe mais reste inutile (0.566 → 0.605), parce que c'est l'histogramme qui plafonne. Pas branché par défaut : le mode traverse sept axes, dont deux en déduisent une gamme, et les poids publiés ont été calibrés avec l'estimateur actuel. La bascule a été essayée pour en chiffrer le coût — défaut modal + PARENT_MODE dans les axes 9 et 14 : check.sh → CHECK OK, un seul axe bouge de plus de 0.02 et vers le haut (11_modulation_count 0.604 → 0.650), l'axe 8 gagne 0.012, la validation croisée 0.944 → 0.938 (dans le bruit). Documentée et défendable, elle demande sa propre PR avec les poids recalibrés. Le harnais de mesure passe à quatre estimateurs (brut, brut+modes, pipeline, pipeline+modes) et note le mode là où il est comparable : un estimateur sans dorien n'est jugé que sur la tonique, et face à une étiquette de pack — qui ne dit que « m » — on compare les modes parents. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
KK ne connaît que majeur et mineur, et lit une pièce mixolydienne à la sous-dominante — 3/22 sur le corpus de contrôle, l'erreur étant à chaque fois la même. Deux profils comblent le trou.
Ce qu'ils sont
Construits, et dits comme tels : ceux de Krumhansl et Kessler sont mesurés sur des auditeurs, ceux-ci ne le sont pas. Chaque mode est son parent dont le degré caractéristique est échangé avec son voisin chromatique — le dorien un mineur qui monte sa sixte, le mixolydien un majeur qui descend sa septième — le reste du profil parent laissé intact, faute de quoi on inventerait des poids que rien n'étaye.
Dorien et mixolydien seulement : les deux modes dont
make_corpusécrit la vérité terrain, donc les deux qu'on sait valider. En livrer d'autres reproduirait exactement le défaut qu'on reproche à KK.estimate_key(hist, MODAL_PROFILES)les utilise. Le défaut ne bouge pas.Ce qu'ils valent
Deux graines de contrôle fraîches (23 et 31, 311 morceaux non modulants), à histogramme rigoureusement identique :
brutbrut+modesPar mode, cumul des deux graines — ce qui est acheté, et le prix :
brutbrut+modesLe dorien est réglé, le mixolydien à moitié, et cinq pièces en majeur sur 97 se font voler la réponse. Solde +6.5 points de tonique. Le mode suit la tonique : sur
brut+modes, toute erreur de mode est déjà une erreur de tonique, jamais l'inverse.Deux résultats nuls, du même lot. Sur les loops isolés : 0.400 avant, 0.400 après — quatre mesures ne contiennent pas de quoi trancher, un meilleur profil n'y peut rien. Sur l'histogramme du moteur : le gain existe mais reste inutile (0.566 → 0.605), parce que c'est l'histogramme qui plafonne, pas le vocabulaire.
Pourquoi ce n'est pas branché
Le mode retourné traverse sept axes, dont deux en déduisent une gamme, et les poids publiés ont été calibrés avec l'estimateur actuel. La bascule a été essayée pour en chiffrer le coût (défaut modal +
PARENT_MODEdans les axes 9 et 14), et le propre gate du dépôt dit qu'elle ne casse rien :scripts/check.sh→ CHECK OK ;11_modulation_count0.604 → 0.650 ;08_key_stability+0.012,14_bass_melodic+0.003,13_tonal_contrast−0.003 ;Elle est donc documentée et défendable — mais elle demande sa propre PR, avec les poids recalibrés et les chiffres du README repris derrière. Dis-moi si tu la veux.
Divers
brut,brut+modes,pipeline,pipeline+modes) et note le mode là où il est comparable : un estimateur sans dorien n'est jugé que sur la tonique, et face à une étiquette de pack — qui ne dit que « m » — on compare les modes parents. Répondre « dorien » sur un loop étiquetéDmn'est pas une erreur, c'est peut-être plus précis que l'étiquette.235 passed, 40 subtests passed·scripts/check.sh→ CHECK OK.🤖 Generated with Claude Code