實際影片長度:11:53.666。原文、繁中、雙語可點擊句子跳轉影片。
0:00.000–0:04.000
Hello各位B站的同學大家好,歡迎大家收看我的視頻。
0:04.000–0:06.400
那麼很久沒有更新視頻了,
0:06.400–0:07.800
那麼這期的話,
0:07.800–0:13.800
我會跟大家講一下這個ASR當中怎麼去計算這個字錯率和詞錯率,
0:13.800–0:16.600
以及什麼情況下用這個字錯率,
0:16.600–0:19.000
什麼情況下用這個詞錯率。
0:19.000–0:21.840
嗯
0:21.840–0:25.060
这像我们看到的这个是
0:25.060–0:28.480
评估这个尺寿率的
0:28.480–0:29.960
我们先讲一下这个尺寿率
0:29.960–0:33.820
我们可以用一个开源度
0:33.820–0:34.920
一个python依赖
0:34.920–0:39.960
一个python依赖叫做jiwer这个依赖
0:39.960–0:41.480
然后在这个依赖当中啊
0:41.480–0:44.000
他有提供了一些方法
0:44.000–0:48.400
或者说是一些函数啊
0:48.400–0:50.200
比如说我们
0:50.700–0:52.760
在计算这个WER
0:53.000–0:54.540
也就是持错率的时候
0:54.540–0:55.560
我们就调用这个
0:56.340–0:58.120
如果我们计算的是持错率的话
0:58.120–1:00.180
那我们就调用CER
1:05.040–1:06.320
那我们这里可以收一下
1:07.600–1:08.120
那就这个
1:08.360–1:10.420
这个的话就是计算的是
1:10.680–1:11.440
持错率
1:15.800–1:18.100
我们看一下怎么去写的
1:18.400–1:22.760
首先我们是
1:22.760–1:26.600
先要去加载我们的一个模型进来
1:26.600–1:29.400
就是这个checkpoint要再进来
1:29.400–1:33.500
比如说我们用的是签问3A上
1:33.500–1:34.800
那我们就去
1:34.800–1:37.860
导入这个相关的一个依赖
1:37.860–1:39.200
安装的依赖并导入
1:39.200–1:40.800
然后在这里的话我们就去
1:40.800–1:42.660
加载到这个模型站
1:42.660–1:45.160
这个模型然后再有return返回
1:45.160–1:46.960
然后我们在这里去调用
1:46.960–1:50.420
拿到这个模型
1:50.420–1:53.400
然后调用它的下面的这个
1:53.400–1:55.660
transcribe 函数
1:55.660–1:56.660
然后方法
1:56.660–1:57.760
然后
1:57.760–1:59.540
这个就是推理了
1:59.540–2:01.640
就是生成我们的一个结果
2:01.640–2:04.260
比如说我们传入一个音频audio
2:04.260–2:09.900
然后拿到这个结果之后的话
2:09.900–2:11.140
我们解析这个结果
2:11.140–2:13.480
这个是解析的结果
2:13.480–2:15.760
然后解析完成之后的话
2:15.760–2:17.560
我们是把它放入
2:18.060–2:20.360
放入这个列表当中
2:23.960–2:25.480
这个是表示是
2:26.000–2:29.320
A3模型生成的这个文字啊这个内容
2:30.100–2:32.400
然后下面这个存储的是
2:32.660–2:34.200
引用也就是标注
2:34.440–2:36.240
标注的一个文文内容
2:37.780–2:39.560
然后这个我们
2:40.840–2:42.120
要写一个
2:42.380–2:43.400
函数去
2:43.400–2:47.160
加载去读取我们的这个Jeternel文件
2:47.160–2:51.120
就是我们训练的时候是分为几大集合
2:51.120–2:53.900
一个是训练集验证集测试集
2:53.900–2:55.640
是你要读取
2:55.640–2:57.680
比如说我们读取这个测试集
2:57.680–3:00.440
把它读取通过这个函数
3:00.440–3:03.300
读取进来最终的话
3:03.300–3:05.540
是发挥一个列表list
3:05.540–3:08.100
然后这个列表是这样的一个形式
3:08.100–3:10.680
一个列表每一个元素的话
3:10.680–3:13.280
那是一个这个
3:14.720–3:17.680
字典格式或者说是design格式
3:20.320–3:21.880
有两个字段
3:21.880–3:24.520
一个是audio 一个是test
3:24.520–3:26.320
然后这个是对应的一个音频
3:26.320–3:27.520
然后对应的音频
3:27.520–3:30.120
然后这个是音频对应标注的一个文明内容
3:30.320–3:32.240
然后返回到这里
3:32.240–3:34.640
这里我们就进行便利拿到每一个
3:35.640–3:37.520
每一个这个
3:37.920–3:39.120
标注的一个文明内容
3:39.120–3:41.120
然后以及对应的一个这个音频
3:41.120–3:43.720
其中这个音频的话我们传进去这个
3:43.980–3:45.780
签文模型当中进行推理
3:46.040–3:47.320
推理产生的一个结果
3:47.320–3:48.600
然后这个推理产生结果
3:48.600–3:50.640
然后我们把它放入到这个列表当中
3:51.160–3:53.460
然后这个是另外一个列表的话就是
3:53.720–3:55.760
存储的是这个标注的一种笔
3:56.020–3:57.800
然后的话我们就计算
4:00.620–4:02.680
用这个函数去计算
4:02.920–4:03.700
这个
4:03.960–4:04.720
此错率
4:05.240–4:06.260
然后我们传入
4:06.520–4:08.040
这个是引用的有个文件内容
4:08.040–4:08.820
然后这个是
4:09.120–4:10.620
ASA生成的一个内容
4:12.120–4:14.080
在传入之后的话
4:14.080–4:17.420
我们又做一个正整化进行处理
4:17.420–4:21.920
比如说我们把这个英文字母统一转成小写
4:21.920–4:24.820
同时去掉连续的一个多个空格
4:24.820–4:26.080
把它合并成一个空格
4:27.420–4:29.420
就是做一个统一规范化
4:29.420–4:31.320
然后我们再去
4:31.820–4:35.180
去真正去计算它的一个磁数率
4:35.180–4:38.860
最终的话是返回这个磁数率到这个第二个地方
4:38.860–4:41.160
然后我们就打印最终的一个持续率
4:41.160–4:44.160
这里是保留小数点后四位
4:44.160–4:46.800
然后最终就能够知道这个
4:46.800–4:48.660
持续率了
4:48.660–4:49.800
然后这个是持续
4:49.800–4:51.700
持续率的话是针对英语
4:51.700–4:53.600
藏语这些他有
4:53.600–4:56.560
有像比如说我们这个英文名字
4:56.560–4:58.760
他有这个空格
4:58.760–5:00.520
一个空格间隔开来的
5:00.520–5:03.220
这种的话我们通常就是用这个
5:03.220–5:05.060
持续率的一个方式来统计
5:05.060–5:06.900
像我们的一个藏语
5:06.900–5:08.820
藏语是就是
5:08.860–5:11.100
假设他也是每一个有
5:12.460–5:15.220
上文每一个之间的话是通过这个
5:16.260–5:17.620
空格来进分个开来
5:17.620–5:19.860
那我们就可以去统计他的一个辞受率
5:19.860–5:20.900
而不是辞受率
5:21.300–5:22.860
你看像这个英文
5:22.860–5:26.260
实际上也是每一个的话是有空格间隔开来
5:26.260–5:27.960
如果这里比如说空了两个格的话
5:27.960–5:30.420
我们刚才那里正则表达式的时候
5:30.420–5:32.100
我们会把它去掉啊
5:32.100–5:34.020
去掉一个空格就是只保留一个空格
5:38.860–5:46.520
然后字错率的话
5:46.520–5:49.200
我们通常是用在像中文
5:49.200–5:50.380
中文的话它有什么特点
5:50.380–5:51.940
比如说我们像这里中文的话
5:51.940–5:55.460
它是每一个字之间是没有空格的
5:55.460–5:56.920
每一个字之间是相互
5:56.920–5:58.960
就是挨者的是没有间隙的
5:58.960–6:00.140
那么这种情况的话
6:00.140–6:01.940
我们就求它的一个字错率
6:01.940–6:06.080
你就记住
6:06.080–6:10.120
就是每一个字之间如果有空格
6:10.120–6:12.640
那我们就用它的一个持组率
6:12.640–6:14.180
如果每一个字间它仅挨着
6:14.180–6:14.920
像这种仅挨着
6:14.920–6:17.020
用持组率来进行计算
6:17.020–6:27.140
好那我们这次的话就是
6:27.140–6:29.240
对我们就给大家看一下这个求
6:29.240–6:29.820
制作率的话
6:29.820–6:30.320
制作率的话
6:30.320–6:31.800
我们是用的是另外一个模型
6:31.800–6:34.340
比如说我们这个是Prolformer这个模型
6:34.340–6:35.900
求它的一个制作率
6:35.900–6:37.240
其中中文的话
6:37.240–6:38.160
我们需要去注意
6:38.160–6:39.580
它转写出来的
6:39.580–6:41.600
A3转写出来的一个文本的话
6:41.600–6:42.900
它可能会出现这个
6:42.900–6:44.540
就是比如说像
6:44.540–6:45.580
雕号码
6:45.580–6:46.600
身份证号码这些
6:46.600–6:48.180
还有这个时间这些的话
6:48.180–6:52.060
它会是非阿拉伯数字
6:52.060–6:54.900
那么你要把它统一化
6:54.900–6:56.600
比如说你标注的是阿拉伯数字
6:56.600–6:59.180
但是你在这个A3模型
6:59.180–7:00.100
输出的结果当中
7:00.100–7:00.860
它输出的是
7:00.860–7:03.100
是中文的一个数字表示
7:03.100–7:04.360
那么你这个时候
7:04.360–7:06.140
就会计算它的一个制作率的时候
7:06.140–7:06.820
就计算不准
7:06.820–7:08.020
我们需要统一
7:08.020–7:09.160
需要统一化
7:09.160–7:11.220
比如说像这个6月1号
7:11.220–7:12.880
那我们统一阿拉伯数字
7:12.880–7:14.480
转成这个6月1号
7:14.480–7:15.700
或者说我们统一
7:15.700–7:17.480
转成这个中文
7:17.480–7:19.280
这个汉字的一个表示方式
7:19.280–7:20.100
6月1号
7:20.100–7:22.220
就是反正你要统一
7:22.220–7:23.820
无论你是最终是用阿拉伯
7:23.820–7:25.760
把阿拉伯数字来表示
7:25.760–7:26.880
还是用汉语
7:26.880–7:28.060
还是用这个汉字来进行
7:28.060–7:28.860
表示这个数字
7:28.860–7:30.040
都行
7:30.040–7:31.140
就是要统一化
7:31.140–7:33.820
这里的话
7:33.820–7:36.060
那我们就是用到了一个依赖
7:36.060–7:38.420
用到一个依赖就是CN2
7:38.420–7:40.920
就是汉语转的阿拉伯语
7:40.920–7:42.520
转的阿拉伯的数字
7:44.520–7:46.320
我们需要去安装它如果没有安装的话
7:46.320–7:47.220
它会提示这个
7:47.220–7:48.820
你直接给大家来进行安装就可以
7:49.320–7:51.020
一般的话我们
7:51.020–7:52.720
一般的话我们安装这个飞下的话
7:52.720–7:53.820
它没问题安装这个
7:53.820–7:55.420
应该飞下它里面的话
7:55.420–7:57.420
也要用到这个依赖吧
8:02.519–8:09.059
就是我们在这里啊在这里
8:09.059–8:11.879
那这里的话我们去调用了这个
8:11.879–8:14.919
这个函数
8:14.919–8:16.959
这个方法
8:16.959–8:21.659
它就能够去把这个CN就是表示汉语啊
8:21.659–8:23.779
把它转成的AN的话就是阿拉伯
8:23.779–8:24.919
阿拉伯数字啊
8:24.919–8:27.699
把这个汉语的一个数字转成阿拉伯的一个数字表示
8:27.699–8:29.379
然后下面这个的话就是
8:29.379–8:31.739
就是反过来就是把阿拉伯的
8:31.739–8:34.319
这个转成这个汉语的一个表示啊
8:34.319–8:36.579
就是比如说我们看到的这个
8:36.579–8:39.239
就是生日6月1号这个数字六合一
8:39.239–8:41.519
把它转成这个汉语的一个六合一就这种
8:42.639–8:45.039
然后下面这个这个这个就
8:45.039–8:47.939
这个这个就不是一个档
8:53.379–8:55.619
嗯好那我们就是
8:59.379–9:03.379
因为汉语的话
9:03.379–9:06.019
他是没有这个所谓的这个大小写的一个字母类型式的
9:06.019–9:07.419
所以这个的话你
9:07.419–9:10.459
这个的话就是无所谓的这个
9:10.459–9:12.879
你不用加这个 lower也是可以的
9:12.879–9:16.079
小写的这个这个不用加这个
9:16.079–9:17.699
不用加这个 lower也是可以的
9:17.699–9:19.899
然后其他的我们看一下
9:19.899–9:21.699
对我们在读取
9:21.699–9:25.539
读取我们的一个比如说测试集的一个点
9:25.539–9:26.639
呃
9:26.639–9:28.539
ICP文件说啊
9:28.539–9:30.399
或者说是TX文件说啊
9:30.399–9:31.559
我们需要去注意
9:31.559–9:33.259
我们读入进来的一定要格式的话
9:33.259–9:34.759
肯定用这个呃
9:34.759–9:35.599
编码的话
9:35.599–9:36.099
编码不说
9:36.099–9:37.959
一定要用这个YouTube-8啊
9:37.959–9:39.199
不要呃
9:39.199–9:40.119
用其他的
9:40.119–9:41.539
你肯定用这个啊
9:41.539–9:43.399
呃
9:43.399–9:44.319
程序开发动作
9:44.319–9:45.359
一般用这个YouTube-8
9:45.359–9:45.859
呃
9:45.859–9:47.119
嗯
9:47.119–9:48.999
然后其他都就
9:48.999–9:51.859
没有什么
9:51.859–9:52.979
需要去注意
9:52.979–9:53.759
呃
9:53.759–9:56.459
如果你是要测那种有
9:56.599–9:58.219
就是ASR他模型输出
9:58.219–9:59.659
有这个Valienfout这些的话
9:59.659–10:01.819
那么你还要考虑去掉这个Valienfout
10:01.819–10:04.159
之后再去评估它的一个自受率
10:04.299–10:06.359
因为我用的这个Proformer
10:06.359–10:07.799
他这个模型的话
10:07.799–10:09.899
是不能输出这个Valienfout的
10:09.899–10:11.799
他只输出这个存文版能字的
10:11.799–10:13.759
所以我们就没有去考虑说
10:13.759–10:15.719
要去掉这个Valienfout的一种事情
10:15.719–10:17.759
比如说你用的是这个Valienfout
10:17.759–10:19.959
Nono2512或者说是
10:20.219–10:22.399
Sanswisemall这两个模型的话
10:22.399–10:25.659
他能够去输出这个标点符号
10:25.659–10:29.339
那么你就需要去去掉标点符号
10:29.339–10:31.959
然后再去计算他的一个自措率
10:31.959–10:32.999
或者说是持措率
10:37.999–10:40.439
然后这里再讲一下这个平均自措
10:40.439–10:41.799
这个平均自措率
10:41.799–10:44.359
和这个整体自措率是什么意思
10:44.359–10:46.399
平均平均自措率的话
10:46.399–10:48.039
就是我们计算出
10:48.039–10:50.939
每一句话对应的一个自措率
10:50.939–10:53.899
然后再去相加每一句话
10:54.379–10:56.939
辞出率求和也就相加求和
10:56.939–11:00.899
然后再除以这个总的一个据数
11:00.899–11:04.099
总的比如说我这个测试集有1000条数据
11:04.099–11:05.699
那我们最终
11:05.699–11:07.379
就是相加之后我们就再除以1000
11:07.379–11:08.299
就这意思
11:08.299–11:10.779
最终的话就是平均的一个
11:11.139–11:13.499
CER也就是平均的一个辞出率
11:13.579–11:14.899
而整体的一个辞出率的话
11:14.899–11:19.179
我们就是直接去调用这个JiW
11:19.179–11:21.979
ER中的一个CER函数
11:21.979–11:23.419
那我把它传递来
11:23.419–11:24.639
它计算出来的就是
11:24.639–11:26.779
整体的一个
11:26.779–11:29.439
整体的一个这个自收率
11:29.439–11:32.099
那自收率也一样去这样的方式
11:32.099–11:32.659
来进去算的
11:32.659–11:41.899
好那我们就是给大家去讲解
11:41.899–11:44.619
到这里然后还没有关注的
11:44.619–11:45.899
我的小伙也记得
11:45.899–11:46.899
关注一下
11:46.899–11:50.099
而是比较动得变成为互相录虎皮尾
0:00.000–0:04.000
Hello各位B站的同學大家好,歡迎大家收看我的視頻。
0:04.000–0:06.400
那麼很久沒有更新視頻了,
0:06.400–0:07.800
那麼這期的話,
0:07.800–0:13.800
我會跟大家講一下這個ASR當中怎麼去計算這個字錯率和詞錯率,
0:13.800–0:16.600
以及什麼情況下用這個字錯率,
0:16.600–0:19.000
什麼情況下用這個詞錯率。
0:19.000–0:21.840
嗯
0:21.840–0:25.060
这像我们看到的这个是
0:25.060–0:28.480
评估这个尺寿率的
0:28.480–0:29.960
我们先讲一下这个尺寿率
0:29.960–0:33.820
我们可以用一个开源度
0:33.820–0:34.920
一个python依赖
0:34.920–0:39.960
一个python依赖叫做jiwer这个依赖
0:39.960–0:41.480
然后在这个依赖当中啊
0:41.480–0:44.000
他有提供了一些方法
0:44.000–0:48.400
或者说是一些函数啊
0:48.400–0:50.200
比如说我们
0:50.700–0:52.760
在计算这个WER
0:53.000–0:54.540
也就是持错率的时候
0:54.540–0:55.560
我们就调用这个
0:56.340–0:58.120
如果我们计算的是持错率的话
0:58.120–1:00.180
那我们就调用CER
1:05.040–1:06.320
那我们这里可以收一下
1:07.600–1:08.120
那就这个
1:08.360–1:10.420
这个的话就是计算的是
1:10.680–1:11.440
持错率
1:15.800–1:18.100
我们看一下怎么去写的
1:18.400–1:22.760
首先我们是
1:22.760–1:26.600
先要去加载我们的一个模型进来
1:26.600–1:29.400
就是这个checkpoint要再进来
1:29.400–1:33.500
比如说我们用的是签问3A上
1:33.500–1:34.800
那我们就去
1:34.800–1:37.860
导入这个相关的一个依赖
1:37.860–1:39.200
安装的依赖并导入
1:39.200–1:40.800
然后在这里的话我们就去
1:40.800–1:42.660
加载到这个模型站
1:42.660–1:45.160
这个模型然后再有return返回
1:45.160–1:46.960
然后我们在这里去调用
1:46.960–1:50.420
拿到这个模型
1:50.420–1:53.400
然后调用它的下面的这个
1:53.400–1:55.660
transcribe 函数
1:55.660–1:56.660
然后方法
1:56.660–1:57.760
然后
1:57.760–1:59.540
这个就是推理了
1:59.540–2:01.640
就是生成我们的一个结果
2:01.640–2:04.260
比如说我们传入一个音频audio
2:04.260–2:09.900
然后拿到这个结果之后的话
2:09.900–2:11.140
我们解析这个结果
2:11.140–2:13.480
这个是解析的结果
2:13.480–2:15.760
然后解析完成之后的话
2:15.760–2:17.560
我们是把它放入
2:18.060–2:20.360
放入这个列表当中
2:23.960–2:25.480
这个是表示是
2:26.000–2:29.320
A3模型生成的这个文字啊这个内容
2:30.100–2:32.400
然后下面这个存储的是
2:32.660–2:34.200
引用也就是标注
2:34.440–2:36.240
标注的一个文文内容
2:37.780–2:39.560
然后这个我们
2:40.840–2:42.120
要写一个
2:42.380–2:43.400
函数去
2:43.400–2:47.160
加载去读取我们的这个Jeternel文件
2:47.160–2:51.120
就是我们训练的时候是分为几大集合
2:51.120–2:53.900
一个是训练集验证集测试集
2:53.900–2:55.640
是你要读取
2:55.640–2:57.680
比如说我们读取这个测试集
2:57.680–3:00.440
把它读取通过这个函数
3:00.440–3:03.300
读取进来最终的话
3:03.300–3:05.540
是发挥一个列表list
3:05.540–3:08.100
然后这个列表是这样的一个形式
3:08.100–3:10.680
一个列表每一个元素的话
3:10.680–3:13.280
那是一个这个
3:14.720–3:17.680
字典格式或者说是design格式
3:20.320–3:21.880
有两个字段
3:21.880–3:24.520
一个是audio 一个是test
3:24.520–3:26.320
然后这个是对应的一个音频
3:26.320–3:27.520
然后对应的音频
3:27.520–3:30.120
然后这个是音频对应标注的一个文明内容
3:30.320–3:32.240
然后返回到这里
3:32.240–3:34.640
这里我们就进行便利拿到每一个
3:35.640–3:37.520
每一个这个
3:37.920–3:39.120
标注的一个文明内容
3:39.120–3:41.120
然后以及对应的一个这个音频
3:41.120–3:43.720
其中这个音频的话我们传进去这个
3:43.980–3:45.780
签文模型当中进行推理
3:46.040–3:47.320
推理产生的一个结果
3:47.320–3:48.600
然后这个推理产生结果
3:48.600–3:50.640
然后我们把它放入到这个列表当中
3:51.160–3:53.460
然后这个是另外一个列表的话就是
3:53.720–3:55.760
存储的是这个标注的一种笔
3:56.020–3:57.800
然后的话我们就计算
4:00.620–4:02.680
用这个函数去计算
4:02.920–4:03.700
这个
4:03.960–4:04.720
此错率
4:05.240–4:06.260
然后我们传入
4:06.520–4:08.040
这个是引用的有个文件内容
4:08.040–4:08.820
然后这个是
4:09.120–4:10.620
ASA生成的一个内容
4:12.120–4:14.080
在传入之后的话
4:14.080–4:17.420
我们又做一个正整化进行处理
4:17.420–4:21.920
比如说我们把这个英文字母统一转成小写
4:21.920–4:24.820
同时去掉连续的一个多个空格
4:24.820–4:26.080
把它合并成一个空格
4:27.420–4:29.420
就是做一个统一规范化
4:29.420–4:31.320
然后我们再去
4:31.820–4:35.180
去真正去计算它的一个磁数率
4:35.180–4:38.860
最终的话是返回这个磁数率到这个第二个地方
4:38.860–4:41.160
然后我们就打印最终的一个持续率
4:41.160–4:44.160
这里是保留小数点后四位
4:44.160–4:46.800
然后最终就能够知道这个
4:46.800–4:48.660
持续率了
4:48.660–4:49.800
然后这个是持续
4:49.800–4:51.700
持续率的话是针对英语
4:51.700–4:53.600
藏语这些他有
4:53.600–4:56.560
有像比如说我们这个英文名字
4:56.560–4:58.760
他有这个空格
4:58.760–5:00.520
一个空格间隔开来的
5:00.520–5:03.220
这种的话我们通常就是用这个
5:03.220–5:05.060
持续率的一个方式来统计
5:05.060–5:06.900
像我们的一个藏语
5:06.900–5:08.820
藏语是就是
5:08.860–5:11.100
假设他也是每一个有
5:12.460–5:15.220
上文每一个之间的话是通过这个
5:16.260–5:17.620
空格来进分个开来
5:17.620–5:19.860
那我们就可以去统计他的一个辞受率
5:19.860–5:20.900
而不是辞受率
5:21.300–5:22.860
你看像这个英文
5:22.860–5:26.260
实际上也是每一个的话是有空格间隔开来
5:26.260–5:27.960
如果这里比如说空了两个格的话
5:27.960–5:30.420
我们刚才那里正则表达式的时候
5:30.420–5:32.100
我们会把它去掉啊
5:32.100–5:34.020
去掉一个空格就是只保留一个空格
5:38.860–5:46.520
然后字错率的话
5:46.520–5:49.200
我们通常是用在像中文
5:49.200–5:50.380
中文的话它有什么特点
5:50.380–5:51.940
比如说我们像这里中文的话
5:51.940–5:55.460
它是每一个字之间是没有空格的
5:55.460–5:56.920
每一个字之间是相互
5:56.920–5:58.960
就是挨者的是没有间隙的
5:58.960–6:00.140
那么这种情况的话
6:00.140–6:01.940
我们就求它的一个字错率
6:01.940–6:06.080
你就记住
6:06.080–6:10.120
就是每一个字之间如果有空格
6:10.120–6:12.640
那我们就用它的一个持组率
6:12.640–6:14.180
如果每一个字间它仅挨着
6:14.180–6:14.920
像这种仅挨着
6:14.920–6:17.020
用持组率来进行计算
6:17.020–6:27.140
好那我们这次的话就是
6:27.140–6:29.240
对我们就给大家看一下这个求
6:29.240–6:29.820
制作率的话
6:29.820–6:30.320
制作率的话
6:30.320–6:31.800
我们是用的是另外一个模型
6:31.800–6:34.340
比如说我们这个是Prolformer这个模型
6:34.340–6:35.900
求它的一个制作率
6:35.900–6:37.240
其中中文的话
6:37.240–6:38.160
我们需要去注意
6:38.160–6:39.580
它转写出来的
6:39.580–6:41.600
A3转写出来的一个文本的话
6:41.600–6:42.900
它可能会出现这个
6:42.900–6:44.540
就是比如说像
6:44.540–6:45.580
雕号码
6:45.580–6:46.600
身份证号码这些
6:46.600–6:48.180
还有这个时间这些的话
6:48.180–6:52.060
它会是非阿拉伯数字
6:52.060–6:54.900
那么你要把它统一化
6:54.900–6:56.600
比如说你标注的是阿拉伯数字
6:56.600–6:59.180
但是你在这个A3模型
6:59.180–7:00.100
输出的结果当中
7:00.100–7:00.860
它输出的是
7:00.860–7:03.100
是中文的一个数字表示
7:03.100–7:04.360
那么你这个时候
7:04.360–7:06.140
就会计算它的一个制作率的时候
7:06.140–7:06.820
就计算不准
7:06.820–7:08.020
我们需要统一
7:08.020–7:09.160
需要统一化
7:09.160–7:11.220
比如说像这个6月1号
7:11.220–7:12.880
那我们统一阿拉伯数字
7:12.880–7:14.480
转成这个6月1号
7:14.480–7:15.700
或者说我们统一
7:15.700–7:17.480
转成这个中文
7:17.480–7:19.280
这个汉字的一个表示方式
7:19.280–7:20.100
6月1号
7:20.100–7:22.220
就是反正你要统一
7:22.220–7:23.820
无论你是最终是用阿拉伯
7:23.820–7:25.760
把阿拉伯数字来表示
7:25.760–7:26.880
还是用汉语
7:26.880–7:28.060
还是用这个汉字来进行
7:28.060–7:28.860
表示这个数字
7:28.860–7:30.040
都行
7:30.040–7:31.140
就是要统一化
7:31.140–7:33.820
这里的话
7:33.820–7:36.060
那我们就是用到了一个依赖
7:36.060–7:38.420
用到一个依赖就是CN2
7:38.420–7:40.920
就是汉语转的阿拉伯语
7:40.920–7:42.520
转的阿拉伯的数字
7:44.520–7:46.320
我们需要去安装它如果没有安装的话
7:46.320–7:47.220
它会提示这个
7:47.220–7:48.820
你直接给大家来进行安装就可以
7:49.320–7:51.020
一般的话我们
7:51.020–7:52.720
一般的话我们安装这个飞下的话
7:52.720–7:53.820
它没问题安装这个
7:53.820–7:55.420
应该飞下它里面的话
7:55.420–7:57.420
也要用到这个依赖吧
8:02.519–8:09.059
就是我们在这里啊在这里
8:09.059–8:11.879
那这里的话我们去调用了这个
8:11.879–8:14.919
这个函数
8:14.919–8:16.959
这个方法
8:16.959–8:21.659
它就能够去把这个CN就是表示汉语啊
8:21.659–8:23.779
把它转成的AN的话就是阿拉伯
8:23.779–8:24.919
阿拉伯数字啊
8:24.919–8:27.699
把这个汉语的一个数字转成阿拉伯的一个数字表示
8:27.699–8:29.379
然后下面这个的话就是
8:29.379–8:31.739
就是反过来就是把阿拉伯的
8:31.739–8:34.319
这个转成这个汉语的一个表示啊
8:34.319–8:36.579
就是比如说我们看到的这个
8:36.579–8:39.239
就是生日6月1号这个数字六合一
8:39.239–8:41.519
把它转成这个汉语的一个六合一就这种
8:42.639–8:45.039
然后下面这个这个这个就
8:45.039–8:47.939
这个这个就不是一个档
8:53.379–8:55.619
嗯好那我们就是
8:59.379–9:03.379
因为汉语的话
9:03.379–9:06.019
他是没有这个所谓的这个大小写的一个字母类型式的
9:06.019–9:07.419
所以这个的话你
9:07.419–9:10.459
这个的话就是无所谓的这个
9:10.459–9:12.879
你不用加这个 lower也是可以的
9:12.879–9:16.079
小写的这个这个不用加这个
9:16.079–9:17.699
不用加这个 lower也是可以的
9:17.699–9:19.899
然后其他的我们看一下
9:19.899–9:21.699
对我们在读取
9:21.699–9:25.539
读取我们的一个比如说测试集的一个点
9:25.539–9:26.639
呃
9:26.639–9:28.539
ICP文件说啊
9:28.539–9:30.399
或者说是TX文件说啊
9:30.399–9:31.559
我们需要去注意
9:31.559–9:33.259
我们读入进来的一定要格式的话
9:33.259–9:34.759
肯定用这个呃
9:34.759–9:35.599
编码的话
9:35.599–9:36.099
编码不说
9:36.099–9:37.959
一定要用这个YouTube-8啊
9:37.959–9:39.199
不要呃
9:39.199–9:40.119
用其他的
9:40.119–9:41.539
你肯定用这个啊
9:41.539–9:43.399
呃
9:43.399–9:44.319
程序开发动作
9:44.319–9:45.359
一般用这个YouTube-8
9:45.359–9:45.859
呃
9:45.859–9:47.119
嗯
9:47.119–9:48.999
然后其他都就
9:48.999–9:51.859
没有什么
9:51.859–9:52.979
需要去注意
9:52.979–9:53.759
呃
9:53.759–9:56.459
如果你是要测那种有
9:56.599–9:58.219
就是ASR他模型输出
9:58.219–9:59.659
有这个Valienfout这些的话
9:59.659–10:01.819
那么你还要考虑去掉这个Valienfout
10:01.819–10:04.159
之后再去评估它的一个自受率
10:04.299–10:06.359
因为我用的这个Proformer
10:06.359–10:07.799
他这个模型的话
10:07.799–10:09.899
是不能输出这个Valienfout的
10:09.899–10:11.799
他只输出这个存文版能字的
10:11.799–10:13.759
所以我们就没有去考虑说
10:13.759–10:15.719
要去掉这个Valienfout的一种事情
10:15.719–10:17.759
比如说你用的是这个Valienfout
10:17.759–10:19.959
Nono2512或者说是
10:20.219–10:22.399
Sanswisemall这两个模型的话
10:22.399–10:25.659
他能够去输出这个标点符号
10:25.659–10:29.339
那么你就需要去去掉标点符号
10:29.339–10:31.959
然后再去计算他的一个自措率
10:31.959–10:32.999
或者说是持措率
10:37.999–10:40.439
然后这里再讲一下这个平均自措
10:40.439–10:41.799
这个平均自措率
10:41.799–10:44.359
和这个整体自措率是什么意思
10:44.359–10:46.399
平均平均自措率的话
10:46.399–10:48.039
就是我们计算出
10:48.039–10:50.939
每一句话对应的一个自措率
10:50.939–10:53.899
然后再去相加每一句话
10:54.379–10:56.939
辞出率求和也就相加求和
10:56.939–11:00.899
然后再除以这个总的一个据数
11:00.899–11:04.099
总的比如说我这个测试集有1000条数据
11:04.099–11:05.699
那我们最终
11:05.699–11:07.379
就是相加之后我们就再除以1000
11:07.379–11:08.299
就这意思
11:08.299–11:10.779
最终的话就是平均的一个
11:11.139–11:13.499
CER也就是平均的一个辞出率
11:13.579–11:14.899
而整体的一个辞出率的话
11:14.899–11:19.179
我们就是直接去调用这个JiW
11:19.179–11:21.979
ER中的一个CER函数
11:21.979–11:23.419
那我把它传递来
11:23.419–11:24.639
它计算出来的就是
11:24.639–11:26.779
整体的一个
11:26.779–11:29.439
整体的一个这个自收率
11:29.439–11:32.099
那自收率也一样去这样的方式
11:32.099–11:32.659
来进去算的
11:32.659–11:41.899
好那我们就是给大家去讲解
11:41.899–11:44.619
到这里然后还没有关注的
11:44.619–11:45.899
我的小伙也记得
11:45.899–11:46.899
关注一下
11:46.899–11:50.099
而是比较动得变成为互相录虎皮尾
0:00.000–0:04.000
Hello各位B站的同學大家好,歡迎大家收看我的視頻。
Hello各位B站的同學大家好,歡迎大家收看我的視頻。
0:04.000–0:06.400
那麼很久沒有更新視頻了,
那麼很久沒有更新視頻了,
0:06.400–0:07.800
那麼這期的話,
那麼這期的話,
0:07.800–0:13.800
我會跟大家講一下這個ASR當中怎麼去計算這個字錯率和詞錯率,
我會跟大家講一下這個ASR當中怎麼去計算這個字錯率和詞錯率,
0:13.800–0:16.600
以及什麼情況下用這個字錯率,
以及什麼情況下用這個字錯率,
0:16.600–0:19.000
什麼情況下用這個詞錯率。
什麼情況下用這個詞錯率。
0:19.000–0:21.840
嗯
嗯
0:21.840–0:25.060
这像我们看到的这个是
这像我们看到的这个是
0:25.060–0:28.480
评估这个尺寿率的
评估这个尺寿率的
0:28.480–0:29.960
我们先讲一下这个尺寿率
我们先讲一下这个尺寿率
0:29.960–0:33.820
我们可以用一个开源度
我们可以用一个开源度
0:33.820–0:34.920
一个python依赖
一个python依赖
0:34.920–0:39.960
一个python依赖叫做jiwer这个依赖
一个python依赖叫做jiwer这个依赖
0:39.960–0:41.480
然后在这个依赖当中啊
然后在这个依赖当中啊
0:41.480–0:44.000
他有提供了一些方法
他有提供了一些方法
0:44.000–0:48.400
或者说是一些函数啊
或者说是一些函数啊
0:48.400–0:50.200
比如说我们
比如说我们
0:50.700–0:52.760
在计算这个WER
在计算这个WER
0:53.000–0:54.540
也就是持错率的时候
也就是持错率的时候
0:54.540–0:55.560
我们就调用这个
我们就调用这个
0:56.340–0:58.120
如果我们计算的是持错率的话
如果我们计算的是持错率的话
0:58.120–1:00.180
那我们就调用CER
那我们就调用CER
1:05.040–1:06.320
那我们这里可以收一下
那我们这里可以收一下
1:07.600–1:08.120
那就这个
那就这个
1:08.360–1:10.420
这个的话就是计算的是
这个的话就是计算的是
1:10.680–1:11.440
持错率
持错率
1:15.800–1:18.100
我们看一下怎么去写的
我们看一下怎么去写的
1:18.400–1:22.760
首先我们是
首先我们是
1:22.760–1:26.600
先要去加载我们的一个模型进来
先要去加载我们的一个模型进来
1:26.600–1:29.400
就是这个checkpoint要再进来
就是这个checkpoint要再进来
1:29.400–1:33.500
比如说我们用的是签问3A上
比如说我们用的是签问3A上
1:33.500–1:34.800
那我们就去
那我们就去
1:34.800–1:37.860
导入这个相关的一个依赖
导入这个相关的一个依赖
1:37.860–1:39.200
安装的依赖并导入
安装的依赖并导入
1:39.200–1:40.800
然后在这里的话我们就去
然后在这里的话我们就去
1:40.800–1:42.660
加载到这个模型站
加载到这个模型站
1:42.660–1:45.160
这个模型然后再有return返回
这个模型然后再有return返回
1:45.160–1:46.960
然后我们在这里去调用
然后我们在这里去调用
1:46.960–1:50.420
拿到这个模型
拿到这个模型
1:50.420–1:53.400
然后调用它的下面的这个
然后调用它的下面的这个
1:53.400–1:55.660
transcribe 函数
transcribe 函数
1:55.660–1:56.660
然后方法
然后方法
1:56.660–1:57.760
然后
然后
1:57.760–1:59.540
这个就是推理了
这个就是推理了
1:59.540–2:01.640
就是生成我们的一个结果
就是生成我们的一个结果
2:01.640–2:04.260
比如说我们传入一个音频audio
比如说我们传入一个音频audio
2:04.260–2:09.900
然后拿到这个结果之后的话
然后拿到这个结果之后的话
2:09.900–2:11.140
我们解析这个结果
我们解析这个结果
2:11.140–2:13.480
这个是解析的结果
这个是解析的结果
2:13.480–2:15.760
然后解析完成之后的话
然后解析完成之后的话
2:15.760–2:17.560
我们是把它放入
我们是把它放入
2:18.060–2:20.360
放入这个列表当中
放入这个列表当中
2:23.960–2:25.480
这个是表示是
这个是表示是
2:26.000–2:29.320
A3模型生成的这个文字啊这个内容
A3模型生成的这个文字啊这个内容
2:30.100–2:32.400
然后下面这个存储的是
然后下面这个存储的是
2:32.660–2:34.200
引用也就是标注
引用也就是标注
2:34.440–2:36.240
标注的一个文文内容
标注的一个文文内容
2:37.780–2:39.560
然后这个我们
然后这个我们
2:40.840–2:42.120
要写一个
要写一个
2:42.380–2:43.400
函数去
函数去
2:43.400–2:47.160
加载去读取我们的这个Jeternel文件
加载去读取我们的这个Jeternel文件
2:47.160–2:51.120
就是我们训练的时候是分为几大集合
就是我们训练的时候是分为几大集合
2:51.120–2:53.900
一个是训练集验证集测试集
一个是训练集验证集测试集
2:53.900–2:55.640
是你要读取
是你要读取
2:55.640–2:57.680
比如说我们读取这个测试集
比如说我们读取这个测试集
2:57.680–3:00.440
把它读取通过这个函数
把它读取通过这个函数
3:00.440–3:03.300
读取进来最终的话
读取进来最终的话
3:03.300–3:05.540
是发挥一个列表list
是发挥一个列表list
3:05.540–3:08.100
然后这个列表是这样的一个形式
然后这个列表是这样的一个形式
3:08.100–3:10.680
一个列表每一个元素的话
一个列表每一个元素的话
3:10.680–3:13.280
那是一个这个
那是一个这个
3:14.720–3:17.680
字典格式或者说是design格式
字典格式或者说是design格式
3:20.320–3:21.880
有两个字段
有两个字段
3:21.880–3:24.520
一个是audio 一个是test
一个是audio 一个是test
3:24.520–3:26.320
然后这个是对应的一个音频
然后这个是对应的一个音频
3:26.320–3:27.520
然后对应的音频
然后对应的音频
3:27.520–3:30.120
然后这个是音频对应标注的一个文明内容
然后这个是音频对应标注的一个文明内容
3:30.320–3:32.240
然后返回到这里
然后返回到这里
3:32.240–3:34.640
这里我们就进行便利拿到每一个
这里我们就进行便利拿到每一个
3:35.640–3:37.520
每一个这个
每一个这个
3:37.920–3:39.120
标注的一个文明内容
标注的一个文明内容
3:39.120–3:41.120
然后以及对应的一个这个音频
然后以及对应的一个这个音频
3:41.120–3:43.720
其中这个音频的话我们传进去这个
其中这个音频的话我们传进去这个
3:43.980–3:45.780
签文模型当中进行推理
签文模型当中进行推理
3:46.040–3:47.320
推理产生的一个结果
推理产生的一个结果
3:47.320–3:48.600
然后这个推理产生结果
然后这个推理产生结果
3:48.600–3:50.640
然后我们把它放入到这个列表当中
然后我们把它放入到这个列表当中
3:51.160–3:53.460
然后这个是另外一个列表的话就是
然后这个是另外一个列表的话就是
3:53.720–3:55.760
存储的是这个标注的一种笔
存储的是这个标注的一种笔
3:56.020–3:57.800
然后的话我们就计算
然后的话我们就计算
4:00.620–4:02.680
用这个函数去计算
用这个函数去计算
4:02.920–4:03.700
这个
这个
4:03.960–4:04.720
此错率
此错率
4:05.240–4:06.260
然后我们传入
然后我们传入
4:06.520–4:08.040
这个是引用的有个文件内容
这个是引用的有个文件内容
4:08.040–4:08.820
然后这个是
然后这个是
4:09.120–4:10.620
ASA生成的一个内容
ASA生成的一个内容
4:12.120–4:14.080
在传入之后的话
在传入之后的话
4:14.080–4:17.420
我们又做一个正整化进行处理
我们又做一个正整化进行处理
4:17.420–4:21.920
比如说我们把这个英文字母统一转成小写
比如说我们把这个英文字母统一转成小写
4:21.920–4:24.820
同时去掉连续的一个多个空格
同时去掉连续的一个多个空格
4:24.820–4:26.080
把它合并成一个空格
把它合并成一个空格
4:27.420–4:29.420
就是做一个统一规范化
就是做一个统一规范化
4:29.420–4:31.320
然后我们再去
然后我们再去
4:31.820–4:35.180
去真正去计算它的一个磁数率
去真正去计算它的一个磁数率
4:35.180–4:38.860
最终的话是返回这个磁数率到这个第二个地方
最终的话是返回这个磁数率到这个第二个地方
4:38.860–4:41.160
然后我们就打印最终的一个持续率
然后我们就打印最终的一个持续率
4:41.160–4:44.160
这里是保留小数点后四位
这里是保留小数点后四位
4:44.160–4:46.800
然后最终就能够知道这个
然后最终就能够知道这个
4:46.800–4:48.660
持续率了
持续率了
4:48.660–4:49.800
然后这个是持续
然后这个是持续
4:49.800–4:51.700
持续率的话是针对英语
持续率的话是针对英语
4:51.700–4:53.600
藏语这些他有
藏语这些他有
4:53.600–4:56.560
有像比如说我们这个英文名字
有像比如说我们这个英文名字
4:56.560–4:58.760
他有这个空格
他有这个空格
4:58.760–5:00.520
一个空格间隔开来的
一个空格间隔开来的
5:00.520–5:03.220
这种的话我们通常就是用这个
这种的话我们通常就是用这个
5:03.220–5:05.060
持续率的一个方式来统计
持续率的一个方式来统计
5:05.060–5:06.900
像我们的一个藏语
像我们的一个藏语
5:06.900–5:08.820
藏语是就是
藏语是就是
5:08.860–5:11.100
假设他也是每一个有
假设他也是每一个有
5:12.460–5:15.220
上文每一个之间的话是通过这个
上文每一个之间的话是通过这个
5:16.260–5:17.620
空格来进分个开来
空格来进分个开来
5:17.620–5:19.860
那我们就可以去统计他的一个辞受率
那我们就可以去统计他的一个辞受率
5:19.860–5:20.900
而不是辞受率
而不是辞受率
5:21.300–5:22.860
你看像这个英文
你看像这个英文
5:22.860–5:26.260
实际上也是每一个的话是有空格间隔开来
实际上也是每一个的话是有空格间隔开来
5:26.260–5:27.960
如果这里比如说空了两个格的话
如果这里比如说空了两个格的话
5:27.960–5:30.420
我们刚才那里正则表达式的时候
我们刚才那里正则表达式的时候
5:30.420–5:32.100
我们会把它去掉啊
我们会把它去掉啊
5:32.100–5:34.020
去掉一个空格就是只保留一个空格
去掉一个空格就是只保留一个空格
5:38.860–5:46.520
然后字错率的话
然后字错率的话
5:46.520–5:49.200
我们通常是用在像中文
我们通常是用在像中文
5:49.200–5:50.380
中文的话它有什么特点
中文的话它有什么特点
5:50.380–5:51.940
比如说我们像这里中文的话
比如说我们像这里中文的话
5:51.940–5:55.460
它是每一个字之间是没有空格的
它是每一个字之间是没有空格的
5:55.460–5:56.920
每一个字之间是相互
每一个字之间是相互
5:56.920–5:58.960
就是挨者的是没有间隙的
就是挨者的是没有间隙的
5:58.960–6:00.140
那么这种情况的话
那么这种情况的话
6:00.140–6:01.940
我们就求它的一个字错率
我们就求它的一个字错率
6:01.940–6:06.080
你就记住
你就记住
6:06.080–6:10.120
就是每一个字之间如果有空格
就是每一个字之间如果有空格
6:10.120–6:12.640
那我们就用它的一个持组率
那我们就用它的一个持组率
6:12.640–6:14.180
如果每一个字间它仅挨着
如果每一个字间它仅挨着
6:14.180–6:14.920
像这种仅挨着
像这种仅挨着
6:14.920–6:17.020
用持组率来进行计算
用持组率来进行计算
6:17.020–6:27.140
好那我们这次的话就是
好那我们这次的话就是
6:27.140–6:29.240
对我们就给大家看一下这个求
对我们就给大家看一下这个求
6:29.240–6:29.820
制作率的话
制作率的话
6:29.820–6:30.320
制作率的话
制作率的话
6:30.320–6:31.800
我们是用的是另外一个模型
我们是用的是另外一个模型
6:31.800–6:34.340
比如说我们这个是Prolformer这个模型
比如说我们这个是Prolformer这个模型
6:34.340–6:35.900
求它的一个制作率
求它的一个制作率
6:35.900–6:37.240
其中中文的话
其中中文的话
6:37.240–6:38.160
我们需要去注意
我们需要去注意
6:38.160–6:39.580
它转写出来的
它转写出来的
6:39.580–6:41.600
A3转写出来的一个文本的话
A3转写出来的一个文本的话
6:41.600–6:42.900
它可能会出现这个
它可能会出现这个
6:42.900–6:44.540
就是比如说像
就是比如说像
6:44.540–6:45.580
雕号码
雕号码
6:45.580–6:46.600
身份证号码这些
身份证号码这些
6:46.600–6:48.180
还有这个时间这些的话
还有这个时间这些的话
6:48.180–6:52.060
它会是非阿拉伯数字
它会是非阿拉伯数字
6:52.060–6:54.900
那么你要把它统一化
那么你要把它统一化
6:54.900–6:56.600
比如说你标注的是阿拉伯数字
比如说你标注的是阿拉伯数字
6:56.600–6:59.180
但是你在这个A3模型
但是你在这个A3模型
6:59.180–7:00.100
输出的结果当中
输出的结果当中
7:00.100–7:00.860
它输出的是
它输出的是
7:00.860–7:03.100
是中文的一个数字表示
是中文的一个数字表示
7:03.100–7:04.360
那么你这个时候
那么你这个时候
7:04.360–7:06.140
就会计算它的一个制作率的时候
就会计算它的一个制作率的时候
7:06.140–7:06.820
就计算不准
就计算不准
7:06.820–7:08.020
我们需要统一
我们需要统一
7:08.020–7:09.160
需要统一化
需要统一化
7:09.160–7:11.220
比如说像这个6月1号
比如说像这个6月1号
7:11.220–7:12.880
那我们统一阿拉伯数字
那我们统一阿拉伯数字
7:12.880–7:14.480
转成这个6月1号
转成这个6月1号
7:14.480–7:15.700
或者说我们统一
或者说我们统一
7:15.700–7:17.480
转成这个中文
转成这个中文
7:17.480–7:19.280
这个汉字的一个表示方式
这个汉字的一个表示方式
7:19.280–7:20.100
6月1号
6月1号
7:20.100–7:22.220
就是反正你要统一
就是反正你要统一
7:22.220–7:23.820
无论你是最终是用阿拉伯
无论你是最终是用阿拉伯
7:23.820–7:25.760
把阿拉伯数字来表示
把阿拉伯数字来表示
7:25.760–7:26.880
还是用汉语
还是用汉语
7:26.880–7:28.060
还是用这个汉字来进行
还是用这个汉字来进行
7:28.060–7:28.860
表示这个数字
表示这个数字
7:28.860–7:30.040
都行
都行
7:30.040–7:31.140
就是要统一化
就是要统一化
7:31.140–7:33.820
这里的话
这里的话
7:33.820–7:36.060
那我们就是用到了一个依赖
那我们就是用到了一个依赖
7:36.060–7:38.420
用到一个依赖就是CN2
用到一个依赖就是CN2
7:38.420–7:40.920
就是汉语转的阿拉伯语
就是汉语转的阿拉伯语
7:40.920–7:42.520
转的阿拉伯的数字
转的阿拉伯的数字
7:44.520–7:46.320
我们需要去安装它如果没有安装的话
我们需要去安装它如果没有安装的话
7:46.320–7:47.220
它会提示这个
它会提示这个
7:47.220–7:48.820
你直接给大家来进行安装就可以
你直接给大家来进行安装就可以
7:49.320–7:51.020
一般的话我们
一般的话我们
7:51.020–7:52.720
一般的话我们安装这个飞下的话
一般的话我们安装这个飞下的话
7:52.720–7:53.820
它没问题安装这个
它没问题安装这个
7:53.820–7:55.420
应该飞下它里面的话
应该飞下它里面的话
7:55.420–7:57.420
也要用到这个依赖吧
也要用到这个依赖吧
8:02.519–8:09.059
就是我们在这里啊在这里
就是我们在这里啊在这里
8:09.059–8:11.879
那这里的话我们去调用了这个
那这里的话我们去调用了这个
8:11.879–8:14.919
这个函数
这个函数
8:14.919–8:16.959
这个方法
这个方法
8:16.959–8:21.659
它就能够去把这个CN就是表示汉语啊
它就能够去把这个CN就是表示汉语啊
8:21.659–8:23.779
把它转成的AN的话就是阿拉伯
把它转成的AN的话就是阿拉伯
8:23.779–8:24.919
阿拉伯数字啊
阿拉伯数字啊
8:24.919–8:27.699
把这个汉语的一个数字转成阿拉伯的一个数字表示
把这个汉语的一个数字转成阿拉伯的一个数字表示
8:27.699–8:29.379
然后下面这个的话就是
然后下面这个的话就是
8:29.379–8:31.739
就是反过来就是把阿拉伯的
就是反过来就是把阿拉伯的
8:31.739–8:34.319
这个转成这个汉语的一个表示啊
这个转成这个汉语的一个表示啊
8:34.319–8:36.579
就是比如说我们看到的这个
就是比如说我们看到的这个
8:36.579–8:39.239
就是生日6月1号这个数字六合一
就是生日6月1号这个数字六合一
8:39.239–8:41.519
把它转成这个汉语的一个六合一就这种
把它转成这个汉语的一个六合一就这种
8:42.639–8:45.039
然后下面这个这个这个就
然后下面这个这个这个就
8:45.039–8:47.939
这个这个就不是一个档
这个这个就不是一个档
8:53.379–8:55.619
嗯好那我们就是
嗯好那我们就是
8:59.379–9:03.379
因为汉语的话
因为汉语的话
9:03.379–9:06.019
他是没有这个所谓的这个大小写的一个字母类型式的
他是没有这个所谓的这个大小写的一个字母类型式的
9:06.019–9:07.419
所以这个的话你
所以这个的话你
9:07.419–9:10.459
这个的话就是无所谓的这个
这个的话就是无所谓的这个
9:10.459–9:12.879
你不用加这个 lower也是可以的
你不用加这个 lower也是可以的
9:12.879–9:16.079
小写的这个这个不用加这个
小写的这个这个不用加这个
9:16.079–9:17.699
不用加这个 lower也是可以的
不用加这个 lower也是可以的
9:17.699–9:19.899
然后其他的我们看一下
然后其他的我们看一下
9:19.899–9:21.699
对我们在读取
对我们在读取
9:21.699–9:25.539
读取我们的一个比如说测试集的一个点
读取我们的一个比如说测试集的一个点
9:25.539–9:26.639
呃
呃
9:26.639–9:28.539
ICP文件说啊
ICP文件说啊
9:28.539–9:30.399
或者说是TX文件说啊
或者说是TX文件说啊
9:30.399–9:31.559
我们需要去注意
我们需要去注意
9:31.559–9:33.259
我们读入进来的一定要格式的话
我们读入进来的一定要格式的话
9:33.259–9:34.759
肯定用这个呃
肯定用这个呃
9:34.759–9:35.599
编码的话
编码的话
9:35.599–9:36.099
编码不说
编码不说
9:36.099–9:37.959
一定要用这个YouTube-8啊
一定要用这个YouTube-8啊
9:37.959–9:39.199
不要呃
不要呃
9:39.199–9:40.119
用其他的
用其他的
9:40.119–9:41.539
你肯定用这个啊
你肯定用这个啊
9:41.539–9:43.399
呃
呃
9:43.399–9:44.319
程序开发动作
程序开发动作
9:44.319–9:45.359
一般用这个YouTube-8
一般用这个YouTube-8
9:45.359–9:45.859
呃
呃
9:45.859–9:47.119
嗯
嗯
9:47.119–9:48.999
然后其他都就
然后其他都就
9:48.999–9:51.859
没有什么
没有什么
9:51.859–9:52.979
需要去注意
需要去注意
9:52.979–9:53.759
呃
呃
9:53.759–9:56.459
如果你是要测那种有
如果你是要测那种有
9:56.599–9:58.219
就是ASR他模型输出
就是ASR他模型输出
9:58.219–9:59.659
有这个Valienfout这些的话
有这个Valienfout这些的话
9:59.659–10:01.819
那么你还要考虑去掉这个Valienfout
那么你还要考虑去掉这个Valienfout
10:01.819–10:04.159
之后再去评估它的一个自受率
之后再去评估它的一个自受率
10:04.299–10:06.359
因为我用的这个Proformer
因为我用的这个Proformer
10:06.359–10:07.799
他这个模型的话
他这个模型的话
10:07.799–10:09.899
是不能输出这个Valienfout的
是不能输出这个Valienfout的
10:09.899–10:11.799
他只输出这个存文版能字的
他只输出这个存文版能字的
10:11.799–10:13.759
所以我们就没有去考虑说
所以我们就没有去考虑说
10:13.759–10:15.719
要去掉这个Valienfout的一种事情
要去掉这个Valienfout的一种事情
10:15.719–10:17.759
比如说你用的是这个Valienfout
比如说你用的是这个Valienfout
10:17.759–10:19.959
Nono2512或者说是
Nono2512或者说是
10:20.219–10:22.399
Sanswisemall这两个模型的话
Sanswisemall这两个模型的话
10:22.399–10:25.659
他能够去输出这个标点符号
他能够去输出这个标点符号
10:25.659–10:29.339
那么你就需要去去掉标点符号
那么你就需要去去掉标点符号
10:29.339–10:31.959
然后再去计算他的一个自措率
然后再去计算他的一个自措率
10:31.959–10:32.999
或者说是持措率
或者说是持措率
10:37.999–10:40.439
然后这里再讲一下这个平均自措
然后这里再讲一下这个平均自措
10:40.439–10:41.799
这个平均自措率
这个平均自措率
10:41.799–10:44.359
和这个整体自措率是什么意思
和这个整体自措率是什么意思
10:44.359–10:46.399
平均平均自措率的话
平均平均自措率的话
10:46.399–10:48.039
就是我们计算出
就是我们计算出
10:48.039–10:50.939
每一句话对应的一个自措率
每一句话对应的一个自措率
10:50.939–10:53.899
然后再去相加每一句话
然后再去相加每一句话
10:54.379–10:56.939
辞出率求和也就相加求和
辞出率求和也就相加求和
10:56.939–11:00.899
然后再除以这个总的一个据数
然后再除以这个总的一个据数
11:00.899–11:04.099
总的比如说我这个测试集有1000条数据
总的比如说我这个测试集有1000条数据
11:04.099–11:05.699
那我们最终
那我们最终
11:05.699–11:07.379
就是相加之后我们就再除以1000
就是相加之后我们就再除以1000
11:07.379–11:08.299
就这意思
就这意思
11:08.299–11:10.779
最终的话就是平均的一个
最终的话就是平均的一个
11:11.139–11:13.499
CER也就是平均的一个辞出率
CER也就是平均的一个辞出率
11:13.579–11:14.899
而整体的一个辞出率的话
而整体的一个辞出率的话
11:14.899–11:19.179
我们就是直接去调用这个JiW
我们就是直接去调用这个JiW
11:19.179–11:21.979
ER中的一个CER函数
ER中的一个CER函数
11:21.979–11:23.419
那我把它传递来
那我把它传递来
11:23.419–11:24.639
它计算出来的就是
它计算出来的就是
11:24.639–11:26.779
整体的一个
整体的一个
11:26.779–11:29.439
整体的一个这个自收率
整体的一个这个自收率
11:29.439–11:32.099
那自收率也一样去这样的方式
那自收率也一样去这样的方式
11:32.099–11:32.659
来进去算的
来进去算的
11:32.659–11:41.899
好那我们就是给大家去讲解
好那我们就是给大家去讲解
11:41.899–11:44.619
到这里然后还没有关注的
到这里然后还没有关注的
11:44.619–11:45.899
我的小伙也记得
我的小伙也记得
11:45.899–11:46.899
关注一下
关注一下
11:46.899–11:50.099
而是比较动得变成为互相录虎皮尾
而是比较动得变成为互相录虎皮尾

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

