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

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

3
00:00:19,000 --> 00:00:21,840
嗯

4
00:00:21,840 --> 00:00:25,060
这像我们看到的这个是

5
00:00:25,060 --> 00:00:28,480
评估这个尺寿率的

6
00:00:28,480 --> 00:00:29,960
我们先讲一下这个尺寿率

7
00:00:29,960 --> 00:00:33,820
我们可以用一个开源度

8
00:00:33,820 --> 00:00:34,920
一个python依赖

9
00:00:34,920 --> 00:00:39,960
一个python依赖叫做jiwer这个依赖

10
00:00:39,960 --> 00:00:41,480
然后在这个依赖当中啊

11
00:00:41,480 --> 00:00:44,000
他有提供了一些方法

12
00:00:44,000 --> 00:00:48,400
或者说是一些函数啊

13
00:00:48,400 --> 00:00:50,200
比如说我们

14
00:00:50,700 --> 00:00:52,760
在计算这个WER

15
00:00:53,000 --> 00:00:54,540
也就是持错率的时候

16
00:00:54,540 --> 00:00:55,560
我们就调用这个

17
00:00:56,340 --> 00:00:58,120
如果我们计算的是持错率的话

18
00:00:58,120 --> 00:01:00,180
那我们就调用CER

19
00:01:05,040 --> 00:01:06,320
那我们这里可以收一下

20
00:01:07,600 --> 00:01:08,120
那就这个

21
00:01:08,360 --> 00:01:10,420
这个的话就是计算的是

22
00:01:10,680 --> 00:01:11,440
持错率

23
00:01:15,800 --> 00:01:18,100
我们看一下怎么去写的

24
00:01:18,400 --> 00:01:22,760
首先我们是

25
00:01:22,760 --> 00:01:26,600
先要去加载我们的一个模型进来

26
00:01:26,600 --> 00:01:29,400
就是这个checkpoint要再进来

27
00:01:29,400 --> 00:01:33,500
比如说我们用的是签问3A上

28
00:01:33,500 --> 00:01:34,800
那我们就去

29
00:01:34,800 --> 00:01:37,860
导入这个相关的一个依赖

30
00:01:37,860 --> 00:01:39,200
安装的依赖并导入

31
00:01:39,200 --> 00:01:40,800
然后在这里的话我们就去

32
00:01:40,800 --> 00:01:42,660
加载到这个模型站

33
00:01:42,660 --> 00:01:45,160
这个模型然后再有return返回

34
00:01:45,160 --> 00:01:46,960
然后我们在这里去调用

35
00:01:46,960 --> 00:01:50,420
拿到这个模型

36
00:01:50,420 --> 00:01:53,400
然后调用它的下面的这个

37
00:01:53,400 --> 00:01:55,660
transcribe 函数

38
00:01:55,660 --> 00:01:56,660
然后方法

39
00:01:56,660 --> 00:01:57,760
然后

40
00:01:57,760 --> 00:01:59,540
这个就是推理了

41
00:01:59,540 --> 00:02:01,640
就是生成我们的一个结果

42
00:02:01,640 --> 00:02:04,260
比如说我们传入一个音频audio

43
00:02:04,260 --> 00:02:09,900
然后拿到这个结果之后的话

44
00:02:09,900 --> 00:02:11,140
我们解析这个结果

45
00:02:11,140 --> 00:02:13,480
这个是解析的结果

46
00:02:13,480 --> 00:02:15,760
然后解析完成之后的话

47
00:02:15,760 --> 00:02:17,560
我们是把它放入

48
00:02:18,060 --> 00:02:20,360
放入这个列表当中

49
00:02:23,960 --> 00:02:25,480
这个是表示是

50
00:02:26,000 --> 00:02:29,320
A3模型生成的这个文字啊这个内容

51
00:02:30,100 --> 00:02:32,400
然后下面这个存储的是

52
00:02:32,660 --> 00:02:34,200
引用也就是标注

