實際影片長度:10:29.423。原文、繁中、雙語可點擊句子跳轉影片。
0:00.520–0:07.160
大家好,今天我們給大家講解Voice Agent的這個適時語音識別ASR的一個原理。
0:07.940–0:09.987
我們從頭到尾把它捋一遍,
0:09.987–0:12.204
要知道它背後的原理是什麼。
0:12.204–0:14.251
當然具體的這個技術實現,
0:14.251–0:17.322
肯定是由對應的這個供應商已經實現了。
0:17.322–0:19.198
但是我們了解原理的話,
0:19.198–0:22.780
對我們理解Voice Agent是有幫助的。
0:23.300–0:23.800
好
0:24.320–0:25.860
那么ASR呢
0:26.100–0:28.920
其实我们一般会说ICTT
0:29.180–0:30.720
就是语音转文字
0:31.480–0:35.320
但是更专业的说法可以说ASR
0:35.580–0:37.880
并且在这个voice agent里面
0:38.140–0:39.420
一定要用
0:40.440–0:41.460
实施语音
0:41.720–0:42.500
实施语音的转换
0:42.740–0:45.060
你整段语音的转文本
0:45.300–0:47.100
对于这个voice agent意义不大
0:47.360–0:49.140
因为你无法做这些
0:49.660–0:50.940
打断了这个处理
0:51.700–0:52.200
好
0:52.780–0:55.780
那么他不是听懂了整句在翻译
0:55.780–0:58.820
而是把音频声音切成一帧帧的逐帧
0:58.820–1:01.900
拆这个什么音再把它串成
1:01.900–1:05.020
这个再串成这个字
1:05.020–1:06.080
是这么来的
1:06.080–1:13.240
然后第一步把声音变成模型能吃的东西
1:13.240–1:16.020
比如说声波到一串数字
1:16.020–1:20.020
每秒采集16000个点
1:20.020–1:22.740
气压变化变成一串整数
1:22.740–1:24.520
第二部分呢
1:24.520–1:25.740
就是切成一帧一帧的
1:25.740–1:27.120
每帧20秒
1:27.120–1:28.200
这么短的时间内
1:28.200–1:29.740
声音特征基本不变
1:29.740–1:30.680
那就是20毫秒
1:30.680–1:32.260
20毫秒切变成一帧
1:32.260–1:36.720
所以我们说之前说了一个40毫秒
1:36.720–1:37.600
其实就是两帧嘛
1:37.600–1:42.880
第三个是每帧算出频谱指纹
1:42.880–1:43.920
不看波形
1:43.920–1:46.000
看频率成分
1:46.000–1:47.280
人耳听的就是这个
1:47.280–1:50.300
其实这个是声学的里面
1:50.300–1:51.360
最基本的原理
1:51.360–1:51.900
这个呢
1:51.900–1:52.400
其实
1:52.400–1:54.000
我们不用过去顺究
1:54.000–1:55.100
我们简单了解就行了
1:55.100–1:57.180
为本要转成平谱了
1:57.180–1:58.380
同一个R
1:58.380–2:00.260
你说和我说
2:00.260–2:01.580
大声说和小声说
2:01.580–2:02.520
波形完全不同
2:02.520–2:06.480
但平谱成分分布是相似的
2:06.480–2:07.720
换成平谱模型
2:07.720–2:09.440
要认的东西就稳定多了
2:09.440–2:10.220
说白就说
2:10.220–2:11.120
你说R
2:11.120–2:12.160
我说R
2:12.160–2:12.660
是吧
2:12.660–2:13.540
那两个声音大小
2:13.540–2:14.320
可能是不同的
2:14.320–2:15.320
波形是不同的
2:15.320–2:16.880
所以用通过波形是不行的
2:16.880–2:18.360
要把它换成平谱
2:18.360–2:20.960
模型才能更好的识别
2:20.960–2:22.060
好
2:22.060–2:25.400
第二步就是升学模型逐针猜
2:25.400–2:26.680
这一针是什么音
2:26.680–2:29.360
比如说你好
2:29.360–2:30.120
对吧
2:30.120–2:30.620
为例
2:30.620–2:33.260
那模型对每一针独立给出一个猜测
2:33.260–2:35.620
他不知道这个字
2:35.620–2:37.720
只知道这一针最像什么
2:37.720–2:39.480
那每一针猜测
2:39.480–2:39.980
比如理
2:39.980–2:40.740
这个是空格
2:40.740–2:42.220
空的空白的
2:42.220–2:43.200
理理理
2:43.200–2:45.200
空白好好好
2:45.200–2:46.060
空白
2:46.060–2:47.980
灰色是空白的符号
2:47.980–2:50.020
意思是这一针没有内容输出
2:50.020–2:50.520
有了它
2:50.520–2:51.540
模型就不用纠结
2:51.540–2:53.140
一个音到底跨几帧
2:53.140–2:55.560
说了长就多图几帧
2:55.560–2:57.440
同样字交给下一步收拾
2:57.440–2:59.120
所以说我们可以看到
2:59.120–2:59.960
可能是这么个情况
2:59.960–3:02.320
这个是每一帧的情况
3:02.320–3:02.880
每一帧
3:02.880–3:04.520
每一帧我们说了20毫秒
3:04.520–3:06.360
第三步就解码
3:06.360–3:09.140
合并重复去掉空白
3:09.140–3:10.580
比如说我们可以看到
3:10.580–3:11.780
有理理理好好好
3:11.780–3:14.780
那肯定是合并成理好就行了
3:14.780–3:18.080
然后再把这些空白的地方
3:18.080–3:19.420
再把它去掉就变成理好
3:19.420–3:20.880
其实就是用户就说了个理好
3:20.880–3:22.640
好好好
3:22.640–3:23.480
你好
3:25.640–3:27.680
那么连续的这个
3:28.480–3:29.560
空白的哈
3:30.080–3:31.120
这段没人说话
3:31.120–3:32.600
所以很多流色ASR
3:32.600–3:34.400
根本不用单独跑一个VED
3:35.040–3:37.600
直接读升学模型空白输出就行
3:37.600–3:38.760
判断依据识别
3:38.760–3:39.760
本身天然一致
3:40.240–3:41.600
那你说白了就是有
3:41.600–3:43.920
你这个针里面有这么多空白的符号
3:43.920–3:45.600
那肯定就是你没说话
3:45.600–3:46.320
对吧
3:46.480–3:49.000
那这个就相当于做了一个VED的判断
3:49.560–3:50.680
就是你没说话
3:51.880–3:56.320
这就是断句原理那张图里第二步的最常见的实验方式之一
3:57.520–3:58.360
空白符嘛
3:58.360–3:59.240
那不就断句了吗
3:59.240–4:00.200
我就认为你没说话
4:01.440–4:02.920
比如说你这里面
4:02.920–4:04.360
如果你这空白的地方
4:04.640–4:05.600
并且时间呢
4:06.560–4:07.560
这个比如说
4:08.520–4:09.920
这个超过300毫秒了
4:09.920–4:10.840
那我们认为
4:11.520–4:12.600
你这句话说完了
4:13.040–4:13.560
这个意思
4:15.560–4:19.480
那么为什么牛市的识别会边缩边改呢
4:19.480–4:20.840
对吧
4:20.840–4:22.760
为什么他会边说边改
4:22.760–4:26.200
比如他听到0.3秒
4:26.200–4:27.520
离
4:27.520–4:30.440
听到0.7秒
4:30.440–4:30.940
离好
4:30.940–4:32.880
听到1.2秒
4:32.880–4:33.440
离好吗
4:33.440–4:36.480
那么在这个时候
4:36.480–4:37.680
他静音不是很久
4:37.680–4:38.220
也就是说
4:38.220–4:39.480
他是低于300毫秒的
4:40.160–4:43.160
其实这句话就没说完
4:43.160–4:45.420
离好这时候也没说完
4:45.420–4:47.940
但是到这个时候
4:47.940–4:49.020
可能后面的静音
4:49.020–4:50.260
已经超过300毫秒了
4:50.860–4:51.660
就final了
4:51.780–4:53.380
就静音够久定稿了
4:56.260–4:58.980
我们来看右边这段话
5:08.220–5:09.420
我们看右边的解释
5:09.860–5:12.460
流失模型只看过去看不到未来
5:13.420–5:15.100
比如像理解的模型whisper
5:15.380–5:16.380
拿到整段音频
5:16.380–5:19.120
可以前后互相印证
5:19.120–5:20.220
牛4必须在
5:20.920–5:22.220
这个前后互相印证是什么意思
5:22.220–5:24.480
就是他有一段完整的音频
5:24.480–5:27.520
他已经把一个逐字稿全部练完了
5:27.720–5:29.720
那你当然知道前后有什么
5:30.420–5:32.380
语言他会把它改掉的
5:32.380–5:33.820
但牛4必须在
5:34.180–5:36.880
我想聊聊乒乓的时候就输出
5:37.180–5:39.040
而后面是球还是球拍
5:39.040–5:39.920
根本没有发生
5:40.180–5:41.740
他也不知道你是聊乒乓球
5:41.740–5:43.040
还是聊乒乓球猪
5:43.240–5:44.380
还是聊乒乓球技术
5:44.380–5:45.480
还是聊乒乓球拍
5:46.000–5:46.500
对吧
5:47.780–5:49.840
那这个牛市的就需要解决这种问题
5:50.340–5:52.640
所以他边拆边改,改的过程呢
5:54.180–5:54.960
就是这个
5:55.720–5:57.760
就是我们前面说的这两段对吧
6:01.100–6:01.860
就是in term
6:02.380–6:03.920
那么确定不了的就是final的
6:04.940–6:08.260
那么前面这一部分他就逐字就是在屏幕上了
6:09.040–6:09.540
是吧
6:09.540–6:10.820
用户才能看到他的听
6:11.340–6:12.620
那我们经常看到这个
6:12.880–6:14.920
比如说你在用豆包的经常就说你
6:14.920–6:16.520
你问他问题干什么
6:16.520–6:17.120
就是他
6:17.400–6:18.600
或者说别的这种
6:19.680–6:20.480
语音的这种工具
6:20.480–6:22.520
你会发现他的字在逐步在出是吧
6:22.760–6:23.680
就是这个意思
6:24.520–6:26.200
他在编出还帮你改
6:27.120–6:30.000
中文尤其是没有词的编辑
6:30.000–6:31.080
同音字扎堆
6:31.280–6:31.780
对吧
6:31.780–6:32.720
他同音字特别多
6:32.920–6:34.240
全靠上下文区分
6:34.360–6:36.440
而上下文恰恰是流是最缺的部分
6:36.600–6:38.160
这也就是中文识别了
6:38.280–6:39.160
既然用阿里云
6:39.160–6:40.320
而不是用deepgram
6:40.400–6:41.080
那么deepgram
6:41.080–6:42.360
他是对英文字是特别好
6:42.360–6:43.680
包括Yenion Live这些
6:43.680–6:48.080
所以你中文的话你还是用阿里云、火山、腾讯
6:48.080–6:49.040
像这些是吧
6:49.040–6:50.320
他肯定中文制作的好一些
6:50.320–6:51.760
好
6:51.760–6:58.400
那我们上面讲了学会之后怎么用
6:58.400–6:59.080
推理
6:59.080–7:01.440
那他是怎么学会的
7:01.440–7:04.700
他为什么能识别呢
7:04.700–7:07.160
为什么他能识别出来了
7:07.160–7:08.640
背后的原理是什么
7:08.640–7:11.040
第一个就是为他配好的
7:11.040–7:12.460
对的数据
7:12.460–7:14.040
训练数据标注预料
7:29.192–7:31.492
有东北画,对吧,天津画
7:31.752–7:33.792
等等,比如说上海画
7:34.312–7:36.352
那你有这么多这个
7:36.872–7:38.412
方言,普通话
7:38.912–7:39.952
等等这些画
7:40.192–7:41.232
你录给他
7:42.512–7:44.032
他去训练这个数据
7:45.072–7:46.352
这个是和其他的
7:46.852–7:48.912
这个模型是一样的,你得有训练数据
7:50.692–7:51.719
让他自己找规律,
7:51.719–7:52.617
然后就训练嘛,
7:52.617–7:53.259
就推理嘛,
7:53.259–7:54.285
这个是为数据嘛,
7:54.285–7:55.312
然后这个就是推理
7:55.552–7:56.072
反向
7:56.072–7:59.192
反向传播掉参数
7:59.192–8:01.452
反复对照这几百万条
8:01.452–8:03.472
没有人告诉他
8:03.472–8:04.652
你这个音长什么样
8:04.652–8:07.372
规律是他自己从数据里总结出来的
8:07.372–8:08.612
学出来是两样东西
8:08.612–8:09.432
升线模型
8:09.432–8:11.312
认这一针是什么音
8:11.312–8:13.352
语言模型
8:13.352–8:15.492
同音字里挑哪个更适合上下文
8:15.492–8:17.212
说白了
8:17.212–8:18.512
就你的这个模型
8:18.512–8:20.452
给他的数据越多
8:20.452–8:21.252
训练的越
8:21.252–8:23.992
找的规律越好
8:23.992–8:24.592
对吧
8:24.592–8:26.192
你的参数越多
8:26.192–8:27.872
那当然你的这个识别
8:27.872–8:28.972
可能越准
8:28.972–8:33.112
那么学会了就可以放话
8:33.112–8:33.612
对吧
8:33.612–8:35.612
和推理
8:35.612–8:37.272
那这一段
8:37.272–8:39.132
从没听过的录音
8:39.132–8:41.092
换一个没听过的人来说
8:41.092–8:41.852
他也认得出
8:41.852–8:45.412
这就是上边言那个逐针猜的
8:45.412–8:45.992
用的模型
8:45.992–8:47.452
逐针猜嘛
8:47.452–8:48.612
对吧
8:48.612–8:49.572
他要逐针猜
8:49.572–8:50.852
比如说你说
8:50.852–8:52.372
我要去打乒乓
8:52.372–8:53.792
他会猜出乒乓球
8:53.792–8:56.872
乒乓球球拍 乒乓球桌 乒乓球技术
8:57.632–8:58.652
这属于这个
8:59.932–9:01.732
我们说这个ASR用的对应的
9:01.992–9:03.512
背后用的这种声学模型
9:03.772–9:04.272
对吧
9:04.552–9:05.832
或者说这个语言模型
9:06.332–9:08.132
它就具备了这个能力了
9:08.392–9:09.152
它也能猜
9:09.412–9:10.172
能猜你
9:10.432–9:10.952
说什么
9:11.712–9:14.532
就像教小孩真智 你不会给他
9:14.792–9:15.812
讲字形
9:16.312–9:18.112
学理论 就是反复指的说
9:18.372–9:19.132
这是礼
9:19.912–9:20.412
是吧
9:20.672–9:21.952
礼子多了
9:21.952–9:24.252
他以后就会见过了字体语言的粗
9:24.252–9:26.052
模型学的不是规则是见的多
9:26.052–9:27.072
所以训练时
9:27.332–9:28.872
见的少的东西
9:28.872–9:31.432
专业术语人民方言他有容易出错
9:31.932–9:34.492
这也是供应商为什么提供热词表
9:35.012–9:36.552
所以说就算你的中文呢
9:36.552–9:38.852
当然我们用中文的这种
9:39.352–9:40.392
模型更好对吧
9:40.392–9:41.672
英文就用英文的模型
9:42.432–9:42.952
是吧
9:43.192–9:44.732
你别的语言当然也是
9:45.752–9:47.032
这个所以说是有区别的
9:47.032–9:47.552
这么你
9:47.812–9:49.592
你在你的这个voice in的这个项目的时候
9:49.592–9:51.652
你在挑选来一家供应商的时候
9:51.652–9:53.652
那肯定是根据你的业务场景来的
9:53.652–9:55.492
你是什么语言为主
9:55.492–9:57.112
比如说你是粤语的
9:57.112–10:01.672
那当然你要考虑他这个模型对粤语的识别的怎么样
10:01.672–10:03.012
识别好你才用它
10:03.012–10:05.572
而不是说随便拿一个provider
10:05.572–10:06.912
就行不行了
10:06.912–10:09.652
然后我们理解了原理之后
10:09.652–10:14.772
你对去挑选你的ASR的对应的服务
10:14.772–10:16.292
甚至你在做本地的
10:16.292–10:18.012
比如我们有欧拉玛去接本地的模型
10:18.012–10:19.152
你挑哪个模型
10:19.152–10:20.732
那都是有帮助的
10:20.732–10:24.232
好那么关于语音识别的原理的
10:24.232–10:26.192
这个分享了
10:26.192–10:27.932
我们就讲到这里
10:27.932–10:28.732
谢谢大家观看
0:00.520–0:07.160
大家好,今天我們給大家講解Voice Agent的這個適時語音識別ASR的一個原理。
0:07.940–0:09.987
我們從頭到尾把它捋一遍,
0:09.987–0:12.204
要知道它背後的原理是什麼。
0:12.204–0:14.251
當然具體的這個技術實現,
0:14.251–0:17.322
肯定是由對應的這個供應商已經實現了。
0:17.322–0:19.198
但是我們了解原理的話,
0:19.198–0:22.780
對我們理解Voice Agent是有幫助的。
0:23.300–0:23.800
好
0:24.320–0:25.860
那么ASR呢
0:26.100–0:28.920
其实我们一般会说ICTT
0:29.180–0:30.720
就是语音转文字
0:31.480–0:35.320
但是更专业的说法可以说ASR
0:35.580–0:37.880
并且在这个voice agent里面
0:38.140–0:39.420
一定要用
0:40.440–0:41.460
实施语音
0:41.720–0:42.500
实施语音的转换
0:42.740–0:45.060
你整段语音的转文本
0:45.300–0:47.100
对于这个voice agent意义不大
0:47.360–0:49.140
因为你无法做这些
0:49.660–0:50.940
打断了这个处理
0:51.700–0:52.200
好
0:52.780–0:55.780
那么他不是听懂了整句在翻译
0:55.780–0:58.820
而是把音频声音切成一帧帧的逐帧
0:58.820–1:01.900
拆这个什么音再把它串成
1:01.900–1:05.020
这个再串成这个字
1:05.020–1:06.080
是这么来的
1:06.080–1:13.240
然后第一步把声音变成模型能吃的东西
1:13.240–1:16.020
比如说声波到一串数字
1:16.020–1:20.020
每秒采集16000个点
1:20.020–1:22.740
气压变化变成一串整数
1:22.740–1:24.520
第二部分呢
1:24.520–1:25.740
就是切成一帧一帧的
1:25.740–1:27.120
每帧20秒
1:27.120–1:28.200
这么短的时间内
1:28.200–1:29.740
声音特征基本不变
1:29.740–1:30.680
那就是20毫秒
1:30.680–1:32.260
20毫秒切变成一帧
1:32.260–1:36.720
所以我们说之前说了一个40毫秒
1:36.720–1:37.600
其实就是两帧嘛
1:37.600–1:42.880
第三个是每帧算出频谱指纹
1:42.880–1:43.920
不看波形
1:43.920–1:46.000
看频率成分
1:46.000–1:47.280
人耳听的就是这个
1:47.280–1:50.300
其实这个是声学的里面
1:50.300–1:51.360
最基本的原理
1:51.360–1:51.900
这个呢
1:51.900–1:52.400
其实
1:52.400–1:54.000
我们不用过去顺究
1:54.000–1:55.100
我们简单了解就行了
1:55.100–1:57.180
为本要转成平谱了
1:57.180–1:58.380
同一个R
1:58.380–2:00.260
你说和我说
2:00.260–2:01.580
大声说和小声说
2:01.580–2:02.520
波形完全不同
2:02.520–2:06.480
但平谱成分分布是相似的
2:06.480–2:07.720
换成平谱模型
2:07.720–2:09.440
要认的东西就稳定多了
2:09.440–2:10.220
说白就说
2:10.220–2:11.120
你说R
2:11.120–2:12.160
我说R
2:12.160–2:12.660
是吧
2:12.660–2:13.540
那两个声音大小
2:13.540–2:14.320
可能是不同的
2:14.320–2:15.320
波形是不同的
2:15.320–2:16.880
所以用通过波形是不行的
2:16.880–2:18.360
要把它换成平谱
2:18.360–2:20.960
模型才能更好的识别
2:20.960–2:22.060
好
2:22.060–2:25.400
第二步就是升学模型逐针猜
2:25.400–2:26.680
这一针是什么音
2:26.680–2:29.360
比如说你好
2:29.360–2:30.120
对吧
2:30.120–2:30.620
为例
2:30.620–2:33.260
那模型对每一针独立给出一个猜测
2:33.260–2:35.620
他不知道这个字
2:35.620–2:37.720
只知道这一针最像什么
2:37.720–2:39.480
那每一针猜测
2:39.480–2:39.980
比如理
2:39.980–2:40.740
这个是空格
2:40.740–2:42.220
空的空白的
2:42.220–2:43.200
理理理
2:43.200–2:45.200
空白好好好
2:45.200–2:46.060
空白
2:46.060–2:47.980
灰色是空白的符号
2:47.980–2:50.020
意思是这一针没有内容输出
2:50.020–2:50.520
有了它
2:50.520–2:51.540
模型就不用纠结
2:51.540–2:53.140
一个音到底跨几帧
2:53.140–2:55.560
说了长就多图几帧
2:55.560–2:57.440
同样字交给下一步收拾
2:57.440–2:59.120
所以说我们可以看到
2:59.120–2:59.960
可能是这么个情况
2:59.960–3:02.320
这个是每一帧的情况
3:02.320–3:02.880
每一帧
3:02.880–3:04.520
每一帧我们说了20毫秒
3:04.520–3:06.360
第三步就解码
3:06.360–3:09.140
合并重复去掉空白
3:09.140–3:10.580
比如说我们可以看到
3:10.580–3:11.780
有理理理好好好
3:11.780–3:14.780
那肯定是合并成理好就行了
3:14.780–3:18.080
然后再把这些空白的地方
3:18.080–3:19.420
再把它去掉就变成理好
3:19.420–3:20.880
其实就是用户就说了个理好
3:20.880–3:22.640
好好好
3:22.640–3:23.480
你好
3:25.640–3:27.680
那么连续的这个
3:28.480–3:29.560
空白的哈
3:30.080–3:31.120
这段没人说话
3:31.120–3:32.600
所以很多流色ASR
3:32.600–3:34.400
根本不用单独跑一个VED
3:35.040–3:37.600
直接读升学模型空白输出就行
3:37.600–3:38.760
判断依据识别
3:38.760–3:39.760
本身天然一致
3:40.240–3:41.600
那你说白了就是有
3:41.600–3:43.920
你这个针里面有这么多空白的符号
3:43.920–3:45.600
那肯定就是你没说话
3:45.600–3:46.320
对吧
3:46.480–3:49.000
那这个就相当于做了一个VED的判断
3:49.560–3:50.680
就是你没说话
3:51.880–3:56.320
这就是断句原理那张图里第二步的最常见的实验方式之一
3:57.520–3:58.360
空白符嘛
3:58.360–3:59.240
那不就断句了吗
3:59.240–4:00.200
我就认为你没说话
4:01.440–4:02.920
比如说你这里面
4:02.920–4:04.360
如果你这空白的地方
4:04.640–4:05.600
并且时间呢
4:06.560–4:07.560
这个比如说
4:08.520–4:09.920
这个超过300毫秒了
4:09.920–4:10.840
那我们认为
4:11.520–4:12.600
你这句话说完了
4:13.040–4:13.560
这个意思
4:15.560–4:19.480
那么为什么牛市的识别会边缩边改呢
4:19.480–4:20.840
对吧
4:20.840–4:22.760
为什么他会边说边改
4:22.760–4:26.200
比如他听到0.3秒
4:26.200–4:27.520
离
4:27.520–4:30.440
听到0.7秒
4:30.440–4:30.940
离好
4:30.940–4:32.880
听到1.2秒
4:32.880–4:33.440
离好吗
4:33.440–4:36.480
那么在这个时候
4:36.480–4:37.680
他静音不是很久
4:37.680–4:38.220
也就是说
4:38.220–4:39.480
他是低于300毫秒的
4:40.160–4:43.160
其实这句话就没说完
4:43.160–4:45.420
离好这时候也没说完
4:45.420–4:47.940
但是到这个时候
4:47.940–4:49.020
可能后面的静音
4:49.020–4:50.260
已经超过300毫秒了
4:50.860–4:51.660
就final了
4:51.780–4:53.380
就静音够久定稿了
4:56.260–4:58.980
我们来看右边这段话
5:08.220–5:09.420
我们看右边的解释
5:09.860–5:12.460
流失模型只看过去看不到未来
5:13.420–5:15.100
比如像理解的模型whisper
5:15.380–5:16.380
拿到整段音频
5:16.380–5:19.120
可以前后互相印证
5:19.120–5:20.220
牛4必须在
5:20.920–5:22.220
这个前后互相印证是什么意思
5:22.220–5:24.480
就是他有一段完整的音频
5:24.480–5:27.520
他已经把一个逐字稿全部练完了
5:27.720–5:29.720
那你当然知道前后有什么
5:30.420–5:32.380
语言他会把它改掉的
5:32.380–5:33.820
但牛4必须在
5:34.180–5:36.880
我想聊聊乒乓的时候就输出
5:37.180–5:39.040
而后面是球还是球拍
5:39.040–5:39.920
根本没有发生
5:40.180–5:41.740
他也不知道你是聊乒乓球
5:41.740–5:43.040
还是聊乒乓球猪
5:43.240–5:44.380
还是聊乒乓球技术
5:44.380–5:45.480
还是聊乒乓球拍
5:46.000–5:46.500
对吧
5:47.780–5:49.840
那这个牛市的就需要解决这种问题
5:50.340–5:52.640
所以他边拆边改,改的过程呢
5:54.180–5:54.960
就是这个
5:55.720–5:57.760
就是我们前面说的这两段对吧
6:01.100–6:01.860
就是in term
6:02.380–6:03.920
那么确定不了的就是final的
6:04.940–6:08.260
那么前面这一部分他就逐字就是在屏幕上了
6:09.040–6:09.540
是吧
6:09.540–6:10.820
用户才能看到他的听
6:11.340–6:12.620
那我们经常看到这个
6:12.880–6:14.920
比如说你在用豆包的经常就说你
6:14.920–6:16.520
你问他问题干什么
6:16.520–6:17.120
就是他
6:17.400–6:18.600
或者说别的这种
6:19.680–6:20.480
语音的这种工具
6:20.480–6:22.520
你会发现他的字在逐步在出是吧
6:22.760–6:23.680
就是这个意思
6:24.520–6:26.200
他在编出还帮你改
6:27.120–6:30.000
中文尤其是没有词的编辑
6:30.000–6:31.080
同音字扎堆
6:31.280–6:31.780
对吧
6:31.780–6:32.720
他同音字特别多
6:32.920–6:34.240
全靠上下文区分
6:34.360–6:36.440
而上下文恰恰是流是最缺的部分
6:36.600–6:38.160
这也就是中文识别了
6:38.280–6:39.160
既然用阿里云
6:39.160–6:40.320
而不是用deepgram
6:40.400–6:41.080
那么deepgram
6:41.080–6:42.360
他是对英文字是特别好
6:42.360–6:43.680
包括Yenion Live这些
6:43.680–6:48.080
所以你中文的话你还是用阿里云、火山、腾讯
6:48.080–6:49.040
像这些是吧
6:49.040–6:50.320
他肯定中文制作的好一些
6:50.320–6:51.760
好
6:51.760–6:58.400
那我们上面讲了学会之后怎么用
6:58.400–6:59.080
推理
6:59.080–7:01.440
那他是怎么学会的
7:01.440–7:04.700
他为什么能识别呢
7:04.700–7:07.160
为什么他能识别出来了
7:07.160–7:08.640
背后的原理是什么
7:08.640–7:11.040
第一个就是为他配好的
7:11.040–7:12.460
对的数据
7:12.460–7:14.040
训练数据标注预料
7:29.192–7:31.492
有东北画,对吧,天津画
7:31.752–7:33.792
等等,比如说上海画
7:34.312–7:36.352
那你有这么多这个
7:36.872–7:38.412
方言,普通话
7:38.912–7:39.952
等等这些画
7:40.192–7:41.232
你录给他
7:42.512–7:44.032
他去训练这个数据
7:45.072–7:46.352
这个是和其他的
7:46.852–7:48.912
这个模型是一样的,你得有训练数据
7:50.692–7:51.719
让他自己找规律,
7:51.719–7:52.617
然后就训练嘛,
7:52.617–7:53.259
就推理嘛,
7:53.259–7:54.285
这个是为数据嘛,
7:54.285–7:55.312
然后这个就是推理
7:55.552–7:56.072
反向
7:56.072–7:59.192
反向传播掉参数
7:59.192–8:01.452
反复对照这几百万条
8:01.452–8:03.472
没有人告诉他
8:03.472–8:04.652
你这个音长什么样
8:04.652–8:07.372
规律是他自己从数据里总结出来的
8:07.372–8:08.612
学出来是两样东西
8:08.612–8:09.432
升线模型
8:09.432–8:11.312
认这一针是什么音
8:11.312–8:13.352
语言模型
8:13.352–8:15.492
同音字里挑哪个更适合上下文
8:15.492–8:17.212
说白了
8:17.212–8:18.512
就你的这个模型
8:18.512–8:20.452
给他的数据越多
8:20.452–8:21.252
训练的越
8:21.252–8:23.992
找的规律越好
8:23.992–8:24.592
对吧
8:24.592–8:26.192
你的参数越多
8:26.192–8:27.872
那当然你的这个识别
8:27.872–8:28.972
可能越准
8:28.972–8:33.112
那么学会了就可以放话
8:33.112–8:33.612
对吧
8:33.612–8:35.612
和推理
8:35.612–8:37.272
那这一段
8:37.272–8:39.132
从没听过的录音
8:39.132–8:41.092
换一个没听过的人来说
8:41.092–8:41.852
他也认得出
8:41.852–8:45.412
这就是上边言那个逐针猜的
8:45.412–8:45.992
用的模型
8:45.992–8:47.452
逐针猜嘛
8:47.452–8:48.612
对吧
8:48.612–8:49.572
他要逐针猜
8:49.572–8:50.852
比如说你说
8:50.852–8:52.372
我要去打乒乓
8:52.372–8:53.792
他会猜出乒乓球
8:53.792–8:56.872
乒乓球球拍 乒乓球桌 乒乓球技术
8:57.632–8:58.652
这属于这个
8:59.932–9:01.732
我们说这个ASR用的对应的
9:01.992–9:03.512
背后用的这种声学模型
9:03.772–9:04.272
对吧
9:04.552–9:05.832
或者说这个语言模型
9:06.332–9:08.132
它就具备了这个能力了
9:08.392–9:09.152
它也能猜
9:09.412–9:10.172
能猜你
9:10.432–9:10.952
说什么
9:11.712–9:14.532
就像教小孩真智 你不会给他
9:14.792–9:15.812
讲字形
9:16.312–9:18.112
学理论 就是反复指的说
9:18.372–9:19.132
这是礼
9:19.912–9:20.412
是吧
9:20.672–9:21.952
礼子多了
9:21.952–9:24.252
他以后就会见过了字体语言的粗
9:24.252–9:26.052
模型学的不是规则是见的多
9:26.052–9:27.072
所以训练时
9:27.332–9:28.872
见的少的东西
9:28.872–9:31.432
专业术语人民方言他有容易出错
9:31.932–9:34.492
这也是供应商为什么提供热词表
9:35.012–9:36.552
所以说就算你的中文呢
9:36.552–9:38.852
当然我们用中文的这种
9:39.352–9:40.392
模型更好对吧
9:40.392–9:41.672
英文就用英文的模型
9:42.432–9:42.952
是吧
9:43.192–9:44.732
你别的语言当然也是
9:45.752–9:47.032
这个所以说是有区别的
9:47.032–9:47.552
这么你
9:47.812–9:49.592
你在你的这个voice in的这个项目的时候
9:49.592–9:51.652
你在挑选来一家供应商的时候
9:51.652–9:53.652
那肯定是根据你的业务场景来的
9:53.652–9:55.492
你是什么语言为主
9:55.492–9:57.112
比如说你是粤语的
9:57.112–10:01.672
那当然你要考虑他这个模型对粤语的识别的怎么样
10:01.672–10:03.012
识别好你才用它
10:03.012–10:05.572
而不是说随便拿一个provider
10:05.572–10:06.912
就行不行了
10:06.912–10:09.652
然后我们理解了原理之后
10:09.652–10:14.772
你对去挑选你的ASR的对应的服务
10:14.772–10:16.292
甚至你在做本地的
10:16.292–10:18.012
比如我们有欧拉玛去接本地的模型
10:18.012–10:19.152
你挑哪个模型
10:19.152–10:20.732
那都是有帮助的
10:20.732–10:24.232
好那么关于语音识别的原理的
10:24.232–10:26.192
这个分享了
10:26.192–10:27.932
我们就讲到这里
10:27.932–10:28.732
谢谢大家观看
0:00.520–0:07.160
大家好,今天我們給大家講解Voice Agent的這個適時語音識別ASR的一個原理。
大家好,今天我們給大家講解Voice Agent的這個適時語音識別ASR的一個原理。
0:07.940–0:09.987
我們從頭到尾把它捋一遍,
我們從頭到尾把它捋一遍,
0:09.987–0:12.204
要知道它背後的原理是什麼。
要知道它背後的原理是什麼。
0:12.204–0:14.251
當然具體的這個技術實現,
當然具體的這個技術實現,
0:14.251–0:17.322
肯定是由對應的這個供應商已經實現了。
肯定是由對應的這個供應商已經實現了。
0:17.322–0:19.198
但是我們了解原理的話,
但是我們了解原理的話,
0:19.198–0:22.780
對我們理解Voice Agent是有幫助的。
對我們理解Voice Agent是有幫助的。
0:23.300–0:23.800
好
好
0:24.320–0:25.860
那么ASR呢
那么ASR呢
0:26.100–0:28.920
其实我们一般会说ICTT
其实我们一般会说ICTT
0:29.180–0:30.720
就是语音转文字
就是语音转文字
0:31.480–0:35.320
但是更专业的说法可以说ASR
但是更专业的说法可以说ASR
0:35.580–0:37.880
并且在这个voice agent里面
并且在这个voice agent里面
0:38.140–0:39.420
一定要用
一定要用
0:40.440–0:41.460
实施语音
实施语音
0:41.720–0:42.500
实施语音的转换
实施语音的转换
0:42.740–0:45.060
你整段语音的转文本
你整段语音的转文本
0:45.300–0:47.100
对于这个voice agent意义不大
对于这个voice agent意义不大
0:47.360–0:49.140
因为你无法做这些
因为你无法做这些
0:49.660–0:50.940
打断了这个处理
打断了这个处理
0:51.700–0:52.200
好
好
0:52.780–0:55.780
那么他不是听懂了整句在翻译
那么他不是听懂了整句在翻译
0:55.780–0:58.820
而是把音频声音切成一帧帧的逐帧
而是把音频声音切成一帧帧的逐帧
0:58.820–1:01.900
拆这个什么音再把它串成
拆这个什么音再把它串成
1:01.900–1:05.020
这个再串成这个字
这个再串成这个字
1:05.020–1:06.080
是这么来的
是这么来的
1:06.080–1:13.240
然后第一步把声音变成模型能吃的东西
然后第一步把声音变成模型能吃的东西
1:13.240–1:16.020
比如说声波到一串数字
比如说声波到一串数字
1:16.020–1:20.020
每秒采集16000个点
每秒采集16000个点
1:20.020–1:22.740
气压变化变成一串整数
气压变化变成一串整数
1:22.740–1:24.520
第二部分呢
第二部分呢
1:24.520–1:25.740
就是切成一帧一帧的
就是切成一帧一帧的
1:25.740–1:27.120
每帧20秒
每帧20秒
1:27.120–1:28.200
这么短的时间内
这么短的时间内
1:28.200–1:29.740
声音特征基本不变
声音特征基本不变
1:29.740–1:30.680
那就是20毫秒
那就是20毫秒
1:30.680–1:32.260
20毫秒切变成一帧
20毫秒切变成一帧
1:32.260–1:36.720
所以我们说之前说了一个40毫秒
所以我们说之前说了一个40毫秒
1:36.720–1:37.600
其实就是两帧嘛
其实就是两帧嘛
1:37.600–1:42.880
第三个是每帧算出频谱指纹
第三个是每帧算出频谱指纹
1:42.880–1:43.920
不看波形
不看波形
1:43.920–1:46.000
看频率成分
看频率成分
1:46.000–1:47.280
人耳听的就是这个
人耳听的就是这个
1:47.280–1:50.300
其实这个是声学的里面
其实这个是声学的里面
1:50.300–1:51.360
最基本的原理
最基本的原理
1:51.360–1:51.900
这个呢
这个呢
1:51.900–1:52.400
其实
其实
1:52.400–1:54.000
我们不用过去顺究
我们不用过去顺究
1:54.000–1:55.100
我们简单了解就行了
我们简单了解就行了
1:55.100–1:57.180
为本要转成平谱了
为本要转成平谱了
1:57.180–1:58.380
同一个R
同一个R
1:58.380–2:00.260
你说和我说
你说和我说
2:00.260–2:01.580
大声说和小声说
大声说和小声说
2:01.580–2:02.520
波形完全不同
波形完全不同
2:02.520–2:06.480
但平谱成分分布是相似的
但平谱成分分布是相似的
2:06.480–2:07.720
换成平谱模型
换成平谱模型
2:07.720–2:09.440
要认的东西就稳定多了
要认的东西就稳定多了
2:09.440–2:10.220
说白就说
说白就说
2:10.220–2:11.120
你说R
你说R
2:11.120–2:12.160
我说R
我说R
2:12.160–2:12.660
是吧
是吧
2:12.660–2:13.540
那两个声音大小
那两个声音大小
2:13.540–2:14.320
可能是不同的
可能是不同的
2:14.320–2:15.320
波形是不同的
波形是不同的
2:15.320–2:16.880
所以用通过波形是不行的
所以用通过波形是不行的
2:16.880–2:18.360
要把它换成平谱
要把它换成平谱
2:18.360–2:20.960
模型才能更好的识别
模型才能更好的识别
2:20.960–2:22.060
好
好
2:22.060–2:25.400
第二步就是升学模型逐针猜
第二步就是升学模型逐针猜
2:25.400–2:26.680
这一针是什么音
这一针是什么音
2:26.680–2:29.360
比如说你好
比如说你好
2:29.360–2:30.120
对吧
对吧
2:30.120–2:30.620
为例
为例
2:30.620–2:33.260
那模型对每一针独立给出一个猜测
那模型对每一针独立给出一个猜测
2:33.260–2:35.620
他不知道这个字
他不知道这个字
2:35.620–2:37.720
只知道这一针最像什么
只知道这一针最像什么
2:37.720–2:39.480
那每一针猜测
那每一针猜测
2:39.480–2:39.980
比如理
比如理
2:39.980–2:40.740
这个是空格
这个是空格
2:40.740–2:42.220
空的空白的
空的空白的
2:42.220–2:43.200
理理理
理理理
2:43.200–2:45.200
空白好好好
空白好好好
2:45.200–2:46.060
空白
空白
2:46.060–2:47.980
灰色是空白的符号
灰色是空白的符号
2:47.980–2:50.020
意思是这一针没有内容输出
意思是这一针没有内容输出
2:50.020–2:50.520
有了它
有了它
2:50.520–2:51.540
模型就不用纠结
模型就不用纠结
2:51.540–2:53.140
一个音到底跨几帧
一个音到底跨几帧
2:53.140–2:55.560
说了长就多图几帧
说了长就多图几帧
2:55.560–2:57.440
同样字交给下一步收拾
同样字交给下一步收拾
2:57.440–2:59.120
所以说我们可以看到
所以说我们可以看到
2:59.120–2:59.960
可能是这么个情况
可能是这么个情况
2:59.960–3:02.320
这个是每一帧的情况
这个是每一帧的情况
3:02.320–3:02.880
每一帧
每一帧
3:02.880–3:04.520
每一帧我们说了20毫秒
每一帧我们说了20毫秒
3:04.520–3:06.360
第三步就解码
第三步就解码
3:06.360–3:09.140
合并重复去掉空白
合并重复去掉空白
3:09.140–3:10.580
比如说我们可以看到
比如说我们可以看到
3:10.580–3:11.780
有理理理好好好
有理理理好好好
3:11.780–3:14.780
那肯定是合并成理好就行了
那肯定是合并成理好就行了
3:14.780–3:18.080
然后再把这些空白的地方
然后再把这些空白的地方
3:18.080–3:19.420
再把它去掉就变成理好
再把它去掉就变成理好
3:19.420–3:20.880
其实就是用户就说了个理好
其实就是用户就说了个理好
3:20.880–3:22.640
好好好
好好好
3:22.640–3:23.480
你好
你好
3:25.640–3:27.680
那么连续的这个
那么连续的这个
3:28.480–3:29.560
空白的哈
空白的哈
3:30.080–3:31.120
这段没人说话
这段没人说话
3:31.120–3:32.600
所以很多流色ASR
所以很多流色ASR
3:32.600–3:34.400
根本不用单独跑一个VED
根本不用单独跑一个VED
3:35.040–3:37.600
直接读升学模型空白输出就行
直接读升学模型空白输出就行
3:37.600–3:38.760
判断依据识别
判断依据识别
3:38.760–3:39.760
本身天然一致
本身天然一致
3:40.240–3:41.600
那你说白了就是有
那你说白了就是有
3:41.600–3:43.920
你这个针里面有这么多空白的符号
你这个针里面有这么多空白的符号
3:43.920–3:45.600
那肯定就是你没说话
那肯定就是你没说话
3:45.600–3:46.320
对吧
对吧
3:46.480–3:49.000
那这个就相当于做了一个VED的判断
那这个就相当于做了一个VED的判断
3:49.560–3:50.680
就是你没说话
就是你没说话
3:51.880–3:56.320
这就是断句原理那张图里第二步的最常见的实验方式之一
这就是断句原理那张图里第二步的最常见的实验方式之一
3:57.520–3:58.360
空白符嘛
空白符嘛
3:58.360–3:59.240
那不就断句了吗
那不就断句了吗
3:59.240–4:00.200
我就认为你没说话
我就认为你没说话
4:01.440–4:02.920
比如说你这里面
比如说你这里面
4:02.920–4:04.360
如果你这空白的地方
如果你这空白的地方
4:04.640–4:05.600
并且时间呢
并且时间呢
4:06.560–4:07.560
这个比如说
这个比如说
4:08.520–4:09.920
这个超过300毫秒了
这个超过300毫秒了
4:09.920–4:10.840
那我们认为
那我们认为
4:11.520–4:12.600
你这句话说完了
你这句话说完了
4:13.040–4:13.560
这个意思
这个意思
4:15.560–4:19.480
那么为什么牛市的识别会边缩边改呢
那么为什么牛市的识别会边缩边改呢
4:19.480–4:20.840
对吧
对吧
4:20.840–4:22.760
为什么他会边说边改
为什么他会边说边改
4:22.760–4:26.200
比如他听到0.3秒
比如他听到0.3秒
4:26.200–4:27.520
离
离
4:27.520–4:30.440
听到0.7秒
听到0.7秒
4:30.440–4:30.940
离好
离好
4:30.940–4:32.880
听到1.2秒
听到1.2秒
4:32.880–4:33.440
离好吗
离好吗
4:33.440–4:36.480
那么在这个时候
那么在这个时候
4:36.480–4:37.680
他静音不是很久
他静音不是很久
4:37.680–4:38.220
也就是说
也就是说
4:38.220–4:39.480
他是低于300毫秒的
他是低于300毫秒的
4:40.160–4:43.160
其实这句话就没说完
其实这句话就没说完
4:43.160–4:45.420
离好这时候也没说完
离好这时候也没说完
4:45.420–4:47.940
但是到这个时候
但是到这个时候
4:47.940–4:49.020
可能后面的静音
可能后面的静音
4:49.020–4:50.260
已经超过300毫秒了
已经超过300毫秒了
4:50.860–4:51.660
就final了
就final了
4:51.780–4:53.380
就静音够久定稿了
就静音够久定稿了
4:56.260–4:58.980
我们来看右边这段话
我们来看右边这段话
5:08.220–5:09.420
我们看右边的解释
我们看右边的解释
5:09.860–5:12.460
流失模型只看过去看不到未来
流失模型只看过去看不到未来
5:13.420–5:15.100
比如像理解的模型whisper
比如像理解的模型whisper
5:15.380–5:16.380
拿到整段音频
拿到整段音频
5:16.380–5:19.120
可以前后互相印证
可以前后互相印证
5:19.120–5:20.220
牛4必须在
牛4必须在
5:20.920–5:22.220
这个前后互相印证是什么意思
这个前后互相印证是什么意思
5:22.220–5:24.480
就是他有一段完整的音频
就是他有一段完整的音频
5:24.480–5:27.520
他已经把一个逐字稿全部练完了
他已经把一个逐字稿全部练完了
5:27.720–5:29.720
那你当然知道前后有什么
那你当然知道前后有什么
5:30.420–5:32.380
语言他会把它改掉的
语言他会把它改掉的
5:32.380–5:33.820
但牛4必须在
但牛4必须在
5:34.180–5:36.880
我想聊聊乒乓的时候就输出
我想聊聊乒乓的时候就输出
5:37.180–5:39.040
而后面是球还是球拍
而后面是球还是球拍
5:39.040–5:39.920
根本没有发生
根本没有发生
5:40.180–5:41.740
他也不知道你是聊乒乓球
他也不知道你是聊乒乓球
5:41.740–5:43.040
还是聊乒乓球猪
还是聊乒乓球猪
5:43.240–5:44.380
还是聊乒乓球技术
还是聊乒乓球技术
5:44.380–5:45.480
还是聊乒乓球拍
还是聊乒乓球拍
5:46.000–5:46.500
对吧
对吧
5:47.780–5:49.840
那这个牛市的就需要解决这种问题
那这个牛市的就需要解决这种问题
5:50.340–5:52.640
所以他边拆边改,改的过程呢
所以他边拆边改,改的过程呢
5:54.180–5:54.960
就是这个
就是这个
5:55.720–5:57.760
就是我们前面说的这两段对吧
就是我们前面说的这两段对吧
6:01.100–6:01.860
就是in term
就是in term
6:02.380–6:03.920
那么确定不了的就是final的
那么确定不了的就是final的
6:04.940–6:08.260
那么前面这一部分他就逐字就是在屏幕上了
那么前面这一部分他就逐字就是在屏幕上了
6:09.040–6:09.540
是吧
是吧
6:09.540–6:10.820
用户才能看到他的听
用户才能看到他的听
6:11.340–6:12.620
那我们经常看到这个
那我们经常看到这个
6:12.880–6:14.920
比如说你在用豆包的经常就说你
比如说你在用豆包的经常就说你
6:14.920–6:16.520
你问他问题干什么
你问他问题干什么
6:16.520–6:17.120
就是他
就是他
6:17.400–6:18.600
或者说别的这种
或者说别的这种
6:19.680–6:20.480
语音的这种工具
语音的这种工具
6:20.480–6:22.520
你会发现他的字在逐步在出是吧
你会发现他的字在逐步在出是吧
6:22.760–6:23.680
就是这个意思
就是这个意思
6:24.520–6:26.200
他在编出还帮你改
他在编出还帮你改
6:27.120–6:30.000
中文尤其是没有词的编辑
中文尤其是没有词的编辑
6:30.000–6:31.080
同音字扎堆
同音字扎堆
6:31.280–6:31.780
对吧
对吧
6:31.780–6:32.720
他同音字特别多
他同音字特别多
6:32.920–6:34.240
全靠上下文区分
全靠上下文区分
6:34.360–6:36.440
而上下文恰恰是流是最缺的部分
而上下文恰恰是流是最缺的部分
6:36.600–6:38.160
这也就是中文识别了
这也就是中文识别了
6:38.280–6:39.160
既然用阿里云
既然用阿里云
6:39.160–6:40.320
而不是用deepgram
而不是用deepgram
6:40.400–6:41.080
那么deepgram
那么deepgram
6:41.080–6:42.360
他是对英文字是特别好
他是对英文字是特别好
6:42.360–6:43.680
包括Yenion Live这些
包括Yenion Live这些
6:43.680–6:48.080
所以你中文的话你还是用阿里云、火山、腾讯
所以你中文的话你还是用阿里云、火山、腾讯
6:48.080–6:49.040
像这些是吧
像这些是吧
6:49.040–6:50.320
他肯定中文制作的好一些
他肯定中文制作的好一些
6:50.320–6:51.760
好
好
6:51.760–6:58.400
那我们上面讲了学会之后怎么用
那我们上面讲了学会之后怎么用
6:58.400–6:59.080
推理
推理
6:59.080–7:01.440
那他是怎么学会的
那他是怎么学会的
7:01.440–7:04.700
他为什么能识别呢
他为什么能识别呢
7:04.700–7:07.160
为什么他能识别出来了
为什么他能识别出来了
7:07.160–7:08.640
背后的原理是什么
背后的原理是什么
7:08.640–7:11.040
第一个就是为他配好的
第一个就是为他配好的
7:11.040–7:12.460
对的数据
对的数据
7:12.460–7:14.040
训练数据标注预料
训练数据标注预料
7:29.192–7:31.492
有东北画,对吧,天津画
有东北画,对吧,天津画
7:31.752–7:33.792
等等,比如说上海画
等等,比如说上海画
7:34.312–7:36.352
那你有这么多这个
那你有这么多这个
7:36.872–7:38.412
方言,普通话
方言,普通话
7:38.912–7:39.952
等等这些画
等等这些画
7:40.192–7:41.232
你录给他
你录给他
7:42.512–7:44.032
他去训练这个数据
他去训练这个数据
7:45.072–7:46.352
这个是和其他的
这个是和其他的
7:46.852–7:48.912
这个模型是一样的,你得有训练数据
这个模型是一样的,你得有训练数据
7:50.692–7:51.719
让他自己找规律,
让他自己找规律,
7:51.719–7:52.617
然后就训练嘛,
然后就训练嘛,
7:52.617–7:53.259
就推理嘛,
就推理嘛,
7:53.259–7:54.285
这个是为数据嘛,
这个是为数据嘛,
7:54.285–7:55.312
然后这个就是推理
然后这个就是推理
7:55.552–7:56.072
反向
反向
7:56.072–7:59.192
反向传播掉参数
反向传播掉参数
7:59.192–8:01.452
反复对照这几百万条
反复对照这几百万条
8:01.452–8:03.472
没有人告诉他
没有人告诉他
8:03.472–8:04.652
你这个音长什么样
你这个音长什么样
8:04.652–8:07.372
规律是他自己从数据里总结出来的
规律是他自己从数据里总结出来的
8:07.372–8:08.612
学出来是两样东西
学出来是两样东西
8:08.612–8:09.432
升线模型
升线模型
8:09.432–8:11.312
认这一针是什么音
认这一针是什么音
8:11.312–8:13.352
语言模型
语言模型
8:13.352–8:15.492
同音字里挑哪个更适合上下文
同音字里挑哪个更适合上下文
8:15.492–8:17.212
说白了
说白了
8:17.212–8:18.512
就你的这个模型
就你的这个模型
8:18.512–8:20.452
给他的数据越多
给他的数据越多
8:20.452–8:21.252
训练的越
训练的越
8:21.252–8:23.992
找的规律越好
找的规律越好
8:23.992–8:24.592
对吧
对吧
8:24.592–8:26.192
你的参数越多
你的参数越多
8:26.192–8:27.872
那当然你的这个识别
那当然你的这个识别
8:27.872–8:28.972
可能越准
可能越准
8:28.972–8:33.112
那么学会了就可以放话
那么学会了就可以放话
8:33.112–8:33.612
对吧
对吧
8:33.612–8:35.612
和推理
和推理
8:35.612–8:37.272
那这一段
那这一段
8:37.272–8:39.132
从没听过的录音
从没听过的录音
8:39.132–8:41.092
换一个没听过的人来说
换一个没听过的人来说
8:41.092–8:41.852
他也认得出
他也认得出
8:41.852–8:45.412
这就是上边言那个逐针猜的
这就是上边言那个逐针猜的
8:45.412–8:45.992
用的模型
用的模型
8:45.992–8:47.452
逐针猜嘛
逐针猜嘛
8:47.452–8:48.612
对吧
对吧
8:48.612–8:49.572
他要逐针猜
他要逐针猜
8:49.572–8:50.852
比如说你说
比如说你说
8:50.852–8:52.372
我要去打乒乓
我要去打乒乓
8:52.372–8:53.792
他会猜出乒乓球
他会猜出乒乓球
8:53.792–8:56.872
乒乓球球拍 乒乓球桌 乒乓球技术
乒乓球球拍 乒乓球桌 乒乓球技术
8:57.632–8:58.652
这属于这个
这属于这个
8:59.932–9:01.732
我们说这个ASR用的对应的
我们说这个ASR用的对应的
9:01.992–9:03.512
背后用的这种声学模型
背后用的这种声学模型
9:03.772–9:04.272
对吧
对吧
9:04.552–9:05.832
或者说这个语言模型
或者说这个语言模型
9:06.332–9:08.132
它就具备了这个能力了
它就具备了这个能力了
9:08.392–9:09.152
它也能猜
它也能猜
9:09.412–9:10.172
能猜你
能猜你
9:10.432–9:10.952
说什么
说什么
9:11.712–9:14.532
就像教小孩真智 你不会给他
就像教小孩真智 你不会给他
9:14.792–9:15.812
讲字形
讲字形
9:16.312–9:18.112
学理论 就是反复指的说
学理论 就是反复指的说
9:18.372–9:19.132
这是礼
这是礼
9:19.912–9:20.412
是吧
是吧
9:20.672–9:21.952
礼子多了
礼子多了
9:21.952–9:24.252
他以后就会见过了字体语言的粗
他以后就会见过了字体语言的粗
9:24.252–9:26.052
模型学的不是规则是见的多
模型学的不是规则是见的多
9:26.052–9:27.072
所以训练时
所以训练时
9:27.332–9:28.872
见的少的东西
见的少的东西
9:28.872–9:31.432
专业术语人民方言他有容易出错
专业术语人民方言他有容易出错
9:31.932–9:34.492
这也是供应商为什么提供热词表
这也是供应商为什么提供热词表
9:35.012–9:36.552
所以说就算你的中文呢
所以说就算你的中文呢
9:36.552–9:38.852
当然我们用中文的这种
当然我们用中文的这种
9:39.352–9:40.392
模型更好对吧
模型更好对吧
9:40.392–9:41.672
英文就用英文的模型
英文就用英文的模型
9:42.432–9:42.952
是吧
是吧
9:43.192–9:44.732
你别的语言当然也是
你别的语言当然也是
9:45.752–9:47.032
这个所以说是有区别的
这个所以说是有区别的
9:47.032–9:47.552
这么你
这么你
9:47.812–9:49.592
你在你的这个voice in的这个项目的时候
你在你的这个voice in的这个项目的时候
9:49.592–9:51.652
你在挑选来一家供应商的时候
你在挑选来一家供应商的时候
9:51.652–9:53.652
那肯定是根据你的业务场景来的
那肯定是根据你的业务场景来的
9:53.652–9:55.492
你是什么语言为主
你是什么语言为主
9:55.492–9:57.112
比如说你是粤语的
比如说你是粤语的
9:57.112–10:01.672
那当然你要考虑他这个模型对粤语的识别的怎么样
那当然你要考虑他这个模型对粤语的识别的怎么样
10:01.672–10:03.012
识别好你才用它
识别好你才用它
10:03.012–10:05.572
而不是说随便拿一个provider
而不是说随便拿一个provider
10:05.572–10:06.912
就行不行了
就行不行了
10:06.912–10:09.652
然后我们理解了原理之后
然后我们理解了原理之后
10:09.652–10:14.772
你对去挑选你的ASR的对应的服务
你对去挑选你的ASR的对应的服务
10:14.772–10:16.292
甚至你在做本地的
甚至你在做本地的
10:16.292–10:18.012
比如我们有欧拉玛去接本地的模型
比如我们有欧拉玛去接本地的模型
10:18.012–10:19.152
你挑哪个模型
你挑哪个模型
10:19.152–10:20.732
那都是有帮助的
那都是有帮助的
10:20.732–10:24.232
好那么关于语音识别的原理的
好那么关于语音识别的原理的
10:24.232–10:26.192
这个分享了
这个分享了
10:26.192–10:27.932
我们就讲到这里
我们就讲到这里
10:27.932–10:28.732
谢谢大家观看
谢谢大家观看

