具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、元件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
在本发明中,“模块”、“***”等等指应用于计算机的相关实体,如硬件、硬件和软件的组合、软件或执行中的软件等。详细地说,例如,元件可以、但不限于是运行于处理器的过程、处理器、对象、可执行元件、执行线程、程序和/或计算机。还有,运行于服务器上的应用程序或脚本程序、服务器都可以是元件。一个或多个元件可在执行的过程和/或线程中,并且元件可以在一台计算机上本地化和/或分布在两台或多台计算机之间,并可以由各种计算机可读介质运行。元件还可以根据具有一个或多个数据包的信号,例如,来自一个与本地***、分布式***中另一元件交互的,和/或在因特网的网络通过信号与其它***交互的数据的信号通过本地和/或远程过程来进行通信。
最后,还需要说明的是,在本文中,术语“包括”、“包含”,不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
如图1所示,本发明的一实施例的技能训练方法,包括:
S11、当检测到开发者对技能的训练资源完成了变更时,判断所述技能的资源版本与所述技能的当前内核版本是否相对应。
开发者对技能的编辑操作是在开发平台上,对已经创建的技能进行进一步修改完善所进行的编辑操作。例如,开发者为已经创建的技能增加了一个新的说法,或者增加了新的语义槽,或者进行了新的标注,或者修改了引用资源等。本实施例中,通过实时检测开发者对技能的编辑操作,并且一旦检测到有编辑操作之后就即刻进行技能的训练,从而实现了技能的实时训练,能够及时的得到最新的技能。
在开发平台上进行技能开发过程中,开发者为使技能实现特定的功能,需要引用具有特定功能的资源。例如,当开发者要开发一款查询天气的技能,则需要通过调用一款查询天气的API,具体地可通过调用地址进行调用,例如:https://s.dui.ai/webhook/air。本开发平台上供用户调用的API资源可以是开发平台所提供的或者是第三方平台所提供的,并且可能会随着时间的推移会对这些API资源进行版本更新,因此会出现客户开发技能时所调用的API资源版本,与用户再次使用或者编辑所开发的技能时相应API资源的版本不一致的情况。这时如果开发者对技能进行了新的编辑操作,就需要对整个技能进行全量更新,以保证技能与所引用API资源内核版本之间的一致,确保技能的正常运转。
S12、如果不相对应,则确定平台对所述技能进行全量更新所需的原子训练操作,以生成第一训练列表。
当确定技能的资源版本与所述技能的当前内核版本不一致时,将训练技能所需要进行的训练操作拆分为很多最小单元的原子训练操作,这样一来就能够同时执行所有的原子训练操作,而不必按部就班的按照整个训练操作进行,提升了对技能训练的效率,保证了技能训练的实时性。
S13、如果相对应,则确定按照实质性变更内容(受所述编辑操作影响)对所述技能进行更新所需进行的原子训练操作以生成第二训练列表。
当确定技能的资源版本与所述技能的当前内核版本一致时,仅仅确定了技能中受到编辑操作影响的部分所需要进行了原子训练操作,从而实现了对技能具有针对性的局部训练,降低了训练量,节省了训练资源。
S14、将所述第一训练列表或者所述第二训练列表中的原子训练操作分配至不同的训练进程进行异步训练。本实施例中将第一训练列表或者第二训练列表中的原子训练操作分配至一个预先建立的进程池,以调度不同的进程子程序分别对所有的原子训练操作进行训练。
此外,还预先注册监听所有的进程子程序的退出信号的异步监听队列,没监听到一个子程序处理完一个原子训练操作,就相应的记录在队列中,直到所有的原子训练操作完成所有的训练,从而能够实时掌握训练进度,并且保证所有训练的有序正确的进行,避免出现堵塞等情况的发生。
本发明实施例,如果资源版本和现有内核版本不一致的话,会产生一次全量训练,用于部分训练带来的版本不一致问题。将一个完整的训练进行拆解成多个不可分的原子训练操作,通过开发者操作所影响的数据计算出需要的原子训练操作,将这些原子训练操作分布到进程池中进行异步训练。
发明人发现,同样为解决本发明的技术问题,现有技术中所存在的改进可能的无非就是以下几方面:
a.从服务器软件的方向看:分布式的训练,将训练分布到多台机器。
b.从内核工程看:改进训练的算法,提升性能。
c.从产品设计的角度看:改变训练的时机,延迟训练。
但是本发明实施例的方案中,不仅注重了分布式训练相关的优化,同时将注意力转移到每一轮训练的内部进行追踪和并行训练,需要同时对服务器开发和内核工程有一定的了解。
在一些实施例中,具体地,所述确定受所述编辑操作影响对所述技能进行更新所需进行的原子训练操作以生成第二训练列表包括:确定受所述编辑操作影响的task和/或task分类和/或词库所需进行的原子训练操作,以生成所述第二训练列表。
同一个技能中可能包括了多个task,如果开发者仅仅对某一个task进行了编辑,并且仅仅是增加了一个说法,则确定该某一个task为受到编辑操作影响的task。进一步地,如果开发者对该某一个task的分类(包括效率工具、生活服务、交通出行、影音视听、购物、教育、智能家居、社交分享、新闻资讯等)进行了修改,则同时确定该某一个task分类为受到编辑操作影响的task。进一步地,如果开发者对某一个task增加了新的语义槽,关联了新的词库,则同时确定该关联的词库为受到编辑操作影响的部分。通过上述训练操作的划分,能够实现同时对受到编辑操作的task,task分类以及词库进行异步训练,从而不仅实现了对技能的局部训练,而且还实现了不同层面的并行训练,提升了训练的效率,训练的实时性,从而当开发者进行编辑操作并进行训练时(因为实际开发过程中,开发者进行技能开发时即时开发即时训练的),不需要等待太长时间就能够得到训练之后的技能并进行测试,保证了用户体验。
在一些实施例中,所述实质性变更内容包括对task、task分类和词库所进行的变更。
如图2所示,在一些实施例中,所述确定按照实质性变更内容对所述技能进行更新所需进行的原子训练操作,以生成第二训练列表包括:
S21、确定按照所述实质性变更内容对所述task分类所需进行的第一原子操作训练集;
S22、确定按照所述实质性变更内容对所述task所需进行的第二原子训练操作集;
S23、确定按照所述实质性变更内容对所述词库所需进行的第三原子训练操作集;
S24、确定与所述词库相关联的task和task分类,以确定按照所述实质性变更内容对与所述词库相关联的task和task分类所需进行的第四原子训练操作集;
S25、根据所述第一至第四原子训练操作集生成所述第二训练列表。
本发明实施例中,通过按照task分类、task和词库的优先级顺序(task分类、task和词库依次优先级逐渐降低)针对所述实质性修改内容确定所需进行的原子训练操作,不仅能够更加快速高效的确定更新训练技能所需进行的原子训练操作,而且还不会遗漏针对开发者的变更操作所需要进行的原子训练操作。具体地,因为首先优先通过确定对应于所述实质性变更内容的task分类和task,之后再确定是否存在对应于所述实质性变更内容的词库,而在确定针对词库所需进行的原子操作时,具体的又确定了引用该词库的task分类和task,从而即便是之前直接确定针对task分类和task所需进行的原子训练操作时有所遗漏,此处由于进一步通过确定与词库关联的task分类和task所需要进行的原子训练操作,也能弥补之前可能存在的遗漏。所以本发明实施例能够针对开发者的变更操作实现对技能的更加彻底全面的训练更新。
如图3所示,在一些实施例中,所述确定针对词库所进行的变更所需进行的训练操作包括:
S31、按照实质性变更内容确定待训练词库;
S32、确定与所述待训练词库相关联的task和task分类;
S33、确定用于训练所述待训练词库和与所述待训练词库相关联的task和task分类的原子训练操作。
在本实施例中,当确定开发者的编辑操作是对词库的编辑操作时,不仅仅确定了对词库进行训练的训练操作,同时还确定了与该词库关联的task和task分类(例如,当前技能下所包含的某一task中所添加的说法的标注引用了***作的词库。具体地,某一技能中存在说法“北京的天气怎样”,该技能下标注了“北京”为“国内城市”并引用了“国内城市”的词库,当开发者编辑“国内城市”这个词库时,必然就要对该某一技能进行相应的训练),并确定了需要进行的响应的训练操作。
本实施例并非简单机械的对技能进行针对性的局部训练,当确定了开发者所直接操作编辑的内容之后,还进一步确定了与该直接被编辑操作的内容相关联的其它内容,从而实现了对就能的彻底的局部训练,没有因为针对性而遗漏与开发者直接编辑操作相关联的内容的训练。
在一些实施例中,所述确定进行全量更新所需的原子训练操作以生成第一训练列表包括:确定所述技能所包含的所有task、task分类和词库;分别确定用于训练所述所有task、task分类和词库的原子训练操作以生成所述第一训练列表。
如图4所示,为本发明一具体实施例的流程示意图,本实施例的技能训练方法包括:
步骤1、开发者提交一项变更,此处的提交一项变更具体表现为开发者对当前技能进行的编辑操作,并且由后台服务器实时检测到的该编辑操作,之后再对检测到的编辑操作进行分析汇总,确定出对训练技能资源(即技能所包含的说法、词库、强说法分类、对话、回复等)有实际意义的变更。
步骤2、检查资源版本是否与内核版本一致,即判断当前技能所关联的内核版本与之前训练得到现在版本的技能资源时所关联的内核版本是否一致。
步骤3、如果不一致,则计算出对技能进行一次全量更新所需要的原子训练操作,并将得到的所有的原子训练操作存放至任务列表中。
步骤4、如果一致,则分别确定开发者的编辑操作所引起的变更是否影响到了该技能所包含的task、task分类以及词库,并且根据受到影响的task、task分类和词库分别确定出所需要进行的原子训练操作,将确定的原子训练操作存放至任务列表中。
具体地,当确定某一词库受到变更影响时,需要进一步的确定出于该词库关联的task和task分类,并相应的确定出该关联的task和task分类所需要进行的原子训练操作存放至任务列表中。
步骤5、将步骤3和步骤4中得到的任务列表中所存储的原子训练操作打散转入异步处理流程中,并均衡的配置给不同的训练进程进行训练。
步骤6、在步骤5中执行训练操作的过程中在主程序中进行注册监听所有的训练进程,以实时检测训练过程的完成状况,当监听结果表明已经完成所有原子训练操作之后结束本次技能训练。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作合并,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
如图5所示,本发明实施例提供一种技能训练***500,其包括:版本判断程序模块510、第一训练列表生成程序模块520、第二训练列表生成程序模块530和训练操作分配程序模块540。其中,
版本判断程序模块510,用于当检测到开发者对技能的训练资源完成了变更时,判断所述技能的资源版本与所述技能的当前内核版本是否相对应。
开发者对技能的编辑操作是在开发平台上,对已经创建的技能进行进一步修改完善所进行的编辑操作。例如,开发者为已经创建的技能增加了一个新的说法,或者增加了新的语义槽,或者进行了新的标注,或者修改了引用资源等。本实施例中,通过实时检测开发者对技能的编辑操作,并且一旦检测到有编辑操作之后就即刻进行技能的重新训练,从而实现了技能的实时训练,能够及时的得到最新的技能。
在开发平台上进行技能开发过程中,开发者为使技能实现特定的功能,需要引用具有特定功能的资源。例如,当开发者要开发一款查询天气的技能,则需要通过调用一款查询天气的API,具体地可通过调用地址进行调用,例如:https://s.dui.ai/webhook/air。本开发平台上供用户调用的API资源可以是开发平台所提供的或者是第三方平台所提供的,并且可能会随着时间的推移会对这些API资源进行版本更新,因此会出现客户开发技能时所调用的API资源版本,与用户再次使用或者编辑所开发的技能时相应API资源的版本不一致的情况。这时如果开发者对技能进行了新的编辑操作,就需要对整个技能进行全量更新,以保证技能与所引用API资源内核版本之间的一致,确保技能的正常运转。
第一训练列表生成程序模块520,用于当所述技能的资源版本与所述技能的当前内核版本不相对应时,确定对所述技能进行全量更新所需的原子训练操作,以生成第一训练列表。
当确定技能的资源版本与所述技能的当前内核版本不相对应时,第一训练列表生成程序模块520将训练技能所需要进行的训练操作拆分为很多最小单元的原子训练操作,这样一来就能够同时执行所有的原子训练操作,而不必按部就班的按照整个训练操作进行,提升了对技能训练的效率,保证了技能训练的实时性。
第二训练列表生成程序模块530,用于当所述技能的资源版本与所述技能的当前内核版本相对应时,确定按照实质性变更内容(受所述编辑操作影响)对所述技能进行更新所需进行的原子训练操作,以生成第二训练列表。
当确定技能的资源版本与所述技能的当前内核版本一致时,第二训练列表生成程序模块530仅仅确定了技能中受到编辑操作影响的部分所需要进行了原子训练操作,从而实现了对技能具有针对性的局部训练,降低了训练量,节省了训练资源。
训练操作分配程序模块540,用于将所述第一训练列表或者所述第二训练列表中的原子训练操作分配至不同的训练进程进行异步训练。
在一些实施例中,所述确定按照实质性变更内容对所述技能进行更新所需进行的原子训练操作,以生成第二训练列表包括:
确定针对task和/或task分类和/或词库所进行的变更所需进行的原子训练操作,以生成所述第二训练列表。
如图6所示,在一些实施例中,所述第一训练列表生成程序模块520包括:
技能资源确定程序单元521,用于确定所述技能所包含的所有task、task分类和词库;
第一列表生成程序单元522,用于分别确定用于训练所述所有task、task分类和词库的原子训练操作以生成所述第一训练列表。
如图7所示,在一些实施例中,所述第二训练列表生成程序模块530包括:
待训练词库确定程序单元531,用于按照实质性变更内容确定受所述变更信息影响的词库为待训练词库;
关联任务确定程序单元532,用于确定与所述待训练词库相关联的task和task分类;
第二列表生成程序单元533,用于确定用于训练所述待训练词库和与所述待训练词库相关联的task和task分类的原子训练操作以生成第二训练列表。
上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法。
本发明实施例还提供一种电子设备,其包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例的实现技能训练方法。
图8是本申请另一实施例提供的执行技能训练方法的电子设备的硬件结构示意图,如图8所示,该设备包括:
一个或多个处理器810以及存储器820,图8中以一个处理器810为例。
执行技能训练方法的设备还可以包括:输入装置830和输出装置840。
处理器810、存储器820、输入装置830和输出装置840可以通过总线或者其他方式连接,图8中以通过总线连接为例。
存储器820作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本申请实施例中的技能训练方法对应的程序指令/模块。处理器810通过运行存储在存储器820中的非易失性软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例技能训练方法。
存储器820可以包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需要的应用程序;存储数据区可存储根据技能训练装置的使用所创建的数据等。此外,存储器820可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器820可选包括相对于处理器810远程设置的存储器,这些远程存储器可以通过网络连接至技能训练装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置830可接收输入的数字或字符信息,以及产生与技能训练装置的用户设置以及功能控制有关的信号。输出装置840可包括显示屏等显示设备。
所述一个或者多个模块存储在所述存储器820中,当被所述一个或者多个处理器810执行时,执行上述任意方法实施例中的技能训练方法。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。