工作清單

ASR模型如何计算字错率和词错率 | 语音识别模型如何判断准不准确 | 英语词错率计算 | 中文字错率计算

逐字稿文字預覽

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函数
那我把它传递来
它计算出来的就是
整体的一个
整体的一个这个自收率
那自收率也一样去这样的方式
来进去算的
好那我们就是给大家去讲解
到这里然后还没有关注的
我的小伙也记得
关注一下
而是比较动得变成为互相录虎皮尾

來源:transcript.txt

本次執行流程與問題處理

  1. 下達指令

    指令:videonote https://b23.tv/LRmWq30 --language zh --adopt-source-subtitles

    來源:https://b23.tv/LRmWq30

    辨識語言:zh | 參數:--language zh --adopt-source-subtitles

  2. 預期流程

    依指令產生的處理順序:

    1. 採用來源字幕(略過語音辨識)
    2. 來源選擇與品質檢查
    3. 文字校正與句子單元
    4. 筆記與發布
    5. 公開網頁發布
  3. 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 秒

    關係:依序執行

    結果:完成

  4. 2. 全文快速校讀

    工具:videonote_rapid_transcript_review.py

    處理:先速讀完整逐字稿,再修正高可信突兀詞句並列出待確認項目

    產出:rapid_transcript_review_report.json(產出檔案)

    耗時:42.0 秒

    關係:依序執行

    結果:完成

  5. 3. 建立句子單元

    工具:videonote-build-sentence-units

    處理:將逐字稿切成帶時間軸的句子單元

    產出:sentence_units.json(句子單元)

    耗時:0.1 秒

    關係:依序執行

    結果:完成

  6. 4. 句子密度平衡

    工具:videonote_balance_sentence_units.py

    處理:平衡句子長度與密度

    產出:sentence_units.json(句子單元)

    耗時:0.1 秒

    關係:依序執行

    結果:完成

  7. 5. 時間軸稽核

    工具:videonote_timeline_audit.py

    處理:檢查時間軸與音訊對齊

    產出:timeline_audit_report.json(時間軸稽核)

    耗時:0.1 秒

    關係:依序執行

    結果:失敗

    問題:exit code 46

  8. 6. 品質檢查

    工具:videonote_controlled_quality.py(檢查時間軸與品質)

    處理:檢查語言、時間軸與可讀性品質

    產出:controlled_quality_report.json(品質報告)、language_sanity_report.json(語言檢查)

    耗時:0.2 秒

    關係:依序執行

    結果:完成

  9. 7. 播放時間軸回填

    工具:videonote_rebase_display_timeline.py

    處理:將網頁播放時間軸回填為校正字幕時間

    產出:display_timeline_rebase_report.json(時間軸回填報告)

    耗時:0.2 秒

    關係:依序執行

    結果:完成

  10. 8. 逐字稿交叉檢查

    工具:videonote_cross_check_transcript.py

    處理:交叉檢查逐字稿與來源字幕

    產出:transcript_crosscheck_report.json(交叉檢查)

    耗時:0.2 秒

    關係:依序執行

    結果:完成

  11. 9. 來源句整理

    工具:videonote_prepare_source_entries.py

    處理:整理來源句子供時間軸與頁面使用

    產出:sentence_units.json(句子單元)

    耗時:0.3 秒

    關係:依序執行

    結果:完成

  12. 10. 生成筆記摘要

    工具:videonote-generate-note(生成筆記摘要)

    處理:生成筆記摘要與重點

    產出:note.md(筆記 Markdown)、note.html(筆記 HTML)

    耗時:93.7 秒

    關係:依序執行

    結果:完成

  13. 11. 建立筆記頁面

    工具:videonote-render-html(產生筆記 HTML)

    處理:產生可閱讀的筆記 HTML 頁面

    產出:note.html(筆記 HTML)

    耗時:0.8 秒

    關係:依序執行

    結果:完成

  14. 12. 發布公開頁面

    工具:videonote-publish(發布公開頁面)

    處理:發布到公開網站與每日列表

    產出:公開筆記網址、result.json(管線結果)

    耗時:0.9 秒

    關係:依序執行

    結果:完成

手動來源字幕

自動來源字幕

Whisper 字幕

Qwen 字幕

Parakeet 字幕

MOSS 字幕

聲學時間證據(PyAnnote / WhisperX)

校正前後逐字稿

目前待解決問題與初步改善方向

進一步精進字幕與筆記
使用 Workbench 上傳校正字幕、中文參考稿或回饋 SRT,重新產生雙語與學習單元。
開啟 Workbench