唱起来很好玩:灵敏度/特异度/精确率/召回率之歌

博文小编

2025-04-16


王海华 博文视点Broadview
下面是我参考《StatQuest图解机器学习》一书内容,并借助多个AI工具创作的一首《灵敏度/特异度/精确率/召回率之歌》:
这是音频:
这是歌词:
灵敏度,是一个比例,
指实际阳性被正确预测。
特异度,是另一个比例,
指实际阴性被准确识别。
精确率,它有些不同,
是预测阳性中被命中的比例。
而召回率,把我们带回起点——
其实就是……灵敏度!
英文版本:
Sensitivity is the percentage
Of actual positives correctly predicted.
Specificity is the percentage
Of actual negatives correctly predicted.
Precision is something different,
It’s the percentage of predicted positives
That are correctly predicted.
And recall gets us back to the start —
It’s the same as… sensitivity!
创作这个视频的灵感来自于《StatQuest图解机器学习》一书中的歌词和乐谱:

四大指标原理速览
要理解这首歌的背后,得先介绍一下知识方面的主角:灵敏度、特异度、精确率、召回率。它们都来自于“混淆矩阵”这一概念,它把模型预测结果与真实情况进行对比:
实际/预测
预测为阳性(Positive)
预测为阴性(Negative)
实际为阳性(P)
True Positive (TP)
False Negative (FN)
实际为阴性(N)
False Positive (FP)
True Negative (TN)
灵敏度Sensitivity表示:在所有真实为阳性的人中,有多少被模型正确识别出来了。
特异度Specificity表示:在所有真实为阴性的人中,有多少被模型正确预测为阴性。
精确率Precision表示:在所有被预测为阳性的人中,有多少是真正的阳性。
召回率 Recall 是灵敏度的别称:
四大指标对比一览表:
指标
分子
分母
含义
灵敏度
TP
TP + FN
找出阳性中你预测对了多少
特异度
TN
TN + FP
找出阴性中你预测对了多少
精确率
TP
TP + FP
你预测为阳性中有多少是真的
召回率
TP
TP + FN
实际阳性中你召回了多少(=灵敏度)
理解这四个指标,对于机器学习、医学检测、推荐系统、安检系统等应用场景来说,都是必不可少的基础素养。

AI创作过程分享
我根据书中的乐谱,使用 Python 生成旋律:
from midiutil import MIDIFile

创建一个 MIDI 文件

midi = MIDIFile(1)
track = 0
time = 0
tempo = 120
channel = 0
volume = 100

midi.addTrackName(track, time, “Recall Song”)
midi.addTempo(track, time, tempo)

音符(G大调,旋律节奏简化)

notes = [
(“G4”, 1), (“G4”, 1), (“A4”, 1), (“G4”, 1),
(“F#4”, 1), (“G4”, 1), (“A4”, 2), (“A4”, 1), (“B4”, 1), (“A4”, 1),
(“G4”, 1), (“A4”, 1), (“B4”, 2),

("G4", 1), ("G4", 1), ("A4", 1), ("G4", 1),
("F#4", 1), ("G4", 1), ("A4", 2), ("A4", 1), ("B4", 1), ("A4", 1),
("G4", 1), ("A4", 1), ("B4", 2),

("G4", 1), ("G4", 1), ("G4", 1), ("G4", 1),
("G4", 1), ("A4", 1), ("G4", 1), ("F#4", 1),
("G4", 1), ("G4", 1), ("A4", 2), ("G4", 1), ("F#4", 1), ("G4", 1),

("G4", 2), ("G4", 2), ("A4", 1), ("A4", 1), ("B4", 1), ("A4", 1),
("G4", 1), ("A4", 1), ("B4", 2), ("A4", 1), ("G4", 1), ("A4", 1)

]

note_mapping = {
“C4”: 60, “C#4”: 61, “D4”: 62, “D#4”: 63, “E4”: 64, “F4”: 65, “F#4”: 66,
“G4”: 67, “G#4”: 68, “A4”: 69, “A#4”: 70, “B4”: 71,
“C5”: 72, “C#5”: 73, “D5”: 74, “D#5”: 75, “E5”: 76, “F5”: 77, “F#5”: 78,
“G5”: 79, “G#5”: 80, “A5”: 81, “A#5”: 82, “B5”: 83
}

加入音符

current_time = 0
for note_name, duration in notes:
pitch = note_mapping[note_name]
midi.addNote(track, channel, pitch, current_time, duration, volume)
current_time += duration

保存文件

with open(“recall_song_accompaniment.mid”, “wb”) as output_file:
midi.writeFile(output_file)
但问题是:谁来唱?我唱不来,于是决定借助 AI。
经过多番尝试,我选择了国内平台 “即梦”,它支持输入歌词+风格生成音乐+数字人演唱。
最初是免费的,但用多了之后,需要购买会员。我也忍痛花了69元,买了连续包月。
在平台中,我上传了用 ChatGPT 4o 生成的虚拟形象(一个帅气的弹吉他男孩),然后输入歌词、选择音乐风格并生成了音乐。

即梦每次只能生成 15秒的视频,而我整首歌超过 50 秒,所以我分 4 次生成,最后使用剪映进行拼接处理。

荐工具与参考书籍
中途我还用到了一个非常实用的免费音频剪辑工具:
https://cdkm.com/cn/cut-audio

最终你在开头看到的视频就是这些拼接整合的成果。
我也试图用剪映的“数字人口型演唱”功能,但效果一般,像在上课一样,于是果断放弃了。

最后附上我的推荐
《StatQuest图解机器学习》(本视频灵感来源)

读者评论

相关博文

  • 社区使用反馈专区

    陈晓猛 2016-10-04

    尊敬的博文视点用户您好: 欢迎您访问本站,您在本站点访问过程中遇到任何问题,均可以在本页留言,我们会根据您的意见和建议,对网站进行不断的优化和改进,给您带来更好的访问体验! 同时,您被采纳的意见和建议,管理员也会赠送您相应的积分...

    陈晓猛 2016-10-04
    5700 747 3 7
  • 迎战“双12”!《Unity3D实战核心技术详解》独家预售开启!

    陈晓猛 2016-12-05

    时隔一周,让大家时刻挂念的《Unity3D实战核心技术详解》终于开放预售啦! 这本书不仅满足了很多年轻人的学习欲望,并且与实际开发相结合,能够解决工作中真实遇到的问题。预售期间优惠多多,实在不容错过! Unity 3D实战核心技术详解 ...

    陈晓猛 2016-12-05
    3427 36 0 1
  • czk 2017-07-29
    6277 28 0 1