WEBVTT

00:00:00.000 --> 00:00:29.980
大家好,今天给大家介绍一篇比较新的paper,也是基于Visper作语音识别的。这篇论文的题目叫Visper CD,专门解决长音频的语音识别问题。如果用一句话来总结的话,这篇paper它的核心亮点就在于不改变Visper模型的参数,也无需训练。只在Visper解码时给它加一个反向的揪片器,这样专门来压制长音频的语音识别。

00:00:30.000 --> 00:00:31.740
音频转写里面的幻觉

00:00:31.740 --> 00:00:34.580
重复循环和漏字等问题

00:00:34.580 --> 00:00:36.500
这就是这篇论文

00:00:36.500 --> 00:00:37.920
它核心要解决的问题

00:00:37.920 --> 00:00:39.360
这里面CD代表什么意思

00:00:39.360 --> 00:00:40.420
就是一个对比解码

00:00:40.420 --> 00:00:41.540
那我们下面来看一下

00:00:41.540 --> 00:00:43.360
这篇PayPal它主要解决什么问题

00:00:43.360 --> 00:00:45.040
它核心要解决的

00:00:45.040 --> 00:00:47.320
就是可能比较长的一些语音

00:00:47.320 --> 00:00:48.060
然后呢

00:00:48.060 --> 00:00:50.680
以Visper为代表的一些语音识别模型

00:00:50.680 --> 00:00:52.280
它面临的幻觉

00:00:52.280 --> 00:00:55.220
重复循环和内容遗漏

00:00:55.220 --> 00:00:56.500
等错误累积的问题

00:00:56.500 --> 00:00:58.080
因为上海文太长了嘛

00:00:58.080 --> 00:00:59.340
而且这种Visper

00:00:59.340 --> 00:01:02.300
它是自回归的一个模型结构

00:01:02.300 --> 00:01:04.540
所以上文的错误会累积到下文

00:01:04.540 --> 00:01:08.780
这三种错误基本上可以看成分成以下三类

00:01:08.780 --> 00:01:11.100
第一种就是静音区的幻觉

00:01:11.100 --> 00:01:14.320
例如在非语音的间隔期间

00:01:14.320 --> 00:01:15.400
但是模型呢

00:01:15.400 --> 00:01:17.200
它还是错误的生成了文本

00:01:17.200 --> 00:01:20.800
第二个就是跨段的重复的循环

00:01:20.800 --> 00:01:23.260
就是模型陷入自我强化的重复模式

00:01:23.260 --> 00:01:26.320
它会错误的不停的输出相同的字

00:01:26.320 --> 00:01:27.760
然后一直循环一直循环

00:01:27.760 --> 00:01:29.100
然后永远不停

00:01:29.100 --> 00:01:30.740
第三个就是跳过

00:01:30.740 --> 00:01:33.960
那就是遗漏了实际的语音内容

00:01:33.960 --> 00:01:35.300
导致转路不完整

00:01:35.300 --> 00:01:38.360
实际上就是我们语音识别里常见的三类错误

00:01:38.360 --> 00:01:41.000
插入删除替换这三类错误

00:01:41.000 --> 00:01:42.920
此外这个论文也指出

00:01:42.920 --> 00:01:46.380
当前因为是自回归的语音识别模型

00:01:46.380 --> 00:01:50.380
它会利用前一段转路的结果作为解码的上下文

00:01:50.380 --> 00:01:52.780
那么这样就会带来一个问题

00:01:52.780 --> 00:01:54.660
就是上面的错误会被累积

00:01:54.660 --> 00:01:57.140
引起后面解码带来更多的错误

00:01:57.140 --> 00:01:59.180
这就要形成了新的累积错误

00:01:59.180 --> 00:02:01.680
这也是自卫规模型它常见的问题

00:02:01.680 --> 00:02:04.760
那这篇paper它是如何解决这个问题的呢

00:02:04.760 --> 00:02:06.660
它就提出了叫Visper CD

00:02:06.660 --> 00:02:09.000
这种方式啊

00:02:09.000 --> 00:02:10.960
不需要训练这个Visper模型的

00:02:10.960 --> 00:02:16.460
在推理时对比干净的音频和声学扰动后的音频的一个输出

00:02:16.460 --> 00:02:17.420
一个logis

00:02:17.420 --> 00:02:18.560
然后从而呢