影片筆記:05VoiceAgent理论基础-实时语音识别ASR原理

<!-- VIDEONOTE_PUBLICATION_WARNINGS_BEGIN -->

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

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

  • 待修正:逐字稿全文快速校讀未完成(已保留自動字幕/原始逐字稿並繼續生成筆記。;未完成的全文速讀項目可在精進模式回聽確認。)

<!-- VIDEONOTE_PUBLICATION_WARNINGS_END -->

一句話總結

本段內容深入解析 Voice Agent 中即時語音識別(ASR)的技術原理,強調為何必須採用「流式/適時」轉錄而非整段轉錄。核心機制包含將聲音波形數位化、切分為 20 毫秒幀並計算頻譜特徵,以及模型透過引入「空白符號(Blank)」來處理音素跨幀問題。筆記詳細說明了流式模型因無法預知未來內容而產生的「邊說邊改(In-term)」現象,並介紹了利用空白符號判斷語音結束(VED)與定稿(Final)的邏輯,最後針對中文同音字多的特性,建議根據業務場景選擇合適的供應商(如阿里云、火山、騰訊等)。

核心重點

  1. 流式 ASR 的必要性:Voice Agent 需要處理即時打斷(Interruption),整段轉錄無法滿足此需求,必須採用逐幀拆解音素並串接成字的即時轉錄方式。
  2. ASR 三步驟原理:
  • 聲音數位化:將聲波轉為每秒 16,000 個點的數字序列。
  • 特徵提取:將音頻切分為 20 毫秒的幀,計算頻譜(Spectrum)而非波形,以確保識別穩定性。
  • 模型猜測與解碼:模型逐幀猜測音素,利用「空白符號(Blank)」解決一個音素跨越多幀的問題,並合併重複音素。
  1. 定稿與斷句機制:
  • 流式 ASR 可透過檢測連續的「空白符號」來判斷用戶是否停止說話(類似 VED 功能)。
  • 若空白時間超過 300 毫秒,系統判定為語音結束並進行定稿(Final);否則視為話未說完,繼續接收輸入。
  1. 流式與非流式的差異:
  • 非流式(如 Whisper):擁有完整上下文,可前後印證並修正結果。
  • 流式(Real-time ASR):僅能看到過去,無法預知未來,因此會處於「邊說邊改(In-term)」的狀態,確定部分顯示為 Final,不確定部分逐字顯示。
  1. 中文識別挑戰與供應商選擇:
  • 中文缺乏空格且同音字眾多,高度依賴上下文,這對缺乏完整上下文的流式模型構成挑戰。
  • 建議根據語言場景選擇供應商:英文場景可考慮 Deepgram 等;中文場景建議使用阿里云、火山、騰訊等對中文優化較好的服務;方言項目需特別評估模型能力。
  1. 模型訓練與組成:
  • 模型由「聲學模型」(識別音素)與「語言模型」(區分同音字)組成。
  • 透過大量標註數據進行反向傳播訓練,模型自行總結規律。
  • 專業術語、人名或方言因訓練數據不足易出錯,可透過供應商提供的「熱詞表(Hotword List)」進行優化。