53
00:02:34,440 --> 00:02:36,240
标注的一个文文内容

54
00:02:37,780 --> 00:02:39,560
然后这个我们

55
00:02:40,840 --> 00:02:42,120
要写一个

56
00:02:42,380 --> 00:02:43,400
函数去

57
00:02:43,400 --> 00:02:47,160
加载去读取我们的这个Jeternel文件

58
00:02:47,160 --> 00:02:51,120
就是我们训练的时候是分为几大集合

59
00:02:51,120 --> 00:02:53,900
一个是训练集验证集测试集

60
00:02:53,900 --> 00:02:55,640
是你要读取

61
00:02:55,640 --> 00:02:57,680
比如说我们读取这个测试集

62
00:02:57,680 --> 00:03:00,440
把它读取通过这个函数

63
00:03:00,440 --> 00:03:03,300
读取进来最终的话

64
00:03:03,300 --> 00:03:05,540
是发挥一个列表list

65
00:03:05,540 --> 00:03:08,100
然后这个列表是这样的一个形式

66
00:03:08,100 --> 00:03:10,680
一个列表每一个元素的话

67
00:03:10,680 --> 00:03:13,280
那是一个这个

68
00:03:14,720 --> 00:03:17,680
字典格式或者说是design格式

69
00:03:20,320 --> 00:03:21,880
有两个字段

70
00:03:21,880 --> 00:03:24,520
一个是audio 一个是test

71
00:03:24,520 --> 00:03:26,320
然后这个是对应的一个音频

72
00:03:26,320 --> 00:03:27,520
然后对应的音频

73
00:03:27,520 --> 00:03:30,120
然后这个是音频对应标注的一个文明内容

74
00:03:30,320 --> 00:03:32,240
然后返回到这里

75
00:03:32,240 --> 00:03:34,640
这里我们就进行便利拿到每一个

76
00:03:35,640 --> 00:03:37,520
每一个这个

77
00:03:37,920 --> 00:03:39,120
标注的一个文明内容

78
00:03:39,120 --> 00:03:41,120
然后以及对应的一个这个音频

79
00:03:41,120 --> 00:03:43,720
其中这个音频的话我们传进去这个

80
00:03:43,980 --> 00:03:45,780
签文模型当中进行推理

81
00:03:46,040 --> 00:03:47,320
推理产生的一个结果

82
00:03:47,320 --> 00:03:48,600
然后这个推理产生结果

83
00:03:48,600 --> 00:03:50,640
然后我们把它放入到这个列表当中

84
00:03:51,160 --> 00:03:53,460
然后这个是另外一个列表的话就是

85
00:03:53,720 --> 00:03:55,760
存储的是这个标注的一种笔

86
00:03:56,020 --> 00:03:57,800
然后的话我们就计算

87
00:04:00,620 --> 00:04:02,680
用这个函数去计算

88
00:04:02,920 --> 00:04:03,700
这个

89
00:04:03,960 --> 00:04:04,720
此错率

90
00:04:05,240 --> 00:04:06,260
然后我们传入

91
00:04:06,520 --> 00:04:08,040
这个是引用的有个文件内容

92
00:04:08,040 --> 00:04:08,820
然后这个是

93
00:04:09,120 --> 00:04:10,620
ASA生成的一个内容

94
00:04:12,120 --> 00:04:14,080
在传入之后的话

95
00:04:14,080 --> 00:04:17,420
我们又做一个正整化进行处理

96
00:04:17,420 --> 00:04:21,920
比如说我们把这个英文字母统一转成小写

97
00:04:21,920 --> 00:04:24,820
同时去掉连续的一个多个空格

98
00:04:24,820 --> 00:04:26,080
把它合并成一个空格

99
00:04:27,420 --> 00:04:29,420
就是做一个统一规范化

100
00:04:29,420 --> 00:04:31,320
然后我们再去