00:02:18.560 --> 00:02:23.260
抑制长形式语音转换中的一些插入删除和替换错误

00:02:23.260 --> 00:02:26.000
那我们就来看一下它具体是怎么做的

00:02:26.000 --> 00:02:28.380
我们先看右面这张图吧

00:02:28.380 --> 00:02:29.820
我把这张图看懂了

00:02:29.820 --> 00:02:33.080
那这篇论文最精华最核心的部分也就懂了

00:02:33.080 --> 00:02:36.440
首先白色这一部分就是输入的语音

00:02:36.440 --> 00:02:37.860
然后这一部分呢

00:02:37.860 --> 00:02:39.980
就是粉色的这部分就是Whisper

00:02:39.980 --> 00:02:41.560
Whisper我们知道

00:02:41.560 --> 00:02:44.140
它就整体过程中就不需要动

00:02:44.140 --> 00:02:45.860
那过程是怎么样的呢

00:02:45.860 --> 00:02:47.360
我们先看虚线这部分啊

00:02:47.360 --> 00:02:50.340
就是上一个30秒已经识别完

00:02:50.340 --> 00:02:52.500
识别之后的一个语音片段

00:02:52.500 --> 00:02:53.520
那现在呢

00:02:53.520 --> 00:02:54.860
我们要识别最新的

00:02:54.860 --> 00:02:56.900
这个新的这30秒的语音片段

00:02:56.900 --> 00:03:00.820
需要把它给到我们Whisper的encoder

00:03:00.820 --> 00:03:02.740
那你看这就是黑色这部分

00:03:02.740 --> 00:03:04.280
就是原始的这段

00:03:04.280 --> 00:03:05.560
此外呢

00:03:05.560 --> 00:03:07.620
我们会对原始的音频

00:03:07.620 --> 00:03:09.240
做一些相关的扰动

00:03:09.240 --> 00:03:10.580
把它当做复理

00:03:10.580 --> 00:03:12.420
原来这段就当做正理

00:03:12.420 --> 00:03:14.260
复理第一个种复理呢

00:03:14.260 --> 00:03:16.180
就是我们加一些高斯噪声

00:03:16.180 --> 00:03:18.280
就是在原始的这段干净音频上

00:03:18.280 --> 00:03:19.440
加一些高斯噪声

00:03:19.440 --> 00:03:21.020
把它变成第一种复理

00:03:21.020 --> 00:03:22.600
也就是这个蓝色这部分

00:03:22.600 --> 00:03:24.000
第二种复利呢

00:03:24.000 --> 00:03:26.140
就是我们把原始的音频啊

00:03:26.140 --> 00:03:28.180
向右稍微偏移一小段

00:03:28.180 --> 00:03:30.200
这个就变成shift

00:03:30.200 --> 00:03:33.100
就是偏移的这段扰动的音频

00:03:33.100 --> 00:03:34.500
第三种音频啊

00:03:34.500 --> 00:03:35.760
就是silence

00:03:35.760 --> 00:03:37.520
就是完全静音的这段音频

00:03:37.520 --> 00:03:38.460
然后呢

00:03:38.460 --> 00:03:39.960
我们把这四种音频

00:03:39.960 --> 00:03:41.320
同时送给Whisper

00:03:41.320 --> 00:03:43.760
它的encoder和decoder去解码

00:03:43.760 --> 00:03:45.620
解码之后呢

00:03:45.620 --> 00:03:48.860
我们就得到了对应的四个输出

00:03:48.860 --> 00:03:51.260
那黑色这部分就是原始的输出

00:03:51.260 --> 00:03:55.600
蓝色绿色和红色分别也对应了三个输出

00:03:55.600 --> 00:03:56.420
然后呢

00:03:56.420 --> 00:03:59.960
我们就把正力的得分输出和负力的得分输出

00:03:59.960 --> 00:04:01.140
进行一个整合

00:04:01.140 --> 00:04:03.340
以叫我们叫对比的一个解码

00:04:03.340 --> 00:04:07.420
解码之后就可以帮助我们得到

00:04:07.420 --> 00:04:09.980
更准确的语音识别的结果

00:04:09.980 --> 00:04:13.120
那具体它是怎么去做这个对比解码的呢

00:04:13.120 --> 00:04:16.060
我们就来看一下论文中的原始

00:04:16.060 --> 00:04:17.040
它是怎么说的

00:04:17.040 --> 00:04:18.820
其实方式也很简单

