基于数据湖打造机器学习能力的解决方案的价值和优势是什么?
基于数据湖打造机器学习能力的解决方案的价值和优势是什么?
基于数据湖打造机器学习能力的解决方案应用场景有哪些?
基于数据湖打造机器学习能力的解决方案应用场景有哪些?
科学家会梦见“贾维斯”吗?AI和科研如何在云端汇合
【阅读原文】戳:科学家会梦见“贾维斯”吗?AI和科研如何在云端汇合在《达摩院2022十大科技趋势》报告中,AI for Science被列为年度十大趋势之一,达摩院认为,“人工智能与科研深度结合,将成为科学家继计算机之后的新生产工具”。这意味着,如果科学家拥有超级智能助手“贾维斯”,人类的科学发展将进入新世代。日前闭幕的2022北京智源大会,阿里云基础设施大计算集群部总监曹政,从云端算力供给、科研开发平台入手,探讨云上的“AI?for?Science”。科学活动分为三种:理论、实验和计算,这三驾马车相辅相成。如果说用AI模拟科学家的智能还太难,那么用AI代替传统的计算方法,对求解的科学问题进行快速建模则非常有效。近年来,人工智能在蛋白质结构预测、药物研发、材料研发等领域已积累了丰硕的应用成果。-?-AI与HPC加速融合,催生科研新范式如DeePMD以神经网络代替经典科研计算手段(薛定谔方程/密度泛函求解),使计算复杂度从O(n?)降低到O(n),显著加速分子动力模拟的过程,同时大幅度降低了复杂问题解决的门槛,提升科研效率,促进更广泛的创新;类似的应用案例还有蛋白质空间结构预测、短临预报(中小尺度天气系统)等。图 | 融合计算常见流程HPC(高性能计算集群)的计算结果作为输入,让AI从中自主学习规律,形成的神经网络再与HPC协同输出,多次迭代以获取高精度结果。曹政认为:“AI for Science 是AI和HPC的‘化学反应’,HPC的计算和AI的计算过程紧密耦合,计算负载与通用计算有显著的差异。”-?-面向数据和应用,全链路优化计算效率AI?for?Science对计算有全新的要求,不仅是更高性能的计算服务,还要考虑不同工具链和开发者生态的支持,阿里云从计算效率、开发协同效率、资源效率,三方面提供极具竞争力的支持。针对应用,提升计算效率AI for Science的计算底座该如何构建?计算方案的设计需要从数据和应用出发,下面这个典型场景可以让我们了解科研场景的“计算负载”特征。图 | 融合计算应用场景示例以分子动力学应用为例,整个计算过程为搜索(Exploration)、高精度标注(Labeling)、深度学习(Training)三种环节,HPC、AI应用融合循环以进行迭代,直到获得达到目标精准度的分子动力学模型。过程中的应用会涉及CPU/GPU不同的计算芯片,计算效率的提升,第一个要解决的问题就是对多芯算力的融合。-?-面向未来:共中心架构由于引入了配比多样的CPU/GPU异构计算系统,使得以CPU为中心的传统架构会遇到性能瓶颈、资源效率低下等问题。从系统层面分析不同应用的计算负载差异:HPC应用主打高精度迭代计算(逻辑),需要面向小消息和低密度数据的通信特征,降低局部服务器节点间通信时延,以CPU多机计算为主,GPU仅作单机内辅助加速;在深度学习为代表的AI训练场景,不仅需要低延时保障,同时也对带宽有更高的要求,为了快速完成训练任务,对集群的通信性能要求更高。为满足不同应用的计算负载,阿里云设计“共中心架构”,为集群构建融合网络层,资源深度共享,打造数据与算力之间的智能加速通道。图 | 共中心架构曹政认为:面向融合计算场景,“共中心”是未来系统架构的演进方向,即“不分主从”和“资源共有”,加速器和CPU不分主从,面向不同业务按需结合,通过软硬件的协同,实现全资源“中台化”/池化,为数据提供更智能的计算服务。●? 在HPC场景中,CPU是计算的核心,而在AI场景,GPU才是核心“生产力”。为了充分提升计算效率,阿里云于2018年提出“共中心集群架构”,存储/IO/网络等资源成为“中台”,并且保障高效的QoS(通信效率),不同的计算部件可按需“调用”,实现计算集群层面的“生产关系与生产力的适配”。●??面向应用和数据,阿里云通过融合计算资源调度、融合通信库、融合存储等自研集群系统软件,实现资源层、计算层、数据层全局效率的优化,当前单集群算力最高可达3Exa-Flops,已经在内外部多个超大规模AI项目中得到验证。共中心架构让云具备更高效的计算能力,以满足更复杂的计算需求,为科技创新提供云原生基础设施和平台服务。促进协同,提升开发效率在科研场景,数据和算力是核心资源。以开发者视角,通过高效的算力、工具链、工作平台提供研发支持,可以促进HPC和AI的开发生态互通,让开发者提升数据处理和模型开发效率,同时催化协同效应,加速创新效率。阿里云具备丰富的数据和AI开发工具,可以完整支持AI研发生命周期和高效的数据管理能力,各种结构化和非结构化的数据都可以统一管理和分析,可视化的交互,使得不同规模机器学习任务都可以简单而高效地构建。机器学习平台PAI支持精细化团队协同的AI工作空间和AI资产管理平台,可以实现超大规模模型构建,支持面向应用层的全方位AI性能优化。PAI集成开源autoML框架NNI。PAI-DSW以jupyter插件形式集成NNI,让自动机器学习能力变得唾手可得;PAI-DLC分布式集群可进行NNI HPO分布式训练,提升使用效果。普惠计算,提升资源效率“当今云计算正处于一个新的发展阶段,越来越多数据密集型的计算,对算力提出了新的要求:即能满足弹性资源的需求,也保障并行计算效率,阿里云从软硬件自研技术入手,在一个超大规模高性能网络中,构建一个可以持续进化的“智能”算力系统,提升通信IO效率,消除“虚拟化税”,为社会提供普惠的智能计算服务。”曹政认为。一个全新的云计算时代即将到来,全新的应用生态和全新的云计算基础设施正在被定义,以AI为代表的密集计算应用生态,需要高带宽、低时延的并行计算性能。阿里云通过深耕自研技术,为数智驱动型企业和机构,提供兼顾规模和效率的云计算服务,并且从开发者生态层促进社区和产业融合。相关产品具备混合云和公有云等灵活的部署形态,具备一致性用云体验,已经在车辆智能、新药研发、金融智能、城市智能等场景落地应用。我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。欢迎关注 “阿里云基础设施”同名微信、微博、知乎获取关于我们的更多信息~
达摩院技术创新全景|懂你的语音AI
作者 | 作者鄢志杰(智捷)来源 | 阿里开发者公众号过去十年,语音AI从实验室走向应用,语音搜索、交互早已融入日常。本文将带你一览达摩院语音AI技术创新全景,一起感受能听、会说、懂你的语音AI。当你在家中与智能音箱进行交互对话,当你使用天猫超市或菜鸟裹裹,接到机器人打来的配送确认及回访电话,当你利用淘宝高德优酷等App进行语音搜索,当你听到数字人动听的话语及各种悦耳的视频配音……这些背后,都是语音 AI 技术的应用。AI的很多研究方向,都和人的感知相关。如果说计算机视觉对应的是眼睛,语音AI做的就是耳朵和嘴巴——耳朵是语音识别,把语音转成文字,嘴就是语音合成,把文字转成语音。语音 AI 作为人工智能应用的核心技术之一,在过去十年的时间里持续进步,从实验室研究走向了实际应用和价值创造阶段,并不断解锁新场景,将此前做不了、做不好的技术变得能做,且体验越来越好。不仅如此,语音 AI 技术已经开始挑战并解决一系列更难的应用课题。正如 Google voice search 解锁了手机上的语音搜索;Apple Siri 解锁了语音助理;Amazon Echo 解锁了远场语音交互……达摩院语音实验室判断,下一个语音技术解锁的场景将会是用更多“人-人”交流替代当前“人-机”交互模式的会议场景。今天,恰逢图灵诞辰110周年,我们与大家一起来分享下达摩院语音 AI 技术创新全景,包括语音识别声学模型和基础框架、说话人区分、语音合成声学模型和声码器、口语语言处理、联合优化的声学前端等多方面的研究和应用进展。一起感受能听、会说、懂你的语音AI。能听:技术创新之语音识别基础算法研究在语音识别的场景下,拾音质量是一个很关键的因素。当年IBM的Via Voice,要带一个耳麦讲话,现在手机可以在稍远距离准确识别,智能音箱又可以做到更大距离。但这些的前提是,周边不会有太多的噪声,而且这些场景都是单人的,都是跟机器去完成一个单独的任务——要么是听写,要么是想点一首歌。但如果加了很多别的因素,准确率就会逐渐下降,说话场所的不同、空间大小的差异、说话人的多寡、情绪语种语速的交杂,各种声音在空间内不断反射产生混响,再加上环境本身带来的噪音,对机器识别来说是极大的挑战。对我们人类来说,“谁在什么时间说了什么话”非常好识别,因为我们不仅能靠灵敏的耳朵区分不同音色、判断声音方位,还能看到说话人的肢体在动,同时大脑不断用知识储备分析着话语,但对于语音识别而言,如何使机器也具备这些智能呢?1.1 语音识别基础框架UNIVERSAL-ASR语音识别基础框架过去几十年,基于混合框架的语音识别系统一直是学术界和工业界主导框架,其系统包括独立优化的声学模型(Acoustic Model,AM)、语言模型(Language Model,LM)、发音词典(Lexicon)和解码器,系统构建流程复杂。近几年,端到端语音识别(End-to-End,E2E)成为了学术研究热点。端到端语音识别通过一个网络建模语音识别系统,不仅简化了系统构建复杂度,而且通过联合优化预期可以获得更好的建模效果。阿里巴巴语音实验室结合上一代 DFSMN 网络结构和学术界流行的 Transformer 创新性提出了 SAN-M 网络结构,并且提出了 Streaming Chunk-Aware Multihead Attention(SCAMA)流式 Attention 机制构建了新一代的端到端语音识别框架,显著提升语音识别系统性能。日益丰富的业务需求,不仅要求识别效果精度高,而且要求能够实时地进行识别。一方面,离线语音识别系统具有较高的识别准确率,但无法实时的返回解码文字结果,并且,在处理长语音时,容易发生解码重复,且高并发解码超时等问题;另一方面,流式系统能够低延时实时进行语音识别,但由于缺少下文信息,流式语音识别系统的准确率不如离线系统,在流式业务场景中,为了更好的折中实时性与准确率,往往采用多个不同时延的模型系统。为了满足差异化业务场景对计算复杂度、实时性和准确率的要求,常用的做法是维护多种语音识别系统,例如,CTC 系统、E2E 离线系统、SCAMA 流式系统等。在不同的业务场景使用不同的模型和系统,不仅会增加模型生产成本和迭代周期,而且会增加引擎以及服务部署的维护成本。因此,阿里巴巴语音实验室创新性地提出和设计了离线流式一体化语音识别系统--UNIVERSAL ASR,同时具有高精度和低延时的特点,不仅能够实时输出语音识别结果,还可在说话句尾用高精度的解码结果修正输出,与此同时,UNIVERSAL ASR 采用动态延时训练的方式,替代了之前维护多套延时流式系统的做法。通过设计 UNIVERSAL ASR 语音识别系统,我们将之前多套语音识别系统架构统一为一套系统架构,一个模型满足所有业务场景,显著的降低了模型生产和维护成本。图1 UNIVERSAL-ASR语音识别基础框架UNIVERSAL ASR 模型结构如上图所示,包含离线语音识别部分和流式语音识别部分。其中,离线与流式部分通过共享一个动态编码器(Encoder)结构来降低计算量。流式语音识别部分是由动态时延 Encoder 与流式解码器(Decoder)构成。动态时延 Encoder 采用时延受限可控记忆单元的自注意力(LC-SAN-M)结构;流式 Decoder 采用动态 SCAMA 结构。离线语音识别部分包含了降采样层(Sride Conv)、Big-Chunk Encoder、文本 Encoder 与 SCAMA Decoder。为了降低刷新输出结果的尾点延时,离线识别部分采用大 Chunk 流式结构。其中,Stride Conv 结构是为了降低计算量。文本 Encoder 增加了离线识别的语义信息。为了让模型能够具有不同延时下进行语音识别的能力,我们创新性地设计了动态时延训练机制,使得模型能够同时满足不同业务场景对延时和准确率的要求。根据业务场景特征,我们将语音识别需求大致分为3类:低延迟实时听写:如电话客服,IOT语音交互等,该场景对于尾点延迟非常敏感,通常需要用户说完以后立马可以得到识别结果。流式实时听写:如会议实时字幕,语音输入法等,该场景不仅要求能够实时返回语音识别结果,以便实时显示到屏幕上,而且还需要能够在说话句尾用高精度识别结果刷新输出。离线文件转写:如音频转写,视频字幕生成等,该场景不对实时性有要求,要求在高识别准确率情况下,尽可能快的转录文字。为了同时满足上面3种业务场景需求,我们将模型分成3种解码模式,分别对应为:fast、normal 和 offline 模式,在模型部署阶段,通过发包指定该次语音识别服务的场景模式和延时配置。这样,通过 UNIVERSAL ASR 系统,我们统一了离线流式语音识别系统架构,提高模型识别效果的同时,不仅缩小了模型生产成本和迭代周期,还降低了引擎以及服务部署维护成本。更多技术细节可以参考我们的技术论文:https://arxiv.org/pdf/2010.14099.pdf中英自由说近几年来,端到端语音识别 (End-to-End ASR) 技术在单语种任务上已经取得了比较好的效果,通过UNIVERSAL ASR 统一离线和流式识别系统架构进一步提升了流式场景的识别率,但在多语种混说 (Code-Switch) 场景下效果还不是很理想,比如中英文混说——“借你的ipad给我看下paper”,当突然切换到另一个语种时识别率会发生大幅下降,比如中文 ASR 突然遇到纯英文识别。拿中英文识别来说,效果不理想的很大原因是中英文混说数据比较稀缺,标注成本也比较高,中/英单语数据的直接混合训练对纯中文和纯英文的识别效果会产生一定的负面影响。如何利用海量的中/英文单语种数据和少量的中英文混说数据提升中英自由说免切换识别效果成为工业界和学术界的研究热点。针对中英文自由说识别问题,我们借鉴了混合专家系统 (Mixture of Experts) 的思想。在端到端语音识别模型中,对中文和英文分别设计了一个子网络,每个子网络被称为专家,最后通过门控模块对每个专家网络的输出进行加权。同时为了减少模型参数量,中、英文子网络采用底层共享,高层独立的方式。通过这样的方式,使模型在中文、英文、中英文混说场景下都能取得比较好的效果。进一步我们结合达摩院语音实验室自研的 SAN-M 网络,打造了达摩院语音实验室新一代的端到端中英自由说语音识别系统。在不需要语种信息的前提下,用一个模型保证纯中文和纯英文相对于单语模型的识别性能基本不降,并且大幅度提升中英文混说场景下的识别性能。图2 中英自由说系统框架图方言自由说通用的中文语音识别系统对普通话的识别准确率已接近人类水平。但当一个中文识别系统遇到重口音或者方言的时候,识别效果会产生灾难性地下降。主要的原因是方言的发音和普通话有差异,会出现同音异字的情况。所以针对每一种方言,我们都会单独训练一个方言模型,这样又会导致我们需要维护多个方言模型,同时无法通过一个模型识别多种方言,且有的方言数据量稀疏,不利用其他方言数据中的共有信息而单独训练这个方言模型的效果不尽人意。针对这个问题,我们借鉴了中英文自由说模型的方案,对每一种方言设计一个专家网络,同时考虑到每种方言的发音相似性,我们增加了一个共享的专家网络来学习方言之间的共性。和中英文自由说模型类似,最后通过一个门控模块对每个专家网络的输出进行加权。考虑到方言种类比较多,每个专家网络通过简单的两层线性层来建模。进一步我们结合达摩院语音实验室自研的 SAN-M 网络,打造了达摩院语音实验室新一代的端到端方言自由说语音识别系统。在不需要提供方言id的情况下,用一个模型识别十四种常用方言,并且保证纯中文相对于单语模型的识别性能基本不降。图3 方言自由说系统框架图1.2 鸡尾酒会问题“鸡尾酒会问题”(cocktail party problem)是语音识别领域困扰人已久的学术难题。鸡尾酒会问题是指在多人自由交谈的场景,需要高精度识别出每个说话人所讲的内容。当前通用的语音识别系统可以高精度的识别单个说话人的语音,但是当场景中同时存在多个说话人自由交谈时候,语音识别系统识别性能就会出现明显的下降。会议场景是一个典型的多人自由交谈的场景。探索鸡尾酒会问题的工业级解决方案,对于解锁会议场景的语音AI具有重要作用。针对鸡尾酒会问题,语音团队从语音识别基础框架(上文已阐述),M2MeT 国际挑战赛,混叠语音检测技术和说话人日志技术等方面展开了技术探索。M2MeT国际挑战赛语音识别(Automatic Speech Recognition)、说话人日志(Speaker Diarization)等语音处理技术的最新发展激发了众多智能语音的广泛应用。会议场景是语音技术应用中最有价值、同时也是最具挑战性的场景之一。因为这样的场景包含了丰富的讲话风格和复杂的声学条件,需要考虑到重叠语音、未知的说话人数量、大型会议室中的远场信号、噪音和混响等挑战因素。然而,该领域的发展一直以来因为缺乏大型公开真实会议数据而受到制约。由于会议转录涉及复杂的处理过程,因此必须仔细收集和标注更丰富的信息,如说话人身份、语音上下文、开始/结束时间等,所有这些信息都需要准确的标注,这既昂贵又耗时。针对这个困扰学术界的数据问题,达摩院语音实验室制作和开源了 AliMeeting 语料库。该语料库包含120小时真实记录的中文会议数据,包括8通道麦克风阵列采集的远场数据以及每个参会者的耳机麦克风采集的近场数据。M2MeT 关注的是真实的线下多人会议场景,包括 speaker diarization 和 multi-talker ASR 两个子任务。M2MeT 已被接收为 ICASSP 2022 Signal Processing Grand Challenge。有关 M2MeT 国际挑战赛的信息可以参考我们的竞赛论文M2MeT。竞赛网址:https://www.alibabacloud.com/zh/m2met-alimeeting基线系统框架:https://github.com/yufan-aslp/AliMeeting混叠语音检测技术会议场景是一个典型的多人自由交谈的场景,存在一个普遍的现象是多人同时说话造成的混叠语音。这种混叠语音的存在对于后续语音增强,语音识别等任务都造成了很大的挑战。针对混叠语音检测问题,我们提出了两个技术方案:1)联合声学特征和空间特征的混叠语音检测技术(论文);2)BeamTransformer: 基于麦克风阵列的Transformer结构(论文)。如图4是我们提出的混叠语音检测的系统框图。不同于过往的只利用单通道的音频信号进行混叠语音检测,我们的研究探索了实际录制的8通道语音信号,利用信号处理提供的声源空间信息和音频声学信息联合建模来进行混叠语音检测。具体包含如下三个核心模块:波束形成和声源定位:对于原始8通道阵列信号我们首先采用阵列信号处理算法来获得声源空间信息和增强的语音信号。语音分割:对于增强后的语音信号,我们采用基于神经网络的语音端点检测模型来将语音分割成短的片段。同时切分的时间戳也会用于声源空间分布频谱的切分。混叠语音检测:我们探索采用神经网络来进行混叠语音检测,验证了不同的输入特征对于系统性能的影响。图4 混叠语音检测系统框图针对基于神经网络的混叠语音检测问题,我们提出了两种网络结构,分别称之为 Two-Stream DFSMN 和 BeamTransformer。图5 基于Two-stream DFSMN的混叠语音检测Two-stream DFSMN的结构如图5所示。它由声学编码器、空间编码器、联合编码器、池化层和 softmax 输出层组成。声学和空间编码器分别用于将声学和空间特征转换为深层表征。他们的输出会经过拼接,然后输入到联合编码器里,进一步通过池化层将序列压缩成单个表征。除了通常采用的均值池化层,我们进一步提出了一种基于自注意力机制的池化层。并在会议数据集上进行了实验验证,结果显示联合音频和空间信息的混叠语音检测相比基线基于音频的检测方法可以获得明显的性能提升。相关论文发表于 INTERSPEECH 2021.图6 基于 BeamTransformer 的混叠语音检框图我们还提出一种基于麦克风阵列信号的 Transformer 结构, 如图6所示,通过 CDDMA Beamformer 分离后的多路 Beam,经过重新组合,在控制 transformer 参数量的条件下,形成空间信息互补最大化。该结构能够有效检测出空间中的重叠语音信号,并在检测的同时完成语音的分离。说话人日志技术说话人日志(Speaker Diarization,SD)系统的目标是解决“谁在什么时间说话”的说话人识别问题,是一种可以广泛应用于客服、会议等多轮对话场景的语音技术。现有的相关技术可大致分为两类,一类是基于分割聚类的传统方法,另一类则是基于深度神经网络的端到端方法。传统方法的局限性在于无法处理说话人在时间上的重叠;而端到端的方法则需要预先设定说话人数量,并且不能过多(通常6人以下)。针对现有方法存在的上述问题,我们提出了基于嵌入码的说话人日志模型(Speaker Embedding-aware Neural Diarization,SEND)。该模型通过动态维护说话人嵌入码记忆单元的数量,提高了对说话人数量的灵活性,既能够应对较多的说话人也不需要提前设定说话人数量;另外,通过幂集编码将重叠语音的说话人日志任务由多标签预测问题重新建模为单标签分类问题,大大提高了对重叠语音的说话人识别率。我们还利用语音中丰富的语义信息,将所提出的方法进行扩展,进一步提高了模型的识别性能。图7 基于嵌入码的说话人日志系统如图7所示,所提出的说话人日志系统 SEND 主要包含四个部分,分别是语音编码器 Speech Encoder、说话人嵌入码编码器 Speaker Encoder、相似度计算 Similarity Calculation 以及后处理网络 Post-Net。其中相似度计算模块对每一帧的语音编码和每个说话人的编码计算两两之间的相似度,得到相似度矩阵,随后将其送入后处理网络对不同说话人之间的关联性进行建模。为了解决阈值选择的问题,我们利用幂集(Power set)将各个说话人的独立语音活动进行编码,得到不同说话人组合的唯一独热标签。利用幂集编码及其反函数,即可直接得到每一帧语音对应的说话人,从而增加了对不同说话人重叠的灵活处理能力,也避免了繁琐的阈值选择问题。图8 带有文本信息的SEND说话人日志系统为了利用语音中的语义信息,我们使用 ASR 识别出的文本将所提出的方法进一步扩展。如图8所示,首先通过文本编码器 Text Encoder 将词嵌入码进行编码,随后采用注意力机制将声学信息与每个字的文本信息进行对齐,得到包含声学和语义多种信息的混合编码。通过计算混合编码和说话人编码之间的内积,即可得到每个字和每个人之间的相似度,再将相似度矩阵通过后处理网络即可得到每个字对应的说话人,最终能够回答“谁在什么时候说了什么”的问题。我们分别在合成数据集和会议数据集上进行了实验验证,结果显示所提出的基于说话人嵌入码的说话人日志系统相比于基线可以获得明显的性能提升,而引入识别文本作为语义信息能够更进一步提升模型的识别性能。相关论文:https://arxiv.org/pdf/2111.13694.pdf能听:技术创新之说话人相关在多人会议场景中,说话人区分的任务最为复杂。如何在说话人数量未知的情况下,降低噪声的影响,并做到对每一个说话人的定位、追踪、聚类以及对每句话发言时间的精确定位,在技术上面临诸多挑战。2.1 基于多通道会议场景的Speaker Diarization任务传统的单通道 speaker diarization 任务在复杂的多人会议场景中,一直难以取得理想的分离效果。如,在 DIHARD I、DIHARD II 的比赛中,表现最好的系统错误率也均在20%-30%以上。除此以外,单通道 diarization 在两个说话人接得比较紧的时候,难以找到准确的切分时刻,从而导致大量的丢失首字或者尾字的情况。较差的切分准确率和说话人ID准确率使得目前该技术无法达到商业应用的需求。对此,我们提出了一种基于麦克风阵列的多通道 speaker diarization 系统,利用麦克风阵列获得 SRP-PHAT 空间相位信息,利用 SRP-PHAT 进行空间声源定位。除此以外,我们还加入了基于神经网络的 VAD 模块,Overlap 检测模块,说话人 segmentation 模块。在此基础上,我们提出的 embedding+空间信息+时间信息的 AHC 聚类算法,大幅度提升了会议场景下的 speaker diarization 性能。从下面两表中可以看出,与传统的单通道说话人聚类算法相比,我们的系统将切分准确率从40%-50%左右,提升至99%以上(Table 1)。同时,将 DER 从23.17%降低至5.22%,达到可商用级别的要求。2.2 嘈杂环境下的说话人自适应噪声过滤及说话人识别嘈杂的背景噪声会给说话人任务带来明显的性能下降,如:在带有背景音乐的短视频、直播、电影电视剧、或者在背景环境嘈杂的录音中进行说话人识别,一直都是研究领域中的一大难题。我们针对这一挑战,提出了一种针对说话人嵌入场景的说话人自适应噪声过滤机制。对带有噪声的音频先进行一次说话人嵌入提取,利用说话人嵌入向量和训练好的声源分离 mask 得到去噪后的子空间特征,再在该子空间特征的基础上得到更加准确的说话人嵌入向量。在实现这个系统的过程中,难点包括在说话人嵌入场景下没有参考音频以及理想掩码,无法按照一般的声源分离系统中的方式进行训练。对此,我们可使用当前音频作为自身的参考音频,假设原始的说话人嵌入已经有了一定的噪声鲁棒性,通过端到端训练共同优化,放弃基于理想掩码的训练方式。除此之外,我们还可以进一步提出两个优化点,一是考虑到 D-TDNN 和声源分离模型 Conv-TasNet 之间的相似性,我们直接合并这两个模型,共享参数。二是考虑到我们不需要还原干净音频,将频谱图掩码替换成特征图掩码。在 VoxCeleb 的实验中,加入噪声过滤模块的系统在等错误率上相对降低了25%左右,而计算开销仅增加了15%左右,取得了单系统1.2% EER的理想效果。2.3 基于图神经网络的说话人无监督训练无监督或自监督学习在说话人识别任务上的重要性正逐渐增加,其中无监督聚类技术的作用愈发明显。在现实中通常有大量的无标注数据,来自于会议或多人讨论等常见的语音场景。一个有效的无监督聚类技术可以帮助我们在无需额外标注成本的情况下充分发挥出数据量的优势。图神经网络 Graph Convolutional Network(GCN)近年来正在得到越来越多的关注。由于其在学习节点的链接性规律上有突出的表现,可以在无监督聚类中发挥出一定优势。因此我们提出了一种基于图神经网络 GCN 的说话人特征半监督学习方法。对于说话人 embedding,通过构建子图进行训练打标的方式,快速扩充数据,在公开数据集 Voxceleb 上取得了与已知 ground truth label 相似的性能。会说:技术创新之语音合成合成真实、自然、富有表现力的声音,一直是语音合成技术的追求和目标。当你连续听一段时间,仍然无法感觉到是机器在说话时,就意味着该款合成语音是较为成功的。3.1 高表现力声码器——HIFI-TTS声码器作为语音合成系统中的一个重要模块,负责将特殊设计的中间表征(文本语言学特征/声学特征)转换为波形信号,直接影响着合成音频的音质。近年来,随着深度学习技术在语音合成中的应用,基于神经网络的声码器被广泛使用,从 wavenet、wavernn 到 LPCNet,每一次声码器技术的进步都推动了整个语音合成系统的升级,带来了体验的提升。高采样率、高音质是高表现力语音合成的一个体现。已有的自回归声码器方案在面对高采样率、高音质情况下存在着合成效果和效率的问题,在学界非自回归声码器的研究进展启发下,我们在达摩院新一代 KAN-TTS 基础上、结合业界流行的Hifi-GAN声码器,进行了一些技术、系统链路上的改进,提出可以高效支持高采样率、高音质的语音合成 HIFI-TTS 系统。模型Hifi-TTS 引入基于生成对抗网络(GAN)的连续变量建模。不同于先前采用交叉熵训练的离散变量建模的 wavenet,wavernn,LPCNet,引入 Discriminator 区分真实录音/生成声音的分布来指导声码器(Generator)的训练。模型通过 MSD 建模语音中信号的平稳特性,通过 MPD 建模语音中不同频率成分的周期特性,从而达到对声音更好的还原效果。为支持48k高采样率的声音生成,对 Discriminator, Up-Net, MRF 的结构进行相应改造,使其在48k采样率下有更稳定的合成效果。效果新一代 HIFI-TTS (48k) 系统在 CMOS 测评中均超过了线上 (16k)系统,在 HIFI 专业测评中 CMOS 平均提升0.3,在普通众包测评中 CMOS 平均提升0.08,展现出更好的音质和表现力体验。系统设计声码器 (vocoder)-on-GPU 的异构方案。不同于先前逐点生成的自回归声码器,新一代非自回归声码器可支持并行生成。并行生成效率更高,更适合发挥 GPU 本身的计算优势,从而提高整个语音合成系统的实时性。非自回归声码器流式方案。通过声码器的 chunk 机制和声学模型 (Acoustic Model) 相配合,在显存占用、运行效率上优于非流式方案, 可支持 HIFI-TTS 系统在 GPU 下的高效流式服务。3.2 高表现力声学模型语音合成技术发展迅速,越来越多的语音合成系统被提出,使得合成的语音更加自然和流畅。即便如此,合成的语音在韵律上和真人还有明显差距。因此,很多研究人员提出若干种方法来对语音中的韵律建模,从而使得合成的语音进一步接近真人。一般来说,韵律成分包含:基频、能量和时长。已有的韵律建模方法存在一些问题:1)由于基频提取不准,导致韵律建模效果差;2)不同韵律成分预测是用不同模型分别预测,而实际上这些韵律成分之间存在关联性;3)有限的 TTS 数据对于多样的韵律分布建模不足。针对这些问题,我们提出了高表现力声学模型——ProsoSpeech,模型结构图如下:系统和结果见图(a),ProsoSpeech 主要包含:音素编码网络(Phoneme Encoder)、词编码网络(Word Encoder)、长度规整模块(Length Regulator)、解码网络(Decoder)、韵律编码网络(Prosody Encoder)和隐藏韵律矢量预测网络(LPV Predictor)。输入的文本序列被转换成音素序列和词序列,然后通过音素编码网络和词编码网络获得语言学特征表示H_ling。然后,基于H_ling和H_spk(H_spk是可训练的矢量),目标梅尔谱(mel-spec)的低频部分通过韵律编码网络获得隐藏韵律矢量(LPV)。最后,H_ling、H_spk和隐藏韵律矢量拼接在一起,送入后续的长度规整模块和解码网络获得预测的梅尔谱。通过 latent prosody vector 的提取和预测,MOS 可以获得3.65->3.85(人声4.08)的提高,整体韵律更平滑顺畅。相关论文可见:https://arxiv.org/abs/2202.07816懂你:技术创新之SLP基础算法研究我们在“人-机”对话时,会有特定的语句表达,比如我们会字正腔圆地问天猫精灵:今天天气怎么样?,进行问询式的互动。而在“人-人”交流式的口语互动中,会常有语气词、重复、随意修改表达句式等情况,技术难点包括带感情的自然语音识别、对口语化表达的语音识别和语义理解。4.1 口语语言处理(SLP)如何让语音识别的文字更具有可读性和可用性,是语音实验室持续考虑的问题,为此我们介绍在联合文本和音素表征学习、区分式自学习的标点技术、自适应滑窗的篇章分割技术、基于池化的长文本建模技术、基于掩码的关键词抽取技术等方面的进展。4.2 联合文本和音素表征学习在用于口语理解 (SLU) 的传统级联架构中,已经观察到自动语音识别(ASR)错误可能会损害自然语言理解的性能。端到端 (E2E) SLU 模型已经提出用单个模型将语音输入直接映射到所需的语义,从而减轻 ASR 错误传播。最近,针对这些 E2E 模型已经探索了预训练技术。我们提出了一种联合文本和音素预训练的表征学习方法,可以利用音素信息来提升口语语言理解任务对于 ASR 错误的鲁棒性。我们探索了音素标签作为一种高层次的语音特征,设计和比较了基于条件掩码语言模型目标和句间关系目标的预训练方法。我们也探索了结合文本和音素信息在模型finetune的有效性。在 Fluent Speech Commands 和 SNIPS 两个公开数据集上的实验结果表明,提出的方法可以显著提升基线模型效果以及口语语言理解任务对语于ASR错误的鲁棒性。之前的工作一般通过 Multiple ASR hypothesis 和 end-to-end SLU 两类方法来缓解 ASR 错误对下游任务造成的错误累积。Multiple ASR hypothesis 方法的缺点是增加ASR解码的复杂性和延时,以及并不是所有的ASR系统都能产生高质量的 multiple ASR hypotheses。End-to-end SLU 的缺点是业务上通常使用的是级联系统,架构改造大,冷启动和维护难度大。我们的方法是在传统级联架构下,只使用 ASR 1-best,从而提升 NLU 的性能。我们比较系统地探索利用发音特征(音素)来提升 SLU 对 ASR 错误的鲁棒性,包括在预训练阶段学习文本音素联合表征和在 finetune 阶段融合发音特征。预训练阶段学习文本音素联合表征的示意图如下所示:我们进一步分析了联合文本和音素表征学习后,词向量表征发生的变化。我们选择来自 FSC 开发集(ASR 1-best WER 36.7)词频最高的20个混淆词构造 retrieval 任务,比较不同预训练模型词向量的 Mean Reciprocal Rank (MRR)。实验发现口语预训练模型可以显著缩短表征空间中声学混淆词的距离(MRR 0.1012 -> 0.1591),从而达到提升ASR错误鲁棒性的效果。效果实验图如下图所示:更多技术细节可以参考我们的 INTERSPEECH 2021 技术论文:Pre-training for Spoken Language Understanding with Joint Textual and Phonetic Representation Learninghttps://www.isca-speech.org/archive/pdfs/interspeech_2021/chen21g_interspeech.pdf4.3 区分式自学习的标点技术标点预测任务对于提升 ASR 输出文本的可读性和提升下游自然语言处理任务的效果起到至关重要的作用。然而,要想取得好的标点预测效果,往往需要大量标注的口语文本,这往往是耗费大量人力物力的。我们提出了一种区分式 self-training 方法,即加权损失和区分性标签平滑的方法,来利用无标注的口语文本数据。加权损失是指使用不同的权重损失来联合人工标签数据和伪标签数据。区分性标签平滑是指考虑到人工标签数据和伪标签数据噪声程度不同,采用不同超参的标签平滑技术来处理人工标签数据和伪标签数据。整个自学习的流程图如下所示:模型采用基于Transformer的序列标注框架,如下图所示:在英文公开数据集 IWSLT2011 和一个内部中文数据集上,实验表明我们提出的方法可以进一步提升很强的基线模型,包括 BERT, RoBERTa 和 ELECTRA。另外,提出的区分式 self-training 方法相较经典 self-training 方法的效果有一定提升。我们在 IWSLT 2011 公开数据集上获得了新的 SOTA,有1.3 F1的绝对提升。更多技术细节可以参考我们的INTERSPEECH2021技术论文:Discriminative Self-training for Punctuation Predictionhttps://www.isca-speech.org/archive/pdfs/interspeech_2021/chen21d_interspeech.pdf4.4 自适应滑窗的篇章分割技术随着在线会议、在线教育等形式的普及,越来越来的记录音视频会由自动语音识别 (ASR) 系统转录为记录文档。但是原始的 ASR 转写稿,缺少话题、段落等结构性分割注释,大大降低了其可读性和利用价值。对口语长篇章转写文档进行自动化的段落分割标注,可以很大程度提高文章可读性和下游 NLP 任务(例如摘要和机器阅读理解)在该语料上的性能。我们提出了一种结合自适应滑动窗口机制的序列结构化分割模型,同时还探索利用音频信息提高模型效果的方法。我们的方法大幅度提高口语文档结构化分割的准确性和效率,音频信息的使用也显著提高了系统对口语长篇章文档中 ASR 错误的鲁棒性。相比基线模型,我们的模型在效果方面提升超过4%,同时将推理效率缩减为原来的1/6。模型结构和推理机制如下图所示:更多技术细节可以参考我们的 IEEE ASRU 2021技术论文:Sequence Model with Self- adaptive Sliding Window for Efficient Spoken Document Segmentationhttps://arxiv.org/abs/2107.092784.5 基于池化的长文本建模技术基于 Transformer 的模型在各种 NLP、视觉和语音任务中取得了巨大的成功。然而,Transformer 的核心,即自注意力机制,相对于序列长度具有二次时间和内存复杂度,这阻碍了基于 Transformer 的模型在长序列上的应用。目前已经提出了许多方法来缓解这个问题,例如稀疏注意机制、低秩矩阵近似和可扩展内核,以及自注意力的 token 混合替代方案。我们提出了一种新的池化网络 (PoNet),用于在具有线性复杂度的长序列中混合 token。我们设计了多粒度池化和池化融合来捕获不同级别的上下文信息并将它们与 token 的交互结合起来。在 Long Range Arena(LRA)基准测试中,PoNet 显著优于 Transformer 并实现了具有竞争力的准确性,同时在 GPU 上测量的所有序列长度上仅比最快的模型 FNet 慢一点。我们还对 PoNet 的迁移学习能力进行了系统研究,并观察到 PoNet 在 GLUE 基准测试中达到了 BERT 95.7% 的准确率,相对于 FNet 高出 4.5%。综合消融分析证明了设计的多粒度池化和池化融合在长序列中的 token 混合的有效性以及为 PoNet 设计的预训练任务的有效性,以学习可转移的上下文化语言表示。PoNet 模型的示意图如下所示,我们设计了多粒度池化和池化融合来模拟不同级别的 token 交互。多粒度池化在每个子层中包含三种类型的池化,从粗粒度到细粒度。全局聚合(Global Aggregation,GA)将整个序列的信息聚合到一个 token 中。GA包含两阶段,第一阶段用平均池化以获得粗略的全局表示,第二阶段用交叉注意力以获得更准确的全局表示。段最大池化(Segment max-pooling,SMP)捕获段落或句子级别的信息。局部最大池化(Local Max-pooling,LMP)捕获更重要的局部信息。这三个池化被融合以产生多粒度池化块的输出特征。然后通过残差连接,这个输出特征被进一步聚合到每个 token 中。更多技术细节可以参考我们发表在ICLR2022的技术论文:PoNet: Pooling Network for Efficient Token Mixing in Long Sequenceshttps://openreview.net/pdf?id=9jInD9JjicF4.6 基于掩码的关键词抽取技术关键短语提取 (KPE) 自动提取文档中提供核心内容、简明摘要的短语,这有利于下游信息检索和 NLP 任务。先前最先进的方法根据候选关键短语的学习表示与文档之间的相似性来选择候选关键短语。由于序列长度之间的差异导致关键短语候选的表示与文档之间的不匹配,它们在长文档上的性能下降。在这项工作中,我们提出了一种新的基于无监督嵌入的 KPE 方法,即掩码文档嵌入排名 (MDERank),通过利用掩码策略并根据源文档和掩码文档嵌入之间的相似性对候选者进行排名来解决这个问题。我们通过提出一种新的自监督对比学习方法进一步开发了面向 KPE 的 BERT (KPEBERT) 模型,该方法比普通 BERT 更兼容 MDERank。对六个 KPE 基准的综合评估表明,所提出的 MDERank 优于最先进的无监督 KPE 方法,平均提高了 1.80
[email protected]。MDERank 进一步受益于KPEBERT,总体上比 SIFRank 平均提高了 3.53
[email protected]。传统的方法通过技术 phrase 和 document 之间的语义距离来抽取关键词,我们称这些方法为 Phrase-Document(PD)方法。PD 方法有两个主要缺点:1)由于文档通常比候选 KP 长得多,并且通常包含多个 KP,因此 PD 方法很难可靠地测量它们在潜在语义空间中的相似性。因此,PD 方法自然偏向于更长的候选 KP,如下表中的示例所示,该例子显示了短语文档 (PD) 方法更倾向提取较长候选关键短语。其中提取的关键短语按排名顺序显示,与人工标签匹配的关键词标记为红色。2)PD 方法中候选 KP 的嵌入是在没有上下文信息的情况下计算的,因此进一步限制了后续相似性匹配的有效性。我们提出了一种新的基于无监督嵌入的 KPE 方法,用 Masked Document Embedding Rank (MDERank) 表示,以解决 PD 方法的上述缺点。MDERank 的架构如下图所示。MDERank 的基本思想是关键短语在文档的语义中起着重要的作用,如果它从文档中消失,就会导致文档语义的重大变化。我们提出的方法可以被视为 Document-Document 方法,它解决了 Phrase-Document 方法的两个弱点:1)由于原始文档和掩码文档的序列长度相同,比较它们在语义空间中的相似性更有意义和可靠。2)掩码文档的嵌入是根据足够数量的上下文信息计算的,因此可以使用 SOTA 上下文化表示模型(如 BERT)可靠地捕获语义。更多技术细节可以参考我们发表在Findings of ACL 2022 的技术论文:MDERank: A Masked Document Embedding Rank Approach for Unsupervised Keyphrase Extractionhttps://aclanthology.org/2022.findings-acl.34.pdf技术创新之联合优化声学前端在语音AloT场景应用中,语音交互系统需要在设备回声、噪声干扰、房间混响等多种不利声学影响下,进行语音唤醒和识别等交互操作。业界一般采用由多个算法模块形成算法系统来应对,但算法子模块各自收敛到其目标函数的最优解后,并不能代表整体系统性能也达到了最优。与算法级联架构不同,联合优化声学前端则是端到端从系统的角度去设计和优化算法,以不同声学条件下端到端的唤醒率等指标为优化目标,采用统一的建模方法提升回声消除、声源分离、去混响和语音唤醒的整体算法性能,在远场语音模组、智能电视、智能音箱和智能座舱等人机交互产品中可以不断突破技术边界,为用户带来更好更便捷的交互体验。在面向远场语音交互的前端信号处理方面, 我们已经构建了以盲源分离理论为核心的统一框架:将声源分离、解混响和回声消除统一在盲源分离理论框架下,统一了目标函数和优化策略。这一技术路线的出发点是针对消费类电子设备高性能、低成本和低功耗的需求特点,其性能较各模块独立优化进一步提高,请参考:Na, Yueyue, et al. "Joint Online Multichannel Acoustic Echo Cancellation, Speech Dereverberation and Source Separation." Interspeech, 2021.https://arxiv.org/abs/2104.04325对于远场前端处理来说,目前最难的场景包括极低信噪比(-10dB以下)或多人同时干扰(或称鸡尾酒会场景,信干比一般在0dB或更低)。盲源分离算法一定程度上对多人同时干扰的情况已经有了较好的分离效果,在某头部教育平板品牌商的人声分离算法测评中,达摩院2mic方案也被认为是业内最佳的。在本年度,我们则重点攻坚了以扫地机器人为代表的极低信噪比场景,具体来说是以阵列信号处理与语音唤醒的联合优化为切入点,加强了声学-语音一体化建设,形成统一前端处理平台,这一思想可由下图来示意:其主要的内容有:5.1 自适应麦克风阵列信号处理随着神经网络(NN)技术的发展,目前越来越多的研究倾向于使用全NN模型的方法来实现端到端的语音增强和关键词检测。端到端的系统由于具有统一的目标函数,所以有望取得较好的整体性能。但是在实际应用中,设备所面临的环境是多种多样的。基于全NN的端到端方案虽然在与其匹配的场景中能够取得较好的性能,但是其缺点在于无法在实际使用过程中进行自适应调整,所以当遇到与训练过程不匹配的场景时模型的性能将会显著降低。另外,低算力、低存储的嵌入式应用中也限制了模型的规模、从而限制了整体的性能。基于自适应麦克风阵列信号处理的语音增强技术,其优点就在于能随着使用场景的变化对信号处理算法作出自适应更新,从而保持语音增强系统的在线最优性能。同时,由于自适应信号处理算法所占用的计算和存储资源较小,所以非常适合低资源嵌入式系统上的应用。5.2 引入关键词mask进一步提升在极低信噪比和散射噪声场景下的唤醒性能传统的基于波束形成或盲源分离的语音增强方法,其本质在于在目标声源处形成主瓣,在点声源干扰处形成零点,从而提升目标声源的信噪比。但是,在某些极低信噪比、散射噪声的应用场景中,由于麦克风阵列孔径、麦克风数目、计算复杂度等条件的限制,传统基于信号处理的语音增强方法并不足以有效的实现噪声抑制。为了弥补传统方法的不足,我们研发了基于深度学习的语音增强方案,基于信号处理的传统方法级联基于深度模型的后滤波模块,使得语音增强的性能得到了进一步提升。相关技术论文请参考:Wang, Ziteng, et al. "NN3A: Neural Network supported Acoustic Echo Cancellation, Noise Suppression and Automatic Gain Control for Real-Time Communications." arXiv preprint arXiv:2110.08437 (2021).https://arxiv.org/abs/2110.084375.3 完善的多通道远场数据模拟工具, 可在训练阶段引入完全的数据匹配要在训练阶段实现完全的数据匹配,首先需要多通道、长音频数据模拟功能的支持。这样才能使用与实际处理中相同的语音增强前端来处理多通道数据,并且保证长音频的自适应信号处理算法有足够的数据收敛,达到正常的语音增强性能。我们用于关键词检测模型训练的数据模拟工具除了能够大批量模拟多通道、长音频的功能之外,该工具还支持了安静、点声源干扰、回声、散射噪声场景的模拟,以及这些场景的各种组合。在数据模拟的基础上,我们还形成了从音源到特征的 pipeline 工具的建设,使得训练阶段实现完全的数据匹配成为可能。5.4 基于关键词检测模型的多路信息融合和通道选择机制,提升关键词检测性能,降低计算量目前语音增强前端输出的多是多通道的、增强后的信号,在这类多路输出的系统中,一般性的做法是在每路前端输出后面都接一个单路的关键词检测模块,任何一路模块中检测到关键词即算唤醒。之后通过事件融合和通道选择模块统一上报唤醒事件并选择上云音频通道。这种组合而成的系统虽然暂时满足了多通道的应用需求,但其中仍然存在一些缺点:首先是虚警问题,由于多路信号中虚警发生的概率可以近似认为是相互独立的,所以每增加一个通道,虚警就比单通道的关键词检测近似增加一倍;第二是计算量问题,每增加一个通道,关键词检测的计算量也随之增加一倍;第三是增加了系统的复杂性,由于各路关键词检测上报事件的机制也是相互独立的,所以经常会发生信噪比高的通道后唤醒的情况,所以需要复杂的缓存和等待逻辑来对事件和数据进行同步。为了弥补上述不足,我们开发了关键词检测模型的多路信息融合机制,即只在模型的第一层记忆单元上做多路推理,之后将推理结果使用 max pooling 操作进行融合。同时,max pooling 的选择结果又能揭示最佳通道的选择结果。此种架构同时解决了上述虚警、计算量、同步性的缺点,进一步提升了整体性能。5.5 推理阶段的前后端反馈联动传统的语音增强+关键词检测的系统采用顺序级联的架构,语音增强模块为后续的关键词检测模块提供信噪比较高的语音,但是关键词检测模块并不能提供信息辅助前级模块实现更好的语音增强。分析关键词检测模块的结构可以发现,通过解码器可以知晓组成关键词的各个发音单元在音频流中的存在概率,进而得到关键词存在概率。该信息可以作为一种自顶向下的监督信息,告诉前级模块哪些数据是关键词检测模块倾向的,哪些是不需要的。所以,除了原架构中的前馈机制之外,我们还建立了关键词存在概率的反馈机制,用于指导前级模块进行更高效的语音增强。以上算法的性能优势在以扫地机器人为代表的高难度场景中得到了验证。相关技术论文请参考:Na, Yueyue, et al. "JOINT EGO-NOISE SUPPRESSION AND KEYWORD SPOTTING ON SWEEPING ROBOTS." ICASSP 2022-2022 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2022. https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9747084Dianwen Ng, et al. "CONVMIXER: FEATURE INTERACTIVE CONVOLUTION WITH CURRICULUM LEARNING FOR SMALL FOOTPRINT AND NOISY FAR-FIELD KEYWORD SPOTTING." ICASSP 2022-2022 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2022. https://arxiv.org/abs/2201.05863对行进间的扫地机器人直接进行语音交互操作所面临的问题是高自噪、大回声、移动远场和低算力,每一项都具有超出一般家居智能硬件产品的难度。基于信号处理和唤醒的联合优化算法方案,我们与天猫精灵共同合作推出高性能木星模组,有效地解决了以上问题,大幅提升了移动高噪场景下的语音交互效果,在业界树立了新标杆。初版6mic算法支持了业界首款语音交互扫地机;通过信号处理和唤醒的联合优化,唤醒率较语音增强+多路关键词检测的基线系统相对提升近10%,且虚警率下降了30多倍,关键词检测模块的计算量相对下降50%多,并经离线验证mic个数降为3/4mic时,性能下降幅度也在可接受范围之内,进一步提升了性价比和降低装配难度。经内部严谨的对比测试,经过算法升级某客户的唤醒率指标在相同噪声声压级下均高于后期出现的竞品。这一思想进而也可以引入视觉信息来辅助提升音频盲源分离在复杂交互场景下的鲁棒性 ,从而可形成完整的多模交互前端处理方案。5.6 面向嵌入式低资源的信号处理与神经网络极致加速有别于数据中心等大规模、高算力场景,声学前端所应用的 Tiny 方向则聚焦于低功耗、高性价比等特性,需要充分利用软硬一体的加速技术。以语音唤醒为例,采用蒸馏和裁剪等模型训练压缩、基于 TVM 的神经网络编译图优化、RISC-V 指令集以及语音领域相关的工程实践,在2022年AI基准测试 MLPerf? Tiny Benchmark 的嵌入式语音唤醒场景中,我们提交的方案较好地平衡了推理任务中的准确率与延时,保证准确率90.7%最高的情况下耗时最短。可参考技术论文:https://mp.weixin.qq.com/s/yBdjQmRZq7NfKmodYC-bWQ达摩院语音实验室的软硬一体联合优化技术,让回声消除、盲源分离、语音降噪和语音唤醒等高复杂度端侧语音AI前沿算法,在资源极致严苛的嵌入式芯片上得以实现,算法内存开销低至1M字节,运行功耗低于100mW,从而可以为客户整机降低一半以上的模组成本,并依然保持高性能的算法体验。在算法输出形态上,我们也形成了下图所示的前端处理平台: 包括信号处理、唤醒和 VAD 在内的一体化建模算法、算法嵌入式平台优化和配套训练工具, 此工具包为 Mind 声学前端算法对外输出的基本形态。设备端侧语音AI工具包结构框架图在语音AI不断解锁新场景的进程中,下一代语音AI与过往语音应用最大的区别在于:从过去更强调人与机器之间的语音交互,变为未来对人与人之间语音交流的分析和智能化应用。会议场景“人-人”语音交流,集众技术挑战于一身,将会是牵引语音技术进一步发展突破的绝佳试验田,需要从硬件、信号处理、语音、语义等多方面共同发力。达摩院语音实验室正沿着此方向进行探索,我们希望用先进的技术,来率先解锁对会议场景的智能化应用难题。作者:陈谦、邓憧、付强、高志付、胡凯、罗浩能、纳跃跃、田彪、王雯、鄢志杰、张仕良、张庆林、郑斯奇(以姓氏首字母排序)开源微服务最佳实践点击这里,查看详情。
机器学习
生成指定风格图片https://huggingface.co/spaces/akhaliq/VQGAN_CLIP使用教程https://www.bilibili.com/video/BV1Mh411W742?from=search&seid=11360957092739073592&spm_id_from=333.337.0.0输入文字, 生成图片https://wudao.aminer.cn/CogView/index.html名人名言思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问--- 牙叔教程声明部分内容来自网络本教程仅用于学习, 禁止用于其他用途
我与阿里云认证的故事
我是李东峰,现在阿里巴巴数据中心从事IT运维工作。本人从事IT现场运维工作近6年,主要负责现场工作安排、安全检查、技术支撑、现场应急响应等工作,负责过机房从0到1的建设工作,拥有丰富的现场运维经验。2021年8月,阿里云数据中心 IT 初级运维工程师认证(Alibaba Cloud Certified Technical Service - L2)是我从事运维行业取得的第一个认证,取得相关认证是对自己工作能力的一种认可,目前准备考取更高方向的认证,不断学习,不断成长!认证与项目:在认证学习时,正好赶上机房DE楼新交付,开始进行机房综合布线、网络设备上架、网络设备配置、并网,服务器工具机上架装机、调试等等。这些工作内容和阿里云数据中心 IT 初级运维工程师认证所学习的内容完全吻合,习惯了日常运维,对于这种开荒交付一些关键点记忆不是很深刻,认证学习的过程帮助我顺利完成了DE楼的交付接维,也是把这些知识点用于到实践的最好证明,这些理论知识与我们工作是完全一致的,学习这些认证知识,取得认证,也意味着真真切切的理解了“IT现场运维”这项工作,也是具备IT现场运维能力的最好证明!认证开始:2021年6月,着手准备阿里云数据中心 IT 初级运维工程师认证,开始对认证并不是很了解,后续通过相关课程的学习,了解到阿里巴巴数据中心运维类人员的专业技术认证,主要涉及阿里数据中心的服务器技术,网络技术,综合布线技术,运维规范,资产管理等。通过该技术认证可以有效证明该认证人员具备以下能力:?具备IT、网络、数据中心、服务器维修等相关从业的基础知识 ?能够胜任数据中心现场运维工作,熟悉运维的基础流程,对现场运维的工作内容,风险项等有一定的了解。 ?能够熟练的进行数据中心常见服务器,网络设备的现场运维操作,具备一定的服务器维修基础,能够独立对网络设备进行常见的维护、配置等操作 。?对数据中心运维规范有一定了解,能够快速上手现场运维工作,并对现场常见故障有应急响应及事件处理能力。认证过程:在认证学习的过程中,发现这些知识点是自己平时所了解的、知道的,但之间的关联性、系统性是自己所忽略的,认证学习的过程是对自己平时工作所用知识的一种有效回顾,也是对自己平时工作积累的一种查漏补缺,更是对IT运维工作的一个全方位总结,自己边学习边总结,相关知识点整理如下:走进数据中心:1.了解数据中心的定义与发展2.熟悉数据中心的物理区域划分3.了解数据中心的分级标准与设计标准4.了解数据中心的行业现状及面临的挑战 5.熟悉阿里数据中心的发。数据中心网络计算基础:1.了解网络和重要的网络协议,理解网络通信的原理2.了解局域网和交换机的工作原理,理解VLAN的工作原理和重要意义3.了解IP地址,学会网络分解和汇总,理解路由原理,理解网络通信的过程4.学会在本地网络中应用增强技术,构建健壮的本地网络5.学会使用NAT技术和ACL技术,了解公网接入和访问控制的基本方法。数据中心网络组成与维护:1.了解数据中心的传统的三层网络结构2.了解数据中心网络结构的演变3.了解数据中心的虚拟化技术4.了解以SDN 为代表的网络虚拟服务器硬件技术:1.熟悉服务器的基本概念与组成2.掌握常见计算硬件及其性能参数3.掌握常见存储硬件及其性能。服务器软件技术:熟悉服务器常见软件系统2.掌握 Linux 硬盘、网卡管理操作3.熟悉 BIOS 固件刷新操作4.熟悉BMC带外管理系统组成5.掌握FRU规范与修改操。数据中心综合布线:1.了解综合布线系统特点和应用2.熟悉综合布线的参考标准3.掌握传输介质的分类和使用规范4.掌握综合布线的规划、设计和实施 5.了解综合布线的施工质量要求6.掌握综合布线维护工具的使用。数据中心运营规范:1.熟悉数据中心运营组织的组成2.熟悉数据中心运营目标3.了解数据中心运营面临的挑战认证备考:首先熟悉阿里云数据中心 IT 初级运维工程师认证学习大纲,了解都包含哪些知识点,然后去分解这些知识点,一块一块去学习,学习过程中,自己之前不太清晰的知识点,进行笔记记录,单项强化学习,学习完成后,站在整个运维的角度,把知识点串联起来,参考新建项目进程把知识框架整合起来,采用总分总的一个形势进行备考。认证考试:考试内容包括了各个领域的知识点和目标,与学习内容相符,是对自己学习过程和日常工作能力的最好验证,同时也会更好的发现自己的不足之处。最后:我与阿里云认证的故事——如果说,大学毕业证书是对我学习生涯的认可,那么阿里云认证便是对我工作专业性的认可。
【每日算法Day 109】五大解法,带你深入了解完全背包方案数
题目链接LeetCode 面试题 08.11. 硬币[1]题目描述给定数量不限的硬币,币值为 25 分、10 分、5 分和 1 分,编写代码计算 n 分有几种表示法。(结果可能会很大,你需要将结果模上 1000000007)说明:0 <= n (总金额) <= 1000000示例1输入:n = 5输出:2解释:有两种方式可以凑成总金额:5=55=1+1+1+1+1示例2输入:n = 10输出:4解释:有四种方式可以凑成总金额:10=1010=5+510=5+1+1+1+1+110=1+1+1+1+1+1+1+1+1+1题解朴素想法(错误)动态规划 1动态规划 2(超时)转移方程优化神奇的地方来了,上面两种方法,全部可以优化为同一个式子,仔细看好了。动态规划 1:动态规划 2:最终形式:空间优化数学法代码动态规划 1(c++)class Solution {
public:
typedef long long ll;
static const ll mod = 1e9 + 7;
static const int N = 1000010;
static const int M = 4;
ll dp[M][N];
int p[M] = {1, 5, 10, 25};
int waysToChange(int n) {
memset(dp, 0, sizeof dp);
for (int i = 0; i < M; ++i) dp[i][0] = 1;
for (int i = 0; i < M; ++i) {
for (int j = 1; j <= n; ++j) {
for (int k = 0; k <= i; ++k) {
if (j >= p[k]) {
(dp[i][j] += dp[k][j-p[k]]) %= mod;
}
}
}
}
return dp[M-1][n];
}
};动态规划 2(超时)(c++)class Solution {
public:
typedef long long ll;
static const ll mod = 1e9 + 7;
static const int N = 1000010;
static const int M = 4;
ll dp[M][N];
int p[M] = {1, 5, 10, 25};
int waysToChange(int n) {
memset(dp, 0, sizeof dp);
for (int i = 0; i < M; ++i) dp[i][0] = 1;
for (int i = 0; i <= n/p[0]; ++i) dp[0][i*p[0]] = 1;
for (int i = 1; i < M; ++i) {
for (int j = 1; j <= n; ++j) {
for (int k = 0; k <= j/p[i]; ++k) {
(dp[i][j] += dp[i-1][j-k*p[i]]) %= mod; }
}
}
return dp[M-1][n];
}
};转移方程优化(c++)class Solution {
public:
typedef long long ll;
static const ll mod = 1e9 + 7;
static const int N = 1000010;
static const int M = 4;
ll dp[M][N];
int p[M] = {1, 5, 10, 25};
int waysToChange(int n) {
memset(dp, 0, sizeof dp);
for (int i = 0; i < M; ++i) dp[i][0] = 1;
for (int i = 0; i <= n/p[0]; ++i) dp[0][i*p[0]] = 1; for (int i = 1; i < M; ++i) {
for (int j = 1; j <= n; ++j) {
dp[i][j] = dp[i-1][j];
if (j >= p[i]) (dp[i][j] += dp[i][j-p[i]]) %= mod;
}
}
return dp[M-1][n];
}
};空间优化(c++)class Solution {
public:
typedef long long ll;
static const ll mod = 1e9 + 7;
static const int N = 1000010;
static const int M = 4;
ll dp[N];
int p[M] = {1, 5, 10, 25};
int waysToChange(int n) {
memset(dp, 0, sizeof dp);
dp[0] = 1;
for (int j = 0; j < M; ++j) {
for (int i = 1; i <= n; ++i) {
if (i >= p[j]) {
(dp[i] += dp[i-p[j]]) %= mod;
}
}
}
return dp[n];
}
};数学法(c++)class Solution {
public:
typedef long long ll;
static const ll mod = 1e9 + 7;
int waysToChange(int n) {
ll res = 0;
for (int i = 0; i <= n/25; ++i) {
ll r = n - 25 * i;
ll x = r / 10, y = r / 5;
(res += (x + 1) * (y - x + 1)) %= mod;
}
return res;
}
};参考资料[1]LeetCode 面试题 08.11. 硬币: https://leetcode-cn.com/problems/coin-lcci/作者简介:godweiyang,知乎同名,华东师范大学计算机系硕士在读,方向自然语言处理与深度学习。喜欢与人分享技术与知识,期待与你的进一步交流~
【每日算法Day 100】字节跳动 AI Lab 面试编程题(三道)
第一题给出一条长度为 L 的线段,除了头和尾两个点以外,上面还有 n 个整数点,需要在上面再放 k 个新的点,使得相邻的两个点之间的最大距离最小,求这个最小的距离。题解我当时太紧张了,真是脑抽了,还想着弄个优先队列,划分最大的,然后丢进去,再划分最大的,但是是错的。正确解法小姐姐走了我才想起来,二分答案 m ,然后扫描一遍判断将每一段划分成小于等于 m 的一共需要多少次。如果次数大于 k ,说明 m 太短了,否则说明 m 太长了。代码#include <bits/stdc++.h>using namespace std;
int main() {
int L, n, k;
scanf("%d%d%d", &L, &n, &k);
vector<int> a(n+2, 0);
a[0] = 1;
for (int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
} a[n+1] = L; int l = 1, r = L-1;
while (l < r) {
int m = l + (r - l) / 2;
int cnt = 0;
for (int i = 1; i <= n+1; ++i) {
cnt += (a[i] - a[i-1] - 1) / m;
}
if (cnt > k) l = m + 1;
else r = m; }
cout << l << endl;
return 0;}第二题给出一个数组 A,找到最大的 A[i] - A[j],要求 i > j。题解这题很简单,直接遍历每个 A[i],维护它前面最小的那个数 minn,然后求出最大的 A[i] - minn 就行了。代码#include <bits/stdc++.h>using namespace std;
int main() {
int n;
scanf("%d", &n);
vector<int> a(n, 0);
for (int i = 0; i < n; ++i) {
scanf("%d", &a[i]); }
int minn = a[0], res = INT_MIN;
for (int i = 1; i < n; ++i) {
res = max(res, a[i]-minn);
minn = min(minn, a[i]); }
cout << res << endl;}第三题给定一个字符串,对该字符串进行删除操作,保留 k 个字符且相对位置不变,使字典序最小。题解这题也脑抽了,想了一堆方法,dp 复杂度太高,线段树太麻烦,最后用 map 勉强写了一下。主要思想是这样的,最后要保留 k 个字符,那么第一个字符只能在下标 0 ~ n-k 中寻找,那肯定找最小的啊,如果有多个就找最前面那个,把它的位置记为 pos。然后第二个字符肯定得在下标 pos ~ n-k+1 中寻找,还是一样的思路,找到以后更新 pos 位置,依次找下去找到 k 个为止。所以我就利用了 map 的特性,把寻找窗口内的字符个数做一下统计,然后取出 map 中的第一个字符就是字典序最小的了,次数减一,如果减到 0 了就删除掉。然后从 pos 位置开始遍历,直到第一个等于你刚刚取出的字符为止,更新 pos 位置。最优解:最优解当时没想出来,是用单调栈。维护一个递增的单调栈,我们的目标是保留 k 个字符,也就是删除 n-k 个字符。那么如果栈顶元素大于当前遍历元素,并且还没删够 n-k 个,就出栈,当作删除了一个元素。否则的话如果删够了,不管大小关系统统入栈,因为你没法删了。最后全遍历完了,如果还没删够,那就继续出栈,直到删够为止。最后把栈里的字符拼接成一个字符串就是答案了。时间复杂度是?的。代码#include <bits/stdc++.h>using namespace std;
string f(string s, int k) {
int n = s.size();
map<char, int> mp;
for (int i = 0; i <= n-k; ++i) {
mp[s[i]]++;
} string res = "";
int pos = 0;
for (int i = k; i >= 1; --i) {
char c = mp.begin()->first;
res += c;
for (int j = pos; j <= n-i; ++j) {
mp[s[j]]--;
if (!mp[s[j]]) mp.erase(s[j]);
if (s[j] == c)
break;
mp[s[n-i+1]]++;
} return res;}
int main() {
string s;
int k;
cin >> s >> k;
cout << f(s, k) << endl;}最优解:#include <bits/stdc++.h>using namespace std;
string f(string s, int k) { int n = s.size();
k = n - k; stack<char> st;
for (int i = 0; i < n; ++i) {
while (!st.empty() && st.top() > s[i]
&& k) {
st.pop();
k--;
} st.push(s[i]); }
string res = ""; while (!st.empty()
)
{
if (k) k--;
else res += st.top();
st.pop(); }
reverse(res.begin(), res.end()
);
return res;}
int main() {
string s;
int k;
cin >> s >> k;
cout << f(s, k) <<
endl;
}作者简介:godweiyang,知乎同名,华东师范大学计算机系硕士在读,方向自然语言处理与深度学习。喜欢与人分享技术与知识,期待与你的进一步交流~
【每日算法Day 108】一道简单的二叉树题目,写法还是挺多的。
题目链接LeetCode 199. 二叉树的右视图[1]题目描述给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例1输入:[1,2,3,null,5,null,4]输出:[1,3,4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---题解dfsdfs 的思路就是直接递归求解左右子树各自能看到的右视图是什么,然后判断两个视图长度。如果右子树右视图长度大于等于左子树右视图长度,那左子树完全被挡住。不用管左子树了,直接返回根结点加上右子树右视图就行了。否则的话,左子树中超出右子树深度的部分不会被挡住,也会被看到,所以得拼接在右子树右视图后面。bfsbfs 的思路就是层次遍历了。对二叉树的每一层,只取最后一个结点就行了。bfs 的话就得用一个队列来维护结点值了,那么怎么知道哪些结点是同一层的呢?最初的想法是用一个 pair 再保存一个深度值,但是这样有点多余了。我们只需要每次队列中只保存同一层的结点,然后记录下队列大小。然后依次出队,直到出队个数达到之前记录的大小。并且同时将所有的下一层结点入队。这样就能保证这一层的结点全部出队之后,队列中只剩下了下一层的结点。代码dfs(c++)class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
if (!root) return {};
vector<int> left = rightSideView(root->left);
vector<int> right = rightSideView(root->right);
vector<int> res = {root->val};
for (auto x : right) res.push_back(x);
for (int i = right.size(), sz = left.size(); i < sz; ++i) {
res.push_back(left[i]);
}
return res;
}
};bfs(c++)class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector<int> res;
queue<TreeNode*> Q;
if (root) Q.push(root);
while (!Q.empty()) {
int sz = Q.size();
while (sz--) {
TreeNode* node = Q.front();
Q.pop();
if (!sz) res.push_back(node->val);
if (node->left) Q.push(node->left);
if (node->right) Q.push(node->right);
}
}
return res;
}
};参考资料[1]LeetCode 199. 二叉树的右视图: https://leetcode-cn.com/problems/binary-tree-right-side-view/作者简介:godweiyang,知乎同名,华东师范大学计算机系硕士在读,方向自然语言处理与深度学习。喜欢与人分享技术与知识,期待与你的进一步交流~