WEBVTT

00:00:00.000 --> 00:00:04.000
Hello各位B站的同學大家好,歡迎大家收看我的視頻。

00:00:04.000 --> 00:00:19.000
那麼很久沒有更新視頻了,那麼這期的話,我會跟大家講一下這個ASR當中怎麼去計算這個字錯率和詞錯率,以及什麼情況下用這個字錯率,什麼情況下用這個詞錯率。

00:00:19.000 --> 00:00:21.840
嗯

00:00:21.840 --> 00:00:25.060
这像我们看到的这个是

00:00:25.060 --> 00:00:28.480
评估这个尺寿率的

00:00:28.480 --> 00:00:29.960
我们先讲一下这个尺寿率

00:00:29.960 --> 00:00:33.820
我们可以用一个开源度

00:00:33.820 --> 00:00:34.920
一个python依赖

00:00:34.920 --> 00:00:39.960
一个python依赖叫做jiwer这个依赖

00:00:39.960 --> 00:00:41.480
然后在这个依赖当中啊

00:00:41.480 --> 00:00:44.000
他有提供了一些方法

00:00:44.000 --> 00:00:48.400
或者说是一些函数啊

00:00:48.400 --> 00:00:50.200
比如说我们

00:00:50.700 --> 00:00:52.760
在计算这个WER

00:00:53.000 --> 00:00:54.540
也就是持错率的时候

00:00:54.540 --> 00:00:55.560
我们就调用这个

00:00:56.340 --> 00:00:58.120
如果我们计算的是持错率的话

00:00:58.120 --> 00:01:00.180
那我们就调用CER

00:01:05.040 --> 00:01:06.320
那我们这里可以收一下

00:01:07.600 --> 00:01:08.120
那就这个

00:01:08.360 --> 00:01:10.420
这个的话就是计算的是

00:01:10.680 --> 00:01:11.440
持错率

00:01:15.800 --> 00:01:18.100
我们看一下怎么去写的

00:01:18.400 --> 00:01:22.760
首先我们是

00:01:22.760 --> 00:01:26.600
先要去加载我们的一个模型进来

00:01:26.600 --> 00:01:29.400
就是这个checkpoint要再进来

00:01:29.400 --> 00:01:33.500
比如说我们用的是签问3A上

00:01:33.500 --> 00:01:34.800
那我们就去

00:01:34.800 --> 00:01:37.860
导入这个相关的一个依赖

00:01:37.860 --> 00:01:39.200
安装的依赖并导入

00:01:39.200 --> 00:01:40.800
然后在这里的话我们就去

00:01:40.800 --> 00:01:42.660
加载到这个模型站

00:01:42.660 --> 00:01:45.160
这个模型然后再有return返回

00:01:45.160 --> 00:01:46.960
然后我们在这里去调用

00:01:46.960 --> 00:01:50.420
拿到这个模型

00:01:50.420 --> 00:01:53.400
然后调用它的下面的这个

00:01:53.400 --> 00:01:55.660
transcribe 函数

00:01:55.660 --> 00:01:56.660
然后方法

00:01:56.660 --> 00:01:57.760
然后

00:01:57.760 --> 00:01:59.540
这个就是推理了

00:01:59.540 --> 00:02:01.640
就是生成我们的一个结果

00:02:01.640 --> 00:02:04.260
比如说我们传入一个音频audio

00:02:04.260 --> 00:02:09.900
然后拿到这个结果之后的话

00:02:09.900 --> 00:02:11.140
我们解析这个结果

00:02:11.140 --> 00:02:13.480
这个是解析的结果

00:02:13.480 --> 00:02:15.760
然后解析完成之后的话

00:02:15.760 --> 00:02:17.560
我们是把它放入

00:02:18.060 --> 00:02:20.360
放入这个列表当中

00:02:23.960 --> 00:02:25.480
这个是表示是

00:02:26.000 --> 00:02:29.320
A3模型生成的这个文字啊这个内容

00:02:30.100 --> 00:02:32.400
然后下面这个存储的是

00:02:32.660 --> 00:02:34.200
引用也就是标注

00:02:34.440 --> 00:02:36.240
标注的一个文文内容

00:02:37.780 --> 00:02:39.560
然后这个我们

00:02:40.840 --> 00:02:42.120
要写一个

00:02:42.380 --> 00:02:43.400
函数去

00:02:43.400 --> 00:02:47.160
加载去读取我们的这个Jeternel文件