00:04:18.820 --> 00:04:22.480
正力得到的这个X就是干净的

00:04:22.480 --> 00:04:24.020
原始干净的语音

00:04:24.020 --> 00:04:26.380
那自回归之后

00:04:26.380 --> 00:04:28.360
得到我们正力的一个结果

00:04:28.360 --> 00:04:29.320
复利的呢

00:04:29.320 --> 00:04:31.520
这个X上面加一个波浪

00:04:31.520 --> 00:04:33.780
就是我们经过三种变换

00:04:33.780 --> 00:04:34.920
加高斯啊

00:04:34.920 --> 00:04:36.340
加偏移啊

00:04:36.340 --> 00:04:39.240
和静音的变换之后的这种音频

00:04:39.240 --> 00:04:41.060
也经过我们F

00:04:41.060 --> 00:04:43.480
也就是Whisper之后

00:04:43.480 --> 00:04:45.040
得到我们复利的输出

00:04:45.040 --> 00:04:46.080
然后呢

00:04:46.080 --> 00:04:48.860
我就通过一个α的一个超三

00:04:48.860 --> 00:04:51.260
把这两种得分输出

00:04:51.260 --> 00:04:52.720
把它整合在一起

00:04:52.720 --> 00:04:56.620
然后就变成我们最终的一个CD的一个输出

00:04:56.620 --> 00:04:58.620
那具体是怎么整合的呢

00:04:58.620 --> 00:05:01.080
实际上就是1加上α

00:05:01.080 --> 00:05:03.120
然后乘以我们正力的输出

00:05:03.120 --> 00:05:05.400
减去α乘以我们负力的输出

00:05:05.400 --> 00:05:08.020
实际上你如果把这个式子变换一下

00:05:08.020 --> 00:05:10.760
其实就是把这个括号拆开啊

00:05:10.760 --> 00:05:12.140
就变成正力的输出

00:05:12.140 --> 00:05:14.260
加上正力的输出

00:05:14.260 --> 00:05:15.480
减去负力的输出

00:05:15.480 --> 00:05:17.160
然后再乘一个alpha的参数

00:05:17.160 --> 00:05:17.600
对吧

00:05:17.600 --> 00:05:21.000
所以这它代表的是什么含义呢

00:05:21.000 --> 00:05:24.800
实际上就是我在保持正力输出不变的前提下

00:05:24.800 --> 00:05:27.100
我把负力的那些扰动

00:05:27.100 --> 00:05:28.440
希望都把它剪掉

00:05:28.440 --> 00:05:30.400
然后把这些干扰项去掉

00:05:30.400 --> 00:05:32.020
然后让它有一个对比的结果

00:05:32.020 --> 00:05:33.980
从而帮助我更好的识别

00:05:33.980 --> 00:05:36.060
最终的语音识别结果

00:05:36.060 --> 00:05:39.480
这就是这篇paper最重要的

00:05:39.480 --> 00:05:41.200
也最核心的一个机制

00:05:41.200 --> 00:05:42.020
叫对比解码

00:05:42.020 --> 00:05:43.800
那下面我们就来看一下

00:05:43.800 --> 00:05:46.220
它声学扰动具体是怎么做的

00:05:46.220 --> 00:05:47.340
基本上就是三种

00:05:47.340 --> 00:05:49.000
一个是高斯造声的注入

00:05:49.000 --> 00:05:50.440
就是我们随机生成

00:05:50.440 --> 00:05:52.440
符合正态分布的高斯造声

00:05:52.440 --> 00:05:53.740
加到原始信号上

00:05:53.740 --> 00:05:55.480
第二个呢就是静音

00:05:55.480 --> 00:05:56.820
我就把输入图谱

00:05:56.820 --> 00:05:58.180
全都变成零

00:05:58.180 --> 00:05:59.180
全零的波形

00:05:59.180 --> 00:06:00.160
就是静音

00:06:00.160 --> 00:06:02.560
第三个呢就是音频的时序偏移

00:06:02.560 --> 00:06:04.680
我就把原始的30秒

00:06:04.680 --> 00:06:07.180
向左偏移一些

00:06:07.180 --> 00:06:09.080
然后左侧的丢弃

00:06:09.080 --> 00:06:10.760
右侧的用零来填充

00:06:10.760 --> 00:06:11.620
这就好了

