逐字稿文字預覽
Hello各位B站的同學大家好,歡迎大家收看我的視頻。 那麼很久沒有更新視頻了,那麼這期的話,我會跟大家講一下這個ASR當中怎麼去計算這個字錯率和詞錯率,以及什麼情況下用這個字錯率,什麼情況下用這個詞錯率。 嗯 这像我们看到的这个是 评估这个尺寿率的 我们先讲一下这个尺寿率 我们可以用一个开源度 一个python依赖 一个python依赖叫做jiwer这个依赖 然后在这个依赖当中啊 他有提供了一些方法 或者说是一些函数啊 比如说我们 在计算这个WER 也就是持错率的时候 我们就调用这个 如果我们计算的是持错率的话 那我们就调用CER 那我们这里可以收一下 那就这个 这个的话就是计算的是 持错率 我们看一下怎么去写的 首先我们是 先要去加载我们的一个模型进来 就是这个checkpoint要再进来 比如说我们用的是签问3A上 那我们就去 导入这个相关的一个依赖 安装的依赖并导入 然后在这里的话我们就去 加载到这个模型站 这个模型然后再有return返回 然后我们在这里去调用 拿到这个模型 然后调用它的下面的这个 transcribe 函数 然后方法 然后 这个就是推理了 就是生成我们的一个结果 比如说我们传入一个音频audio 然后拿到这个结果之后的话 我们解析这个结果 这个是解析的结果 然后解析完成之后的话 我们是把它放入 放入这个列表当中 这个是表示是 A3模型生成的这个文字啊这个内容 然后下面这个存储的是 引用也就是标注 标注的一个文文内容 然后这个我们 要写一个 函数去 加载去读取我们的这个Jeternel文件 就是我们训练的时候是分为几大集合 一个是训练集验证集测试集 是你要读取 比如说我们读取这个测试集 把它读取通过这个函数 读取进来最终的话 是发挥一个列表list 然后这个列表是这样的一个形式 一个列表每一个元素的话 那是一个这个 字典格式或者说是design格式 有两个字段 一个是audio 一个是test 然后这个是对应的一个音频 然后对应的音频 然后这个是音频对应标注的一个文明内容 然后返回到这里 这里我们就进行便利拿到每一个 每一个这个 标注的一个文明内容 然后以及对应的一个这个音频 其中这个音频的话我们传进去这个 签文模型当中进行推理 推理产生的一个结果 然后这个推理产生结果 然后我们把它放入到这个列表当中 然后这个是另外一个列表的话就是 存储的是这个标注的一种笔 然后的话我们就计算 用这个函数去计算 这个 此错率 然后我们传入 这个是引用的有个文件内容 然后这个是 ASA生成的一个内容 在传入之后的话 我们又做一个正整化进行处理 比如说我们把这个英文字母统一转成小写 同时去掉连续的一个多个空格 把它合并成一个空格 就是做一个统一规范化 然后我们再去 去真正去计算它的一个磁数率 最终的话是返回这个磁数率到这个第二个地方 然后我们就打印最终的一个持续率 这里是保留小数点后四位 然后最终就能够知道这个 持续率了 然后这个是持续 持续率的话是针对英语 藏语这些他有 有像比如说我们这个英文名字 他有这个空格 一个空格间隔开来的 这种的话我们通常就是用这个 持续率的一个方式来统计 像我们的一个藏语 藏语是就是 假设他也是每一个有 上文每一个之间的话是通过这个 空格来进分个开来 那我们就可以去统计他的一个辞受率 而不是辞受率 你看像这个英文 实际上也是每一个的话是有空格间隔开来 如果这里比如说空了两个格的话 我们刚才那里正则表达式的时候 我们会把它去掉啊 去掉一个空格就是只保留一个空格 然后字错率的话 我们通常是用在像中文 中文的话它有什么特点 比如说我们像这里中文的话 它是每一个字之间是没有空格的 每一个字之间是相互 就是挨者的是没有间隙的 那么这种情况的话 我们就求它的一个字错率 你就记住 就是每一个字之间如果有空格 那我们就用它的一个持组率 如果每一个字间它仅挨着 像这种仅挨着 用持组率来进行计算 好那我们这次的话就是 对我们就给大家看一下这个求 制作率的话 制作率的话 我们是用的是另外一个模型 比如说我们这个是Prolformer这个模型 求它的一个制作率 其中中文的话 我们需要去注意 它转写出来的 A3转写出来的一个文本的话 它可能会出现这个 就是比如说像 雕号码 身份证号码这些 还有这个时间这些的话 它会是非阿拉伯数字 那么你要把它统一化 比如说你标注的是阿拉伯数字 但是你在这个A3模型 输出的结果当中 它输出的是 是中文的一个数字表示 那么你这个时候 就会计算它的一个制作率的时候 就计算不准 我们需要统一 需要统一化 比如说像这个6月1号 那我们统一阿拉伯数字 转成这个6月1号 或者说我们统一 转成这个中文 这个汉字的一个表示方式 6月1号 就是反正你要统一 无论你是最终是用阿拉伯 把阿拉伯数字来表示 还是用汉语 还是用这个汉字来进行 表示这个数字 都行 就是要统一化 这里的话 那我们就是用到了一个依赖 用到一个依赖就是CN2 就是汉语转的阿拉伯语 转的阿拉伯的数字 我们需要去安装它如果没有安装的话 它会提示这个 你直接给大家来进行安装就可以 一般的话我们 一般的话我们安装这个飞下的话 它没问题安装这个 应该飞下它里面的话 也要用到这个依赖吧 就是我们在这里啊在这里 那这里的话我们去调用了这个 这个函数 这个方法 它就能够去把这个CN就是表示汉语啊 把它转成的AN的话就是阿拉伯 阿拉伯数字啊 把这个汉语的一个数字转成阿拉伯的一个数字表示 然后下面这个的话就是 就是反过来就是把阿拉伯的 这个转成这个汉语的一个表示啊 就是比如说我们看到的这个 就是生日6月1号这个数字六合一 把它转成这个汉语的一个六合一就这种 然后下面这个这个这个就 这个这个就不是一个档 嗯好那我们就是 因为汉语的话 他是没有这个所谓的这个大小写的一个字母类型式的 所以这个的话你 这个的话就是无所谓的这个 你不用加这个 lower也是可以的 小写的这个这个不用加这个 不用加这个 lower也是可以的 然后其他的我们看一下 对我们在读取 读取我们的一个比如说测试集的一个点 呃 ICP文件说啊 或者说是TX文件说啊 我们需要去注意 我们读入进来的一定要格式的话 肯定用这个呃 编码的话 编码不说 一定要用这个YouTube-8啊 不要呃 用其他的 你肯定用这个啊 呃 程序开发动作 一般用这个YouTube-8 呃 嗯 然后其他都就 没有什么 需要去注意 呃 如果你是要测那种有 就是ASR他模型输出 有这个Valienfout这些的话 那么你还要考虑去掉这个Valienfout 之后再去评估它的一个自受率 因为我用的这个Proformer 他这个模型的话 是不能输出这个Valienfout的 他只输出这个存文版能字的 所以我们就没有去考虑说 要去掉这个Valienfout的一种事情 比如说你用的是这个Valienfout Nono2512或者说是 Sanswisemall这两个模型的话 他能够去输出这个标点符号 那么你就需要去去掉标点符号 然后再去计算他的一个自措率 或者说是持措率 然后这里再讲一下这个平均自措 这个平均自措率 和这个整体自措率是什么意思 平均平均自措率的话 就是我们计算出 每一句话对应的一个自措率 然后再去相加每一句话 辞出率求和也就相加求和 然后再除以这个总的一个据数 总的比如说我这个测试集有1000条数据 那我们最终 就是相加之后我们就再除以1000 就这意思 最终的话就是平均的一个 CER也就是平均的一个辞出率 而整体的一个辞出率的话 我们就是直接去调用这个JiW ER中的一个CER函数 那我把它传递来 它计算出来的就是 整体的一个 整体的一个这个自收率 那自收率也一样去这样的方式 来进去算的 好那我们就是给大家去讲解 到这里然后还没有关注的 我的小伙也记得 关注一下 而是比较动得变成为互相录虎皮尾
本次執行流程與問題處理
下達指令
預期流程
- 採用來源字幕(略過語音辨識)
- 來源選擇與品質檢查
- 文字校正與句子單元
- 筆記與發布
- 公開網頁發布
1. 下載與語音辨識
工具:videonote-transcribe-url(主辨識管線:下載、Whisper 辨識與選稿)
處理:下載音訊、以 Whisper 辨識並選出最佳逐字稿
產出:yt_dlp_meta.json(影片元資料)、audio_16k_mono.wav(16kHz 單聲道音訊)、transcript.whisper.json(Whisper 辨識結果)、transcript.json(正式逐字稿)、transcript_selection_report.json(來源選擇報告)
耗時:91.0 秒
關係:依序執行
結果:完成
2. 全文快速校讀
工具:videonote_rapid_transcript_review.py
處理:先速讀完整逐字稿,再修正高可信突兀詞句並列出待確認項目
產出:rapid_transcript_review_report.json(產出檔案)
耗時:42.0 秒
關係:依序執行
結果:完成
3. 建立句子單元
工具:videonote-build-sentence-units
處理:將逐字稿切成帶時間軸的句子單元
產出:sentence_units.json(句子單元)
耗時:0.1 秒
關係:依序執行
結果:完成
4. 句子密度平衡
工具:videonote_balance_sentence_units.py
處理:平衡句子長度與密度
產出:sentence_units.json(句子單元)
耗時:0.1 秒
關係:依序執行
結果:完成
5. 時間軸稽核
工具:videonote_timeline_audit.py
處理:檢查時間軸與音訊對齊
產出:timeline_audit_report.json(時間軸稽核)
耗時:0.1 秒
關係:依序執行
結果:失敗
問題:exit code 46
6. 品質檢查
工具:videonote_controlled_quality.py(檢查時間軸與品質)
處理:檢查語言、時間軸與可讀性品質
產出:controlled_quality_report.json(品質報告)、language_sanity_report.json(語言檢查)
耗時:0.2 秒
關係:依序執行
結果:完成
7. 播放時間軸回填
工具:videonote_rebase_display_timeline.py
處理:將網頁播放時間軸回填為校正字幕時間
產出:display_timeline_rebase_report.json(時間軸回填報告)
耗時:0.2 秒
關係:依序執行
結果:完成
8. 逐字稿交叉檢查
工具:videonote_cross_check_transcript.py
處理:交叉檢查逐字稿與來源字幕
產出:transcript_crosscheck_report.json(交叉檢查)
耗時:0.2 秒
關係:依序執行
結果:完成
9. 來源句整理
工具:videonote_prepare_source_entries.py
處理:整理來源句子供時間軸與頁面使用
產出:sentence_units.json(句子單元)
耗時:0.3 秒
關係:依序執行
結果:完成
10. 生成筆記摘要
工具:videonote-generate-note(生成筆記摘要)
處理:生成筆記摘要與重點
產出:note.md(筆記 Markdown)、note.html(筆記 HTML)
耗時:93.7 秒
關係:依序執行
結果:完成
11. 建立筆記頁面
工具:videonote-render-html(產生筆記 HTML)
處理:產生可閱讀的筆記 HTML 頁面
產出:note.html(筆記 HTML)
耗時:0.8 秒
關係:依序執行
結果:完成
12. 發布公開頁面
工具:videonote-publish(發布公開頁面)
處理:發布到公開網站與每日列表
產出:公開筆記網址、result.json(管線結果)
耗時:0.9 秒
關係:依序執行
結果:完成
手動來源字幕
- 尚未產生
自動來源字幕
Whisper 字幕
Qwen 字幕
- 尚未產生
Parakeet 字幕
- 尚未產生
MOSS 字幕
- 尚未產生
聲學時間證據(PyAnnote / WhisperX)
- 尚未產生
校正前後逐字稿
- 校正前 transcript.whisper.json 純文字 JSON
- 校正後 transcript.json 純文字 JSON
目前待解決問題與初步改善方向
- 逐字稿全文快速校讀未完成
已保留自動字幕/原始逐字稿並繼續生成筆記。;未完成的全文速讀項目可在精進模式回聽確認。;RAPID_REVIEW_STATUS=REVIEW_REQUIRED_INVALID_OUTPUT
- 部分時間軸可能不精確
unit 146: 10 chars owns 10.120s (max 8.333s)
- Qwen3-ASR 未完成,需確認 qwen_asr_lab 環境與音訊後重試精進模式。