十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PaddleSpeech 错误率计算模块深入解析:WER 与 CER 的实现原理、调用链与测试验证

PaddleSpeech 错误率计算模块深入解析:WER 与 CER 的实现原理、调用链与测试验证 人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载本文聚焦 PaddleSpeech 中负责语音识别ASR效果评估的核心模块paddlespeech.s2t.utils.error_rate系统讲解词错误率WER与字符错误率CER的数学定义、Levenshtein 距离的工程实现、批处理评估类ErrorCalculator的设计以及该模块在 U2、DeepSpeech2、HuBERT 等识别模型训练与测试流程中的真实调用方式。读完本文你将能独立理解、复用并自行实现一套标准化的 ASR 错误率评估工具。模块定位与文档入口在 PaddleSpeech 中ASR 模型的识别质量并不直接用准不准衡量而是用编辑距离归一化后的错误率来度量词级使用 WER字符级使用 CER。该能力的全部实现集中在模块源码paddlespeech/s2t/utils/error_rate.pyAPI 文档声明docs/source/api/paddlespeech.s2t.utils.error_rate.rsterror_rate.rst通过 Sphinx 的automodule指令自动生成模块文档members、undoc-members、show-inheritance三个选项分别表示展示全部成员、未写 docstring 的成员以及继承关系。而模块源码通过__all__ [word_errors, char_errors, wer, cer, ErrorCalculator]显式声明了对外公开的 5 个 API本文即围绕这 5 个 API 展开。WER 与 CER 的数学定义模块在wer与cer的 docstring 中给出了标准定义WER (Sw Dw Iw) / Nw CER (Sc Dc Ic) / Nc其中符号含义Sw / Sc被替换substituted的词 / 字符数Dw / Dc被删除deleted的词 / 字符数Iw / Ic被插入inserted的词 / 字符数Nw / Nc参考文本reference中的词 / 字符总数公式本质上是把假设文本hypothesis编辑成参考文本reference所需的最少单步编辑次数除以参考长度。编辑次数越低、参考长度越大错误率越低当两个文本完全一致时错误率为 0。实现上编辑次数直接复用 Levenshtein 距离因此wer/cer的计算质量取决于底层编辑距离的实现精度与效率。核心引擎O(min(m, n)) 空间优化的 Levenshtein 距离word_errors与char_errors都委托给模块内部的私有函数_levenshtein_distance(ref, hyp)error_rate.py其实现有三个值得注意的工程细节长度交换保证内存下界当m n时交换ref与hyp确保外层循环遍历较长序列、内层循环遍历较短序列从而把 DP 表的宽度压到n 1。滚动数组节省空间经典 DP 需要(m1) × (n1)的二维矩阵这里改用np.zeros((2, n 1), dtypenp.int32)的两行滚动数组通过prev_row_idx (i - 1) % 2与cur_row_idx i % 2交替读写空间复杂度从 O(mn) 降为 O(min(m, n))这对批式评估长句子的场景意义明显。转移方程完整覆盖三种编辑对于不匹配的字符取替换s_num distance[prev_row_idx][j-1] 1、插入i_num distance[cur_row_idx][j-1] 1、删除d_num distance[prev_row_idx][j] 1三者最小值匹配则直接继承对角线值。特别地源码注释保留了被替换掉的第三方实现editdistance.eval并注明editdistance.eavl precisionless than_levenshtein_distance原文笔误即精度考量说明 PaddleSpeech 有意使用自研整数 DP 而非第三方库。模块顶部仍import editdistance供ErrorCalculator类使用。词级与字符级错误计数word_errors / char_errorsword_errors(reference, hypothesis, ignore_caseFalse, delimiter )error_rate.py以delimiter默认空格切分句子并通过list(filter(None, ...))剔除空串随后在词序列上计算编辑距离返回(编辑距离, 参考词数)二元组。char_errors(reference, hypothesis, ignore_caseFalse, remove_spaceFalse)error_rate.py则在字符序列上计算。它先把句子按空格切分再以join_char重组remove_spaceTrue时join_char从而去掉内部空格后逐字符比较。两个函数都支持ignore_case先统一转小写。关键差异与注意事项空格处理策略不同word_errors依赖 delimiter 切分天然忽略连续空格char_errors会把首尾空格截断、连续多个空格合并为一个docstring 明确说明因此were wolf与were wolf的 CER 为 0见测试test_cer_3。返回值是计数对而非比率真正的归一化发生在wer/cer中这使得调用方可以像 u2/model.py 那样跨 batch 累加errors_sum与len_refs最终统一计算整体错误率。归一化出口wer 与 cer 函数wer(reference, hypothesis, ignore_caseFalse, delimiter )error_rate.py与cer(reference, hypothesis, ignore_caseFalse, remove_spaceFalse)error_rate.py分别包装上述两个计数函数返回float(edit_distance) / ref_len。两者共同的边界处理当参考长度ref_len 0时抛出ValueErrorwer报References word number should be greater than 0.cer报Length of reference should be greater than 0.。这意味着空参考文本不能参与错误率统计。中文等字符语言应使用cerdocstring 特别提醒Chinese input should be encoded to unicodePython 3 中 str 天然为 Unicode直接用即可。参数速查表函数主要参数默认值作用werignore_caseFalse是否忽略大小写werdelimiter 词切分分隔符cerignore_caseFalse是否忽略大小写cerremove_spaceFalse是否去除句子内部空格后再按字符比较训练期批评估类ErrorCalculator除单句函数外模块还提供面向训练/验证循环的ErrorCalculatorerror_rate.py其 docstring 明确用途为 Calculate CER and WER for E2E_ASR and CTC models during training。构造函数签名ErrorCalculator(char_list, sym_space, sym_blank, report_cerFalse, report_werFalse)char_list词表字符索引到字符的映射用于把模型输出的 token id 序列还原成文本sym_space/sym_blank词表中空格与blank特殊符号report_cer/report_wer是否分别统计 CER / WER构造时通过char_list.index(...)预先解析出 blank 与 space 的索引避免热循环内重复查找。核心流程在__call__(ys_hat, ys_pad, is_ctcFalse)中is_ctcTrue时直接走calculate_cer_ctc先对预测序列做groupby合并 CTC 的重复帧error_rate.py再剔除-1填充、blank 与 space 索引还原字符后累加editdistance.eval结果与参考长度返回句级平均 CER否则经convert_to_char把(batch, seqlen)的索引张量批量还原为文本截断到-1结束符位置space符号替换为真实空格、blank符号删除再按report_cer/report_wer开关调用calculate_cer/calculate_wer。注意calculate_cer会replace( , )去掉空格后按字符计算calculate_wer则split()后按词计算二者均返回所有句子的编辑距离总和 / 参考长度总和而非逐句平均后取平均保证与单句cer/wer的口径一致。在 ASR 模型评估流程中的实际调用该模块是 PaddleSpeech 多个 ASR 实验exps的统一评估后端。以 paddlespeech/s2t/exps/u2/model.py 为例U2Tester 的compute_metrics中通过配置文件决定用哪个函数errors_func error_rate.char_errors if decode_config.error_rate_type cer else error_rate.word_errors error_rate_func error_rate.cer if decode_config.error_rate_type cer else error_rate.wer即配置文件中的decode.error_rate_type字段cer或wer直接决定评估粒度随后对每条语句调用errors_func(target, result)累加errors_sum与len_refs并在test()阶段u2/model.py输出RTF实时率与最终错误率同时把error_rate_type、err_sum、ref_len等元信息写入result_file.errJSON 文件。相同的模式还出现在paddlespeech/s2t/exps/deepspeech2/model.pyDeepSpeech2 评估paddlespeech/s2t/exps/hubert/model.py 与 wavlm/model.py、wav2vec2/model.py、u2_kaldi/model.py 等自监督与流式模型评估相邻的 paddlespeech/s2t/utils/bleu_score.py 定义了同名ErrorCalculator用于 ST 任务的 BLEU 统计而 u2_st/model.py 在error_rate_type char-bleu时切换到字符级 BLEU。可见error_rate_type已抽象为贯穿 ASR/ST 评估配置的通用字段。单元测试验证与数值口径模块的正确性由 tests/unit/asr/error_rate_test.py 中的 15 个用例覆盖可作为理解语义的活文档WER 基础用例test_wer_1~test_wer_5如test_wer_1中参考i UM the PHONE IS i LEFT THE portable PHONE UPSTAIRS last night对假设i GOT IT TO the FULLEST i LOVE TO portable FROM OF STORES last night期望 WER ≈ 0.769230769231test_wer_5只有一词差异unc and ojovsunc in ojoWER ≈ 0.027027027。完全一致test_wer_6、test_cer_4验证完全相同文本错误率为 0.0。空参考抛错test_wer_7、test_cer_8验证ValueError分支。CER 空格语义test_cer_1中werewolfvsweae wolf默认 CER 0.25test_cer_2加remove_spaceTrue后变为 0.125test_cer_3证明仅连续空格差异时 CER 为 0。中文 CERtest_cer_5中我是中国人vs我是 美洲人期望 CER 0.6test_cer_6中remove_spaceTrue后我 是 中 国 人vs我 是 美 洲 人期望 CER 0.4——正好演示了中文场景下remove_space参数的实用价值。小结与使用建议paddlespeech.s2t.utils.error_rate用约 360 行代码提供了从单句 WER/CER 到训练期批式 CTC 评估的完整能力其设计要点可归纳为自研滚动数组 Levenshtein 距离空间占用 O(min(m, n))并以整数矩阵保证精度word_errors/char_errors返回距离 参考长度计数对便于跨 batch 精确聚合wer/cer负责归一化并统一处理空参考异常ErrorCalculator面向训练循环兼容 CTC 解码含重复帧合并与注意力解码两种输出形态通过decode.error_rate_type配置项与cer/wer二选一策略无缝接入 U2、DeepSpeech2、HuBERT、WavLM 等模型的评估管线。如果你要在自己的 ASR 项目里做效果评估直接复用该模块即可获得与 PaddleSpeech 官方实验一致的口径若需要修改评测逻辑例如新增句级平均模式以 error_rate_test.py 为回归基准是最稳妥的起点。赞分享人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech 词错误率与字符错误率计算模块解析从 Levenshtein 距离到 WER/CER 实战指南PaddleSpeech 词错误率与字符错误率计算模块解析从 Levenshtein 距离到 WER/CER 实战指南 本篇技术指南聚焦 PaddleSpee人工智能语音音频PaddleSpeech 语音识别误差率计算模块解析从 WER/CER 公式到 ErrorCalculator 训练集成PaddleSpeech 语音识别误差率计算模块解析从 WER/CER 公式到 ErrorCalculator 训练集成 PaddleSpeech 的 pad人工智能语音音频NLP媒体生成whisper错误率分析WER和CER指标的理解与应用whisper错误率分析WER和CER指标的理解与应用 引言语音识别系统的精度密码 你是否曾经历过语音转文字结果与实际发音大相径庭的尴尬在智能语音助手人工智能语音音频基础模型创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表