用于词库的解析方法及系统与流程

文档序号:24235263发布日期:2021-03-12 13:06阅读:135来源:国知局
用于词库的解析方法及系统与流程

本发明涉及智能语音领域,尤其涉及一种用于词库的解析方法及系统。



背景技术:

目前市面上使用的基于虚拟机运行的应用,如果涉及大体积文件或对象解析至内存的功能,都存在内存溢出的风险(即程序运行要用到的内存大于该应用被分配的最大内存),该异常会导致应用停止运行。因此业界大多会采取一定的方法或技术来防止内存溢出的发生,以保证系统运行的稳定性。

通常为了防止内存溢出的发生,会增加应用系统内存的大小,或者进行系统扩容来保障系统的稳定性。

在实现本发明过程中,发明人发现相关技术中至少存在如下问题:

目前市面上运行的系统为了解决内存溢出问题,大多会增加应用的内存大小或进行系统扩容,由于增加了应用的内存,系统运行的机器也要配置更高的内存,这样会导致系统的运行依赖于较高的硬件配置,从而增加系统运维成本;此外,虽然加大了内存可以降低内存溢出的风险,但由于文件或对象的大小、系统的并发等不可控因素,一味的通过加内存、扩容等手段无法有效解决内存溢出问题,仍然无法完全避免内存溢出的发生。



技术实现要素:

为了至少解决现有技术中增加内存扩容会提高硬件配置以及运维成本,即使一味的加内存也无法有效的解决内存溢出的问题。

第一方面,本发明实施例提供一种用于词库的解析方法,包括:

基于输入流的方式自词库数据库获取一部分词条;

加载所述一部分词条至内存;

将所述一部分词条从所述内存写入与训练服务已建立请求的输出流。

第二方面,本发明实施例提供一种用于词库的解析系统,包括:

词条获取程序模块,用于基于输入流的方式自词库数据库获取一部分词条;

词条加载程序模块,用于加载所述一部分词条至内存;

输出程序模块,用于将所述一部分词条从所述内存写入与训练服务已建立请求的输出流。

第三方面,提供一种电子设备,其包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例的用于词库的解析方法的步骤。

第四方面,本发明实施例提供一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现本发明任一实施例的用于词库的解析方法的步骤。

本发明实施例的有益效果在于:解决了应用中解析大体积词库文件可能存在的内存溢出问题,同时避免了增加内存,扩容等造成的运维成本。在此基础上,不仅仅可以应用在解决读取大词库文件上,同时,可也以作为解决其他因素导致的系统内存溢出的一种参考。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一实施例提供的一种用于词库的解析方法的流程图;

图2是本发明一实施例提供的一种用于词库的解析方法的词库训练具体实施流程图;

图3是本发明一实施例提供的一种用于词库的解析系统的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示为本发明一实施例提供的一种用于词库的解析方法的流程图,包括如下步骤:

s11:基于输入流的方式自词库数据库获取一部分词条;

s12:加载所述一部分词条至内存;

s13:将所述一部分词条从所述内存写入与训练服务已建立请求的输出流。

在本实施方式中,普通用户训练的词库数据库通常体量较小,例如,百mb级别的,在训练时不会出现内存溢出。但是大企业的语音产品,通常有着各种功能,词库数据库体量极大,几十gb、百gb、更有极限甚至是tb级别的。当语音对话平台为了训练词库数据库准备的内存容量,不足以完全缓存词库数据库,就会出现内存溢出。

内存溢出异常一般发生于生产环境,在词库训练的过程中不允许有太多的时间来处理内存溢出的问题,因此无法在内存溢出后,再去扩充内存。词库训练的生产环境的应用大多以多节点运行来实现高可用,即使单个服务因内存溢出崩溃,其他节点还可以对外提供服务,因此单节点的内存溢出并不会造成系统完全不可用。

本方法应用于语音对话平台的词库服务中,通过词库服务来辅助用户的浏览器端和训练服务进行数据传输。

对于步骤s11,为了避免在训练大体量的词库数据库时内存溢出,通过io流的方式动态解析大体量级别的词库数据库,读取文件过程中,每次只从词库数据库中获取一部分词条。其中,io流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为io流。换句话说,io流就是以流的方式进行输入输出。通过输入流的方式,从词库数据库中获取一部分词条。例如,词库的大小为10gb,单词只获取100mb的词条。这样确保内存不会溢出。