<!-- VIDEONOTE_PUBLICATION_WARNINGS_BEGIN -->

⚠️ 可先使用,仍有待修正項目

本筆記已完成可閱讀的逐字稿與時間跳轉;下列為待處理問題,建議播放原片確認。

  • 待修正:逐字稿全文快速校讀未完成(已保留自動字幕/原始逐字稿並繼續生成筆記。;未完成的全文速讀項目可在精進模式回聽確認。)
  • 待修正:部分時間軸可能不精確(unit 146: 10 chars owns 10.120s (max 8.333s))

<!-- VIDEONOTE_PUBLICATION_WARNINGS_END -->

一句話總結

影片講解如何使用 Python 開源庫 jiwer 計算自動語音識別(ASR)的「字錯率」(CER)與「詞錯率」(WER),並強調針對不同語言特性(如中文無空格、數字格式差異)進行數據正規化處理的重要性。

核心重點

  • 評估指標選擇:
  • 詞錯率(WER):適用於字詞間有明確空格分隔的語言,如英文、藏語。
  • 字錯率(CER):適用於字詞間緊密相連、無空格分隔的語言,如中文。
  • 數據預處理與正規化:
  • 在計算錯誤率前,必須對預測文本與標註文本進行正規化。
  • 英文處理:統一轉為小寫,並使用正則表達式將多個連續空格合併為單一空格。
  • 中文處理:無需轉小寫,但需處理數字格式統一問題。
  • 數字格式統一:
  • ASR 模型可能將數字轉寫為中文(如「六十一」),而標註為阿拉伯數字(如「61」),導致計算錯誤。
  • 使用 cn2an 庫將中文數字與阿拉伯數字進行統一轉換,確保預測與標註格式一致。
  • 標點符號處理:
  • 若模型不輸出標點符號(如 Qwen2-Audio),則無需處理。
  • 若模型輸出標點符號(如 Whisper 或 SenseVoiceSmall),需在計算前去除標點符號。
  • 指標定義區分:
  • 平均字錯率:計算每一句話的字錯率,求和後除以總句數。
  • 整體字錯率:直接調用函數,將所有預測與標註文本作為整體進行計算。