101
00:04:31,820 --> 00:04:35,180
去真正去计算它的一个磁数率

102
00:04:35,180 --> 00:04:38,860
最终的话是返回这个磁数率到这个第二个地方

103
00:04:38,860 --> 00:04:41,160
然后我们就打印最终的一个持续率

104
00:04:41,160 --> 00:04:44,160
这里是保留小数点后四位

105
00:04:44,160 --> 00:04:46,800
然后最终就能够知道这个

106
00:04:46,800 --> 00:04:48,660
持续率了

107
00:04:48,660 --> 00:04:49,800
然后这个是持续

108
00:04:49,800 --> 00:04:51,700
持续率的话是针对英语

109
00:04:51,700 --> 00:04:53,600
藏语这些他有

110
00:04:53,600 --> 00:04:56,560
有像比如说我们这个英文名字

111
00:04:56,560 --> 00:04:58,760
他有这个空格

112
00:04:58,760 --> 00:05:00,520
一个空格间隔开来的

113
00:05:00,520 --> 00:05:03,220
这种的话我们通常就是用这个

114
00:05:03,220 --> 00:05:05,060
持续率的一个方式来统计

115
00:05:05,060 --> 00:05:06,900
像我们的一个藏语

116
00:05:06,900 --> 00:05:08,820
藏语是就是

117
00:05:08,860 --> 00:05:11,100
假设他也是每一个有

118
00:05:12,460 --> 00:05:15,220
上文每一个之间的话是通过这个

119
00:05:16,260 --> 00:05:17,620
空格来进分个开来

120
00:05:17,620 --> 00:05:19,860
那我们就可以去统计他的一个辞受率

121
00:05:19,860 --> 00:05:20,900
而不是辞受率

122
00:05:21,300 --> 00:05:22,860
你看像这个英文

123
00:05:22,860 --> 00:05:26,260
实际上也是每一个的话是有空格间隔开来

124
00:05:26,260 --> 00:05:27,960
如果这里比如说空了两个格的话

125
00:05:27,960 --> 00:05:30,420
我们刚才那里正则表达式的时候

126
00:05:30,420 --> 00:05:32,100
我们会把它去掉啊

127
00:05:32,100 --> 00:05:34,020
去掉一个空格就是只保留一个空格

128
00:05:38,860 --> 00:05:46,520
然后字错率的话

129
00:05:46,520 --> 00:05:49,200
我们通常是用在像中文

130
00:05:49,200 --> 00:05:50,380
中文的话它有什么特点

131
00:05:50,380 --> 00:05:51,940
比如说我们像这里中文的话

132
00:05:51,940 --> 00:05:55,460
它是每一个字之间是没有空格的

133
00:05:55,460 --> 00:05:56,920
每一个字之间是相互

134
00:05:56,920 --> 00:05:58,960
就是挨者的是没有间隙的

135
00:05:58,960 --> 00:06:00,140
那么这种情况的话

136
00:06:00,140 --> 00:06:01,940
我们就求它的一个字错率

137
00:06:01,940 --> 00:06:06,080
你就记住

138
00:06:06,080 --> 00:06:10,120
就是每一个字之间如果有空格

139
00:06:10,120 --> 00:06:12,640
那我们就用它的一个持组率

140
00:06:12,640 --> 00:06:14,180
如果每一个字间它仅挨着

141
00:06:14,180 --> 00:06:14,920
像这种仅挨着

142
00:06:14,920 --> 00:06:17,020
用持组率来进行计算

143
00:06:17,020 --> 00:06:27,140
好那我们这次的话就是

144
00:06:27,140 --> 00:06:29,240
对我们就给大家看一下这个求

145
00:06:29,240 --> 00:06:29,820
制作率的话

146
00:06:29,820 --> 00:06:30,280
制作率的话

147
00:06:30,280 --> 00:06:31,800
我们是用的是另外一个模型

148
00:06:31,800 --> 00:06:34,340
比如说我们这个是Prolformer这个模型