詳細大綱

一、 為何 Voice Agent 需要適時 ASR

  • 整段轉錄的局限性:無法處理用戶打斷(Interruption),對 Voice Agent 的互動意義有限。
  • 適時轉錄的必要性:必須將音頻切成幀,逐幀拆解音素並串接成字,才能實現即時互動與反饋。

二、 ASR 技術實現的三個步驟

  1. 聲音數位化:
  • 將聲波(氣壓變化)轉為數字。
  • 採樣率為每秒 16,000 個點,形成一串整數。
  1. 幀切分與頻譜特徵提取:
  • 每幀長度設定為 20 毫秒(20ms)。
  • 短時間內聲音特徵基本不變。
  • 計算頻譜(Spectrum):人耳聽的是頻率成分。
  • 原因:大聲與小聲的波形不同,但頻譜成分分布相似;使用頻譜能讓模型識別更穩定。
  1. 模型逐幀猜測與解碼:
  • 逐幀猜測:模型對每一幀獨立給出猜測(例如猜測是某個音素或空白)。
  • 空白符號(Blank)的作用:
  • 表示該幀沒有內容輸出。
  • 解決一個音素跨越多個幀的問題(模型不需糾結一個字佔幾幀)。
  • 解碼與合併:
  • 合併重複音素,去掉空白符號。
  • 範例:「理理理好好好」-> 合併為「你好」。