詳細大綱

I. 前言與評估工具介紹

  • 歡迎觀眾,說明本期主題:ASR 中的字錯率(CER)與詞錯率(WER)計算方法及適用場景。
  • 介紹評估工具:Python 依賴庫 jiwer。

II. 詞錯率(WER)的計算流程

  • 模型推理:
  • 加載模型 checkpoint(範例為 Qwen2-Audio)。
  • 調用 transcribe 函數對音頻進行推理,獲取轉寫結果。
  • 數據結構:
  • 讀取 JSON 格式文件(訓練集/驗證集/測試集)。
  • 數據格式為列表,元素為字典,包含 audio(音頻路徑)與 text(標註文本)。
  • 計算步驟:
  • 遍歷數據,對音頻進行推理。
  • 將推理結果與標註文本傳入 jiwer 的 WER 計算函數。
  • 正規化處理:
  • 英文字母統一轉為小寫。
  • 使用正則表達式將多個連續空格合併為單一空格。
  • 輸出保留四位小數的詞錯率。

III. 字錯率(CER)的計算與適用場景

  • 適用場景判斷:
  • 詞錯率(WER):適用於字詞間有空格間隔的語言(如英文、藏語)。
  • 字錯率(CER):適用於字詞間緊密相連、無空格的語言(如中文)。
  • 中文數據的特殊處理:
  • 數字統一化問題:ASR 輸出可能將數字轉寫為中文(如「六十一」),而標註為阿拉伯數字(如「61」),導致計算錯誤。
  • 解決方案:使用 cn2an 庫進行統一轉換。
  • 將中文數字轉為阿拉伯數字。
  • 或將阿拉伯數字轉為中文數字表示。
  • 目標是確保標註與預測的數字格式一致。
  • 大小寫處理:中文無大小寫區分,無需執行 lower() 操作。