00:06:11.620 --> 00:06:14.260
这就是三种升学扰动的策略

00:06:14.260 --> 00:06:15.540
然后呢

00:06:15.540 --> 00:06:17.760
如果我们有了升学扰动的策略

00:06:17.760 --> 00:06:18.980
那这三种策略

00:06:18.980 --> 00:06:21.260
它是怎么结合在一起的呢

00:06:21.260 --> 00:06:22.680
结合其实也非常简单

00:06:22.680 --> 00:06:24.720
大家还记得我原始的诗子吧

00:06:24.720 --> 00:06:27.000
就是1加上α乘以正力

00:06:27.000 --> 00:06:28.480
减去α乘以负力

00:06:28.480 --> 00:06:30.360
这里只不过负力有很多啊

00:06:30.360 --> 00:06:32.740
就是有三种扰动策略嘛

00:06:32.740 --> 00:06:36.360
所以负力产生的输出结果就有三种

00:06:36.360 --> 00:06:38.520
那这三种我怎么整合到一起呢

00:06:38.520 --> 00:06:40.940
我就把它在e的指数上

00:06:40.940 --> 00:06:41.960
进行一个整合

00:06:41.960 --> 00:06:43.760
先求和再求个平均

00:06:43.760 --> 00:06:46.280
无非是这里加了一个超次参数

00:06:46.280 --> 00:06:47.280
来控制一下

00:06:47.280 --> 00:06:47.700
对吧

00:06:47.700 --> 00:06:49.200
所以这个超次参数呢

00:06:49.200 --> 00:06:50.200
一般也就设为1

00:06:50.200 --> 00:06:53.000
那这个1其实就等于没有吗

00:06:53.000 --> 00:06:54.100
你除它就等于没有了

00:06:54.100 --> 00:06:56.080
那其实在原始的例子上

00:06:56.080 --> 00:06:59.600
无非就是把三个负利的输出

00:06:59.600 --> 00:07:01.560
进行求和再取平均

00:07:01.560 --> 00:07:02.700
就非常简单吧

00:07:03.927 --> 00:07:18.207
然后呢,我们再看在推理的时候。推理的时候,我们知道,呃,其实是可以并行推理的嘛,对吧?就是尽管输入的是K条额外的解码路径,但是我们可以通过P处理来计算控制的开销,也就是一次处理把它

00:07:18.207 --> 00:07:18.927
都做完

00:07:18.927 --> 00:07:19.947
然后整体的

00:07:19.947 --> 00:07:20.887
它最大的优势

00:07:20.887 --> 00:07:21.867
就是无需训练

00:07:21.867 --> 00:07:24.047
然后我只需要在后面

00:07:24.047 --> 00:07:26.467
只需要在解码的时候

00:07:26.467 --> 00:07:27.487
稍加一些

00:07:27.487 --> 00:07:30.427
所谓的工程化的处理就够了

00:07:30.427 --> 00:07:32.687
那我们可以在这里

00:07:32.687 --> 00:07:33.867
做一个形象的比喻

00:07:33.867 --> 00:07:34.927
就是如果你上面

00:07:34.927 --> 00:07:36.827
听的还不是特别懂的话

00:07:36.827 --> 00:07:39.307
如果我们把原始的Whisper

00:07:39.307 --> 00:07:40.647
它正常转型的时候

00:07:40.647 --> 00:07:41.567
它就是像一个

00:07:41.567 --> 00:07:43.007
边听边写的速记员

00:07:43.007 --> 00:07:44.867
那这篇paper

00:07:44.867 --> 00:07:45.987
它这个Whisper CD

00:07:45.987 --> 00:07:47.667
它实际上做的就是

00:07:47.667 --> 00:07:50.727
在旁边放了三个捣乱版的监听器

00:07:50.727 --> 00:07:51.767
那一个呢

00:07:51.767 --> 00:07:52.787
让它听起来很吵

00:07:52.787 --> 00:07:54.307
也就是加噪音的

00:07:54.307 --> 00:07:55.607
加高斯噪声的

00:07:55.607 --> 00:07:57.647
一个让它几乎什么都听不到

00:07:57.647 --> 00:08:00.147
然后就是静音的

00:08:00.147 --> 00:08:01.027
还有一个呢

00:08:01.027 --> 00:08:02.847
是让它错位的

00:08:02.847 --> 00:08:04.107
就是这个偏移的