149
00:06:34,340 --> 00:06:35,900
求它的一个制作率

150
00:06:35,900 --> 00:06:37,240
其中中文的话

151
00:06:37,240 --> 00:06:38,160
我们需要去注意

152
00:06:38,160 --> 00:06:39,580
它转写出来的

153
00:06:39,580 --> 00:06:41,600
A3转写出来的一个文本的话

154
00:06:41,600 --> 00:06:42,900
它可能会出现这个

155
00:06:42,900 --> 00:06:44,540
就是比如说像

156
00:06:44,540 --> 00:06:45,580
雕号码

157
00:06:45,580 --> 00:06:46,600
身份证号码这些

158
00:06:46,600 --> 00:06:48,180
还有这个时间这些的话

159
00:06:48,180 --> 00:06:52,060
它会是非阿拉伯数字

160
00:06:52,060 --> 00:06:54,900
那么你要把它统一化

161
00:06:54,900 --> 00:06:56,600
比如说你标注的是阿拉伯数字

162
00:06:56,600 --> 00:06:59,180
但是你在这个A3模型

163
00:06:59,180 --> 00:07:00,100
输出的结果当中

164
00:07:00,100 --> 00:07:00,860
它输出的是

165
00:07:00,860 --> 00:07:03,100
是中文的一个数字表示

166
00:07:03,100 --> 00:07:04,360
那么你这个时候

167
00:07:04,360 --> 00:07:06,140
就会计算它的一个制作率的时候

168
00:07:06,140 --> 00:07:06,820
就计算不准

169
00:07:06,820 --> 00:07:08,020
我们需要统一

170
00:07:08,020 --> 00:07:09,160
需要统一化

171
00:07:09,160 --> 00:07:11,220
比如说像这个6月1号

172
00:07:11,220 --> 00:07:12,880
那我们统一阿拉伯数字

173
00:07:12,880 --> 00:07:14,480
转成这个6月1号

174
00:07:14,480 --> 00:07:15,700
或者说我们统一

175
00:07:15,700 --> 00:07:17,480
转成这个中文

176
00:07:17,480 --> 00:07:19,280
这个汉字的一个表示方式

177
00:07:19,280 --> 00:07:20,100
6月1号

178
00:07:20,100 --> 00:07:22,220
就是反正你要统一

179
00:07:22,220 --> 00:07:23,820
无论你是最终是用阿拉伯

180
00:07:23,820 --> 00:07:25,760
把阿拉伯数字来表示

181
00:07:25,760 --> 00:07:26,880
还是用汉语

182
00:07:26,880 --> 00:07:28,060
还是用这个汉字来进行

183
00:07:28,060 --> 00:07:28,860
表示这个数字

184
00:07:28,860 --> 00:07:30,040
都行

185
00:07:30,040 --> 00:07:31,140
就是要统一化

186
00:07:31,140 --> 00:07:33,820
这里的话

187
00:07:33,820 --> 00:07:36,060
那我们就是用到了一个依赖

188
00:07:36,060 --> 00:07:38,420
用到一个依赖就是CN2

189
00:07:38,420 --> 00:07:40,920
就是汉语转的阿拉伯语

190
00:07:40,920 --> 00:07:42,520
转的阿拉伯的数字

191
00:07:44,520 --> 00:07:46,320
我们需要去安装它如果没有安装的话

192
00:07:46,320 --> 00:07:47,220
它会提示这个

193
00:07:47,220 --> 00:07:48,820
你直接给大家来进行安装就可以

194
00:07:49,320 --> 00:07:51,020
一般的话我们

195
00:07:51,020 --> 00:07:52,720
一般的话我们安装这个飞下的话

196
00:07:52,720 --> 00:07:53,820
它没问题安装这个

197
00:07:53,820 --> 00:07:55,420
应该飞下它里面的话

198
00:07:55,420 --> 00:07:57,420
也要用到这个依赖吧