IV. 其他注意事項與評估指標定義

  • 編碼格式:讀取 JSON/TXT 文件時,建議使用 UTF-8 編碼。
  • 標點符號處理:
  • 若模型(如 Qwen2-Audio)不輸出標點符號,則無需特別處理。
  • 若模型(如 Whisper 或 SenseVoiceSmall)輸出標點符號,需在計算前去除標點符號,再進行評估。
  • 指標定義區分:
  • 平均字錯率(Average CER):計算每一句話的字錯率,求和後除以總句數。
  • 整體字錯率(Overall CER):直接調用 jiwer 的 CER 函數,將所有預測與標註文本作為整體進行計算。

工具 / 模型 / 名詞整理

| 類別 | 名稱/版本 | 備註/原文聽寫 |
| :--- | :--- | :--- |
| Python 庫 | jiwer | 用於計算 WER 和 CER 的開源依賴 |
| Python 庫 | cn2an | 用於中文數字與阿拉伯數字轉換的依賴 |
| AI 模型 | Qwen2-Audio | 原文聽寫為「簽問3A上」,用於語音轉文字推理 |
| AI 模型 | Proformer | 原文聽寫為「Prolformer」,用於計算字錯率 |
| AI 模型 | Whisper | 原文聽寫為「Valienfout」或「Valienfout Nonono2512」,指能輸出標點符號的模型 |
| AI 模型 | SenseVoiceSmall | 原文聽寫為「Sanswisemall」,指能輸出標點符號的模型 |
| 文件格式 | JSON | 訓練/測試集數據格式 |
| 編碼格式 | UTF-8 | 原文聽寫為「YouTube-8」,建議使用的文件編碼 |