三、 流式 ASR 的斷句與定稿機制

  • 利用空白符號判斷語音活動(VED):
  • 流式 ASR 無需單獨運行 VED 模型。
  • 若連續出現大量空白符號,代表用戶未說話。
  • 定稿(Final)邏輯:
  • 若空白時間超過 300 毫秒,認為這句話說完,進行定稿。
  • 若未超過 300 毫秒,則認為話未說完,繼續接收後續輸入。

四、 流式與非流式模型的差異

  • 非流式模型(如 Whisper):
  • 拿到整段音頻,可以前後互相印證。
  • 已知完整語境,可修正識別結果。
  • 流式模型(Real-time ASR):
  • 只看過去,看不到未來。
  • 必須邊說邊改(In-term 階段)。
  • 無法確定後續內容(例如:聽到「乒乓」,後續可能是「球」、「球拍」、「桌」、「技術」)。
  • 確定部分顯示為 Final,不確定部分逐字顯示在螢幕上供用戶查看。

五、 中文識別挑戰與供應商選擇

  • 中文識別難點:
  • 中文缺乏空格,同音字扎堆。
  • 高度依賴上下文區分同音字。
  • 流式模型缺乏完整上下文,導致識別困難。
  • 供應商選擇建議:
  • 英文場景:Deepgram、Yenion Live 等對英文效果較好。
  • 中文場景:建議使用阿里云、火山、騰訊等對中文製作較好的服務。
  • 方言與特定語言:需根據業務場景選擇模型(如粵語項目需評估模型對粵語的識別能力)。
  • 本地部署:理解原理有助於挑選本地模型(如提及的「歐拉瑪」接本地模型)。

