Skip to content

Commit d72b920

Browse files
committed
feat(classroom): P0-1 识别评估基线工具(CER + 热词命中率 + 语料规范)
- eval.mjs:--self-test/--file/--cloud/--local 四模式,聚合 CER 与热词命中率报告 - lib/cer.mjs:编辑距离 CER(中文逐字/英文按词,全半角归一化,滚动数组内存优化) - lib/hotwordHit.mjs:术语命中率(含替换纠正命中、notInRef 剔除口径) - corpus/README.md:10 节课语料规范(清单入库、音频不入库) - docs/asr-eval-baseline/BASELINE-2026-08-16.md:算法自检与基线记录框架
1 parent 511092e commit d72b920

6 files changed

Lines changed: 663 additions & 0 deletions

File tree

‎client/scripts/asr-eval/README.md‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# 课堂识别评估工具(asr-eval)
2+
3+
> 用途:课堂助手识别评估基线(P0-1)——CER(字错率)+ 热词命中率,对齐市场口径(AISHELL 评测体系 + 竞品热词验收)。
4+
5+
## 快速开始
6+
7+
```bash
8+
# 算法自检(无引擎/语料依赖,CI 可跑)
9+
node scripts/asr-eval/eval.mjs --self-test
10+
11+
# 离线评测语料中预置的识别文本
12+
node scripts/asr-eval/eval.mjs --file
13+
14+
# 经 AI 网关转写后评测(需网关运行)
15+
node scripts/asr-eval/eval.mjs --cloud
16+
17+
# 本地 sherpa 转写评测(需 LOCAL_ASR_MODEL_DIR 指向 zipformer 模型目录)
18+
# 注意:sherpa-onnx-node 为 Electron ABI 编译,纯 Node 环境加载失败是预期现象,
19+
# 本地引擎评测请走 --cloud 或在 Electron 主进程环境内跑
20+
LOCAL_ASR_MODEL_DIR=... node scripts/asr-eval/eval.mjs --local
21+
```
22+
23+
## 指标口径
24+
25+
| 指标 | 定义 | 口径 |
26+
|---|---|---|
27+
| CER | (替换+删除+插入) / 参考字符数 | 中文逐字、英文按词;参考文本全角转半角归一化 |
28+
| 热词命中率 | 命中术语数 / 参考中出现的术语数 | 术语在参考中出现且识别文本命中(含替换词纠正后命中);未在参考出现的术语不计分母 |
29+
30+
## 语料
31+
32+
见 `corpus/README.md`(清单入库、音频与转写不入库)。基线报告见 `docs/asr-eval-baseline/`。
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# 课堂识别评估语料规范(corpus/)
2+
3+
> 用途:课堂助手识别评估基线(P0-1)的语料目录。**语料文件本身不入库**(版权与体积),仅清单 `manifest.json` 与说明入库。
4+
5+
## 目录结构
6+
7+
```
8+
corpus/
9+
├── manifest.json # 语料清单(入库;见下格式)
10+
├── ref/ # 参考转写(人工校对,.txt,不入库)
11+
├── audio/ # 音频(16kHz/16bit/单声道 WAV,不入库)
12+
└── transcripts/ # 预置识别文本(可选,不入库)
13+
```
14+
15+
## 准备语料(一次性)
16+
17+
1. **选取 10 节课样本**:5 节知识授课(网课/讲座)+ 5 节软件技能(PS/剪辑/编程),各约 10 分钟。
18+
2. **音频**:用应用内课堂助手采集(smart 路径)或自行导出,统一转为 **16kHz / 16bit / 单声道 WAV**(推荐 `ffmpeg -i in.m4a -ar 16000 -ac 1 -sample_fmt s16 out.wav`)。
19+
3. **参考转写**:人工校对文字稿(含标点),保存 `ref/<id>.txt`。
20+
4. **术语表**:每节课整理 20-50 个课程专属术语(教师名字、学科名词、软件菜单/参数名),写入 manifest 的 `terms` 字段。
21+
5. 填写 `manifest.json`(格式见下),运行评测。
22+
23+
## manifest.json 格式
24+
25+
```json
26+
{
27+
"items": [
28+
{
29+
"id": "course-math-01",
30+
"label": "线性代数第3讲(网课)",
31+
"referenceFile": "ref/course-math-01.txt",
32+
"audioFile": "audio/course-math-01.wav",
33+
"mode": "auto",
34+
"terms": ["线性代数", "特征值", "矩阵的逆"],
35+
"language": "zh",
36+
"sampleRate": 16000,
37+
"channels": 1
38+
}
39+
]
40+
}
41+
```
42+
43+
- `mode`:`auto`(默认,CJK 逐字 + 拉丁按词)/ `char` / `word`
44+
- `--file` 模式可用 `hypothesis`(内嵌文本)或 `hypothesisFile`(transcripts/ 下文件)代替引擎转写
45+
46+
## 版权提示
47+
48+
语料仅用于本地质量回归,勿将他人课程音视频公开分发;参考转写为个人学习用途的合理使用。

0 commit comments

Comments
 (0)