操作流程整理

  1. 準備數據:
  • 讀取包含音頻路徑與標註文本的 JSON 文件(建議 UTF-8 編碼)。
  • 數據結構為列表,元素為字典(原文聽寫為「design 格式」)。
  1. 模型推理:
  • 加載模型 checkpoint(如 Qwen2-Audio)。
  • 調用 transcribe 函數對音頻進行推理,獲取轉寫結果。
  1. 數據正規化:
  • 英文:統一轉為小寫,合併多餘空格。
  • 中文:使用 cn2an 庫統一數字格式(中文數字與阿拉伯數字互轉)。
  • 標點處理:若模型輸出標點,需先去除標點符號。
  1. 計算錯誤率:
  • 使用 jiwer 庫計算 WER 或 CER。
  • 根據需求選擇計算「平均字錯率」(逐句計算後平均)或「整體字錯率」(整體計算)。
  1. 輸出結果:
  • 輸出保留四位小數的錯誤率數值。

值得注意的限制或風險

  • 數字格式不一致導致誤判:若未使用 cn2an 等工具統一數字格式,ASR 將「六十一」轉為文字而標註為「61」,會被錯誤計為高錯誤率。
  • 標點符號干擾:若模型輸出標點而評估時未去除,會導致錯誤率計算偏高或不準確。
  • 語言特性誤用指標:對中文使用 WER(詞錯率)可能不適用,應使用 CER(字錯率)。