00:02:47.160 --> 00:02:51.120
就是我们训练的时候是分为几大集合

00:02:51.120 --> 00:02:53.900
一个是训练集验证集测试集

00:02:53.900 --> 00:02:55.640
是你要读取

00:02:55.640 --> 00:02:57.680
比如说我们读取这个测试集

00:02:57.680 --> 00:03:00.440
把它读取通过这个函数

00:03:00.440 --> 00:03:03.300
读取进来最终的话

00:03:03.300 --> 00:03:05.540
是发挥一个列表list

00:03:05.540 --> 00:03:08.100
然后这个列表是这样的一个形式

00:03:08.100 --> 00:03:10.680
一个列表每一个元素的话

00:03:10.680 --> 00:03:13.280
那是一个这个

00:03:14.720 --> 00:03:17.680
字典格式或者说是design格式

00:03:20.320 --> 00:03:21.880
有两个字段

00:03:21.880 --> 00:03:24.520
一个是audio 一个是test

00:03:24.520 --> 00:03:26.320
然后这个是对应的一个音频

00:03:26.320 --> 00:03:27.520
然后对应的音频

00:03:27.520 --> 00:03:30.120
然后这个是音频对应标注的一个文明内容

00:03:30.320 --> 00:03:32.240
然后返回到这里

00:03:32.240 --> 00:03:34.640
这里我们就进行便利拿到每一个

00:03:35.640 --> 00:03:37.520
每一个这个

00:03:37.920 --> 00:03:39.120
标注的一个文明内容

00:03:39.120 --> 00:03:41.120
然后以及对应的一个这个音频

00:03:41.120 --> 00:03:43.720
其中这个音频的话我们传进去这个

00:03:43.980 --> 00:03:45.780
签文模型当中进行推理

00:03:46.040 --> 00:03:47.320
推理产生的一个结果

00:03:47.320 --> 00:03:48.600
然后这个推理产生结果

00:03:48.600 --> 00:03:50.640
然后我们把它放入到这个列表当中

00:03:51.160 --> 00:03:53.460
然后这个是另外一个列表的话就是

00:03:53.720 --> 00:03:55.760
存储的是这个标注的一种笔

00:03:56.020 --> 00:03:57.800
然后的话我们就计算

00:04:00.620 --> 00:04:02.680
用这个函数去计算

00:04:02.920 --> 00:04:03.700
这个

00:04:03.960 --> 00:04:04.720
此错率

00:04:05.240 --> 00:04:06.260
然后我们传入

00:04:06.520 --> 00:04:08.040
这个是引用的有个文件内容

00:04:08.040 --> 00:04:08.820
然后这个是

00:04:09.120 --> 00:04:10.620
ASA生成的一个内容

00:04:12.120 --> 00:04:14.080
在传入之后的话

00:04:14.080 --> 00:04:17.420
我们又做一个正整化进行处理

00:04:17.420 --> 00:04:21.920
比如说我们把这个英文字母统一转成小写

00:04:21.920 --> 00:04:24.820
同时去掉连续的一个多个空格

00:04:24.820 --> 00:04:26.080
把它合并成一个空格

00:04:27.420 --> 00:04:29.420
就是做一个统一规范化

00:04:29.420 --> 00:04:31.320
然后我们再去

00:04:31.820 --> 00:04:35.180
去真正去计算它的一个磁数率

00:04:35.180 --> 00:04:38.860
最终的话是返回这个磁数率到这个第二个地方

00:04:38.860 --> 00:04:41.160
然后我们就打印最终的一个持续率

00:04:41.160 --> 00:04:44.160
这里是保留小数点后四位

00:04:44.160 --> 00:04:46.800
然后最终就能够知道这个

00:04:46.800 --> 00:04:48.660
持续率了

00:04:48.660 --> 00:04:49.800
然后这个是持续

00:04:49.800 --> 00:04:51.700
持续率的话是针对英语

00:04:51.700 --> 00:04:53.600
藏语这些他有

00:04:53.600 --> 00:04:56.560
有像比如说我们这个英文名字

00:04:56.560 --> 00:04:58.760
他有这个空格

00:04:58.760 --> 00:05:00.520
一个空格间隔开来的

00:05:00.520 --> 00:05:03.220
这种的话我们通常就是用这个

00:05:03.220 --> 00:05:05.060
持续率的一个方式来统计

00:05:05.060 --> 00:05:06.900
像我们的一个藏语

00:05:06.900 --> 00:05:08.820
藏语是就是