六、 ASR 的訓練與學習原理

  • 訓練數據:
  • 需要大量標註數據(Training Data)。
  • 包含各種方言(東北話、天津話、上海話等)和普通話。
  • 學習機制:
  • 反向傳播:反覆對照數據,調整參數。
  • 無監督規律總結:沒有人告訴模型音長什麼樣,規律是模型自己從數據中總結出來的。
  • 模型組成的兩部分:
  1. 聲學模型(Acoustic Model):負責認這一幀是什麼音。
  2. 語言模型(Language Model):負責在同音字中挑選更符合上下文的一個。
  • 參數與準確性:
  • 數據越多、參數越多,識別可能越準確。
  • 模型學的是「見得多」,而非死記規則。
  • 專業術語、人名、方言因訓練數據少,容易出錯。
  • 熱詞表(Hotword List):
  • 供應商提供熱詞表以解決特定領域術語識別問題。

工具 / 模型 / 名詞整理

  • 技術/概念縮寫:
  • ASR (Automatic Speech Recognition):自動語音識別。
  • Voice Agent:語音代理/助手。
  • VED (Voice Activity Detection):語音活動檢測(註:逐字稿提及此縮寫,通常業界慣例為 VAD,請見疑點)。
  • In-term:逐字稿用詞,指即時/中間狀態(Intermediate)。
  • Final:逐字稿用詞,指定稿狀態。
  • Blank:空白符號,用於處理音素跨幀及作為靜音判斷依據。
  • Spectrum:頻譜,聲音的頻率成分特徵。
  • Acoustic Model:聲學模型,負責識別音素。
  • Language Model:語言模型,負責上下文與同音字選擇。
  • Hotword List:熱詞表,用於優化特定領域術語識別。
  • 提及的模型/產品/供應商:
  • Whisper:作為非流式模型的對比範例。
  • Deepgram:提及對英文效果較好的供應商。
  • Yenion Live:逐字稿原文,提及對英文效果較好的供應商(需查證正確名稱)。
  • 阿里云:建議用於中文場景的供應商。
  • 火山:指火山引擎,建議用於中文場景的供應商。
  • 騰訊:建議用於中文場景的供應商。
  • 豆包:提及用戶使用場景。
  • 歐拉瑪:逐字稿原文,疑為某本地模型或框架名稱(需查證)。