199
00:08:02,519 --> 00:08:09,059
就是我们在这里啊在这里

200
00:08:09,059 --> 00:08:11,879
那这里的话我们去调用了这个

201
00:08:11,879 --> 00:08:14,919
这个函数

202
00:08:14,919 --> 00:08:16,959
这个方法

203
00:08:16,959 --> 00:08:21,659
它就能够去把这个CN就是表示汉语啊

204
00:08:21,659 --> 00:08:23,779
把它转成的AN的话就是阿拉伯

205
00:08:23,779 --> 00:08:24,919
阿拉伯数字啊

206
00:08:24,919 --> 00:08:27,699
把这个汉语的一个数字转成阿拉伯的一个数字表示

207
00:08:27,699 --> 00:08:29,379
然后下面这个的话就是

208
00:08:29,379 --> 00:08:31,739
就是反过来就是把阿拉伯的

209
00:08:31,739 --> 00:08:34,319
这个转成这个汉语的一个表示啊

210
00:08:34,319 --> 00:08:36,579
就是比如说我们看到的这个

211
00:08:36,579 --> 00:08:39,239
就是生日6月1号这个数字六合一

212
00:08:39,239 --> 00:08:41,519
把它转成这个汉语的一个六合一就这种

213
00:08:42,639 --> 00:08:45,039
然后下面这个这个这个就

214
00:08:45,039 --> 00:08:47,939
这个这个就不是一个档

215
00:08:53,379 --> 00:08:55,619
嗯好那我们就是

216
00:08:59,379 --> 00:09:03,379
因为汉语的话

217
00:09:03,379 --> 00:09:06,019
他是没有这个所谓的这个大小写的一个字母类型式的

218
00:09:06,019 --> 00:09:07,419
所以这个的话你

219
00:09:07,419 --> 00:09:10,459
这个的话就是无所谓的这个

220
00:09:10,459 --> 00:09:12,879
你不用加这个 lower也是可以的

221
00:09:12,879 --> 00:09:16,079
小写的这个这个不用加这个

222
00:09:16,079 --> 00:09:17,699
不用加这个 lower也是可以的

223
00:09:17,699 --> 00:09:19,899
然后其他的我们看一下

224
00:09:19,899 --> 00:09:21,699
对我们在读取

225
00:09:21,699 --> 00:09:25,539
读取我们的一个比如说测试集的一个点

226
00:09:25,539 --> 00:09:26,639
呃

227
00:09:26,639 --> 00:09:28,539
ICP文件说啊

228
00:09:28,539 --> 00:09:30,399
或者说是TX文件说啊

229
00:09:30,399 --> 00:09:31,559
我们需要去注意

230
00:09:31,559 --> 00:09:33,259
我们读入进来的一定要格式的话

231
00:09:33,259 --> 00:09:34,759
肯定用这个呃

232
00:09:34,759 --> 00:09:35,599
编码的话

233
00:09:35,599 --> 00:09:36,099
编码不说

234
00:09:36,099 --> 00:09:37,959
一定要用这个YouTube-8啊

235
00:09:37,959 --> 00:09:39,199
不要呃

236
00:09:39,199 --> 00:09:40,119
用其他的

237
00:09:40,119 --> 00:09:41,539
你肯定用这个啊

238
00:09:41,539 --> 00:09:43,399
呃

239
00:09:43,399 --> 00:09:44,319
程序开发动作

240
00:09:44,319 --> 00:09:45,359
一般用这个YouTube-8

241
00:09:45,359 --> 00:09:45,839
呃

242
00:09:45,839 --> 00:09:47,119
嗯

243
00:09:47,119 --> 00:09:48,999
然后其他都就

244
00:09:48,999 --> 00:09:51,859
没有什么

245
00:09:51,859 --> 00:09:52,979
需要去注意

246
00:09:52,979 --> 00:09:53,759
呃

