模型管理和语音合成方法、装置和系统及存储介质
技术领域
本发明涉及语音技术领域,更具体地涉及一种模型管理方法、装置和系统以及存储介质与一种语音合成方法、装置和系统以及存储介质。
背景技术
语音技术,例如语音识别、语音合成等,在最近几年蓬勃发展。语音合成技术是一种将文字信息转化为声音信息的技术。语音合成技术可以为广大用户及第三方应用提供语音合成服务。语音合成系统能够合成发音流畅、情感丰富、音质逼真的语音,合成效果越来越好,使用也越来越普及。
目前大部分语音合成服务,都是由服务提供方提供一个固定的发音人模型列表,例如“标准合成-女声-娇娇”、“特色合成-星仔”等。这些发音人模型是由服务提供方事先采集好发音人的声音,通过算法训练产生的对应发音人模型。
现有的语音合成服务所提供的发音人模型数量都是事先确定的,在用户使用时根据需求选择对应的发音人模型。也就是说,现有的技术方案,在发音人模型的使用上存在一定限制,即不能动态实时地调整语音合成服务所提供的发音人模型,从而限制系统应用海量发音人模型的需求场景。
发明内容
考虑到上述问题而提出了本发明。本发明提供了一种模型管理方法、装置和系统以及存储介质与一种语音合成方法、装置和系统以及存储介质。
根据本发明一方面,提供了一种模型管理方法,包括:接收当前用户的身份信息;基于身份信息进行身份鉴权,以确定当前用户是否是合法用户;在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型,其中,目标对象是与当前用户相对应的授权对象集合中的授权对象之一;在未查找到目标对象的声学模型的情况下,将目标对象的声学模型加载到引擎模块中。
示例性地,授权对象集合仅包括当前用户。
示例性地,在在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型之前,模型管理方法还包括:在当前用户是合法用户的情况下,基于目标对象的标识信息在模型存储中心查找目标对象的声学模型,并获得与目标对象的声学模型在模型存储中心的存储地址相关的中心地址信息;将目标对象的声学模型加载到引擎模块中包括:基于中心地址信息将目标对象的声学模型从模型存储中心加载到引擎模块中。
示例性地,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型包括:在接收到用于指示查找目标对象的声学模型的触发信息时,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型;其中,触发信息包括以下信息之一:关于预定操作执行的信息、模型查询请求信息、关于当前用户鉴权成功的鉴权信息。
示例性地,模型查询请求信息包括由当前用户输入的第一查询请求信息或周期性生成的第二查询请求信息。
示例性地,引擎模块包括一个或多个引擎,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型包括:向一个或多个引擎发起询问;接收一个或多个引擎分别返回的一个或多个响应结果,每个响应结果包括关于对应引擎是否已加载目标对象的声学模型的信息;根据一个或多个响应结果确定一个或多个引擎是否已加载目标对象的声学模型。
示例性地,一个或多个响应结果中的每个响应结果还包括对应引擎的槽位余量信息,将目标对象的声学模型加载到引擎模块中包括:根据一个或多个响应结果,从一个或多个引擎中选择具有空槽位的特定引擎;从特定引擎中选择特定空槽位;以及将目标对象的声学模型加载到特定空槽位。
示例性地,根据一个或多个响应结果从一个或多个引擎中选择具有空槽位的特定引擎包括:根据一个或多个响应结果,从一个或多个引擎中具有空槽位的引擎中随机选择任一引擎作为特定引擎;或者,根据一个或多个响应结果,从一个或多个引擎中选择槽位余量最大的引擎之一作为特定引擎。
示例性地,一个或多个响应结果中的每个响应结果还包括对应引擎的槽位余量信息,将目标对象的声学模型加载到引擎模块中包括:如果根据一个或多个响应结果确定一个或多个引擎均没有空槽位,则从一个或多个引擎的所有槽位中选择特定引擎的特定槽位;卸载特定槽位上的声学模型;将目标对象的声学模型加载到特定槽位。
示例性地,从一个或多个引擎的所有槽位中选择特定引擎的特定槽位包括:从一个或多个引擎中随机选择任一引擎作为特定引擎;和/或,从特定引擎的所有槽位中随机选择任一槽位作为特定槽位,或者,从特定引擎中选择最近最少使用的声学模型所在的槽位作为特定槽位。
示例性地,从一个或多个引擎的所有槽位中选择特定引擎的特定槽位包括:从一个或多个引擎的所有槽位中选择特定声学模型所在的槽位作为特定槽位,其中,特定声学模型是一个或多个引擎加载的所有声学模型中的最近最少使用的声学模型,特定引擎是特定声学模型所在的引擎。
示例性地,一个或多个响应结果中的每个响应结果还包括对应引擎加载的最近最少使用的声学模型所属对象的标识信息以及对应引擎加载的最近最少使用的声学模型的最近使用时间戳,或者,一个或多个响应结果中的每个响应结果还包括对应引擎加载的所有声学模型所属对象的标识信息以及对应引擎加载的所有声学模型的最近使用时间戳。
示例性地,模型管理方法还包括:定期检查引擎模块所加载的声学模型中达到过期时间点的声学模型;如果存在达到过期时间点的声学模型,则卸载该声学模型。
示例性地,引擎模块包括一个或多个引擎,一个或多个引擎设置有各自的定时器,定期检查引擎模块所加载的达到过期时间的声学模型包括:对于一个或多个引擎中的每个引擎,由该引擎对应的定时器定期检查该引擎所加载的声学模型中达到过期时间点的声学模型。
示例性地,引擎模块包括一个或多个引擎,一个或多个引擎分别维护各自的最近最少使用队列,最近最少使用队列包括对应引擎加载的所有声学模型的模型信息,模型信息包括声学模型所属对象的标识信息、声学模型的过期时间、声学模型的最近使用时间戳。
示例性地,模型管理方法还包括:每次加载或卸载任一声学模型时,更新该声学模型所在的引擎所维护的最近最少使用队列。
示例性地,引擎模块包括一个或多个引擎,模型管理方法还包括:判断一个或多个引擎的总槽位余量是否达到槽位阈值;以及如果总槽位余量达到槽位阈值,则在引擎模块中添加新的引擎。
示例性地,引擎模块包括一个或多个引擎,模型管理方法还包括:当从引擎模块中删除任一引擎时,将该引擎加载的声学模型均匀分配或通过负载均衡方式分配到引擎模块中的其他引擎。
示例性地,在在未查找到目标对象的声学模型的情况下,将目标对象的声学模型加载到引擎模块中之后,模型管理方法还包括:将目标对象的声学模型在引擎模块中的引擎地址信息与目标对象的标识信息结合,以获得目标对象的模型加载信息;以及将目标对象的模型加载信息存储在第一缓存中。
示例性地,模型管理方法还包括:当从引擎模块中卸载任一声学模型时,将第一缓存中存储的与该声学模型对应的模型加载信息删除。
示例性地,模型管理方法还包括:当接收到与任一对象的声学模型相关的就绪检查请求时,检查第一缓存中是否存在该对象的模型加载信息,如果存在,则确定模型就绪,否则确定模型未就绪。
示例性地,在当接收到与任一对象的声学模型相关的就绪检查请求时,检查第一缓存中是否存在该对象的模型加载信息之后,模型管理方法还包括:输出关于模型是否就绪的报告信息。
示例性地,在在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型之后,模型管理方法还包括:在查找到目标对象的声学模型的情况下,记录日志,其中,日志包括关于当前用户的在线时间的用户在线信息。
示例性地,接收当前用户的身份信息、基于身份信息进行身份鉴权,以确定当前用户是否是合法用户的操作由账号系统执行,在在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型之前,模型管理方法还包括:在当前用户是合法用户的情况下,由消息发布模块自账号系统接收当前用户的鉴权信息,并向消息中间件发布用于指示在引擎模块中查找目标对象的声学模型的引擎查找信息,其中,鉴权信息和引擎查找信息各自包括目标对象的标识信息;由模型加载/卸载驱动服务模块自消息中间件消费引擎查找信息;其中,在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型的操作由模型加载/卸载驱动服务模块响应于引擎查找信息的接收而执行,并且在未查找到目标对象的声学模型的情况下,将目标对象的声学模型加载到引擎模块中的操作由模型加载/卸载驱动服务模块执行。
示例性地,在在当前用户是合法用户的情况下,由消息发布模块自账号系统接收当前用户的鉴权信息之后,模型管理方法还包括:由消息发布模块将鉴权信息中的目标对象的标识信息与中心地址信息封装在一起,以获得引擎查找信息。
根据本发明另一方面,提供了一种语音合成方法,包括上述模型管理方法,其中,语音合成方法还包括:接收语音合成请求信息,其中,语音合成请求信息包括待合成文本;利用引擎模块基于待合成文本以及目标对象的声学模型进行语音合成。
示例性地,在利用引擎模块基于待合成文本以及目标对象的声学模型进行语音合成之前,语音合成方法还包括:基于目标对象的标识信息查询第一缓存中是否存在目标对象的模型加载信息;其中,利用引擎模块基于待合成文本以及目标对象的声学模型进行语音合成的操作在查询到目标对象的模型加载信息的情况下执行。
示例性地,利用引擎模块基于待合成文本以及目标对象的声学模型进行语音合成包括:从目标对象的模型加载信息中提取目标对象的引擎地址信息;基于目标对象的引擎地址信息调用目标对象的声学模型所在的引擎;利用调用的引擎基于待合成文本以及目标对象的声学模型进行语音合成。
示例性地,在利用引擎模块基于待合成文本以及目标对象的声学模型进行语音合成之后,语音合成方法还包括:将与目标对象相对应的语音合成结果存储在第二缓存中。
根据本发明另一方面,提供了一种模型管理装置,包括:第一接收模块,用于接收当前用户的身份信息;鉴权模块,用于基于身份信息进行身份鉴权,以确定当前用户是否是合法用户;查找模块,用于在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型,其中,目标对象是与当前用户相对应的授权对象集合中的授权对象之一;加载模块,用于在未查找到目标对象的声学模型的情况下,将目标对象的声学模型加载到引擎模块中。
根据本发明另一方面,提供了一种语音合成装置,包括上述模型管理装置,其中,语音合成装置还包括:第二接收模块,用于接收语音合成请求信息,其中,语音合成请求信息包括待合成文本;合成模块,用于利用引擎模块基于待合成文本以及目标对象的声学模型进行语音合成。
根据本发明另一方面,提供了一种模型管理系统,包括处理器和存储器,其中,所述存储器中存储有计算机程序指令,所述计算机程序指令被所述处理器运行时用于执行上述模型管理方法。
根据本发明另一方面,提供了一种语音合成系统,包括处理器和存储器,其中,所述存储器中存储有计算机程序指令,所述计算机程序指令被所述处理器运行时用于执行上述语音合成方法。
根据本发明另一方面,提供了一种存储介质,在所述存储介质上存储了程序指令,所述程序指令在运行时用于执行上述模型管理方法。
根据本发明另一方面,提供了一种存储介质,在所述存储介质上存储了程序指令,所述程序指令在运行时用于执行上述语音合成方法。
根据本发明实施例的模型管理方法、装置和系统以及存储介质与语音合成方法、装置和系统以及存储介质,在引擎模块中不存在用户需要的声学模型的情况下,可以自动将该声学模型加载到引擎模块。这种方案可以实现声学模型的动态加载,使得相关语音技术,例如语音合成技术,不再局限于固定的声学模型,这样可以为用户提供极大的自由度。同时,由于这种方法对声学模型的动态加载是自动化、智能化的,无需用户介入,因此可以减少用户操作,这有利于提高语音系统的工作效率,减少出错,同时可以有效地提升用户体验。上述方案可以很好地满足超大规模、超多发音人场景下的语音处理需求。
附图说明
通过结合附图对本发明实施例进行更详细的描述,本发明的上述以及其它目的、特征和优势将变得更加明显。附图用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与本发明实施例一起用于解释本发明,并不构成对本发明的限制。在附图中,相同的参考标号通常代表相同部件或步骤。
图1示出根据本发明一个实施例的模型管理方法的示意性流程图;
图2示出根据本发明一个实施例的语音合成系统的工作流程的示意图;
图3示出根据本发明一个实施例的语音合成方法的示意性流程图;
图4示出了根据本发明一个实施例的模型管理装置的示意性框图;
图5示出了根据本发明一个实施例的语音合成装置的示意性框图;
图6示出了根据本发明一个实施例的模型管理系统的示意性框图;以及
图7示出了根据本发明一个实施例的语音合成系统的示意性框图。
具体实施方式
为了使得本发明的目的、技术方案和优点更为明显,下面将参照附图详细描述根据本发明的示例实施例。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是本发明的全部实施例,应理解,本发明不受这里描述的示例实施例的限制。基于本发明中描述的本发明实施例,本领域技术人员在没有付出创造性劳动的情况下所得到的所有其它实施例都应落入本发明的保护范围之内。
为了至少部分地解决上述问题,本发明实施例提供了一种模型管理方法、装置和系统以及存储介质与一种语音合成方法、装置和系统以及存储介质。根据本发明实施例的模型管理方法和语音合成方法,当用户需要的声学模型不存在时,可以将该声学模型自动加载到引擎模块中。因此,上述方法可以实现对声学模型的自动化、智能化的动态加载(或说动态更新),无需用户介入,这种方案能够更好地支持超多发音人的语音服务(例如语音合成服务或语音识别服务),可以很好地满足超大规模、超多发音人场景下的语音处理需求,可以有效地提升用户体验。上述模型管理技术和语音合成技术具有极大的应用价值和广阔的市场前景。
根据本发明实施例的模型管理方法和语音合成方法可以在任意具有数据处理能力和/或指令执行能力的设备上实现,诸如个人计算机或远程服务器等。模型管理方法或语音合成方法实现于其上的设备可以称为语音设备,该设备可以用于实现与语音相关的各种处理。示例性地,语音设备可以是服务器集群。本文描述的语音合成技术可以称为文本到语音(Text To Speech,简称为TTS)技术。
虽然上文结合语音合成技术描述了本领域的技术问题,然而,应理解的是,本文描述的模型管理方法可以不仅仅应用于语音合成过程,其也可以应用于语音合成系统的其他合适流程中,例如,用于声学模型的检索过程、更新过程等。此外,本文描述的模型管理方法也可以不仅仅应用于语音合成系统,其可以应用于其他合适的方向,例如,用于语音识别系统等。本文描述的模型管理方法至少可以适用于语音识别系统的声学模型的检索过程和/或更新过程。
为了描述方便,下文主要以模型管理方法应用于语音合成系统的语音合成过程为例描述根据本发明实施例的模型管理方法,可以理解的是,这仅是示例而非对本发明的限制。本领域技术人员可以根据本文的描述理解模型管理方法用于其他流程或者其他方向时的实现方式。
下面,将参考图1和图2描述根据本发明实施例的模型管理方法。图1示出根据本发明一个实施例的模型管理方法100的示意性流程图。图2示出根据本发明一个实施例的语音合成系统的工作流程的示意图。需注意,图2所示的语音合成系统所包括的各种模块,如账号系统、消息发布模块、引擎模块等是程序模块。语音合成系统所包括的各种模块可以在同一硬件上实现,也可以在不同的多个硬件上分布式实现。
如图1所示,模型管理方法100包括以下步骤S110、S120、S130和S140。
在步骤S110,接收当前用户的身份信息。
如图2所示,语音合成系统可以包括账号系统。账号系统可以用于对用户进行身份鉴权,例如步骤S110-S120可以由账号系统执行。账号系统够可以自客户端接收当前用户的身份信息。可选地,账号系统可以自消息发布模块接收当前用户的身份信息。
账号系统可以提供用户注册/登录接口,引导用户注册/登录。
当前用户是指当前想要注册/登录语音合成系统,以使用语音合成系统的服务的用户。用户的身份信息可以是任何用于识别用户身份的信息,例如,当前用户的身份信息可以包括当前用户的标识信息(ID)和密码。标识信息可以是当前用户的姓名、昵称、微信号、手机号等等。密码可以是用户设置密码、手机验证码等等。本发明可以采用任何现有的或将来可能出现的身份鉴权方式实现对用户的身份鉴权,本文不做赘述。
本文所述的用户可以是任意人员,包括但不限于使用语音服务的消费者、开发语音服务的技术人员等等。
在步骤S120,基于身份信息进行身份鉴权,以确定当前用户是否是合法用户。
合法用户是指有资格使用语音合成系统的服务的用户。示例性地,对语音合成系统的服务的使用资格可以通过合法注册获取。
如上所述,账号系统可以对用户进行身份鉴权。如果确定当前用户是合法用户,即鉴权成功,则可以确定与当前用户相对应的授权对象集合,并执行后续步骤S130和S140。当然,在授权对象集合仅包括当前用户,目标对象是当前用户的情况下,如果鉴权成功,可以无需确定授权对象集合,而直接执行后续步骤S130和S140。如果确定当前用户不是合法用户,即鉴权失败,则可以输出鉴权失败信息,以提示当前用户鉴权失败。
示例性地,在确定当前用户是合法用户之后,账号系统可以为当前用户分配令牌(ticket),客户端应用(app)可以基于令牌向语音合成系统中的某一服务模块发出请求,请求使用相应的功能。收到请求的服务模块可以将客户端app提供的令牌发送给账号系统,由账号系统进行验证,验证通过则客户端app可以使用该服务模块的功能。
在步骤S130,在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型,其中,目标对象是与当前用户相对应的授权对象集合中的授权对象之一。
本文所述的对象可以是任何合适的物体,包括但不限于人、动物、虚拟对象等。示例性地,在对象为人的情况下,可以将对象称为发音人。
虚拟对象是指虚构的、非真实存在的人或物,例如,用户通过声音编辑软件模拟的对象。例如,用户通过声音编辑软件合成了一个机械音声学模型,该机械音声学模型可以视为与一个虚拟对象相对应。根据本发明实施例,允许同一人拥有多个声学模型,每个声学模型具有唯一的标识信息,此时,认为这多个声学模型分别与多个不同对象相对应。也就是说,虽然多个不同声学模型可能来自同一人,但是为了区分,将该多个不同声学模型所属对象视为多个不同对象。
授权对象是指当前用户有权限使用其声学模型的对象。授权对象集合是包括一个或多个授权对象的集合。示例性而非限制性地,授权对象集合可以至少包括当前用户,即当前用户可以使用自己的声学模型进行语音合成等操作。示例性地,授权对象集合可以包括除当前用户以外的其他对象。
示例性地,授权对象集合可以包括当前用户以外的一个或多个附加用户,每个附加用户授权当前用户使用该附加用户的声学模型。例如,语音合成系统的用户X授权用户Y使用用户X的声学模型,则用户Y所对应的授权对象集合可以包括用户Y自己以及用户X。
示例性地,授权对象集合可以包括公用对象。例如,语音合成系统可以提供一个或多个公用对象的声学模型,语音合成系统的任一用户均可以使用这些公用对象的声学模型进行语音合成等操作,即语音合成系统的任一用户所对应的授权对象集合均可以包括上述一个或多个公用对象。
采用授权对象集合限定用户可以使用的声学模型,可以避免某一用户随意使用语音合成系统的声学模型,这样可以有效保护其他用户的隐私,防止不法分子伪造他人声音做出非法行为。
示例性地,声学模型可以是用于基于文本信息获得对应的语音数据或者语音数据的语音参数的模型,其例如是神经网络模型。如上所述,声学模型可以通过训练获得。本领域技术人员可以理解声学模型的训练方式及其作用,本文不做赘述。需注意,在模型管理方法100分别应用于语音合成系统和语音识别系统时,虽然两种系统所采用的声学模型具有不同的作用,但是模型管理方法100的流程是通用的。
示例性地,在步骤S130之前,模型管理方法100还可以包括:在当前用户是合法用户的情况下,接收当前用户输入的用于指示目标对象的对象指示信息,以确定目标对象。
例如,可以向当前用户提供与当前用户所对应的授权对象集合中的每个授权对象相对应的选项,根据用户对任一选项的选择指令确定相对应的目标对象。
例如,可以通过列表控件的形式在用户一端(例如客户端)的显示器上显示若干条目,每个条目为用户所对应的授权对象集合中的一个授权对象的标识信息,用户可以从中选择需要的对象作为目标对象。
在步骤S140,在未查找到目标对象的声学模型的情况下,将目标对象的声学模型加载到引擎模块中。
如图2所示,语音合成系统可以包括一个或多个引擎。图2示出四个引擎,即引擎A、引擎B、引擎C、引擎D。本文将所有引擎组成的模块称为引擎模块。需注意,本文所述的每个引擎本身可以是程序模块。引擎模块包括的所有引擎可以在同一硬件(例如同一服务器)上实现,也可以在不同硬件上分布式实现。在语音合成系统中,引擎模块或说引擎可以是用于实现语音合成,即提供文字转语音功能的程序模块。引擎模块或每个引擎可以支持一定数量内的声学模型的加载和卸载。
示例性地,每个引擎可以具有对应的声学模型池,用于存储该引擎加载的声学模型。示例性地,模型管理方法实现于其上的语音设备,例如上述服务器集群,可以具有第一预设存储器(可以称为池存储器),该存储器可以是例如内存。每个引擎的声学模型池占用池存储器的至少部分存储空间。示例性地,每个引擎的声学模型池(或说每个引擎)可以具有预设数目的槽位,每个槽位可以用于存储一个声学模型。示例性而非限制性地,预设数目可以是固定的数目,例如100个。示例性而非限制性地,任一引擎的槽位的大小可以是固定的,即不同槽位存储的声学模型的数据大小是一致的。示例性而非限制性地,任一引擎池中的槽位数目(即预设数目)和/或每个槽位的大小可以根据语音设备的内存大小配置。
本文所述的声学模型可以具有各自的标识信息。在本文的描述中,任一对象的标识信息可以理解为是该对象的声学模型的标识信息,即目标对象的标识信息也就是目标对象的声学模型的标识信息。
任一声学模型可以与其标识信息一起存储在某一引擎的声学模型池中,即将该声学模型加载到该引擎。示例性地,声学模型的标识信息可以包括以下一项或多项:声学模型所对应的名称、声学模型所对应的编号、声学模型所对应的类别。所述名称可以是声学模型所属对象的姓名,诸如“小丽”、“小明”等。所述编号可以是诸如“001”、“002”之类的编号。所述类别可以是诸如“低沉男音”、“情感女音”、“普通话”、“粤语”之类的类别。
在当前用户是合法用户的情况下,可以在引擎模块中查找目标对象的声学模型是否存在,即是否已加载。如果存在,可以执行后续操作,例如基于目标对象的声学模型进行语音合成等。如果不存在,可以将目标对象的声学模型从其原始的存储地址(例如下述模型存储中心)加载到某一引擎的声学模型池中,这一过程可以称为动态加载或动态更新。
目标对象的声学模型的加载方式可以是任意的,几种示例性加载方式将在下文描述。
根据本发明实施例的模型管理方法,在引擎模块中不存在用户需要的声学模型的情况下,可以自动将该声学模型加载到引擎模块。这种方案可以实现声学模型的动态加载,使得相关语音技术,例如语音合成技术,不再局限于固定的声学模型。也就是说,当用户使用诸如语音合成的服务时,不用再受语音系统(语音合成系统或语音识别系统)提供的简单几个声学模型的限制,而是可以自由选择声学模型,这样可以为用户提供极大的自由度。同时,由于这种方法对声学模型的动态加载是自动化、智能化的,无需用户介入,因此可以减少用户操作,这有利于提高语音系统的工作效率,减少出错,同时可以有效地提升用户体验。
此外,随着语音技术的发展,对大规模多发音人的语音系统的需求越来越强烈。例如,在儿童伴读、有声读物等应用场景中,用户可能希望定制自己的个性化发音人模型,使用自己的声音进行语音合成。如果一款TTS产品,每个用户都用自己的音色进行语音合成,那么每个用户都会有一个声学模型,声学模型的数量将非常大,可能会是几十万上百万级别,现有技术无法满足这种场景。而由于上述动态加载技术,采用上述模型管理方法的语音系统可以支持超多发音人的语音服务,可以很好地满足超大规模、超多发音人场景下的语音处理需。
由于以上优点,根据本发明实施例的模型管理方法具有极大的应用价值和广阔的市场前景。
根据本发明实施例,授权对象集合可以仅包括当前用户,即目标对象是当前用户。
在本实施例中,可以无需确定与当前用户相对应的授权对象集合,也无需由当前用户指定目标对象,在当前用户鉴权成功之后,可以默认查找当前用户的声学模型,如果引擎模块中不存在当前用户的声学模型,则将当前用户的声学模型加载到引擎模块中。限制当前用户仅具有自己的声学模型的使用权限,可以较严格地保护其他用户的隐私。
示例性地,上述步骤S130和步骤S140可以是仅在用户在线期间执行的。用户在线是指用户在语音合成系统上保持登录状态。在第一个实施例中,可以在当前用户鉴权成功之后,查找一次目标对象的声学模型。在第二个实施例中,可以在用户在线期间,周期性地查找目标对象的声学模型。上述第一个实施例和第二个实施例可以同时实现。
在目标对象是当前用户的情况下,采用上述第一个实施例和/或第二个实施例的技术方案,可以有效保证活跃用户的声学模型能够保持加载状态而不会被淘汰,而对于一些不活跃的、长时间不上线的用户的声学模型则可能被引擎淘汰。
根据本发明实施例,在在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型(步骤S130)之前,模型管理方法100还可以包括:在当前用户是合法用户的情况下,基于目标对象的标识信息在模型存储中心查找目标对象的声学模型,并获得与目标对象的声学模型在模型存储中心的存储地址相关的中心地址信息;将目标对象的声学模型加载到引擎模块中可以包括:基于中心地址信息将目标对象的声学模型从模型存储中心加载到引擎模块中。
目标对象的声学模型的原始存储空间(即模型存储中心)与各个引擎的声学模型池所在的存储空间不同。例如,模型存储中心所对应的存储器可以是非易失性存储器,引擎的声学模型池所对应的存储器可以是易失性存储器。模型存储中心的存储容量可以远大于引擎的声学模型池的存储容量,例如前者可以是后者的成千上万倍,例如一万倍、十万倍等。
示例性地,模型管理方法100实现于其上的语音设备,例如上述服务器集群,可以具有第二预设存储器,即模型存储中心所在的存储器,该存储器可以是例如硬盘。参考图2,示出了模型存储中心。模型存储中心可以用于存储声学模型的原始文件,并且其可以提供上传/下载接口。语音合成系统的训练模块或其他外部设备可以经由上传/下载接口向模型存储中心上传声学模型,将该声学模型存储在模型存储中心,方便语音系统调用。消息发布模块可以经由上传/下载接口获取声学模型的地址信息,模型加载/卸载驱动服务模块可以经由上传/下载接口获取需要的声学模型。模型存储中心可以具有较大的存储容量,以能够存储例如百万级别的声学模型。中心地址信息可以是任意合适的能够指示目标声学模型在模型存储中心的存储地址的信息。例如,中心地址信息可以是指向目标声学模型在模型存储中心的存储地址的路径信息或链接信息。
目标对象的声学模型的来源并不局限于本文描述的模型存储中心,其可以是来自例如互联网,即,语音系统可以通过互联网端口从互联网上下载目标对象的声学模型,并将其加载到引擎模块中。
如图2所示,语音合成系统可以包括消息发布模块(示出为消息发布)以及消息中间件。在账号系统对当前用户进行身份鉴权,确定其为合法用户之后,可以向消息发布模块发送关于当前用户鉴权成功的鉴权信息。鉴权信息可以包括当前用户的标识信息。可选地,鉴权信息还可以包括用于指示当前用户是合法用户的用户合法信息。
示例性地,消息发布模块接收到鉴权信息之后,可以从模型存储中心查找目标对象的声学模型并获得对应的中心地址信息。随后,消息发布模块可以将中心地址信息与目标对象的标识信息封装在一起,并将封装后的信息发布到消息中间件。
目标对象是当前用户以外的其他对象的情况下,在从模型存储中心查找目标对象的声学模型之前,消息发布模块还可以首先接收当前用户关于目标对象的选择指令,以确定目标对象。
示例性地,如果消息发布模块从模型存储中心未查找到目标对象的声学模型,则可以输出错误提示信息,例如,通过当前用户所使用的客户端的显示器和/或扬声器等提示当前用户无法找到目标对象的声学模型。
示例性地,消息中间件可以提供消息发布-订阅能力,即接收消息发布模块发布的信息,例如用于指示在引擎模块中查找目标对象的声学模型的引擎查找信息,并向消息订阅者发布信息,例如所述引擎查找信息。示例性地,引擎查找信息可以包括目标对象的标识信息和目标对象的声学模型的中心地址信息。
如图2所示,语音合成系统还可以包括模型加载/卸载驱动服务模块(示出为模型加载/卸载驱动服务),用于驱动引擎模块进行声学模型的加载和/或卸载。例如,当消息发布模块接收到触发信息时,可以经由消息中间件向模型加载/卸载驱动服务模块发布引擎查找信息,指示模型加载/卸载驱动服务模块加载目标对象的声学模型。
根据本发明实施例,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型可以包括:在接收到用于指示查找目标对象的声学模型的触发信息时,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型;其中,触发信息可以包括以下信息之一:关于预定操作执行的信息、模型查询请求信息、关于当前用户鉴权成功的鉴权信息。
语音合成系统可以监听用户是否上线和/或是否使用预定功能,当监听到当前用户上线和/或使用预定功能时,可以触发对目标对象的声学模型的查找以及必要时的加载等操作。预定功能可以是例如语音合成功能、模型查询功能等。
在一个实施例中,触发信息可以包括关于当前用户鉴权成功的鉴权信息。例如,在当前用户的身份鉴权成功的情况下,账号系统可以向消息发布模块发送鉴权信息,以通知消息发布模块当前用户是合法用户。如上所述,鉴权信息可以包括当前用户的标识信息和用户合法信息。随后,消息发布模块可以经由消息中间件通知模型加载/卸载服务驱动模块查找目标对象的声学模型。也就是说,触发信息可以是鉴权信息,一旦当前用户鉴权成功,即触发对声学模型的查找、加载等操作。在目标对象是当前用户的情况下,采用上述方案意味着,语音合成系统可以在当前用户上线之后自动查找该用户的声学模型是否已加载,如果没有加载则自动加载。
在另一个实施例中,触发信息可以包括关于预定操作执行的信息。示例性地,语音合成系统可以监听用户在客户端的操作,当监听到用户执行预定操作时,可以触发声学模型的查找、加载等操作。预定操作可以是关于语音合成系统的任意合适的操作,其可以根据需要设定。示例性地,预定操作可以是当前用户打开客户端所提供的语音合成界面的操作、或者用户启动语音合成功能的操作等。
在又一个实施例中,触发信息可以包括模型查询请求信息。当用户指示或系统自动查询声学模型的加载情况时,可以触发声学模型的查找、加载等操作。
需注意,在语音合成系统的工作流程中,上述三种实施例有可能发生一种或多种。例如,在当前用户在线期间,可以仅在当前用户上线之后查找一次目标对象的声学模型,其他时间不再查找该声学模型。又例如,在当前用户在线期间,可以在当前用户上线之后查找一次目标对象的声学模型,并在接收到语音合成请求信息时查找一次目标对象的声学模型,其他时间不再查找该声学模型。又例如,在当前用户在线期间,可以在当前用户上线之后查找一次目标对象的声学模型,在接收到语音合成请求信息时查找一次目标对象的声学模型,在每次接收到模型查询请求信息时也查找一次目标对象的声学模型。上述组合方式仅是示例而非对本发明的限制,其他的实施例组合方式也是可行的。
根据本发明一个实施例,模型查询请求信息可以包括由当前用户输入的第一查询请求信息。当前用户可以随时指示语音合成系统查询引擎模块是否已加载目标对象的声学模型。
根据本发明另一个实施例,模型查询请求信息可以包括周期性生成的第二查询请求信息。在当前用户在线期间,语音合成系统可以周期性地生成第二查询请求信息,指示语音合成系统查询引擎模块是否已加载目标对象的声学模型。在目标对象是当前用户的情况下,采用上述实施例意味着,语音合成系统可以自动地、周期性地查询引擎模块是否已加载当前用户的声学模型,在没加载的情况下可以自动加载该声学模型。因此,采用这种方案,可以使得当前用户在线期间,始终保持当前用户的声学模型处于被加载状态,且在采用下文将描述的最近最少使用策略淘汰声学模型的情况下,可以始终保持当前用户的声学模型处于队列前列,即保持当前用户的声学模型不被淘汰。这样,可以有效保证活跃用户的声学模型不被淘汰,可以随时调用,而非活跃用户的声学模型会被优先淘汰。
类似地,上述第一查询请求信息和第二查询请求信息的两种实施例可以择一实现,也可以并存地实现。
根据本发明实施例,引擎模块包括一个或多个引擎,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型可以包括:向一个或多个引擎发起询问;接收一个或多个引擎分别返回的一个或多个响应结果,每个响应结果包括关于对应引擎是否已加载目标对象的声学模型的信息;根据一个或多个响应结果确定一个或多个引擎是否已加载目标对象的声学模型。
本实施例中的询问是关于引擎模块是否已加载目标对象的声学模型的询问(可以称为第一询问),接收到的一个或多个响应结果可以称为一个或多个第一响应结果。
模型加载/卸载驱动服务模块在接收到消息队列发布的引擎查找信息时,可以首先向下游的引擎模块(例如图2中的引擎A、B、C、D)发起询问,各引擎收到上游的询问请求,可以将关于是否已加载目标对象的声学模型的信息、槽位余量信息、引擎中的最近最少被使用声学模型所属对象的标识信息等信息中的一项或多项作为响应结果返回给模型加载/卸载驱动服务模块。
目标对象的声学模型的加载方式可以是任意的,下面描述几种示例性加载方式。在一个示例中,如果一个或多个引擎存在空槽位,则可以将目标对象的声学模型优先加载到空槽位。可选地,在空槽位存在的情况下,也可以根据需要将目标对象的声学模型加载到非空槽位。在另一个示例中,如果一个或多个引擎均没有空槽位,则可以根据预设的淘汰规则淘汰某些声学模型,以空出槽位。
需注意,本文描述的将目标对象的声学模型加载到引擎模块中的步骤并不排除对声学模型的数据形式的适当转变。例如,目标对象的声学模型存储在模型存储中心中时可能具有预定的数据格式,在将其从模型存储中心加载到引擎模块中时,可以对声学模型的数据格式进行一定转变,以使其符合池存储器的存储要求。
下面,首先描述存在空槽位的情况下的模型加载方式。
根据本发明实施例,一个或多个响应结果中的每个响应结果还包括对应引擎的槽位余量信息,将目标对象的声学模型加载到引擎模块中可以包括:根据一个或多个响应结果,从一个或多个引擎中选择具有空槽位的特定引擎;从特定引擎中选择特定空槽位;以及将目标对象的声学模型加载到特定空槽位。
示例性地,槽位余量信息可以包括以下一项或多项:对应引擎的每个槽位的标识信息以及用于指示每个槽位是否空闲的空闲状态信息;对应引擎的空槽位的标识信息;对应引擎的空槽位的数量信息。
当仅有一个引擎具有空槽位时,可以直接将该引擎作为特定引擎。当多于一个引擎具有空槽位时,可以按照预设的引擎选择规则(第一引擎选择规则)选择其中之一作为特定引擎。第一引擎选择规则可以是任何合适的规则,其可以根据需要设定。
在一个示例中,根据一个或多个响应结果从一个或多个引擎中选择具有空槽位的特定引擎可以包括:根据一个或多个响应结果,从一个或多个引擎中具有空槽位的引擎中随机选择任一引擎作为特定引擎。
模型加载/卸载驱动服务模块可以随机选择具有空槽位的引擎之一作为特定引擎,这种方案比较简单快捷,计算量小。
在另一个示例中,根据一个或多个响应结果从一个或多个引擎中选择具有空槽位的特定引擎可以包括:根据一个或多个响应结果,从一个或多个引擎中选择槽位余量最大的引擎之一作为特定引擎。
示例性地,模型加载/卸载驱动服务模块可以根据一个或多个响应结果,按照槽位余量对一个或多个引擎进行排序,并从中选择槽位余量最大的引擎。这种方案可以均衡各引擎之间的负载,协调各引擎的工作量,避免某一引擎的工作量过于集中,并且可以有效利用空闲引擎,这样可以提高引擎的工作效率。此外,当引擎模块上线(即添加)新引擎时,由于新引擎的槽位余量是最大的,因此采用本实施例的第一引擎选择规则可以将声学模型集中加载到新引擎,以尽量快速填满新引擎的槽位。
当特定引擎仅具有一个空槽位时,可以直接将该空槽位作为特定空槽位。当特定引擎具有多于一个空槽位时,可以按照预设的槽位选择规则(第一槽位选择规则)选择某一空槽位用于加载目标对象的声学模型。第一槽位选择规则可以是任何合适的规则,其可以根据需要设定。
在一个示例中,从所述特定引擎中选择特定空槽位可以包括:从特定引擎的所有空槽位中随机选择任一空槽位作为特定空槽位。
模型加载/卸载驱动服务模块可以随机选择特定引擎的任一空槽位作为特定空槽位,这种方案比较简单快捷,计算量小。
在另一个示例中,从所述特定引擎中选择特定空槽位可以包括:从特定引擎的所有空槽位中选择第一个空槽位作为特定空槽位。
引擎中的槽位可以按照预设顺序排序,例如,按照声学模型所对应的编号的大小排序。可选地,可以将目标对象的声学模型加载到特定引擎的第一个可用空槽位。
下面,将描述不存在空槽位的情况下的模型加载方式。
如上所述,在空槽位不存在的情况下,可以根据预设的淘汰规则淘汰(逐出)某些声学模型,以空出槽位。例如,可以按照最近最少使用(LRU)算法对声学模型进行动态加载。LRU算法仅是示例而非对本发明的限制,本发明可以采用任何合适的淘汰规则淘汰声学模型,例如先入先出算法等。
在一个示例中,一个或多个响应结果中的每个响应结果还可以包括对应引擎的槽位余量信息,将目标对象的声学模型加载到引擎模块中可以包括:如果根据一个或多个响应结果确定一个或多个引擎均没有空槽位,则从一个或多个引擎的所有槽位中选择特定引擎的特定槽位;卸载特定槽位上的声学模型;将目标对象的声学模型加载到特定槽位。
本实施例所述的槽位余量信息与上述实施例一致,不再赘述。在没有空槽位的情况下,可以按照预设的引擎选择规则(第二引擎选择规则)选择一个或多个引擎之一作为特定引擎。第二引擎选择规则可以是任何合适的规则,其可以根据需要设定。此外,可以按照预设的槽位选择规则(第二槽位选择规则)选择某一槽位用于加载目标对象的声学模型。类似地,第二槽位选择规则可以是任何合适的规则,其可以根据需要设定。可以理解,如果先选定槽位,则引擎也会相应确定。
从声学模型池中卸载最近最少使用的声学模型的步骤是可选的,也可以直接用目标对象的声学模型覆盖最近最少使用的声学模型,以将目标对象的声学模型加载到所述预定槽位。
在一个示例中,从一个或多个引擎的所有槽位中选择特定引擎的特定槽位可以包括:从一个或多个引擎中随机选择任一引擎作为特定引擎;和/或从特定引擎的所有槽位中随机选择任一槽位作为特定槽位,或者,从特定引擎中选择最近最少使用的声学模型所在的槽位作为特定槽位。
模型加载/卸载驱动服务模块可以随机选择具有任一引擎作为特定引擎,这种方案比较简单快捷,计算量小。选择特定引擎之后,可以进一步采用随机方式选择特定槽位,或者采用其他方式,例如LRU算法,选择特定槽位。
在另一个示例中,从一个或多个引擎的所有槽位中选择特定引擎的特定槽位可以包括:从一个或多个引擎的所有槽位中选择特定声学模型所在的槽位作为特定槽位,其中,特定声学模型是一个或多个引擎加载的所有声学模型中的最近最少使用的声学模型,特定引擎是特定声学模型所在的引擎。
在本实施例中,模型加载/卸载驱动服务模块可以首先选定特定声学模型,确定特定声学模型之后就可以确定特定声学模型所在的槽位以及相应的引擎,即特定槽位和特定引擎。
示例性地,每个引擎内部可以维护与该引擎所加载的声学模型相关的LRU队列。本领域技术人员可以理解LRU队列的实现方式,本文不做赘述。基于LRU队列可以简单快速地查找最近最少使用的声学模型。可以将该最近最少使用的声学模型卸载,以释放其槽位(即预定槽位)。随后可以将目标对象的声学模型加载到空出的槽位。这种方案可以在整个引擎模块的范围内淘汰最近最少使用的声学模型,方便统一协调和管理整个引擎模块的模型加载情况。
示例性地,引擎可以提供以下几个调用接口:
(1)、语音合成接口,用于提供文字转语音能力,该接口可以由合成前端服务模块调用;
(2)、询问接口,用于反馈上述响应结果,例如目标对象的声学模型是否加载、槽位余量信息、最近最少被使用的声学模型的信息等,该接口可以由模型加载/卸载驱动服务模块调用;
(3)、加载模型接口,用于通知引擎加载某个声学模型,该接口可以由模型加载/卸载驱动服务模块调用;
(4)、卸载模型接口,用于通知引擎卸载某个声学模型,该接口可以由模型加载/卸载驱动服务模块调用。
在一个示例中,当针对某个声学模型调用引擎的询问接口、语音合成接口和加载模型接口之一时可以确定该声学模型被使用一次,此时可以根据LRU算法进行LRU队列调整。
根据本发明一个实施例,一个或多个响应结果中的每个响应结果还可以包括对应引擎加载的最近最少使用的声学模型所属对象的标识信息以及对应引擎加载的最近最少使用的声学模型的最近使用时间戳。
每个引擎内部先自己排序,找出该引擎所对应的最近最少使用声学模型。随后,每个引擎向模型加载/卸载驱动服务模块返回该引擎加载的最近最少使用的声学模型的标识信息以及该最近最少使用的声学模型的最近使用时间戳。模型加载/卸载驱动服务模块对各引擎的最近最少使用的声学模型再次进行排序,找出所有引擎中的最近最少使用的声学模型作为特定声学模型。
根据本发明另一个实施例,一个或多个响应结果中的每个响应结果还可以包括对应引擎加载的所有声学模型所属对象的标识信息以及对应引擎加载的所有声学模型的最近使用时间戳。
引擎内部可以不对声学模型进行排序,直接将所有声学模型的信息发送给模型加载/卸载驱动服务模块,由该模块对所有声学模型进行排序,找出最近最少使用的声学模型作为特定声学模型。
示例性地,引擎模块可以存储所加载的每个声学模型的模型信息。可选地,所述模型信息可以包括声学模型所属对象的标识信息、声学模型的最近使用时间戳、声学模型的过期时间中的一项或多项。
根据本发明实施例,引擎模块包括一个或多个引擎,一个或多个引擎可以分别维护各自的最近最少使用队列。示例性地,最近最少使用队列可以包括对应引擎加载的所有声学模型的模型信息,所述模型信息可以包括声学模型所属对象的标识信息、声学模型的最近使用时间戳。可选地,模型信息还可以包括声学模型的过期时间。
声学模型的最近使用时间戳也可以称为更新时间,其可以用于确定最近最少使用的声学模型。
所述过期时间可以是过期时间段或过期时间点。图2示出的过期时间是过期时间点。在过期时间是过期时间段的情况下,将声学模型的最近使用时间戳与该过期时间段相加,即可获得声学模型的过期时间点。例如,过期时间是1小时,则在某个声学模型最后一次被使用之后,又经过1小时,该声学模型一直没有被再次使用,则可以选择将该声学模型卸载。
根据本发明实施例,模型管理方法100还可以包括:定期检查引擎模块所加载的声学模型中达到过期时间点的声学模型;如果存在达到过期时间点的声学模型,则卸载该声学模型。
可以根据上述模型信息中的过期时间监视声学模型是否应该卸载。这种方式可以及时淘汰不常用的声学模型,及时更新引擎加载的声学模型,方便空出槽位以加载新的声学模型。
本实施例中的定期检查以及卸载声学模型的操作可以根据需要在合适的时刻执行,例如,其有可能是在步骤S110-S140中任一步骤的之前、之后、之间执行。
示例性而非限制性地,引擎模块包括一个或多个引擎,一个或多个引擎设置有各自的定时器,定期检查引擎模块所加载的达到过期时间的声学模型可以包括:对于一个或多个引擎中的每个引擎,由该引擎对应的定时器定期检查该引擎所加载的声学模型中达到过期时间点的声学模型。
本领域技术人员可以理解定时器的实现方式,本文不做赘述。示例性地,引擎可以自行监视和卸载达到过期时间点的声学模型。引擎可以通过定时器定期,例如周期性地,检查并卸载自己加载的声学模型中达到过期时间点的声学模型。引擎内部自主完成声学模型的卸载,可以提高模型管理的效率。
根据本发明实施例,模型管理方法100还可以包括:每次加载或卸载任一声学模型时,更新该声学模型所在的引擎所维护的最近最少使用队列。
每次在该引擎中加载或卸载任一声学模型时,引擎的声学模型池中的声学模型发生改变,此时可以同步更新对应引擎所维护的LRU队列,例如添加新加载的声学模型的模型信息,或者删除卸载的声学模型的模型信息等。
根据本发明实施例,引擎模块包括一个或多个引擎,模型管理方法100还可以包括:判断一个或多个引擎的总槽位余量是否达到槽位阈值;以及如果总槽位余量达到槽位阈值,则在引擎模块中添加新的引擎。
根据本发明实施例,可以根据需要调整引擎模块中的引擎的数量,例如,当引擎数量较大,超过当前处理需求时,可以适当删除(下线)一些引擎;反之,当引擎数量较小,无法满足当前处理需求时,可以适当添加(上线)一些新的引擎。示例性地,引擎的添加和删除可以由附加的弹性伸缩模块(图2未示出)控制。模型加载/卸载驱动服务模块可以探测到当前的引擎情况,并可采用相应策略进行应对,例如添加引擎时的策略是尽快填满新引擎(如上所述),删除引擎时的策略是将被删引擎的声学模型分配到其他引擎,因此,引擎的添加或删除不会影响引擎模块正常工作。
可以通过槽位余量判断是否需要添加新的引擎。判断时采用的槽位阈值可以是任意合适的值,本发明不对此进行限制。
示例性地,在判断一个或多个引擎的总槽位余量是否达到槽位阈值之前,模型管理方法100还可以包括:向一个或多个引擎发起询问;接收一个或多个引擎分别返回的一个或多个响应结果,每个响应结果包括对应引擎的槽位余量信息;根据一个或多个响应结果确定一个或多个引擎的总槽位余量。
本实施例中的询问是关于引擎的槽位余量的询问(可以称为第二询问),接收到的一个或多个响应结果可以称为一个或多个第二响应结果。
上述发起第二询问、接收第二响应结果、确定总槽位余量、判断总槽位余量是否达到槽位阈值、以及达到槽位阈值时添加新的引擎这些操作可以根据需要在合适的时刻执行,例如周期性执行,这些操作有可能是在步骤S110-S140中任一步骤的之前、之后、之间执行。
根据本发明实施例,引擎模块包括一个或多个引擎,模型管理方法100还可以包括:当从引擎模块中删除任一引擎时,将该引擎加载的声学模型均匀分配或通过负载均衡方式分配到引擎模块中的其他引擎。
如上所述,当上线新引擎时,策略是希望尽快填满新引擎。而当下线旧引擎时,可以将被下线的引擎原本加载的声学模型分配给其他引擎。分配可以以任意方式分配,例如均匀分配或负载均衡分配。
通过上述添加或删除引擎的方式,可以灵活调整引擎的数量,以使得在简化程序的同时达到较佳的负载处理能力。
根据本发明实施例,在在未查找到目标对象的声学模型的情况下,将目标对象的声学模型加载到引擎模块中(步骤S140)之后,模型管理方法100还可以包括:将目标对象的声学模型在引擎模块中的引擎地址信息与目标对象的标识信息结合,以获得目标对象的模型加载信息;以及将目标对象的模型加载信息存储在第一缓存中。
参考图2,语音合成系统可以包括缓存服务模块(示出为缓存服务)。引擎模块可以将目标对象的声学模型的引擎地址信息与目标对象的标识信息绑定,注册到缓存服务模块,即存储在第一缓存中。
示例性地,引擎地址信息可以是用于指示目标对象的声学模型位于哪个引擎上的信息。例如,引擎地址信息可以包括目标对象的声学模型所在引擎的互联网协议(IP)地址和端口号。通过引擎的IP地址和端口号,可以获知目标对象的声学模型位于哪个引擎上。当需要使用目标对象的声学模型进行语音合成时,可以通过存储在第一缓存中的模型加载信息找到目标对象的声学模型所在的引擎,进而可以找到目标对象的声学模型。
将模型加载信息存储在第一缓存中,方便随时检查任一声学模型的加载情况以及加载位置,方便随时调用该声学模型。
根据本发明实施例,模型管理方法100还可以包括:当从引擎模块中卸载任一声学模型时,将第一缓存中存储的与该声学模型对应的模型加载信息删除。
当某一引擎卸载某一声学模型时,可以主动通知缓存服务模块,将存储在第一缓存中的与该声学模型对应的模型加载信息删除。这样,可以随着引擎加载的声学模型的变化而及时更新缓存中的模型加载信息,以帮助语音合成系统更准确地工作。
根据本发明实施例,模型管理方法100还可以包括:当接收到与任一对象的声学模型相关的就绪检查请求时,检查第一缓存中是否存在该对象的模型加载信息,如果存在,则确定模型就绪,否则确定模型未就绪。
参考图2,语音合成系统可以包括就绪检查服务模块(示出为就绪检查服务)。客户端app可以发起轮询请求(即就绪检查请求)查看某一声学模型是否已加载,就绪检查服务模块可以接收该就绪检查请求,并通过缓存服务模块检查第一缓存中是否存在某一声学模型对应的模型加载信息。如果存在,则确定模型就绪,并且可以可选地告知客户端app模型已就绪。模型就绪之后即可以提供语音合成服务。
根据本发明实施例,在当接收到与任一对象的声学模型相关的就绪检查请求时,检查第一缓存中是否存在该对象的模型加载信息之后,模型管理方法100还可以包括:返回关于模型是否就绪的报告信息。
返回报告信息的步骤是可选的。就绪检查服务模块可以仅检查模块是否就绪,以帮助语音合成系统进行后续的语音合成服务,而不返回报告信息。返回报告信息可以方便通知用户其需要的声学模型是否已加载,方便用户决定是否进行语音合成或者加载其需要的声学模型。
根据本发明实施例,在在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型(步骤S130)之后,模型管理方法100还可以包括:在查找到目标对象的声学模型的情况下,记录日志,其中,日志包括关于当前用户的在线时间的用户在线信息。
如果模型加载/卸载驱动服务模块确定某个引擎已加载目标对象的声学模型,则可以记录日志,完成当前消息处理。日志可以包括各用户的用户在线信息,通过查看日志,可以获知任一用户的在线时间,进而获知该用户是否是活跃用户,方便对用户进行管理,例如保持其声学模型加载到引擎,避免被淘汰等。
根据本发明实施例,接收当前用户的身份信息(步骤S110)、基于身份信息进行身份鉴权,以确定当前用户是否是合法用户(步骤S120)的操作由账号系统执行,在在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型(步骤S130)之前,模型管理方法100还可以包括:在当前用户是合法用户的情况下,由消息发布模块自账号系统接收当前用户的鉴权信息,并向消息中间件发布用于指示在引擎模块中查找目标对象的声学模型的引擎查找信息,其中,鉴权信息和引擎查找信息各自包括目标对象的标识信息;由模型加载/卸载驱动服务模块自消息中间件消费引擎查找信息;其中,在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型(步骤S130)的操作由模型加载/卸载驱动服务模块响应于引擎查找信息的接收而执行,并且在未查找到目标对象的声学模型的情况下,将目标对象的声学模型加载到引擎模块中的操作由模型加载/卸载驱动服务模块执行。
示例性地,在在当前用户是合法用户的情况下,由消息发布模块自账号系统接收当前用户的鉴权信息之后,模型管理方法100还可以包括:由消息发布模块将鉴权信息中的目标对象的标识信息与中心地址信息封装在一起,以获得引擎查找信息。
需注意,图2所示的语音合成系统的各模块仅是示例而非对本发明的限制,语音合成系统可以包括其他形式的模块来实现本文描述的模型管理方法和语音合成方法,例如,可以不采用消息队列的方式,账号系统鉴权成功之后,可以经由其他中转模块将引擎查找信息发送给模型加载/卸载驱动服务模块。例如,该中转模块可以是用于将目标对象的标识信息与目标对象的声学模型的中心地址信息结合在一起,并直接发送给模型加载/卸载驱动服务模块的模块,其不一定采用消息队列的方式传输信息,或者其还可以对鉴权信息、中心地址信息等进行其他处理。
上文已经描述了账号系统、消息发布模块、消息中间件、模型加载/卸载驱动服务模块的工作原理,此处不再赘述。
根据本发明另一方面,提供一种语音合成方法。图3示出根据本发明一个实施例的语音合成方法300的示意性流程图。如图3所示,语音合成方法300包括步骤S310、S320、S330、S340、S350和S360。
在步骤S310,接收当前用户的身份信息。
在步骤S320,基于身份信息进行身份鉴权,以确定当前用户是否是合法用户。
在步骤S330,在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型,其中,目标对象是与当前用户相对应的授权对象集合中的授权对象之一。
在步骤S340,在未查找到目标对象的声学模型的情况下,将目标对象的声学模型加载到引擎模块中。
在步骤S350,接收语音合成请求信息,其中,语音合成请求信息包括待合成文本。可选地,语音合成请求信息还可以包括目标对象的标识信息。
可选地,上述触发信息可以包括语音合成请求信息。
提供语音合成请求信息、指示进行语音合成的用户是上述模型管理方法100中涉及的当前用户。附图中的方法流程仅是示例而非对本发明的限制,例如,语音合成方法300的各步骤并不局限于图3所示的执行顺序。例如,步骤S350可以在任意时刻执行,诸如在步骤S310之前或步骤S310-S340之间执行。
在步骤S360,利用引擎模块基于待合成文本以及目标对象的声学模型进行语音合成。
语音合成方法300的步骤S310~S340与上述模型管理方法100的步骤S110~S140对应一致,可以参考上文关于模型管理方法100的描述理解步骤S310~S340,不再赘述。
返回参考图2,语音合成系统包括合成前端服务模块(示出为合成前端服务)。用户可以通过客户端app向语音合成系统发送语音合成请求信息。可选地,可以由合成前端服务模块接收该语音合成请求信息。
随后,可选地,合成前端服务模块可以根据目标对象的标识信息查询第一缓存中存储的模型加载信息,以判断引擎模块中是否已加载目标对象的声学模型。如果已加载,则合成前端服务模块可以从缓存服务模块获取(拉取)目标对象的模型加载信息,确定加载目标对象的声学模型的引擎是哪个。
随后,可选地,合成前端服务模块可以调用加载目标对象的声学模型的引擎,利用该引擎进行语音合成,以获得与目标对象相对应的语音数据。
语音合成过程可以分为前端过程和后端过程。前端过程可以包括对待合成文本进行文本分析,例如,进行文本的分词、注音、韵律预测等。
例如,待合成文本为“您好,标贝科技为您服务”,经过前端处理之后可以得到如下文本分析结果:nin2 hao3长停顿biao1 bei4 ke1 ji4中停顿wei4 nin2短停顿fu2 wu4。前端过程对同一种语言可以采用统一的前端模型。
后端过程可以包括基于目标对象的声学模型和文本分析结果进行语音合成,以获得待合成文本所对应的语音数据。例如将分词、注音、韵律等信息输入目标对象的声学模型,可以得到对应语音的声学参数,诸如频谱包络、基频、时长等信息。声学参数是反映各对象音色的特征,不同对象的声学模型通常不一样,所获得的声学参数通常也不一样。随后可以将声学参数输入声码器,得到最终的波形文件(即语音数据)。
示例性地,目标对象是上述模型管理方法100中的当前用户。当前用户上线之后,可以一次性或周期性地查找引擎模块是否已加载其声学模型,如果未加载则进行动态加载,已加载的情况下可以通知当前用户模型已就绪。当前用户可以随即指示语音合成系统针对待合成文本进行语音合成,进而获得与当前用户相对应的语音数据。
根据本发明实施例,在利用引擎模块基于待合成文本以及目标对象的声学模型进行语音合成(步骤S320)之前,语音合成方法300还可以包括:基于目标对象的标识信息判断引擎模块是否已加载目标对象的声学模型。
根据本发明实施例,基于目标对象的标识信息判断引擎模块是否已加载目标对象的声学模型可以包括:基于目标对象的标识信息查询第一缓存中是否存在目标对象的模型加载信息;其中,利用引擎模块基于待合成文本以及目标对象的声学模型进行语音合成(步骤S320)的操作在查询到目标对象的模型加载信息的情况下执行。
上文已经描述了合成前端服务模块通过缓存服务模块查询声学模型的加载情况的实现方式,此处不赘述。
根据本发明实施例,利用引擎模块基于待合成文本以及目标对象的声学模型进行语音合成(步骤S320)可以包括:从目标对象的模型加载信息中提取目标对象的引擎地址信息;基于目标对象的引擎地址信息调用目标对象的声学模型所在的引擎;利用调用的引擎基于待合成文本以及目标对象的声学模型进行语音合成。
示例性地,利用调用的引擎基于待合成文本以及目标对象的声学模型进行语音合成可以包括:利用调用的引擎对待合成文本进行文本分析,以获得文本分析结果;利用调用的引擎基于文本分析结果和目标对象的声学模型进行声学参数预测和音频解码,以获得待合成文本所对应的语音数据。
上文已经描述了模型加载信息和引擎地址信息的意义并已经描述了利用调用的引擎进行语音合成的方式,本领域技术人员可以参考上文描述理解本实施例的实现方式,不再赘述。
根据本发明实施例,在利用引擎模块基于待合成文本以及目标对象的声学模型进行语音合成(步骤S320)之后,语音合成方法300还可以包括:将与目标对象相对应的语音合成结果存储在第二缓存中。
第二缓存可以与上述第一缓存采用同一缓存实现,也可以采用不同的缓存实现。将语音合成结果存储在第二缓存中,方便随时返回给用户以由用户查看。
图2所示的合成前端服务模块、就绪检查服务模块以及消息发布模块分别与三种客户端app(app①、app②、app③)交互,这三种客户端app可以分别采用不同的应用软件实现,或者其中的两种或三种app可以采用同一个应用软件实现。
根据本发明实施例的语音合成方法,在引擎模块中不存在用户需要的声学模型的情况下,可以自动将该声学模型加载到引擎模块。这种方案可以实现声学模型的动态加载,使得语音合成技术不再局限于固定的声学模型。也就是说,当用户使用语音合成服务时,不用再受语音合成系统提供的简单几个声学模型的限制,而是可以自由选择声学模型,这样可以为用户提供极大的自由度。同时,由于这种方法对声学模型的动态加载是自动化、智能化的,无需用户介入,因此可以减少用户操作,这有利于提高语音合成系统的工作效率,减少出错,同时可以有效地提升用户体验。此外,由于上述动态加载技术,采用上述语音合成方法的语音合成系统可以支持超多发音人的语音合成服务,可以很好地满足超大规模、超多发音人场景下的语音合成需求。由于以上优点,根据本发明实施例的语音合成方法具有极大的应用价值和广阔的市场前景。
根据本发明另一方面,提供一种模型管理装置。图4示出了根据本发明一个实施例的模型管理装置400的示意性框图。
如图4所示,根据本发明实施例的模型管理装置400包括第一接收模块410、鉴权模块420、查找模块430和加载模块440。所述各个模块可分别执行上文中结合图1-2描述的模型管理方法的各个步骤/功能。以下仅对该模型管理装置400的各部件的主要功能进行描述,而省略以上已经描述过的细节内容。
第一接收模块410用于接收当前用户的身份信息。
鉴权模块420用于基于身份信息进行身份鉴权,以确定当前用户是否是合法用户。
查找模块430用于在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型,其中,目标对象是与当前用户相对应的授权对象集合中的授权对象之一。
加载模块440用于在未查找到目标对象的声学模型的情况下,将目标对象的声学模型加载到引擎模块中。
根据本发明另一方面,提供一种语音合成装置。图5示出了根据本发明一个实施例的语音合成装置500的示意性框图。
如图5所示,根据本发明实施例的语音合成装置500包括第一接收模块510、鉴权模块520、查找模块530、加载模块540、第二接收模块550和合成模块560。所述各个模块可分别执行上文中结合图3描述的语音合成方法的各个步骤/功能。以下仅对该语音合成装置500的各部件的主要功能进行描述,而省略以上已经描述过的细节内容。
第一接收模块510用于接收当前用户的身份信息。
鉴权模块520用于基于身份信息进行身份鉴权,以确定当前用户是否是合法用户。
查找模块530用于在当前用户是合法用户的情况下,基于目标对象的标识信息在引擎模块中查找目标对象的声学模型,其中,目标对象是与当前用户相对应的授权对象集合中的授权对象之一。
加载模块540用于在未查找到目标对象的声学模型的情况下,将目标对象的声学模型加载到引擎模块中。
第二接收模块550用于接收语音合成请求信息,其中,所述语音合成请求信息包括待合成文本。
合成模块560用于利用引擎模块基于待合成文本以及目标对象的声学模型进行语音合成。
图6示出了根据本发明一个实施例的模型管理系统600的示意性框图。模型管理系统600包括存储装置(即存储器)610以及处理器620。
所述存储装置610存储用于实现根据本发明实施例的模型管理方法中的相应步骤的计算机程序指令。存储装置610可以包括上述模型存储器和/或池存储器。
所述处理器620用于运行所述存储装置610中存储的计算机程序指令,以执行根据本发明实施例的模型管理方法的相应步骤。
图7示出了根据本发明一个实施例的语音合成系统700的示意性框图。语音合成系统700包括存储装置(即存储器)710以及处理器720。
所述存储装置710存储用于实现根据本发明实施例的语音合成方法中的相应步骤的计算机程序指令。存储装置710可以包括上述模型存储器和/或池存储器。
所述处理器720用于运行所述存储装置710中存储的计算机程序指令,以执行根据本发明实施例的语音合成方法的相应步骤。
此外,根据本发明实施例,还提供了一种存储介质,在所述存储介质上存储了程序指令,在所述程序指令被计算机或处理器运行时用于执行本发明实施例的模型管理方法的相应步骤,并且用于实现根据本发明实施例的模型管理装置中的相应模块。所述存储介质例如可以包括智能电话的存储卡、平板电脑的存储部件、个人计算机的硬盘、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、或者上述存储介质的任意组合。
在一个实施例中,所述程序指令在被计算机或处理器运行时可以使得计算机或处理器实现根据本发明实施例的模型管理装置的各个功能模块,并和/或者可以执行根据本发明实施例的模型管理方法。
根据本发明实施例的模型管理系统中的各模块可以通过根据本发明实施例的实施模型管理的电子设备的处理器运行在存储器中存储的计算机程序指令来实现,或者可以在根据本发明实施例的计算机程序产品的计算机可读存储介质中存储的计算机指令被计算机运行时实现。
此外,根据本发明实施例,还提供了一种存储介质,在所述存储介质上存储了程序指令,在所述程序指令被计算机或处理器运行时用于执行本发明实施例的语音合成方法的相应步骤,并且用于实现根据本发明实施例的语音合成装置中的相应模块。所述存储介质例如可以包括智能电话的存储卡、平板电脑的存储部件、个人计算机的硬盘、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、或者上述存储介质的任意组合。
在一个实施例中,所述程序指令在被计算机或处理器运行时可以使得计算机或处理器实现根据本发明实施例的语音合成装置的各个功能模块,并和/或者可以执行根据本发明实施例的语音合成方法。
根据本发明实施例的语音合成系统中的各模块可以通过根据本发明实施例的实施语音合成的电子设备的处理器运行在存储器中存储的计算机程序指令来实现,或者可以在根据本发明实施例的计算机程序产品的计算机可读存储介质中存储的计算机指令被计算机运行时实现。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。
在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
以上所述,仅为本发明的具体实施方式或对具体实施方式的说明,本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。本发明的保护范围应以权利要求的保护范围为准。