对于步骤s12,将从词库数据库中获取一部分词条加载至语音对话平台的内存中,每次只有少量的词条加载至内存。

作为一种实施方式,所述部分词条中的词条数量与所述内存的容量相关。

考虑到语音对话平台内存的容量,确保部分词条中词条数量所占用的容量要小于内存。以最小数量考虑,每次可以从词库数据库中读取单个词条至内存中,极限确保语音对话平台内存不溢出。也可以每次从词库中读取100个词条至内存(如果内存较大的情况下)中,在保证语音对话平台内存不溢出的基础上,提高解析效率。

对于步骤s13,将加载至内存的部分词条,从内存写入与训练服务建立请求的输出流,通过输出流将部分词条传送至训练服务中。其中,词库服务与训练服务预先建立好,例如可以建立http请求。

作为一种实施方式,在将所述一部分词条从所述内存写入与训练服务已建立请求的输出流的过程中,所述输出流为阻塞模式。

在输出流模式选择中,有阻塞和非阻塞模式,阻塞模式意味着必须要做完io操作(包括错误)才会返回,当试图对该文件描述符进行读写时,如果当时没有东西可读,或者暂时不可写,程序就进入等待状态,直到有东西可读或者可写为止。非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功。对于非阻塞状态,如果没有东西可读,或者不可写,读写函数马上返回,而不会等待。考虑到应对于词库解析这一环境,由于每次只将部分词条写入输出流至训练服务,因此使用阻塞模式。

通过该实施方式可以看出,解决了应用中解析大体积词库文件可能存在的内存溢出问题,同时避免了增加内存,扩容等造成的运维成本。在此基础上,不仅仅可以应用在解决读取大词库文件上,同时,可也以作为解决其他因素导致的系统内存溢出的一种参考。

作为一种实施方式,在本实施例中,在所述将所述一部分词条从所述内存写入与训练服务已建立请求的输出流之后,所述方法还包括:

继续基于输入流的方式自词库数据库获取下一部分词条;

加载所述下一部分词条至内存;

将所述下一部分词条从所述内存写入与训练服务已建立请求的输出流,直至所述词库数据库内所有的词条全部写入与所述训练服务已建立请求的输出流。

在本实施方式中,为了保证词库数据库中所有的词条都传输到训练服务中,会分多次进行获取。要注意的是,在每一次所述将所述一部分词条从所述内存写入与训练服务已建立请求的输出流之后,虚拟机会自动将内存中的部分词库信息进行释放,确保内存不会溢出。通过不断的将部分词条,分多次的写入与所述训练服务已建立请求的输出流,直至说是有的词条全部写入,也不会出现内存溢出。

通过该实施方式可以看出,进一步地解决了应用中解析大体积词库文件可能存在的内存溢出问题,同时避免了增加内存,扩容等造成的运维成本。

作为一种实施方式,在本实施例中,在所述词库数据库内所有的词条全部写入与所述训练服务已建立请求的输出流之后,所述方法还包括:

请求所述训练服务对所述词库数据库训练。

在本实施方式中,通常由多种方式可以进行词库训练,例如,收到部分词库,先进行训练,然后再基于后续写入的下一部分词库进行增量训练。也可以等待所有的词库都写入完毕,统一进行训练。

考虑到增量训练自身的缺陷,例如后续的训练会影响在先训练的结果,同时,由于考虑到本方法主要应用于大体量的词库,会有很多个部分,需要大量的增量训练,这对服务器的损耗是极大的。因此考虑到以上因素,选择了等待所有的词库都写入完毕后,再进行词库训练。

通过该实施方式可以看出,等待所有的词库都写入完毕后,再进行词库训练,保证词库训练的性能。

作为一种实施方式,在本实施例中,在所述词库数据库内所有的词条全部写入与所述训练服务已建立请求的输出流之后,所述方法还包括:

依次关闭所述输出流、所述输入流以及内存释放。

在本实施方式中,考虑的是先打开的流后关闭,后打开的流先关闭。例如,先打开的流是输入流,之后才使用的输出流,因此这种情况下,先关闭输出流,待输出流关闭后,关闭输入流。

同时考虑到另一种情况:看依赖关系,如果输出流a依赖输入流b,应该先关闭输出流a,再关闭输入流b。

如果不按照上述的顺序进行关闭,则会抛出io异常。

通过该实施方式可以看出,有序的关闭输入、输出流、内存释放确保系统的稳定性,避免异常。