逐字稿辨識疑點

  • 簽問3A上:聽寫為「簽問3A上」,推測可能指代 Qwen2-Audio 或類似模型,但需查證。
  • 尺壽率 / 持錯率 / 磁數率 / 持續率 / 辭受率 / 自受率 / 自措率 / 自收率:逐字稿中對 CER 和 WER 的稱呼極度混亂,出現多種聽寫變體(如「尺壽率」、「持錯率」、「磁數率」等),需根據上下文判斷是否均指「字錯率」或「詞錯率」。
  • Prolformer:聽寫為「Prolformer」,通常語音模型為 Conformer 或 Transformer 變體,需查證具體模型名稱。
  • Valienfout / Valienfout Nonono2512:聽寫為「Valienfout」,結合上下文「輸出這個Valienfout」及「不能輸出」,極大機率是指 Whisper 模型或其特定版本/變體,但需查證。
  • Sanswisemall:聽寫為「Sanswisemall」,結合上下文指代另一款能輸出標點的模型,需查證是否為 SenseVoiceSmall 或其他模型。
  • YouTube-8:聽寫為「YouTube-8」,在討論文件編碼時出現,極大機率是指 UTF-8 編碼,但需查證。
  • Jeternel 文件:聽寫為「Jeternel文件」,指代 JSON 格式的文件。
  • design 格式:聽寫為「design 格式」,指代字典(Dictionary)格式。
  • A3 模型:聽寫為「A3 模型」,指代前述的推理模型。
  • 小寫 / lower:講者提到「不用加這個 lower 也是可以的」,指中文處理時無需轉小寫。
  • 互相錄虎皮尾:結尾口語,聽寫為「互相錄虎皮尾」,可能為「互相交流/關注」的誤聽。

可延伸追問

  • jiwer 庫在處理極端長文本或特殊字符時的表現如何?
  • 除了 cn2an,是否有其他更高效的方法處理中文數字與阿拉伯數字的轉換?
  • 對於混合語言(如中英混排)的語音識別,應如何平衡 WER 與 CER 的計算?
  • 不同模型(如 Qwen2-Audio 與 Whisper)在標點符號輸出上的具體差異對評估結果的影響有多大?

尚未產生學習筆記

請在 Telegram 指令最後加上「學習」,例如:videonote 網址 英文 雙語 學習