00:05:08.860 --> 00:05:11.100
假设他也是每一个有

00:05:12.460 --> 00:05:15.220
上文每一个之间的话是通过这个

00:05:16.260 --> 00:05:17.620
空格来进分个开来

00:05:17.620 --> 00:05:19.860
那我们就可以去统计他的一个辞受率

00:05:19.860 --> 00:05:20.900
而不是辞受率

00:05:21.300 --> 00:05:22.860
你看像这个英文

00:05:22.860 --> 00:05:26.260
实际上也是每一个的话是有空格间隔开来

00:05:26.260 --> 00:05:27.960
如果这里比如说空了两个格的话

00:05:27.960 --> 00:05:30.420
我们刚才那里正则表达式的时候

00:05:30.420 --> 00:05:32.100
我们会把它去掉啊

00:05:32.100 --> 00:05:34.020
去掉一个空格就是只保留一个空格

00:05:38.860 --> 00:05:46.520
然后字错率的话

00:05:46.520 --> 00:05:49.200
我们通常是用在像中文

00:05:49.200 --> 00:05:50.380
中文的话它有什么特点

00:05:50.380 --> 00:05:51.940
比如说我们像这里中文的话

00:05:51.940 --> 00:05:55.460
它是每一个字之间是没有空格的

00:05:55.460 --> 00:05:56.920
每一个字之间是相互

00:05:56.920 --> 00:05:58.960
就是挨者的是没有间隙的

00:05:58.960 --> 00:06:00.140
那么这种情况的话

00:06:00.140 --> 00:06:01.940
我们就求它的一个字错率

00:06:01.940 --> 00:06:06.080
你就记住

00:06:06.080 --> 00:06:10.120
就是每一个字之间如果有空格

00:06:10.120 --> 00:06:12.640
那我们就用它的一个持组率

00:06:12.640 --> 00:06:14.180
如果每一个字间它仅挨着

00:06:14.180 --> 00:06:14.920
像这种仅挨着

00:06:14.920 --> 00:06:17.020
用持组率来进行计算

00:06:17.020 --> 00:06:27.140
好那我们这次的话就是

00:06:27.140 --> 00:06:29.240
对我们就给大家看一下这个求

00:06:29.240 --> 00:06:29.820
制作率的话

00:06:29.820 --> 00:06:30.280
制作率的话

00:06:30.280 --> 00:06:31.800
我们是用的是另外一个模型

00:06:31.800 --> 00:06:34.340
比如说我们这个是Prolformer这个模型

00:06:34.340 --> 00:06:35.900
求它的一个制作率

00:06:35.900 --> 00:06:37.240
其中中文的话

00:06:37.240 --> 00:06:38.160
我们需要去注意

00:06:38.160 --> 00:06:39.580
它转写出来的

00:06:39.580 --> 00:06:41.600
A3转写出来的一个文本的话

00:06:41.600 --> 00:06:42.900
它可能会出现这个

00:06:42.900 --> 00:06:44.540
就是比如说像

00:06:44.540 --> 00:06:45.580
雕号码

00:06:45.580 --> 00:06:46.600
身份证号码这些

00:06:46.600 --> 00:06:48.180
还有这个时间这些的话

00:06:48.180 --> 00:06:52.060
它会是非阿拉伯数字

00:06:52.060 --> 00:06:54.900
那么你要把它统一化

00:06:54.900 --> 00:06:56.600
比如说你标注的是阿拉伯数字

00:06:56.600 --> 00:06:59.180
但是你在这个A3模型

00:06:59.180 --> 00:07:00.100
输出的结果当中

00:07:00.100 --> 00:07:00.860
它输出的是

00:07:00.860 --> 00:07:03.100
是中文的一个数字表示

00:07:03.100 --> 00:07:04.360
那么你这个时候

00:07:04.360 --> 00:07:06.140
就会计算它的一个制作率的时候

00:07:06.140 --> 00:07:06.820
就计算不准

00:07:06.820 --> 00:07:08.020
我们需要统一

00:07:08.020 --> 00:07:09.160
需要统一化

00:07:09.160 --> 00:07:11.220
比如说像这个6月1号

00:07:11.220 --> 00:07:12.880
那我们统一阿拉伯数字

00:07:12.880 --> 00:07:14.480
转成这个6月1号

00:07:14.480 --> 00:07:15.700
或者说我们统一

00:07:15.700 --> 00:07:17.480
转成这个中文

00:07:17.480 --> 00:07:19.280
这个汉字的一个表示方式