247
00:09:53,759 --> 00:09:56,459
如果你是要测那种有

248
00:09:56,599 --> 00:09:58,219
就是ASR他模型输出

249
00:09:58,219 --> 00:09:59,659
有这个Valienfout这些的话

250
00:09:59,659 --> 00:10:01,819
那么你还要考虑去掉这个Valienfout

251
00:10:01,819 --> 00:10:04,159
之后再去评估它的一个自受率

252
00:10:04,299 --> 00:10:06,359
因为我用的这个Proformer

253
00:10:06,359 --> 00:10:07,799
他这个模型的话

254
00:10:07,799 --> 00:10:09,899
是不能输出这个Valienfout的

255
00:10:09,899 --> 00:10:11,799
他只输出这个存文版能字的

256
00:10:11,799 --> 00:10:13,759
所以我们就没有去考虑说

257
00:10:13,759 --> 00:10:15,719
要去掉这个Valienfout的一种事情

258
00:10:15,719 --> 00:10:17,759
比如说你用的是这个Valienfout

259
00:10:17,759 --> 00:10:19,959
Nono2512或者说是

260
00:10:20,219 --> 00:10:22,399
Sanswisemall这两个模型的话

261
00:10:22,399 --> 00:10:25,659
他能够去输出这个标点符号

262
00:10:25,659 --> 00:10:29,339
那么你就需要去去掉标点符号

263
00:10:29,339 --> 00:10:31,959
然后再去计算他的一个自措率

264
00:10:31,959 --> 00:10:32,999
或者说是持措率

265
00:10:37,999 --> 00:10:40,439
然后这里再讲一下这个平均自措

266
00:10:40,439 --> 00:10:41,799
这个平均自措率

267
00:10:41,799 --> 00:10:44,359
和这个整体自措率是什么意思

268
00:10:44,359 --> 00:10:46,399
平均平均自措率的话

269
00:10:46,399 --> 00:10:48,039
就是我们计算出

270
00:10:48,039 --> 00:10:50,939
每一句话对应的一个自措率

271
00:10:50,939 --> 00:10:53,899
然后再去相加每一句话

272
00:10:54,379 --> 00:10:56,939
辞出率求和也就相加求和

273
00:10:56,939 --> 00:11:00,899
然后再除以这个总的一个据数

274
00:11:00,899 --> 00:11:04,099
总的比如说我这个测试集有1000条数据

275
00:11:04,099 --> 00:11:05,699
那我们最终

276
00:11:05,699 --> 00:11:07,379
就是相加之后我们就再除以1000

277
00:11:07,379 --> 00:11:08,299
就这意思

278
00:11:08,299 --> 00:11:10,779
最终的话就是平均的一个

279
00:11:11,139 --> 00:11:13,499
CER也就是平均的一个辞出率

280
00:11:13,579 --> 00:11:14,899
而整体的一个辞出率的话

281
00:11:14,899 --> 00:11:19,179
我们就是直接去调用这个JiW

282
00:11:19,179 --> 00:11:21,979
ER中的一个CER函数

283
00:11:21,979 --> 00:11:23,419
那我把它传递来

284
00:11:23,419 --> 00:11:24,639
它计算出来的就是

285
00:11:24,639 --> 00:11:26,779
整体的一个

286
00:11:26,779 --> 00:11:29,439
整体的一个这个自收率

287
00:11:29,439 --> 00:11:32,099
那自收率也一样去这样的方式

288
00:11:32,099 --> 00:11:32,659
来进去算的

289
00:11:32,659 --> 00:11:41,899
好那我们就是给大家去讲解

290
00:11:41,899 --> 00:11:44,619
到这里然后还没有关注的

291
00:11:44,619 --> 00:11:45,899
我的小伙也记得

292
00:11:45,899 --> 00:11:46,899
关注一下

293
00:11:46,899 --> 00:11:50,099
而是比较动得变成为互相录虎皮尾
