本文整理的三个问题是老师们对于现在是否有必要学习传统方法以及给工作中的伙伴们的一些建议,文末整理了大家在直播中提问的一些问题,希望大家可以通过老师的分享能够有所启发。
分享嘉宾(排名不分先后)
吴本谷
曾先后在百度、北京猎户星空供职,主要负责各场景下语音识别声学模型优化,语言模型优化,声纹系统搭建等工作。在kaldi上开源了aishell、aishell2、hi-mia等recipe,包含语音识别,声纹识别,语音唤醒等。
张俊博
小米语音技术专家,中国科学院声学研究所博士,师从颜永红老师,研究方向为语音识别和发音质量评测,发表论文十余篇,著有出版物《Kaldi语音识别实战》。在开源方面,和Daniel Povey博士合作,为K2和Kaldi贡献代码,其中在K2子项目Lhotse上贡献代码量排名第二。
杨超
出门问问语音技术总监,西北工业大学硕士,师从谢磊教授,研究方向为机器学习、自然语言处理和非参数贝叶斯模型。先后就职于微软(cortana语义理解和语言模型)、思必驰(知识图谱和对话系统研发)、蛙声科技(语音技术落地)。
付立
京东数科语音算法工程师,本科和博士毕业于北京航空航天大学,研究方向包括语言识别,机器学习等。在语音技术领域发表多篇论文并申请发明专利,并组织开展JDD第一届金融对话语音识别比赛。
付立老师:我觉得这个问题是对于一些没有传统语音算法背景的同学来提的,关键还是在于学习深入到什么程度的问题,我们不妨换一个问法:现在深度学习已经成为语音领域的主流,我也对深度学习非常感兴趣,但是个人的时间和精力毕竟有限,是不是可以不用花太多时间在一些传统的方法上面呢?
新技术被追捧,老技术被冷落,这很正常,如果在学习和工作中和传统的语音识别没有太多交集,确实没有必要强迫自己分散太多时间。
但是如果条件允许的话,我建议还是可以了解一下传统语音方法的基本思想,因为深度学习其实也是因为一些数据和算力的迭代才逐渐发展起来的一种技术工具,有一些思想在里面,如果你长期从事语音的话,后面还是很有可能会去借鉴传统方法的一些思想。就技术手段而言,方法的变化非常快,说不定哪一天,HMM is all you need。
吴本谷老师:我一般在面试的时候,还是要求大家会点GMM和HMM的东西,因为传统的东西会有一些底层的原理在里面。但我不是说你要去学传统,现在的attention,现在的transducer,他们的原理跟GMM相比,有些对齐的概念是一样的。
我觉得GMM和HMM这套东西可以帮助大家去理解对齐的概念,理解了对齐的概念,其他的东西都好理解。现在很多的算法,最新的一些端到端方法,包括attention,底层的东西其实是一个道理。
你可以把语音整个问题抽象起来,就是一个不定长到一个不定长或者定长的一个映射关系,核心是在这里面你用什么方法去解决这个问题。GMM和HMM只是解决问题中的一个环节,现在的LAS,或是带attention的算法,包括transducer的方法,其实也是解决这个问题的一个类型的解决方法。
在面试中我肯定会问传统方法的,如果你不了解,肯定会减分,所以我还是希望大家把这些底层东西了解一下。在你遇到核心问题的时候,了解底层的东西对你还是有好处的。HMM的算法、这套理论现在在唤醒,在VAD等等领域里面还在使用,在语音主流算法里还没有完全被端到端的方法替换,是有一些本质的原因在里面的,我希望大家可以去思考这个点。
杨超老师:我觉得如果你所在的团队或者你已经工作了,用的主流的技术都是深度学习,完全没有用传统的,那你可能要自己花点心思去学,也不用花太多的时间。
整个传统语音的内容是很多的,要把它真的学透,可能要博士去学才行。但是如果只是了解原来的那套基于层级的、基于HMM的方式,以及FST解码、判别式学习这些,整个学下来也不会花太多的时间。如果你是学生的话,可以上一个深蓝学院的课,再去学一下Kaldi,把张老师那本书好好读两遍,基本上面试就没有什么问题了。
之前HMM的那套东西,跟你们现在学的 CTC,本质上是一样的,只不过一个从声学模型角度去做,一个从神经网络的视角去处理对齐这个事情,其他的端到端的算法也是从其他的方式来处理对齐这件事情。所以从很多思路上讲,GMM和HMM都是个挺简单的东西,没有必要纠结要不要学,有时间纠结,可能已经把它学完了。
张俊博老师:我的想法可能比其他老师要更苛刻一些,如果你面试的是语音识别相关岗位,凡是对传统的基于HMM的方法没有基本概念的,一律我是不会录用的。
我回答上个问题的时候的确说到我更看重学习能力,不看重具体知识的掌握,但是如果这种最基本的知识你都不去学习的话,那我认为你的学习能力不怎么样。学习能力不仅包括把东西学会的能力,也包括重点学什么的能力,越是基础的知识,我认为越得好好掌握,反而是最新的技术,比如现在出了什么论文,我觉得可以粗略了解一下。对于经典的方法,必须要花大量的时间彻底掌握。
另外,我觉得无论做什么领域,都应该去熟悉这个领域的发展历史,比方说做语音识别的应该了解:哪个年代最早有人开始做语音识别?最早他们是怎么做的?后来如何发展的?每一个时代比上一个时代进步在什么地方?对这些都得了解。
不仅是GMM-HMM,更早的一些技术、很古老的技术都有必要去掌握。一方面,古老的方法确实在很多环境中能用得到,设想上也能给我们很多启发;另一方面,了解技术发展的历史也有助于对这个领域的发展有更高层次的理解。
付立老师:对语音的入门者或者学生,我建议主要做好三点:
首先是精选一个方向,选择一个语音领域的细分方向,比如识别、合成、事件检测、前端处理等,可以结合自己的兴趣以及这个行业的情况综合考虑。
第二点是要勤于动手,可以自己实现,或者在一个开源项目的基础上复现一个别人的工作,一开始可能达不到别人的效果,我之前有时候也会去Github上找一些项目,怎么都出不来别人说的那种好的结果,但是通过自己去调,去仔细的分析,然后慢慢地优化、改进,最后得到一个别人的baseline的效果,这个过程我觉得是最能锻炼和提升个人能力的方法。
第三个,也是很重要的就是积极的讨论,多和自己认识的业内人士探讨,主动和别人沟通,脸皮厚一点,有问题也可以在相关的微信群、QQ群里问,看到感兴趣的论文也可以给作者发邮件,我觉得都可以的。
像我们团队如果公开了联系方式,也是很希望别人联系我们的,我们也非常开放,在语音领域也比较有经验,我相信你们提出的问题对我们也会有很大的帮助。总的来说就是,选一个方向,然后自己动手实现,有问题多跟别人交流讨论。
吴本谷老师:关于这个问题,我以前在CSDN和语音杂谈上写过一篇文章叫《语音小白成长季》,包括你应该从哪些方面去学习,从学生和工业的角度都解释了很多。
我在这里再跟大家分享几个比较大的点:
首先是在一个问题上深耕的能力。我们之前看了很多简历,其实大家在各个方向都做了很多东西,但在一个点上没有深入下去,如果你在一个方向上做很多的深耕,或者你对这方面的细枝末节足够了解,这对于你整个面试以及之后的路都很有好处。
第二点是大家一定要找到社区,Kaldi的、语音的QQ群、微信群、微信公众号,这里面其实有很多东西,大家可以在这里面找到同伴,相互学习,即使你问一些很小白的问题也会有人回答。
第三点,我觉得更好的是你能遇到一个导师,或者一个能带你的人。像杨超老师、谢磊老师那边,包括俊博那边,有很多师兄师长,学习的氛围特别好,像深蓝学院的一些课也有这样的氛围。现在语音互联网化之后,不再像2015年以前那样想在语音群里找一个人都很复杂,现在有很多渠道可以让你找到帮你解决问题的人,然后你不耻下问,其实你遇到的问题都挺好解决的。
杨超老师:如果大家想做一个语音的从业者,如果你还是学生,如果还有可选择的余地,比如说你是本科生,那你还是要努力考一个比较顶尖的语音实验室,像俊博他们那边,包括西工大,这样你接触到就是最一流资源,有师兄、老师带着,氛围会更好。
如果你没有选择,比如你现在不在专业的语音实验室,但也在做语音方向,毕业了想做一些语音的事情,或者你已经进了一个公司,在一个语音岗位上,但你本身不是做语音的,你想学,那么你可以花一些时间去学。
像我们公司的一些小伙子,以前完全没有接触过语音,也会上深蓝学院的课,也会去了解传统的语音识别的算法。我觉得深蓝学院的课在国内我接触到的这些教育机构里面应该是质量最好的,四门课的质量都很高,我自己也学完了信号处理的课程。
所以如果你已经在公司工作了,但是你并没有特别强的语音基础,我建议好好去学一下,多学几遍,不是学一遍做一遍作业就好了,要多学几遍。
张俊博老师:我就补充两个小建议吧:
一个是尽量去实习,尽量找实习。如果你是顶级实验室的学生,比如你是谢老师实验室的学生,不实习也没问题,没毕业就是抢手的人才。
但如果你们实验室不是做这个方向的,从起点上看,不够占优势,如果还想从事语音行业,我的建议是一定要尽你所能去找一个好的公司的实习机会。自己学非常容易走偏,即使你学基础知识、学各种课、看各种书,依然很困难,所以一定要去实习。
第二个小建议是,如果你现在在学生阶段,而且在做语音方面的研究,不要好高骛远,不要总觉得自己能做出重大创新,能发一篇非常厉害的paper,不要这样想,这样反而会把一些基础的东西耽误了。
创新是基础知识和经验积累到一定阶段自然而然产生的,千万不要去刻意追求创新,而应该踏踏实实的去读别人的论文、去实现别人的论文,这比你绞尽脑汁去创新收获得多,等你做了足够多的实验,做什么事情都是水到渠成的。
付立老师:对于刚踏入工作岗位的同学呢,最主要解决的问题就是再适应的过程。我觉得最简单的方法就是要比之前的学习或者工作投入更多的时间和精力去做这种适应性的转变,前紧后松,现在适应好了,后面才会相对轻松一些。
我最开始工作的时候也经常加班,会比其他同事多加一点,刚开始工作内驱不强点,后面就更跟不上了。
第二个我比较强调的是沟通的意识,把自己当一个菜鸟,多问问比自己经验丰富的同事,一些没有必要的弯路或者一些坑,是可以通过沟通的方式去解决的,没有必要什么都自己去摸索一遍,把主要的精力放在当前更重要的工作内容上。
第三个还有就是要定一个目标,你刚进入工作岗位的时候,应该会有一个人带你,这个目标需要带你的人在一开始讨论清楚,比如可以设一个时间节点,要达到一个什么状态,尽量的去跟他配合,去达到符合相应岗位的要求。不要自己漫无目的努力,方向也是很重要的。
吴本谷老师:刚踏入工作岗位,或者说作为校招生、应届生去一个公司,我觉得你要逐渐形成一个能解决问题的能力,逐渐变成一个靠谱的人。
你的老大或者导师给你交代了一个任务,你要尽快把它解决好,即使解决不好,你也要去跟大家多沟通,直到把这问题解决好。你解决好了几次之后,就会逐渐去承担一件事情,相信现在俊博或者杨超包括付立,我们自己都是一样的,我们就是在这个过程中不断过来的,一开始也都是从给大家打杂之类的小事情做起的,然后逐渐的去承担一些事情,最后才做大的事情。
杨超老师:我想说几个刚毕业的学生可能会觉得有点虚的点,但我还是想说一下,因为在我刚毕业和刚工作的时候,我也是不太在意这些的。
第一个就是要做好规划,在你提升技术之余花一点点时间去思考一下你人生的规划、职业发展的规划,给自己一个长期的、短期的和中期的目标。
你要经常回顾你的目标,回顾你现在的状态,当你发现你的方向跟目标有偏差的时候,或者你进步的速度有可能达不到你的目标的时候,你要去调整你的行动,或者调整你的目标。
这点我觉得很重要,就像现在我们国家也在做十四五规划,这就是为什么很多人觉得中国其实比美国好很多,因为美国可能就没有什么规划,每换一个总统就是换一套自己的东西,但是我们国家有这种五年的规划,我们一直在沿着这个目标往前走,所以才不会偏离方向,才能发展得这么好。
第二个就是你要注意你工作的方法和习惯的培养。所有人的时间都是一样的,为什么有的人更优秀,可以拿更多的收入,就是因为他们在同样的时间里更有效率。
还有两点是希望大家能保持谦逊,不管你技术多厉害,在这个行业里都会有更厉害的人,所以请保持谦逊,跟自己同事处理好关系,任何一个你身边的人都有一些值得你学习的优点;
在工作之余也可以多交一些朋友,当然这一点不是要求每个人都去做,有的同学的性格可能比较内向,但是因为语音圈还是比较小,除了工作,大家也可以有一些其他兴趣点上的一些交叉,可能未来会在你的职场的某一个时刻给你带来一些帮助。
张俊博老师:我的想法和大家的也都差不多,我再说两点吧:
一方面,无论是你的上级给你分配什么样的工作,无论你是否认可,只要工作是分配给你了,你就一定得做好,得对自己工作的内容负责。不要觉得上级给你分配的这个工作太琐碎了,更不要抱怨这个工作学不到东西,踏踏实实的做好就是一个非常重要的能力积累了,你肯定可以学到很多东西。
还有一个就是不断保持学习,不能排斥学习,工作中如果给你的任务你之前没做过,你不能说我不会,我做不了,没有什么是不会的,没有什么是不能学的,做着做着就会了。另外眼界也开要开阔一些,在工作之余,不要只盯着自己的小方向,各领域的知识,能多学就多学一些。
互动环节问题
我们选取了直播中的四个问题,邀请老师进行了回答。
Q1:面试更注重工程能力还是算法能力?C++需要掌握到什么程度?
杨超老师:每一个面试者的风格都不一样,从我们的角度来讲,当然希望你又有好的工程能力,也有算法能力。但是我其实不太清楚,所谓的这个算法能力是指什么,是Leetcode那种算法题的能力吗?
因为大部分同学不太可能在语音算法上做太多的创新,除非你是这个行业非常好的实验室的很优秀的硕士或者是博士。所谓的工程能力,作为一个学生,能写一些基本的代码,风格能还不错,有一些基本的意识就不错了,这些东西都可以在公司中去慢慢培养,所以你只要把学校里该该做的东西学得扎实就行,C++学到什么程度不是一个可以量化的东西。
吴本谷老师:这问题的核心是工程能力跟算法能力,在整个公司里面,大部分公司会分成算法党和工程党,也就是有一部分专门在做一些算法的预研,还有一部分人在做产品的落地。
预研对C++能力可能会要求低一点,但是也不会太低。比如做解码器,你不能不会C++。所以大公司会分两条线,一条线是做纯算法的预研。然后还有一条线是做工程类的,就是训一些产品类型的模型。这两条线你要去匹配,到底你要去做纯预研的方向,还是去做工程类的方向,产品类的方向。
张俊博老师:其实你去实习去工作一段时间后,就会知道到底需要什么样的能力。C++到底需要怎样的能力,我觉得够用就好。
比方说我要去调研某种新的框架,这个框架是用某种我不懂的语言写的,那有什么关系呢?需要什么就赶紧去熟悉就行,不能把自己的能力绑定在某种具体的技术上面,而是要去真正去解决问题。
付立老师:我们内部招的岗位都叫算法工程师,除了算法以外,还有也还有工程两个字,其实很多公司对算法和工程的一些都是兼顾的,只有少数的招聘是需要招一些前沿领域探索的岗位。我觉得是比较侧重算法能力,但对工程能力还是需要的,因为你需要去做一些实验验证一些前沿技术,其实我觉得只是为了推动算法的落地吧,因为也不能空研究一个算法,很多时候我们还是做一些工程的事情。
Q2:Kaldi后续支持量化训练声学模型吗?实现起来难度有多大?
张俊博老师:现在Povey博士主要的精力还是在K2上面,Kaldi并不会被淘汰,虽然我们号称K2是下一代的Kaldi,但并不是取代Kaldi的关系。
如果你觉得Kaldi缺个什么东西,不妨自己就去实现一下,然后去主页上面提issue或者PR。现在是开源时代,开源软件不仅是让你用的,更需要大家去反哺开源软件,让大家都参与进来。
Q3:语音信号处理转语音识别有什么建议吗?
吴本谷老师:你做信号为什么转语音识别?信号现在还算是一个比较火的方向,它本身就有很多的应用,包括大家现在看到的降噪耳机。
其实我以前有个认知,就是语音一定要有硬件的载体才能挣钱,这就是小米的核心概念。为什么他们的语音需求这么大,因为每一个嵌入式,每一个IOT设备都需要信号的东西。我觉得你尽量不要转,除非是你特别不喜欢做。大家不要只盯着语音交互,可以看语音直播类的厂商,包括在线教育的,其实它里面都会用到信号处理的算法,还是希望大家在各自方向去深耕,不要乱跳方向。
付立老师:有很多同学关心转方向的问题,主要是要考虑两点,一个是结合自己的兴趣,另外一个就是行业的现状,做语音识别的人其实是比较多的,但其实语音也不是所有行业都需要。
还有一些其他的领域。我建议可以根据一些顶会像InterSpeech,ICASSP都会有不同的主题,每一个主题都有相应的论文数量,可以根据他们讨论的问题,去选一个方向作为参考。ASR其实是语音会议主题的其中一个,论文的数量相对来说逐渐减少,投论文难度也是相应的在增加。
杨超老师:其实信号处理这块儿门槛还是蛮高的,因为有很多传统的东西要去学。我还上了深蓝学院信号处理的课。
Q4:TTS端侧落地产品主要用传统参数方案,还是端到端方案?TTS以后主要的方向有哪些?
杨超老师:端侧落地看你自己的技术能力,出门问问用的全部是端到端的方案,如果工程能力强一点,端到端肯定是没有问题的。主要方向可能是用少量的说话人数据训练语音合成模型。
我们有一个业务是音频内容的产出,现在直播短视频平台有很多用户创造的音视频,不是每个人都是专业的主播,TTS有更丰富的音色。
我们有一款叫魔音工坊的平台,大家有兴趣可以去体验一下,去里面编辑内容或者阐述你要的声音,歌唱合成方面,之前的小冰做的比较多,这个也比较娱乐化。出门问问还有一些跟视觉融合的工作,像虚拟说话、虚拟主播,包括跟3D形象的联动,这是几个大概的方向。
张俊博老师:传统不仅有参数方案,还有拼接,有些地方还在用。但是端到端绝对是一个未来发展的方向,它合成声音的质量是传统参数合成无法比拟的,尤其比起传统基于信号处理的vocoder,神经网络vocoder完全不一样,现在TTS基本上听起来跟人没区别了。
TTS可能是比ASR更加有意思的一个方向,因为识别在很多场景中,是一个已经解决了的问题,比如说识别新闻联播,基本上就不会出错了,但TTS可以做出很多好玩的应用,我觉得TTS也是一个非常值得推荐的方向。