操作流程整理

  1. 輸入端處理:
  • 捕捉聲波(氣壓變化)。
  • 數位化:每秒採集 16,000 個點,轉為整數序列。
  • 分幀:將音頻切分為 20 毫秒的幀。
  • 特徵計算:計算每幀的頻譜(Spectrum),而非直接使用波形。
  1. 模型推理與解碼:
  • 模型逐幀獨立猜測音素或空白符號(Blank)。
  • 引入 Blank 符號以處理音素跨幀情況。
  • 解碼器合併重複音素,移除 Blank 符號,生成初步文本。
  1. 流式狀態管理:
  • In-term 狀態:顯示不確定部分,邊說邊改。
  • Final 狀態:當檢測到連續空白符號超過 300 毫秒(判定為語音結束 VED),將當前結果定稿。
  • 若未超過 300 毫秒,保持 In-term 狀態並繼續接收輸入。
  1. 優化與部署:
  • 根據業務場景(中文、英文、方言)選擇合適的供應商或本地模型(如歐拉瑪)。
  • 針對特定領域術語,使用供應商提供的熱詞表(Hotword List)進行優化。

值得注意的限制或風險

  • 流式模型的上下文缺失:由於流式模型無法預知未來內容,僅能基於過去資訊進行猜測,導致在中文同音字眾多且缺乏完整上下文的情況下,識別準確率可能下降。
  • 定稿延遲與打斷處理:300 毫秒的靜音閾值是用於定稿的依據,這可能影響對快速連續語句的處理靈敏度,或導致用戶在短暫停頓後被錯誤定稿。
  • 特定領域識別風險:專業術語、人名、方言因訓練數據相對較少,模型容易出錯,需依賴熱詞表或特定供應商優化。
  • 供應商選擇偏差:不同供應商對不同語言(如英文 vs. 中文)的優化程度不同,錯誤選擇供應商可能導致識別效果不佳。

