AI生成曲の品質をどう測るか。主観判定には限界がある——自分の曲を自分で採点しないルールが必要だ。そこで採用したのが、mlx-whisperローカル文字起こし→歌詞一致率を客観指標にする3層採点パイプライン。M1 Max 64GBでACE-Step 1.5を使い、32テイクの実測値(0.0%〜100.0%)を得た。そしてuvx arm64罠にハマり、解決するまでの記録。
問題: AI生成曲の品質をどう測るか
AI音楽生成の最大の課題は「品質の可視化」だ。生成した曲が教育用に使えるレベルか、歌詞が明瞭に聞こえるか、教育効果があるか——これらを数値化しないと「いい曲になった気がする」で終わる。人間の耳での判定は主観に偏る。自分が作った曲だから「悪くない」と思ってしまう。
そこで必要なのは、客観指標だ。発音明瞭度の代理として「歌詞一致率」を使う。文字起こしAIがどれくらい正確に歌詞を認識できたかを数値化する。これがあれば、再生成しても「前より良くなったか」が一目で分かる。
解法: 3層採点パイプライン
採用したのは3層構造だ。
① Whisper一致率(客観層) — mlx-whisper(large-v3-turbo)で各トラックを文字起こしし、実使用歌詞と単語列一致率を計算する。数字は英単語に正規化して比較("1,2,3"表記による偽低スコアを補正済み)。この層が本文の核だ。
② 独立ルーブリック採点(別コンテキスト) — 英語の正しさ25/設計原則遵守25/教育効果25/歌いやすさ25の4軸で、別コンテキストの採点官が各100点採点。平均94.1点。客観層が漏らす「教育的な意味でいい曲か」を補う。
③ オーナー耳チェック(最終) — 数字で表せない「歌い心地」「子どもに届くか」を最終判定。特に文字の歌唱(A-B-C)はWhisperが誤転写しやすく一致率が下振れるため、ここが補正になる。
実装①: mlx-whisperローカル文字起こし
まずは文字起こしの実装だ。完璧にローカルで完結させたい。
uvx --python cpython-3.12-macos-aarch64-none --from mlx-whisper mlx_whisper <mp3> --model mlx-community/whisper-large-v3-turbo
uvx arm64罠にハマった。このMacの既定python3はanaconda(x86/Rosetta)で、uvxが失敗する。Python実行環境のアーキテクチャ不一致だ。--python cpython-3.12-macos-aarch64-noneでarm64明示で解決した。罠は「何も言わずに失敗する」点だ。エラーメッセージも明確でないため、x86環境が選ばれていることに気づくのに時間がかかる。
モデルはlarge-v3-turbo(Apache 2.0)をローカルに配置。完全ローカル・課金ゼロ・APIキー不要。16音源の転写には約2分(M1 Max 64GB)。
実装②: 独立ルーブリック採点
客観層だけでは不十分だ。歌詞が完璧に聞こえても、教育効果が薄ければ意味がない。そこで独立ルーブリックを導入した。
基準は4軸25点ずつ:英語の正しさ(文法・表現の自然さ)、設計原則遵守(LMNOP問題回避・音節数)、教育効果(子どもが覚えやすいか)、歌いやすさ(BPM・キー・リズム)。
別コンテキストで採点することで、「作り手のバイアス」を排除する。平均94.1点は「教育的に優れた曲セット」であることを示している。ただし数字が高いから最終採用というわけではない。
実測結果: 32テイクの分布
Daily Routineソングブック(全8曲×2バリアント=16音源×2版v1/v2=32テイク)の実測結果だ。
採用8本の平均一致率: 83.9%
python3 -c "vals=[75.3, 79.4, 97.1, 76.7, 94.4, 73.3, 75.2, 100.0]; print(sum(vals)/len(vals))"
# 出力: 83.925 → 83.9%
平均83.9%だが、分布は広い。
最高100.0% — 08_Introduce_Yourself v2a。完璧な聞き取り。Whisperが歌詞を完全に認識。穴あきBridge実装済みで教育的にも優秀。
最低0.0% — 07_Seasons v1b。不良テイク。Whisperが"Thank you"を幻聴し続ける状態。ボーカル不明瞭。これは「不良テイク・不採用」として即除外。
分布の両端を引用することが重要だ。平均83.9%だけ見ると「実用的なレベル」に見えるが、0.0%〜100.0%のギャップが存在する。この分散がAI音楽生成の現実だ。
v1/v2の裁定原則。歌詞修正版(v2)を再生成しても、明瞭度が落ちる場合がある。
例: 01_ABC_Song v1a=75.3%だが、v2a=53.2%に低下。ルーブリック採点で指摘された「TPR動作語ゼロ→clap追加」を反映したv2は、歌詞は良くなったが明瞭度が大幅減だ。seed運だから。clap追加の益が明瞭度低下を上回らない。
結論: 旧版を捨てず曲ごとに最良テイクを採用するのが正解。歌詞修正(v2)とseed運は独立だ。v2で明瞭度が落ちる場合、v1を維持する。
最終採用セットは8本(採用テイクを曲名のみで配置)。
曲採用一致率裁定理由
01 ABCv1a75.3%v2は明瞭度大幅減。clap追加の益<明瞭度
02 Numbersv2a79.4%歌詞修正済みかつ明瞭度も最高
03 Hellov1b97.1%全曲最高の明瞭度・97点
04 Weatherv2b76.7%明瞭度同等で不自然英語を解消
05 Days&Monthsv1b94.4%明瞭度94.4を優先
06 What Timev1a73.3%98点曲。"sweet"軽微<明瞭度
07 Seasonsv2a75.2%歌詞4件修正済みかつ明瞭度も向上
08 Introducev2a100.0%一致率100%=完璧な聞き取り・穴あきBridge実装済み
教訓: 品質採点の3つのポイント
① 1リクエスト2バリアント生成=seed運の保険
ACE-Step 1.5は1リクエストで自動的に2曲生成する(seed違い=A/B試聴に使える)。これが今回、2本の不良テイク(07_Seasons v1b=0.0%、01_ABC_Song v1b=16.7%)を無償で回避した。生成コストは変わらないが、品質の安定性が向上する。seed運に頼らない構造だ。
② 旧版を捨てず曲ごとに最良テイクを採用する
ABC曲の例が示す通り、v2で歌詞修正しても明瞭度が落ちる場合がある。「最新版が最良」という前提は危険だ。曲ごとにWhisper一致率×ルーブリック×耳チェックで最良を採用する。文字の歌唱(A-B-C)はWhisperが誤転写しやすく一致率が下振れるため、最終判定は耳だ。
③ 文字の歌唱はWhisperが誤転写しやすい
A-B-Cのような文字の歌唱は、Whisperが文字認識の誤りをする。一致率が低くても耳では聞き取れることがある。逆に、内容のある歌詞は一致率が高い傾向にある。客観指標を鵜呑みにせず、耳での最終判定が必要だ。
品質採点は「品質を可視化し、再生成の意思決定を助ける」ためのものだ。数字に振り回されず、数字と耳の両方で判定する。これがAI音楽生成の実用レベルへの道だ。

Top comments (0)