quran-alignment-benchmark
收藏资源简介:
一个用于评估《古兰经》诵读音频与文本对齐系统的公共基准数据集,包含音频、逐词真实标签和描述性列。
A public benchmark dataset for evaluating audio-text alignment systems for Quran recitations, which comprises audio recordings, word-level ground truth labels, and descriptive columns.
Quran Recitation Alignment Benchmark
概述
这是一个用于评估将《古兰经》诵读音频对齐到文本的系统的公开基准。给定一段录音,系统产生带时间戳的分段,每段标注其中所诵读的确切词语。基准将这些标注与逐词的真值进行评分,并在排行榜上发布结果。
- 语料库:Hugging Face Hub 上的
hetchyy/quran-alignment-benchmark(音频、真值、描述性列) - 评分器:本仓库,通过 git tag 安装(包与 CLI 名称
qab) - 规范:docs/SPEC.md · 语料库说明:docs/CORPUS.md
- 排行榜:https://huggingface.co/spaces/hetchyy/quran-alignment-leaderboard
任务
输入:任意长度、任意诵读者、任意风格的诵读录音。可能包含重复的词和经文、长停顿、开场公式(Istiadha、Basmala)以及非古兰经语音。
输出:有序的分段列表。每个分段是一个时间范围和对其所诵读内容的声明:
- 词跨度,如
2:5:1-2:6:3(第2章第5节第1词至第6节第3词),始终在同一章内且按阅读顺序; Basmala或Istiadha;null,表示非古兰经音频。
分段大小任意。基准评分仅统计 Clean segments(每分段),并与 Words / segment 并列阅读。
传述(Riwayah):v1 仅限 Hafs ʿan ʿĀṣim。每条录音带有 riwayah 列,以便其他读法日后加入。
适用对象
- 构建或改进系统的开发者:固定语料库、固定评分器、共享比较词汇。
- 选择系统的终端用户:需要将诵读音频与文本对应,并想知道该信任哪个系统。
- 字幕视频:每个分段成为一条字幕。
- 播放器与应用:定位到经文、隔离经文、循环段落。
- 其他用途:背诵与 Tajweed 工具、可搜索的诵读档案、数据集构建、研究、从其他音频中分离古兰经语音。
评分机制
每条录音的真值是词级时间轴:每个诵读的词按诵读顺序及其开始和结束时间。若诵读者重复诵读某节,则时间轴中包含两次。
对每个提交分段,基准收集其中点落入其时间范围内的诵读词,并与分段声明的词进行比较:
- 声明的词未在范围内诵读:丢失这些词。
- 范围包含未声明的诵读词:这些词未被计入。
- 分段跨越重复但只声明单段文本:仅计入一部分。
词数不依赖分段大小。开场公式(Basmala、Istiadha)在单独报告中评分,不计入主要词数。null 分段被接受并报告。
完整规则见 docs/SPEC.md。
排行榜
除注明外,分数为 0 到 1 的比率;除注明外越高越好。排行榜值在整个语料库上汇总。
- Words F1(找到与正确的平衡):主要指标。结合 Words found 与 Words correct。
- Clean segments(零错误分段比例):分段范围恰好包含其声明的词且完全覆盖:无缺失、无多余、无内部非古兰经语音、内侧边缘在词边缘半秒内、外侧静音不超过 2 秒、进入相邻词不超过半秒。
- Repeats F1(捕获与真实的平衡):重复指诵读者回退重诵。结合 Repeats caught 与 Repeats real。
- Words / segment(粒度):每分段平均声明词数,非评分,供上下文。
- RTF(每秒音频处理时间,可选,越低越好):自报,分别显示
cpu和gpu。 - Trusted coverage 与 Unsafe green(消费者信心,可选):每古兰经跨度分段评分一次。≥0.80 为绿色,≥0.60 且 <0.80 为琥珀色,<0.60 为红色。
语料库内容 (v1)
16 条录音,357 分钟,18,421 个诵读词,213 个重复事件,Hafs ʿan ʿĀṣim。四种风格,单章与多章,清晰与降质录制,密集重复,成人与儿童声音,公式与非古兰经语音。
| id | 诵读者 | 风格 | 内容 | 噪声 | 段落 | 分钟 | 词数 | wpm | 重复 |
|---|---|---|---|---|---|---|---|---|---|
luhaidan-fatir |
Muhammad Al-Luhaidan | murattal | quran_only | 是 | Faatir | 18.2 | 898 | 50 | 27 |
luhaidan-haqqah |
Muhammad Al-Luhaidan | murattal | quran_only | 是 | Al-Haaqqa 25-37 | 2.4 | 96 | 41 | 13 |
luhaidan-qiyamah |
Muhammad Al-Luhaidan | murattal | quran_only | 是 | Al-Qiyaama (+ Fatiha) | 4.0 | 189 | 50 | 0 |
jaber-inshiqaq |
Ali Jaber | murattal | quran_only | Al-Inshiqaaq | 2.1 | 107 | 58 | 0 | |
jaber-nisa |
Ali Jaber | hadr | quran_only | An-Nisaa 100-102 | 1.0 | 116 | 121 | 0 | |
afasy-baqarah |
Mishary Al-Afasy | hadr | quran_only | Al-Baqara | 79.9 | 6186 | 78 | 28 | |
mandour-taha |
Ahmed Mandour | murattal | quran_only | 是 | Taa-Haa 1-98 | 21.4 | 1066 | 51 | 31 |
ayyub-juz-amma |
Muhammad Ayyub | murattal | quran_only | Juz Amma | 57.9 | 2354 | 46 | 13 | |
badri-juz-tabarak |
Abdul Qadir Badri | hadr | quran_only | Juz Tabarak | 24.2 | 2661 | 114 | 0 | |
abdulbasit-raad |
Abdul Basit Abdul Samad | mujawwad | quran_only | Ar-Rad | 38.1 | 869 | 28 | 3 | |
diban-sad |
Ahmed Diban | hadr | quran_only | Saad | 4.4 | 736 | 170 | 1 | |
husary-fath |
Mahmoud Khalil Al-Husary | mujawwad | quran_only | Al-Fath | 24.8 | 584 | 30 | 7 | |
prayer-baqarah-yasin |
Adil Yusuf | murattal | prayer | Al-Baqara 285-286, Yaseen 77-83 | 12.5 | 209 | 42 | 4 | |
witr-muawwidhat |
Mishary Al-Afasy | murattal | prayer | Al-Ikhlaas, Al-Falaq, An-Naas | 11.9 | 133 | 44 | 0 | |
taraweeh-maryam |
Ibrahim Idris | murattal | prayer | Maryam 12-57, Al-Furqaan 61-77, An-Naba 1-40, Al-Aadiyaat, Al-Qadr, Al-Maaun | 34.4 | 1099 | 44 | 14 | |
minshawi-luqman |
Muhammad Siddiq Al-Minshawi | muallim | quran_only | 是 | Luqman | 19.3 | 1118 | 58 | 72 |
列含义、真值生产方式及 v1 未覆盖内容见 docs/CORPUS.md。
提交格式
每条录音一个 JSON 文件,命名为 <id>.json,外加一个 submission.json 包含元数据。
json { "schema_version": 1, "case_id": "jaber-inshiqaq", "runtime_seconds": 3.2, "segments": [ { "start_s": 0.98, "end_s": 4.84, "reference": "Basmala" }, { "start_s": 5.78, "end_s": 22.30, "reference": "84:1:1-84:5:3", "confidence": 0.97 }, { "start_s": 23.42, "end_s": 33.12, "reference": "84:6:1-84:6:8", "confidence": 0.99 }, { "start_s": 34.20, "end_s": 44.33, "reference": "84:7:1-84:8:4", "confidence": 0.91 }, { "start_s": 45.00, "end_s": 47.10, "reference": null }, { "start_s": 47.50, "end_s": 52.53, "reference": "84:6:1-84:7:4", "confidence": 0.91 } ] }
最后一段声明了前面两段已声明的词:这是提交标记重复的方式。
| 字段 | 含义 |
|---|---|
case_id |
语料库中的录音 id。 |
segments |
按 start_s 排序。连续分段最多可重叠 0.5 秒。 |
reference |
同一章内按阅读顺序的词跨度 S:A:W-S:A:W;或 Basmala;或 Istiadha;或 null。 |
confidence |
可选。系统评分,0 到 1,表示该分段按提供内容使用的安全性。绿色 ≥0.80,琥珀色 ≥0.60 且 <0.80,红色 <0.60。 |
runtime_seconds |
可选。此录音的总处理时间。 |
跨度始终完整写为 surah:ayah:word-surah:ayah:word,词在每个节内从 1 编号。单词为 2:5:1-2:5:1。验证器拒绝整节或裸词简写。
在 Hafs 中,al-Fatiha 的 1:1 节即 Basmala。开场 Basmala 可在任意位置作为 Basmala 或 1:1:1-1:1:4 提交;两者评分相同。
submission.json:
json { "system": "example-aligner", "version": "1.4.0", "hardware_class": "gpu", "hardware": "1x NVIDIA L40S, 8 vCPU", "contact": "you@example.org", "url": "https://example.org/aligner" }
报告运行时间时 hardware_class(cpu | gpu)为必填。
本地运行与评分
bash pip install "qab[corpus] @ git+https://github.com/Hetchy/quran-alignment-benchmark@v0.2.1"
qab fetch --corpus v1 --out corpus/ # <id>.mp3 and <id>.json (the ground truth) per recording
run your system over corpus/*.mp3 and write submissions/<id>.json
qab validate submissions/ qab score submissions/ --corpus v1 --summary # or --out report.json for the full report
真值公开;本地分数即排行榜分数。qab score --cases corpus/ 对已获取副本评分而不访问网络。每份报告命名评分器版本及评分真值的指纹。
由于真值公开,分数表示系统在无访问权限下运行于这些录音的表现:不要在语料库音频或标注上训练、调优或查阅。提交基于信任。
Python 方式:
python from qab import load_cases, load_submissions, evaluate
cases = load_cases("v1") # from the Hub; or load_cases(cases_dir="corpus/") submissions, meta = load_submissions("submissions/") report = evaluate(cases, submissions, meta, corpus_version="v1") print(report["headline"])
转换系统输出:若原生输出为每节、每词或每停顿,原样输出;不要合并或拆分以匹配任何预期粒度。
如何提交
使用排行榜的 Submit 标签。输入系统名称、描述、网站/仓库、私人联系邮箱及暴露给预期用户的、影响结果的参数数量。当数量非零时,在描述中简要说明这些控制如何帮助处理不同录音。
上传 ZIP 或单个 <id>.json 预测文件。网站验证每条录音及整个提交,计算私人分数预览,并自动创建提交元数据与基准版本。网站上传可省略 case_id 和 schema_version;文件名提供 ID。本地格式仍受支持。
可预览部分上传,但发布需要最新语料库中每条录音的有效结果。使用 Hugging Face 登录,查看结果,并明确确认发布。账户私人拥有系统名称。CPU 和 GPU 运行使用相同系统名称但显示为单独行,标记为 (CPU) 和 (GPU)。重新提交仅替换同一任务/语料库上选定的运行配置。预测文件、账户身份和联系邮箱从不公开。文件无限期保留以供可复现性和完整性检查。
系统输入仅为音频。允许公开暴露的用户控制,如静音阈值和风格设置。不允许基准标注、已知段落提示、在此语料库上训练/调优及手动预测修正。本地评分无需提交仍可用。
语料库问题与新音频
通过 GitHub issue 报告音频或真值问题。
建议新音频,仅提供:
- 音频链接或文件。
- 诵读者姓名。
- 为何是对语料库的有用补充。
无需其他元数据或标注。若被接受,录音将被摄取、标注并在下一语料库版本发布。
分段与时间
v1 包含上述对齐排行榜以及同一录音上的两个可选平行排行榜:
- 词时间:针对输出逐词时间的系统:每个词的开始和结束与真值的接近程度。
- 分段:针对检测诵读者停顿(waqf)位置的系统:检测分段与实际 waqf 的匹配程度。
Space 还接受同一系统身份下独立评分的 segmentation 和 word timing 结果。CPU/GPU 运行与任务替换相互独立。可选择一个或多个任务,上传文件,一起预览所有选定任务,并一次确认发布。
- Segmentation 接收完整录音并返回
{"segments": [{"start_s": 1.0, "end_s": 4.0}]}。无需文本或引用。runtime_seconds可选,附带 CPU/GPU 硬件元数据。 - Timing 接收现有已审核片段及其提供的引用。返回一个
<recording-id>.json,内容为{"clips": [{"words": [{"start_s": 0.0, "end_s": 0.7}, null]}, {"words": null}]},按数据集分段与词顺序。时间为片段相对时间。words: null表示该片段中所有词未计时。无 runtime 字段。 - 一个 ZIP 中多任务时,使用
alignment/<id>.json、segmentation/<id>.json和timing/<id>.json。单任务时,平铺 ZIP 或单个 JSON 文件可用。Space 处理元数据与版本。
从本仓库检出安装 pip install -e ".[corpus]" 以使用新任务命令。从选定语料库准备 timing 输入(需 PATH 上有 FFmpeg):
bash qab fetch --corpus v1 --out corpus qab prepare-timing --cases corpus --out timing-inputs qab score predictions --task timing --cases corpus --out timing-report.json qab score predictions --task segmentation --cases corpus --out segmentation-report.json
prepare-timing 使用现有分段开始/结束边界而不添加上下文。每条录音的输入 JSON 列出其 WAV 片段、引用和有序词,不含目标词时间戳。旧获取的本地 case 文件必须重新获取以包含已审核分段。
Space 的 Metrics 标签解释所有分数与容差。额外任务的实现契约见 docs/TASKS.md。
版本管理
语料库版本化(数据集配置 v1、v2、……)。分数始终附加到其计算所用的语料库版本。网站打开最新版本;历史语料库版本有单独的只读视图,从不与当前结果混合。仅最新语料库接受提交。报告携带 corpus_version 和 scorer_version。
许可证
本仓库所有内容及数据集标注和描述性列采用 CC BY 4.0。音频录音不在此许可证覆盖范围内。