作为一种实施方式,在本实施例中,在所述基于输入流的方式自词库数据库获取一部分词条之前,所述方法还包括:

响应于浏览器发起的词库训练请求,在数据库中查询所述词库训练请求对应的词库数据库,与所述词库训练请求对应的训练服务建立请求。

在本实施方式中,用户通过浏览器登录语音对话平台,与对话服务进行连接,用户在使用时,都是通过浏览器上的语音对话平台进行发起请求。

例如,用户词库训练时,后台进行查询词库所占用的内存容量是多少,通过与预先设定的值进行对比,判断用户要训练的词库是否为大体积词库。词库服务查询数据库可以是mongodb,获取到对应的词库文件,确定对应的大小,同时与训练服务建立http请求。为词库训练预先建立流的连接。其中,mongodb是一个基于分布式文件存储的数据库,其介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

通过该实施方式可以看出,为训练词库准备好流的连接,确保流的传递,提高训练的效率。

如图2所示为本方法应用到词库训练的一种具体实施方式,当浏览器发起请求,触发大体积词库训练时,词库服务处理流程如下。

步骤1:浏览器向词库服务发起训练请求。

步骤2:词库服务查询数据库mongodb,获取对应的词库文件,同时与训练服务建立http请求。

步骤3:获取词库文件输入流,并读取文件中的词条:

a.如果有词条,则读取单个词条至内存中,并将该词条写入与训练服务已建立的http请求的输出流中,此过程输出流阻塞,直到被通知词条写完成;

b.如果没有词条,则通知与训练服务已建立的http请求,输出流写词条已完成。

步骤4:训练接收完请求,执行词库训练。

步骤5:http输出流写完成之后,依次关闭http输出流、词库文件输入流,释放资源。

如图3所示为本发明一实施例提供的一种用于词库的解析系统的结构示意图,该系统可执行上述任意实施例所述的用于词库的解析方法,并配置在终端中。

本实施例提供的一种用于词库的解析系统10包括:词条获取程序模块11,词条加载程序模块12和输出程序模块13。

其中,词条获取程序模块11用于基于输入流的方式自词库数据库获取一部分词条;词条加载程序模块12用于加载所述一部分词条至内存;输出程序模块13用于将所述一部分词条从所述内存写入与训练服务已建立请求的输出流。

进一步地,所述系统包括:

词条获取程序模块,用于继续基于输入流的方式自词库数据库获取下一部分词条;

词条加载程序模块,用于加载所述下一部分词条至内存;

输出程序模块,用于将所述下一部分词条从所述内存写入与训练服务已建立请求的输出流,直至所述词库数据库内所有的词条全部写入与所述训练服务已建立请求的输出流。

进一步地,所述输出程序模块,用于请求所述训练服务对所述词库数据库训练;

进一步地,所述输出程序模块,用于依次关闭所述输出流、所述输入流以及内存释放;

进一步地,所述部分词条中的词条数量与所述内存的容量相关;

进一步地,所述输出流为阻塞模式;

进一步地,所述系统包括:请求建立程序模块,用于响应于浏览器发起的词库训练请求,在数据库中查询所述词库训练请求对应的词库数据库,与所述词库训练请求对应的训练服务建立请求。

本发明实施例还提供了一种非易失性计算机存储介质,计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的用于词库的解析方法;

作为一种实施方式,本发明的非易失性计算机存储介质存储有计算机可执行指令,计算机可执行指令设置为:

基于输入流的方式自词库数据库获取一部分词条;

加载所述一部分词条至内存;

将所述一部分词条从所述内存写入与训练服务已建立请求的输出流。

作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的方法对应的程序指令/模块。一个或者多个程序指令存储在非易失性计算机可读存储介质中,当被处理器执行时,执行上述任意方法实施例中的用于词库的解析方法。

非易失性计算机可读存储介质可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据装置的使用所创建的数据等。此外,非易失性计算机可读存储介质可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,非易失性计算机可读存储介质可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

本发明实施例还提供一种电子设备,其包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例的用于词库的解析方法的步骤。

本申请实施例的电子设备以多种形式存在,包括但不限于:

(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机、多媒体手机、功能性手机,以及低端手机等。

(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:pda、mid和umpc设备等,例如平板电脑。

(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器,掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。

(4)其他具有数据处理功能的电子装置。

在本文中,诸如一部分和下一部分等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”,不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1