00:07:19.280 --> 00:07:20.100
6月1号

00:07:20.100 --> 00:07:22.220
就是反正你要统一

00:07:22.220 --> 00:07:23.820
无论你是最终是用阿拉伯

00:07:23.820 --> 00:07:25.760
把阿拉伯数字来表示

00:07:25.760 --> 00:07:26.880
还是用汉语

00:07:26.880 --> 00:07:28.060
还是用这个汉字来进行

00:07:28.060 --> 00:07:28.860
表示这个数字

00:07:28.860 --> 00:07:30.040
都行

00:07:30.040 --> 00:07:31.140
就是要统一化

00:07:31.140 --> 00:07:33.820
这里的话

00:07:33.820 --> 00:07:36.060
那我们就是用到了一个依赖

00:07:36.060 --> 00:07:38.420
用到一个依赖就是CN2

00:07:38.420 --> 00:07:40.920
就是汉语转的阿拉伯语

00:07:40.920 --> 00:07:42.520
转的阿拉伯的数字

00:07:44.520 --> 00:07:46.320
我们需要去安装它如果没有安装的话

00:07:46.320 --> 00:07:47.220
它会提示这个

00:07:47.220 --> 00:07:48.820
你直接给大家来进行安装就可以

00:07:49.320 --> 00:07:51.020
一般的话我们

00:07:51.020 --> 00:07:52.720
一般的话我们安装这个飞下的话

00:07:52.720 --> 00:07:53.820
它没问题安装这个

00:07:53.820 --> 00:07:55.420
应该飞下它里面的话

00:07:55.420 --> 00:07:57.420
也要用到这个依赖吧

00:08:02.519 --> 00:08:09.059
就是我们在这里啊在这里

00:08:09.059 --> 00:08:11.879
那这里的话我们去调用了这个

00:08:11.879 --> 00:08:14.919
这个函数

00:08:14.919 --> 00:08:16.959
这个方法

00:08:16.959 --> 00:08:21.659
它就能够去把这个CN就是表示汉语啊

00:08:21.659 --> 00:08:23.779
把它转成的AN的话就是阿拉伯

00:08:23.779 --> 00:08:24.919
阿拉伯数字啊

00:08:24.919 --> 00:08:27.699
把这个汉语的一个数字转成阿拉伯的一个数字表示

00:08:27.699 --> 00:08:29.379
然后下面这个的话就是

00:08:29.379 --> 00:08:31.739
就是反过来就是把阿拉伯的

00:08:31.739 --> 00:08:34.319
这个转成这个汉语的一个表示啊

00:08:34.319 --> 00:08:36.579
就是比如说我们看到的这个

00:08:36.579 --> 00:08:39.239
就是生日6月1号这个数字六合一

00:08:39.239 --> 00:08:41.519
把它转成这个汉语的一个六合一就这种

00:08:42.639 --> 00:08:45.039
然后下面这个这个这个就

00:08:45.039 --> 00:08:47.939
这个这个就不是一个档

00:08:53.379 --> 00:08:55.619
嗯好那我们就是

00:08:59.379 --> 00:09:03.379
因为汉语的话

00:09:03.379 --> 00:09:06.019
他是没有这个所谓的这个大小写的一个字母类型式的

00:09:06.019 --> 00:09:07.419
所以这个的话你

00:09:07.419 --> 00:09:10.459
这个的话就是无所谓的这个

00:09:10.459 --> 00:09:12.879
你不用加这个 lower也是可以的

00:09:12.879 --> 00:09:16.079
小写的这个这个不用加这个

00:09:16.079 --> 00:09:17.699
不用加这个 lower也是可以的

00:09:17.699 --> 00:09:19.899
然后其他的我们看一下

00:09:19.899 --> 00:09:21.699
对我们在读取

00:09:21.699 --> 00:09:25.539
读取我们的一个比如说测试集的一个点

00:09:25.539 --> 00:09:26.639
呃

00:09:26.639 --> 00:09:28.539
ICP文件说啊

00:09:28.539 --> 00:09:30.399
或者说是TX文件说啊

00:09:30.399 --> 00:09:31.559
我们需要去注意

00:09:31.559 --> 00:09:33.259
我们读入进来的一定要格式的话

00:09:33.259 --> 00:09:34.759
肯定用这个呃

00:09:34.759 --> 00:09:35.599
编码的话

00:09:35.599 --> 00:09:36.099
编码不说

