
标出音视频里谁说了什么。
Who 专为播客、访谈、通话和会议设计,录音多长都能处理。一场 50 分钟的访谈在 MacBook Pro 上用时 3 秒,全程在设备上完成。借助这些时间戳,你可以按说话人标注转写文本,跳到嘉宾下一次开口的位置,或在每次换人时剪一刀。
Who 按首次开口的先后给说话人编号;两个人同时说话时,Who 会把两人都标出来。Who 对每个五分钟片段一次处理完毕,再跨片段匹配声音。
在 AMI 会议录音上,Who 标注说话人的错误率为 12.6%,低于在服务器 GPU 上运行的 pyannote(13.1%)和在同一台 Mac 上运行的 FluidAudio(19.4%)。Who 的速度也是 FluidAudio 的两倍。
4 秒处理一小时音频。
通过 SDK,Who 在搭载 M5 Pro 的 MacBook Pro 上以 950 倍实时运行。在 AMI 会议上,Who 的说话人分离错误率为 12.6%,pyannote 为 13.1%,FluidAudio 为 19.4%。
在一台 MacBook Pro(M5 Pro)上运行完整测试集,每次处理一段录音。Who 的用时包含加载模型。FluidAudio 在 AMI 上按其自身计时为 73 秒,算上模型加载为 79 秒。
| 测试集 | Who 用时 | Who 实时倍率 | FluidAudio 实时倍率 |
|---|---|---|---|
| AMI test, 544 minutes | 34s | 950x | 445x |
| VoxConverse test, 43.5 hours | 165s | 948x | 426x |
整段录音上的说话人分离错误率,越低越好。每一行使用相同的录音和评分工具
| 模型 | AMI | VoxConverse,最多 4 位说话人 | NOTSOFAR-1,最多 4 位说话人 | Earnings-21 | DiPCo |
|---|---|---|---|---|---|
| Who, on the Neural Engine | 12.6% | 8.4% | 16.2% | 27.7% | 41.1% |
| pyannote community-1, PyTorch | 13.1% | 7.3% | 18.7% | 7.3% | 33.4% |
| FluidAudio, Core ML | 19.4% | 9.6% | 32.7% | 12.0% | 42.7% |
Who 在 AMI 和 NOTSOFAR-1 这两个会议数据集上领先,在另外三个数据集上落后于 pyannote:Earnings-21 的财报电话会议最多有 20 位说话人,而在九位及以上说话人的 VoxConverse 录音上,Who 的错误率为 24.7%。pyannote 在服务器 GPU 上运行;Who 和 FluidAudio 在 M5 Pro 的 Neural Engine 上运行。pyannote 和 FluidAudio 的分数由我们自己测得,不在模型卡中。
应用场景
标出音视频里谁说了什么。.
按说话人标注转写文本
把 Who 和 Voz 搭配使用,转写文本的每一行都会标明是谁说的。读者能顺着对话读下去,而不是面对一整块分不清是谁说的文字。
跳到嘉宾下一次开口的位置
把一场两小时的访谈或会议筛选到只剩一位说话人,直接跳到这个人的每段发言,不用在时间线上来回拖。录音始终留在设备上。
每次换人时剪一刀
在双机位访谈或视频播客里,说话人一换就切换机位。每段发言都有开始和结束时间,所以每次换人都是一个剪辑点。
去掉笑声
去掉观众的笑声,以及在房间另一头只说了一句话的那个声音。发言占比低于你设定比例的说话人,Who 都会略去,并为其余说话人重新编号。
模型能做什么
- Who 在每个五分钟片段中最多标注四位说话人,并通过跨片段匹配声音,在整段录音中标注更多说话人。
- 每个发言段是一位说话人的一段连续语音,带有说话人编号,以及以秒为单位、精确到 10 毫秒的开始和结束时间。有人插话、几个人同时说时,不同说话人的发言段会相互重叠。
- 在 SDK 中,Who 按首次开口的先后从 0 开始给说话人编号,不会识别任何人的姓名。
- 每个片段由 Neural Engine 上的两个 Core ML 计算图读取:一个编码器和一个查询图。第三个计算图根据每位说话人单独说话的时段生成声纹,Who 再一次性在整段录音中匹配所有说话人。
- 单独说话不足一秒的说话人没有自己的声纹,会并入时间上最近的说话人。夹在别人发言段里的一秒笑声,会算到那位说话人名下。
- 通过 SDK,在搭载 M5 Pro 的 MacBook Pro 上达到 950 倍实时:544 分钟的 AMI 会议录音用时 34 秒。8-bit 构建为 953 倍。
- 通过 SDK 测得的内存:加载模型后为 275 MB;峰值在 8 分钟录音上为 336 MB,在 34 分钟录音上为 437 MB,在 2.65 小时录音上为 927 MB。
- Core ML 下载体积为 81 MB(float16),使用 8-bit 权重时为 42 MB,两个构建在 AMI 会议上的错误率相同,都是 12.6%。8-bit 构建并不节省内存,因为 Neural Engine 会在加载时解压权重。
- Who 另有一个 49 MB 的 LiteRT 构建,SDK 在 Android、Linux 和 Windows 上用的就是它;还有一个 99 MB 的 ONNX 构建,目前各 SDK 都还不支持运行。只用 CPU 时,LiteRT 构建处理 544 分钟音频,在 M5 Pro 上用时 87 秒,在 24 核 AMD EPYC 服务器上用时 191 秒,均在 SDK 之外测得。
keepingSpeakers(minimumShare:)会去掉在录音中占比低于设定值的所有说话人,并为其余说话人重新编号,笑声、掌声和串场音乐就都不会出现在结果里。在我们试过的播客上,设为 5% 时,这个过滤器清掉了笑声和观众的声音。如果是有很多简短发言者的新闻节目,请把占比设低,或者关闭这个过滤器。- 通过 URL 或路径对音频文件做说话人分离,也可以直接传入任意采样率的单声道采样。SDK 会替你转换采样率。
- SDK 在首次使用时从 Hugging Face 下载权重并缓存。
download(progress:)可以提前获取权重,Who(directory:)则从你自己管理的文件夹离线运行。
快速上手
只需几行代码,即可为你的 iOS or macOS or Android 应用加上 谁说了什么。 Who 文档.
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/desert-ant-core.git", from: "4.0.0")
// target dependency
.product(name: "Who", package: "desert-ant-core")
import Who
let who = Who() // downloads on first use
let result = try await who.diarize(contentsOf: url)
result.speakerCount // 3
for turn in result.turns {
print(turn.speaker, turn.start, turn.end) // 0 12.4 15.9
}
Add Who from Desert Ant Labs to this Swift project (iOS, macOS). What it does: Who:面向音视频的设备端说话人标注. SDK: Swift (iOS, macOS) Repo: https://github.com/Desert-Ant-Labs/desert-ant-core#readme // Swift Package Manager .package(url: "https://github.com/Desert-Ant-Labs/desert-ant-core.git", from: "4.0.0") // target dependency .product(name: "Who", package: "desert-ant-core") Reference: - Model page: https://desertant.com/models/who/ - Full catalog and other models: https://desertant.com/llms.txt Add the SDK, then follow its README for the exact API and current version. Do not invent API names or method signatures; confirm them against the README.
// build.gradle.kts (Maven Central)
implementation("ai.desertant:who:4.0.0")
import ai.desertant.who.Who
val who = Who(context) // downloads on first use
val result = who.diarize(samples, 16_000.0)
result.speakerCount // 3
for (turn in result.turns) {
println("${turn.speaker} ${turn.start} ${turn.end}") // 0 12.4 15.9
}
who.close()
Add Who from Desert Ant Labs to this Kotlin project (Android).
What it does: Who:面向音视频的设备端说话人标注.
SDK:
Kotlin (Android)
Repo: https://github.com/Desert-Ant-Labs/desert-ant-core#readme
// build.gradle.kts (Maven Central)
implementation("ai.desertant:who:4.0.0")
Reference:
- Model page: https://desertant.com/models/who/
- Full catalog and other models: https://desertant.com/llms.txt
Add the SDK, then follow its README for the exact API and current version. Do not invent API names or method signatures; confirm them against the README.
规格
- 速度
- 在 MacBook Pro(M5 Pro)上 950 倍实时,50 分钟访谈用时 3 秒
- 准确度
- AMI 会议上说话人分离错误率 12.6%;VoxConverse 最多 4 位说话人时为 8.4%
- 说话人
- 每个五分钟片段最多 4 位,任意长度的整段录音中可以更多
- 输出
- 按说话人划分的发言段,起止时间以秒为单位、精确到 10 毫秒;保留重叠语音
- 设备端体积
- 81 MB Core ML(float16,默认);8-bit 权重为 42 MB
- 内存
- 加载模型后 275 MB;2.65 小时录音峰值 927 MB
- 平台
- iOS 18+、macOS 15+、tvOS 18+、visionOS 2+(Core ML);Android、Linux 和 Windows(LiteRT,在 CPU 上运行)
Who 最擅长近距离拾音的音频,比如播客、访谈,以及每个人都有自己麦克风的远程通话。离麦克风较远时,Who 漏掉的语音更多:麦克风放在房间另一头录下的多人对话会漏掉 19% 到 21%,而戴耳麦的会议为 8%。两个人同时说话时,Who 漏掉的语音最多。在 VoxConverse 上,一到两位说话人时错误率为 8%,五到八位时为 17%,九位及以上时为 25%。在 Earnings-21 的财报电话会议中,最多有 20 位说话人做简短发言,Who 会把 16% 的语音归到错误的说话人名下。Who 只按编号区分说话人,不识别姓名,也不做转写;如需按说话人标注的转写文本,请把 Who 和 Voz 搭配使用。在 Android、Linux 和 Windows 上,Who 用 CPU 运行,比在 Neural Engine 上慢三到七倍。Who 目前还不能在浏览器或 Node 中运行。
常见问题
Who 是什么?
标注录音中的说话人,准确看到每个人何时开口、何时停下,全程在设备上完成。
Who 在设备上运行吗?
是的。Who 在设备上运行,不调用任何服务器,因此数据始终留在用户手中。
Who 支持哪些平台?
Who 以面向 Swift, Kotlin 的原生设备端 SDK 形式提供。
Who 的价格是多少?
每个模型免费支持最多 10 万台月活跃设备。推理次数不限。 如需定制授权,请联系我们。
Who 的准确度和速度如何?
通过 SDK,Who 在搭载 M5 Pro 的 MacBook Pro 上以 950 倍实时运行。在 AMI 会议上,Who 的说话人分离错误率为 12.6%,pyannote 为 13.1%,FluidAudio 为 19.4%。