逐字稿辨識疑點

  • ICTT:逐字稿中說「一般會說 ICTT」,通常語音轉文字縮寫為 STT 或 ASR,ICTT 可能為口誤或特定領域縮寫,需查證。
  • 平譜 / 頻譜:逐字稿多次出現「平譜」,結合上下文「不看波形,看頻率成分」,應指「頻譜」(Spectrum),但依規則保留原文或標註疑點。
  • 升線模型 / 聲學模型:逐字稿中交替使用「升線模型」和後文的「聲學模型」,前者可能為聽寫錯誤。
  • 逐針 / 逐幀:逐字稿中出現「逐針猜」,結合上下文「每一幀」,應指「逐幀」。
  • 牛市的識別 / 流式識別:逐字稿中出現「牛市的識別會邊縮邊改」,結合上下文對比 Whisper,應指「流式識別」。
  • VED:逐字稿提到「不用單獨跑一個 VED」,通常語音活動檢測縮寫為 VAD (Voice Activity Detection),VED 可能為口誤。
  • 歐拉瑪:逐字稿提到「比如我們有歐拉瑪去接本地的模型」,此名稱較生僻,可能為特定本地模型名稱或聽寫錯誤(如 Ollama?),需查證。
  • Yenion Live:逐字稿提及「包括 Yenion Live 這些」,可能指某特定產品或服務,需查證正確名稱。
  • 真智:逐字稿提到「就像教小孩真智」,語意不通,可能為「識字」或「知識」之聽寫錯誤。

可延伸追問

  1. 300 毫秒的靜音閾值(Blank 時間)是否為固定標準?在不同語速或語言場景下是否需要動態調整?
  2. 對於「歐拉瑪」或「Yenion Live」等未明確指代的供應商或模型,其具體技術架構與優缺點為何?
  3. 在中文同音字極多的情況下,除了依賴語言模型,是否有其他技術手段(如詞向量、特定預訓練)能提升流式 ASR 的準確率?
  4. 熱詞表(Hotword List)的更新機制為何?是靜態配置還是支持動態學習?
  5. 流式模型在處理長句時,如何平衡「即時反饋」與「最終準確性」之間的矛盾?

尚未產生學習筆記

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