00:09:36.099 --> 00:09:37.959
一定要用这个YouTube-8啊

00:09:37.959 --> 00:09:39.199
不要呃

00:09:39.199 --> 00:09:40.119
用其他的

00:09:40.119 --> 00:09:41.539
你肯定用这个啊

00:09:41.539 --> 00:09:43.399
呃

00:09:43.399 --> 00:09:44.319
程序开发动作

00:09:44.319 --> 00:09:45.359
一般用这个YouTube-8

00:09:45.359 --> 00:09:45.839
呃

00:09:45.839 --> 00:09:47.119
嗯

00:09:47.119 --> 00:09:48.999
然后其他都就

00:09:48.999 --> 00:09:51.859
没有什么

00:09:51.859 --> 00:09:52.979
需要去注意

00:09:52.979 --> 00:09:53.759
呃

00:09:53.759 --> 00:09:56.459
如果你是要测那种有

00:09:56.599 --> 00:09:58.219
就是ASR他模型输出

00:09:58.219 --> 00:09:59.659
有这个Valienfout这些的话

00:09:59.659 --> 00:10:01.819
那么你还要考虑去掉这个Valienfout

00:10:01.819 --> 00:10:04.159
之后再去评估它的一个自受率

00:10:04.299 --> 00:10:06.359
因为我用的这个Proformer

00:10:06.359 --> 00:10:07.799
他这个模型的话

00:10:07.799 --> 00:10:09.899
是不能输出这个Valienfout的

00:10:09.899 --> 00:10:11.799
他只输出这个存文版能字的

00:10:11.799 --> 00:10:13.759
所以我们就没有去考虑说

00:10:13.759 --> 00:10:15.719
要去掉这个Valienfout的一种事情

00:10:15.719 --> 00:10:17.759
比如说你用的是这个Valienfout

00:10:17.759 --> 00:10:19.959
Nono2512或者说是

00:10:20.219 --> 00:10:22.399
Sanswisemall这两个模型的话

00:10:22.399 --> 00:10:25.659
他能够去输出这个标点符号

00:10:25.659 --> 00:10:29.339
那么你就需要去去掉标点符号

00:10:29.339 --> 00:10:31.959
然后再去计算他的一个自措率

00:10:31.959 --> 00:10:32.999
或者说是持措率

00:10:37.999 --> 00:10:40.439
然后这里再讲一下这个平均自措

00:10:40.439 --> 00:10:41.799
这个平均自措率

00:10:41.799 --> 00:10:44.359
和这个整体自措率是什么意思

00:10:44.359 --> 00:10:46.399
平均平均自措率的话

00:10:46.399 --> 00:10:48.039
就是我们计算出

00:10:48.039 --> 00:10:50.939
每一句话对应的一个自措率

00:10:50.939 --> 00:10:53.899
然后再去相加每一句话

00:10:54.379 --> 00:10:56.939
辞出率求和也就相加求和

00:10:56.939 --> 00:11:00.899
然后再除以这个总的一个据数

00:11:00.899 --> 00:11:04.099
总的比如说我这个测试集有1000条数据

00:11:04.099 --> 00:11:05.699
那我们最终

00:11:05.699 --> 00:11:07.379
就是相加之后我们就再除以1000

00:11:07.379 --> 00:11:08.299
就这意思

00:11:08.299 --> 00:11:10.779
最终的话就是平均的一个

00:11:11.139 --> 00:11:13.499
CER也就是平均的一个辞出率

00:11:13.579 --> 00:11:14.899
而整体的一个辞出率的话

00:11:14.899 --> 00:11:19.179
我们就是直接去调用这个JiW

00:11:19.179 --> 00:11:21.979
ER中的一个CER函数

00:11:21.979 --> 00:11:23.419
那我把它传递来

00:11:23.419 --> 00:11:24.639
它计算出来的就是

00:11:24.639 --> 00:11:26.779
整体的一个

00:11:26.779 --> 00:11:29.439
整体的一个这个自收率

00:11:29.439 --> 00:11:32.099
那自收率也一样去这样的方式

00:11:32.099 --> 00:11:32.659
来进去算的

00:11:32.659 --> 00:11:41.899
好那我们就是给大家去讲解

00:11:41.899 --> 00:11:44.619
到这里然后还没有关注的

00:11:44.619 --> 00:11:45.899
我的小伙也记得

00:11:45.899 --> 00:11:46.899
关注一下

00:11:46.899 --> 00:11:50.099
而是比较动得变成为互相录虎皮尾