00:08:04.107 --> 00:08:05.467
然后如果某个词

00:08:05.467 --> 00:08:07.247
在这三种不利的条件下

00:08:07.247 --> 00:08:09.107
它仍然特别想写出来

00:08:09.107 --> 00:08:12.927
那这个词多半就不是真的想听到的

00:08:12.927 --> 00:08:14.467
而是它习惯性脑补的

00:08:14.467 --> 00:08:17.007
于是系统就把这些词的分数扣掉

00:08:17.007 --> 00:08:18.707
然后这个解释啊

00:08:18.707 --> 00:08:19.987
基本上或者这个比喻啊

00:08:19.987 --> 00:08:22.127
就是整篇论文方法的本质

00:08:22.127 --> 00:08:22.867
嗯

00:08:22.867 --> 00:08:25.287
最后我们来看一下它的效果啊

00:08:25.287 --> 00:08:25.947
整个论文呢

00:08:25.947 --> 00:08:29.707
是在这五个长音频的英文测试机上来做的

00:08:29.707 --> 00:08:30.647
然后我们看一下

00:08:30.647 --> 00:08:33.407
它这个效果还是很不错的

00:08:33.407 --> 00:08:36.347
就是加CD是这次改编之后的吧

00:08:36.347 --> 00:08:38.667
然后它在两个VSPR的版本上做

00:08:38.667 --> 00:08:40.787
我们看到原始的VSPR

00:08:40.787 --> 00:08:42.507
像V3那种

00:08:42.507 --> 00:08:43.887
它在这些测试机上

00:08:43.887 --> 00:08:45.707
这个凑率都非常高

00:08:45.707 --> 00:08:47.427
这都超过100%了

00:08:47.427 --> 00:08:48.907
有200多500多

00:08:48.907 --> 00:08:53.847
但是呢我们在Visper V3上加了解码上的改进之后

00:08:53.847 --> 00:08:54.947
下降非常多

00:08:54.947 --> 00:08:57.027
就都从200多变成45

00:08:57.027 --> 00:08:58.647
从44变成19

00:08:58.647 --> 00:08:59.827
从500多变成57

00:08:59.827 --> 00:09:00.267
对吧

00:09:00.267 --> 00:09:01.607
第二种方式呢

00:09:01.607 --> 00:09:02.927
就是我用更强的版本

00:09:02.927 --> 00:09:04.007
用Turbo这个版本

00:09:04.007 --> 00:09:05.827
虽然原始的版本

00:09:05.827 --> 00:09:07.647
直接用Visper

00:09:07.647 --> 00:09:11.587
识别这个长文效果比V3会好一些啊

00:09:11.587 --> 00:09:14.067
但是也不尽如人意吧

00:09:14.067 --> 00:09:14.967
但是呢

00:09:14.967 --> 00:09:16.467
我们加了这种CD之后

00:09:16.467 --> 00:09:19.027
你会看到它效果像样的也是非常明显

00:09:19.027 --> 00:09:21.747
所以这就是我觉得这篇paper非常

00:09:21.747 --> 00:09:24.507
值得分享的吧

00:09:24.507 --> 00:09:26.167
就是它用非常小的改动

00:09:26.167 --> 00:09:29.607
然后实现了对常文的一个效果非常大的提升

00:09:29.607 --> 00:09:32.047
我们最后来总结一下这篇paper

00:09:32.047 --> 00:09:34.007
就是长音频的识别

00:09:34.007 --> 00:09:36.527
Whisper的话会有很多严重的错误

00:09:36.527 --> 00:09:39.987
但这些错误它大概率不是模型不会识别

00:09:39.987 --> 00:09:41.647
而是解码的过程中

00:09:41.647 --> 00:09:44.847
被之前的识别结果和一些上下文绑架了

00:09:44.847 --> 00:09:47.127
导致它越识别越错

00:09:47.127 --> 00:09:47.947
越识别越错

00:09:47.947 --> 00:09:51.127
所以作者他不是去强化原始模型的能力

00:09:51.127 --> 00:09:52.627
也就是没有训练原始的模型

00:09:52.627 --> 00:09:56.827
而是直接在token选择的阶段做干预

00:09:56.827 --> 00:09:59.267
这个角度就是在工程测作

00:09:59.267 --> 00:10:00.387
然后也很聪明

00:10:00.387 --> 00:10:03.007
好这期视频就给大家介绍到这
