掌桥专利:专业的专利平台
掌桥专利
首页

数据处理方法及装置

文献发布时间:2023-06-19 12:02:28


数据处理方法及装置

技术领域

本公开涉及数据处理领域中的人工智能技术,尤其涉及一种数据处理方法及装置。

背景技术

随着互联网技术的不断发展,为了保持良好的互联网环境,对于上传至网络中的内容进行审核也显得尤为重要。

其中,词表服务是机器审核中非常重要的一部分,在词表服务中可以将预设词汇添加至审核设备中,以使得审核设备根据预设词汇对待上传的内容进行审核,目前相关技术中在向审核设备中添加预设词汇的时候,通常是将所有的预设词汇按行读取,并对读取的预设词汇数据按行进行处理之后,存储至审核设备中。

然而,在预设词汇的数量较多的时候,采用上述介绍的实现方案进行预设词汇的添加,会导致数据处理的效率低下。

发明内容

本公开提供了一种数据处理方法及装置。

根据本公开的第一方面,提供了一种数据处理方法,包括:

确定待上传至目标设备的多个预设词汇;

在所述多个预设词汇中确定多组预设词汇,每组预设词汇中包括至少一个预设词汇;

并行对所述多组预设词汇进行处理,得到每组预设词汇中各预设词汇的属性信息;

对所述多组预设词汇和所述每组预设词汇中各预设词汇的属性信息进行归并处理得到词表数据,并将所述词表数据存储至目标设备,所述词表数据包括所述多个预设词汇和各预设词汇的属性信息。

根据本公开的第二方面,提供了一种数据处理装置,包括:

第一确定模块,用于确定待上传至目标设备的多个预设词汇;

第二确定模块,用于在所述多个预设词汇中确定多组预设词汇,每组预设词汇中包括至少一个预设词汇;

处理模块,用于并行对所述多组预设词汇进行处理,得到每组预设词汇中各预设词汇的属性信息;

存储模块,用于对所述多组预设词汇和所述每组预设词汇中各预设词汇的属性信息进行归并处理得到词表数据,并将所述词表数据存储至目标设备,所述词表数据包括所述多个预设词汇和各预设词汇的属性信息。

根据本公开的第三方面,提供了一种电子设备,包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行第一方面所述的方法。

根据本公开的第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行第一方面所述的方法。

根据本公开的第五方面,提供了一种计算机程序产品,所述计算机程序产品包括:计算机程序,所述计算机程序存储在可读存储介质中,电子设备的至少一个处理器可以从所述可读存储介质读取所述计算机程序,所述至少一个处理器执行所述计算机程序使得电子设备执行第一方面所述的方法。

根据本公开的技术有效提升了加载词典数据的效率。

应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。

附图说明

附图用于更好地理解本方案,不构成对本公开的限定。其中:

图1为本公开实施例提供的数据处理的场景示意图;

图2为本公开实施例提供的添加词表数据的一种可能的实现示意图;

图3为本公开实施例提供的数据处理方法的流程图;

图4为本公开实施例提供的数据处理方法的流程图二;

图5为本公开实施例提供的数据通道的实现方式;

图6为本公开实施例提供的各个处理单元并行获取数据的实现示意图;

图7为本公开实施例提供的数据处理方法的流程图三;

图8为本公开实施例提供的数据处理方法的流程示意图;

图9为本公开实施例的数据处理装置的结构示意图;

图10是用来实现本公开实施例的数据处理方法的电子设备的框图。

具体实施方式

以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

为了更好的理解本公开的技术方案,下面对本公开所涉及的相关技术进行进一步的详细介绍。

随着互联网技术的不断发展,上传至网络中的内容也越来越多,为了保证良好的网络环境,通常需要针对待上传的内容进行审核,在确定待上传的内容符合平台规范的时候,再进行内容的上传。

其中,在对内容的审核过程中,有一部分的审核是预设词汇的审核,例如确定待上传内容中是否包括预设词汇,若确定不包括预设词汇,则允许上传,若确定包括预设词汇,则不允许上传,并提示用户当前内容包括预设词汇。

在一种可能的实现方式中,例如可以由审核设备进行预设词汇的审核,例如可以结合图1进行理解,图1为本公开实施例提供的数据处理的场景示意图。

如图1所示,在进行数据处理的过程中,可以将预设词汇添加至审核设备中,之后审核设备可以根据添加的预设词汇,对待上传内容进行审核,得到待上传内容的审核结果,该审核结果例如可以为审核通过,或者还可以为审核不通过,审核结果取决于当前待上传内容中是否包括预设词汇。

因此词表服务是机审环节中非常重要的一部分,机审环节也就是上述介绍的审核设备进行审核,在实际实现过程中,通常是存在一些预设的预设词汇,词表服务需要将预设的预设词汇添加到审核设备的词表中,以保证审核设备可以根据预设词汇进行内容的审核。

通常情况下,词表的加载可以分为两个部分,一部分是在审核设备冷启动的时候,将所有的预设词汇按照行的顺序依次进行读取,并按照行的顺序一步一步的加载至审核设备的内存中;另一部分是通过热更新来加载新的增量数据。

然而,随着各个业务线的预设词汇的数据量的急剧上升,导致在冷加载的过程中需要进行大量的预设词汇的加载,进而导致了冷加载的速度非常慢,并且占用大量的机器内存,从而导致词表服务不能及时的对外提供精准的审核结果。以及,在进行热加载的时候,对于瞬间变化的大量的增量数据,会造成更新不及时,从而导致各个审核设备之间的差异较大,从而给导致词表服务的性能下降,进而影响最终的审核结果。

基于上述介绍的内容的基础上,下面结合图2对相关技术中进行预设词汇的加载的实现方式进行进一步的介绍,图2为本公开实施例提供的添加词表数据的一种可能的实现示意图。

具体的,在审核设备例如可以包括用于处理处理预设词汇的程序如图2所示,该程序可以启动10个线程,其中,1个线程负责初始化的词表的配置文件,还有8个线程用来刷新全量数据,剩下的1个线程用来处理增量数据,例如可以通过超文本传送协议(hypertexttransport protoco,HTTP)请求来获取词表的数据,之后线程间再加锁,以保证各个线程各司其职。

具体的,参见图1,在程序开始启动的时候,同步(sync)单元例如可以初始化10个线程,其中1个线程可以初始化并获取配置文件以及解析配置文件,从而得到各个业务线的获取词表的统一资源定位器(Uniform Resource Locator,URL),之后该线程可以将获取的URL推送到队列(Queue)中。

以及,用于处理全量数据的8个线程中的刷新(flush)单元会从队列中读取URL,并根据读取的URL通过HTTP的请求,来获取当前业务线下的所有预设词汇数据,其中各个线程之间会加锁,以保证各个线程各司其职,在获取到预设词汇数据之后,各个线程可以依次的将预设词汇数据按照行的顺序进行处理,写入高速缓冲存储器(cache)中,在处理完所有的预设词汇数据之后,用于处理全量数据的8个线程就完成了操作。

以及用于处理增量数据的线程中,会判断当前的业务线的预设词汇数据是否加完完成,并定时的以HTTP的方式获取增量数据,同样的将获取的增量数据按照行的数据行的顺序,对底层的cache进行CRUD操作,其中,CRUD操作包括数据的增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete)操作。

以及在cache中会存储有上述介绍的按行存储的行存储数据(line_cache),以及在cache中还可以包括匹配数据(match_data)以及字典信息(dict_info)。

上述介绍的实现方式存在以下问题:

1、线程容易存在挂死(hang死)现象,当线程挂死之后会导致无法及时进行数据处理;

2、对于千万级预设词汇的数据执行效率太低,因为整体生成词表是按行顺序获取,时间复杂度为O(n)。

3、内存占用高,中间产生很多临时变量,会加重系统垃圾回收(GarbageCollection,GC)压力,严重时会影响服务的整体性能,甚至会触发系统内存溢出(Out OfMemory,OOM)。

4、热加载性能差,对于大批量数据的更新,单线程无法及时处理,从而造成各个审核设备的预设词汇数据长时间不一致。

5、后期维护成本高,对于业务升级,依赖的三方资源库太多。

针对相关技术中的问题,本公开提出了如下技术构思:通过设置多个处理单元,对预设词汇并行的进行获取,并将各个处理单元获取的预设词汇,分别作为各处理单元对应的一个预设词汇组,各个处理单元针对各自对应的预设词汇组分别进行数据处理,从而可以有效提升数据处理的效率,之后对各个预设词汇组的处理结果进行归并处理,就能够得到完整的词表数据。

下面结合具体的实施例对本公开提供的数据处理方法进行介绍,在介绍本公开的各个实施例之前,首先对本公开各实施例的执行主体进行说明,本公开中各个实施例的执行主体均为上述介绍的审核设备,也就是说由审核设备负责将预设词汇添加至自身的内存中,其中审核设备例如可以为服务器、处理器、微处理器等具备数据处理功能的设备,在实际实现过程中,审核设备的具体实现方式可以根据实际需求进行选择和设置,本实施例对此不做限定。

下面首先结合图3进行介绍,图3为本公开实施例提供的数据处理方法的流程图。

如图3所示,该方法包括:

S301、确定待上传至目标设备的多个预设词汇。

在本实施例中,目标设备例如可以为上述介绍的审核设备,本实施例中需要将预设词汇上传至目标设备中,因此需要首先确定待上传至目标设备的多个预设词汇。

在一种可能的实现方式中,可以在预设设备中存储有预设词汇文件,在预设词汇文件中包括多个预设词汇,因此例如可以根据预设地址从预设设备中获取预设词汇文件,从而得到多个预设词汇。

值得说明的是,在实际实现过程中,针对不同的业务线可以设置有不同的预设词汇,因此各个业务线可以对应各自的预设词汇文件,本实施例中是以任一个业务线为例进行的介绍,各个业务线的实现方式是类似的,在实际实现过程中,可以仅确定一条业务线的预设词汇,也可以确定多条业务线的预设词汇,本实施例对此不做限制,其取决于业务线的设置以及实际的预设词汇审核需求,各个业务线所对应的预设词汇的具体设置也可以根据实际需求进行选择。

比如说在预设设备中存储有某个业务线对应的预设词汇文件“word.txt”,在该txt格式的文件中,包括多个预设词汇,同时可以理解的是,当前所获取到的多个预设词汇,仅仅是包括在文件中的多个预设词汇,实际上还没有加载到目标设备中,因此后续还需要这多个预设词汇进行处理,才能够将这多个预设词汇加载到目标设备中。

S302、在多个预设词汇中确定多组预设词汇,每组预设词汇中包括至少一个预设词汇。

本实施例中,可以将多个预设词汇进行分组处理,以在多个预设词汇中确定多组预设词汇,其中,每组预设词汇中包括至少一个预设词汇。

此处进行举例说明,比如说当前的预设词汇共有100万行,一行为一个预设词汇,例如可以将其中的20万行作为一组,则可以将这些预设词汇分为5组,得到5组预设词汇,其中的一组预设词汇可以理解为一个数据分片。

在实际实现过程中,针对多个预设词汇如何进行分组,比如说各组预设词汇中所包括的预设词汇的数量等等,均可以根据实际需求进行选择,本实施例对此不做限制。

S303、并行对多组预设词汇进行处理,得到每组预设词汇中各预设词汇的属性信息。

针对划分的各组预设词汇,本实施例中并行的多组预设词汇进行处理,在本实施例中,需要确定各个预设词汇的属性信息,预设词汇的属性信息例如可以包括如下中的至少一种:词汇长度、词汇类型。

在实际实现过程中,预设词汇的属性信息除了词汇长度和词汇类型之外,还例如可以包括词汇标识、

在一种可能的实现方式中,一组预设词汇可以对应一个处理单元,则例如可以由各个处理单元对各个多组预设词汇并行的进行处理,例如针对任一个处理单元,该处理单元可以对其对应的一组预设词汇中的各个预设词汇依次进行处理,从而确定各个预设词汇的属性信息。

通过对多个预设词汇进行分组,以及对多组预设词汇进行并行的处理,从而可以有效提升数据处理的效率,避免了一行一行处理所导致的数据处理的效率低下。

S304、对多组预设词汇和每组预设词汇中各预设词汇的属性信息进行归并处理得到词表数据,并将词表数据存储至目标设备,词表数据包括多个预设词汇和各预设词汇的属性信息。

在得到各组预设词汇中的各个预设词汇的属性信息之后,此时的各个预设词汇还是分散的,还需要将完整的预设词汇数据存储在目标设备的内存中,因此根据各个预设词汇以及各个预设词汇各自对应的属性信息进行归并处理,从而得到词表数据,在词表数据中包括多个预设词汇以及各预设词汇的属性信息。

可以理解的是,如果按照顺序遍历的方式将各个预设词汇及其对应的属性信息写入目标设备的内存的话,其对应的复杂度就是O(n),本实施例中为了提升写入目标设备的内存的速度,可以采用了归并算法对各个预设词汇和机器对应的属性信息进行遍历,进而写入内存,以有效降低时间复杂度,提升预设词汇加载至目标设备的效率。

在一种可能的实现方式中,可以将一个预设词汇以及该预设词汇对应的属性信息确定为一条组合数据,之后针对各个预设词汇分别对应的多条组合数据进行归并处理,从而得到词表数据,在词表数据中就包括按顺序存储的多条组合数据,因此,在词表中包括多条组合数据,每条组合数据中都包括一个预设词汇以及该预设词汇对应的属性信息。

可以理解的是,在词表中同时包括预设词汇和属性信息,从而可以使得在进行预设词汇匹配时,不仅仅可以根据预设词汇的内容进行匹配,还可以根据其属性信息进行匹配,从而可以有效提升预设词汇匹配的效率。

本公开实施例提供的数据处理方法,包括:确定待上传至目标设备的多个预设词汇。在多个预设词汇中确定多组预设词汇,每组预设词汇中包括至少一个预设词汇。并行对多组预设词汇进行处理,得到每组预设词汇中各预设词汇的属性信息。对多组预设词汇和每组预设词汇中各预设词汇的属性信息进行归并处理得到词表数据,并将词表数据存储至目标设备,词表数据包括多个预设词汇和各预设词汇的属性信息。通过将多个预设词汇进行分组,得到多组预设词汇,之后针对多组预设词汇并行的进行处理,从而确定各个预设词汇各自对应的属性信息,再之后将预设词汇和属性信息存储在目标设备的内存中,从而有效提升加载词典数据的效率。

在上述实施例的基础上,下面结合图4至图6对本公开提供的数据处理方法进行进一步的详细介绍,图4为本公开实施例提供的数据处理方法的流程图二,图5为本公开实施例提供的数据通道的实现方式,图6为本公开实施例提供的各个处理单元并行获取数据的实现示意图。

如图4所示,该方法包括:

S401、根据第一地址从第一预设设备中获取多个预设词汇。

在本实施例中,例如可以首先从第一预设设备中进行预设词汇的获取,在第一预设设备中存储有当前处理的业务线的各个预设词汇,并且从第一预设设备中获取预设词汇的时候,具体可以是根据第一地址访问第一预设设备中的目标位置,从而得到预设词汇文件,该预设词汇文件中可以包括多个多个预设词汇,从而实现对多个预设词汇的获取。

在一种可能的实现方式中,第一预设设备例如可以为百度对象存储(BaiduObject Storage,BOS),则在目标设备中用于获取数据的单元中例如可以实现有BOS的软件开发工具包(Software Development Kit,SDK),或者第一预设设备可以为其余的实现方式,本实施例对此不做限制,只要在第一预设设备中存储有预设词汇即可。

S402、判断从第一预设设备中获取多个预设词汇是否成功,若是,则执行S403,若否,则执行S404。

在实际实现过程中,从第一预设设备中获取预设词汇有可能会获取成功,也有可能会获取失败,比如说在第一预设设备中的预设词汇丢失、网络情况较差等等问题,都有可能导致从第一预设设备中获取多个预设词汇失败,因此本实施例为了保证数据处理的稳定性,可以判断从第一预设设备中获取多个预设词汇是否成功。

S403、将从第一预设设备中获取的多个预设词汇确定为待上传至目标设备的多个预设词汇。

在一种可能的实现方式中,若从第一预设设备中获取多个预设词汇成功,则表示当前从第一预设设备中获取到了需要的多个预设词汇,则可以直接将第一预设设备中获取的多个预设词汇确定为待上传至目标设备的多个预设词汇。

S404、根据第二地址从第二预设设备中获取多个预设词汇,得到待上传至目标设备的多个预设词汇。

在另一种可能的实现方式中,若从第一预设设备中获取多个预设词汇失败,则可以选择根据第二地址从第二预设设备中获取多个预设词汇,其中,第二地址例如可以为http地址,第二预设设备例如可以为通过http方式访问的设备,通过第二地址和第二预设设备,得到待上传至目标设备的多个敏感地址。

因此在本实施中,会优先从第一预设设备中获取预设词汇,若从第一预设设备中获取数据失败,则会采用第二预设设备进行兜底,从第二预设设备中获取预设词汇,以保证进行预设词汇获取的稳定性和安全性,避免获取不到预设词汇的情况发生。

S405、将待上传至目标设备的多个预设词汇存储在数据通道中。

在获取到多个预设词汇之后,本实施例中可以将待上传至目标设备的多个预设词汇存储在数据通道(chan)中。

在一种可能的实现方式中,例如可以利用mmap,将预设词汇文件中的数据直接映射到目标设备的内存中,其中,映射之后内存中的数据为[]byte类型。

因为之后在进行数据处理时只能基于string格式的数据进行,因此需要对[]byte类型的数据进行转换,例如可以通过强制类型转换(reinterpret_cast),对[]byte类型的切片的指针类型进行重新解读,将其转化为string类型的数据,从而将string类型数据写入数据通道(chan)中,以便于后续进行处理。

其中,mmap是一种内存映射文件的方法,mmap可以将一个文件或者其它对象映射进内存,其中,mmap操作提供了一种机制,让用户程序直接访问设备内存,这种机制,相比较在用户空间和内核空间互相拷贝数据,可以有效提升处理效率。

可以理解的是,如果按照普通的处理方式,一行一行的进行数据的访问和拷贝,则需要进行多次数据的拷贝,而在本实施例中,例如针对预设词汇文件“aaa.txt”,可以利用mmap通过内存映射的方式,从aaa.txt文件读入数据到内存,从而避免一次拷贝。

以及,读取进来的数据为[]byte的方式,而后续的数据处理只能基于string格式,因此需要进行格式的转换,如果使用string([]byte)的方式直接进行转换,会造成内存的再一次拷贝,而本实施例中使用*(*string)(unsafe.Pointer(&data))这种强制类型转换,进而节省一次内存的拷贝,从而进一步的提升数据处理的效率,也减少了内存分配的压力。

在经过上述的数据映射以及格式转换的处理之后,可以将string格式的数据写入数据通道(chan)中。

其中,数据通道(chan)是用来传递数据的一种数据结构,又叫信道,用于两个线程之间传递指定类型的值,启到同步运行和通讯的作用,例如可以参照图5进行理解,数据通道可以在各个线程之间进行数据的传递。

可以理解的是,通过这种数据通道的方式,可以使用通信的方法代替共享内存,当一个资源需要在各个线程之间共享时,通道可以在各个线程之间架起一个管道,并提供了确保同步交换数据的机制,因此通过数据通道的方式,可以有效减少内存的压力。

在声明通道时,需要指定将要被共享的数据的类型。可以通过通道共享内置类型、命名类型、结构类型和引用类型的值或者指针。

S406、创建多个处理单元。

之后需要对数据通道中的数据进行处理,本实施例中可以通过多个处理单元并行的进行处理,因此可以创建多个处理单元,在一种可能的实现方式中,处理单元例如可以为协程,其中,协程运行在线程之上,当一个协程执行完成后,可以选择主动让出,让另一个协程运行在当前线程之上。协程并没有增加线程数量,只是在线程的基础之上通过分时复用的方式运行多个协程。

或者处理单元还可以为线程、进程等任意的形式,只要多个处理单元可以并行的进行数据处理即可。

在一种可能的实现方式中,本实施例中针对并发处理的处理单元的数量会进行一定的限制,以避免创建的处理单元过多导致设备压力过大,则例如可以设置最大处理单元数量,创建的处理单元不超过该最大处理单元数量。

S407、通过各处理单元,并行的从数据通道中获取多个预设词汇。

在创建多个处理单元之后,可以通过各个处理单元,并行的从数据通道中获取预设词汇。

在一种可能的实现方式中,可以预先将数据通道中的多个预设词汇进行划分,比如说当前预设词汇共有100万行,以20万行为单位进行划分,将1行-20万行划分,将20万-40万行划分等等,之后各个处理单元从不同的划分处依次进行获取,比如说处理单元1从第一行开始获取,处理单元2从第20万行开始获取等等。

在另一种可能的实现方式中,还可以通过各个处理单元从并行的数据通道中参差的依次进行预设词汇的获取,比如说处理单元1获取第一行,处理单元2获取第二行,处理单元3获取第三行,处理单元4获取第四行,处理单元获取第5行,这5行的获取是并行执行的,之后的其余各行的实现方式类似。

本实施例对各个处理单元所具体获取预设词汇的实现方式不做限制,只要其可以实现并行的获取即可。

S408、分别将各处理单元获取的预设词汇确定为一组预设词汇,得到多组预设词汇。

针对每个处理单元所获取到的数据进行数据分片,例如可以将各个处理单元获取到的预设词汇确定为一组预设词汇,从而得到多组预设词汇。

例如可以以处理单元是协程为例,结合图6进行理解,如图6所示,假设当前启动了5个协程,分别是协程1、协程2、协程3、协程4和协程5,这5个协程可以并行的从数据通道中获取数据。

其中,协程1获取到的预设词汇可以作为第一组预设词汇,其中一组预设词汇也可以理解为一个数据分片,因此协程1所获取到的第一组预设词汇也可以作为数据分片1。同样的,协程2获取到的预设词汇可以作为第二组预设词汇,也可以作为数据分片2;协程3获取到的预设词汇可以作为第三组预设词汇,也可以作为数据分片3;协程4获取到的预设词汇可以作为第四组预设词汇,也可以作为数据分片4;协程5获取到的预设词汇可以作为第五组预设词汇,也可以作为数据分片5,从而实现并行的获取数据,得到多组预设词汇。

在实际实现过程中,具体选择的处理单元,以及创建的处理单元的个数等等均可以根据实际需求进行选择,本实施例对此不做限制。

S409、通过各处理单元,分别从对象池中获取至少一个处理对象,其中,处理对象用于确定预设词汇的属性信息。

在本实施例中,针对各个数据分片中的预设词汇,还需要确定各个词汇中的属性信息,在本实施例中,各个处理单元对于各自对应的数据分片,也就是说一组预设词汇,并行的分别进行处理,比如说协程1确定数据分片1中的各个预设词汇的属性信息,协程2确定数据分片2中的各个预设词汇的属性信息,等等。

在一种可能的实现方式中,在确定预设词汇的属性信息的时候,需要用到处理对象,其中处理对象用于确定预设词汇的属性信息,可以理解的是,处理对象例如可以用于给预设词汇的属性信息进行赋值操作,本实施例中的处理对象还可以理解为数据对象。

其中处理对象例如可以为栈对象,此处以栈对象为例对处理对象的实现进行介绍。

在相关的技术中,比如说在根据栈对象进行预设词汇的属性信息的赋值,在赋值完之后可以将预设词汇的属性信息写入内存中,此时这个栈对象就在函数的生命周期结束被释放了。

那么在数据量比较大的时候,就会频繁的申请释放内存,这样会导致内存分配以及系统的GC压力较大。

而在本实施例中,是通过设置了一个对象池,在该对象池中可以包括多个栈对象,处理单元可以从对象池中获取栈对象,在利用栈对象对属性信息赋值完成之后,可以将栈对象在放回到对象池中,之后在针对其余预设词汇进行处理的时候,就可以复用对象池中的栈对象,只需要将属性信息进行修改即可,从而可以有效减少对于内存的申请。

因此在本实施例中,通过各处理单元,分别从对象池中获取至少一个处理对象,可以理解的是,针对一个预设词汇需要用到一个处理对象。

因此本实施例中,通过设置对象池对处理对象进行复用,从而可以有效减少内存分配,以减缓处理器的GC压力,为业务服务提供了更高的可用性。

S410、根据各处理对象,并行确定多组预设词汇中各预设词汇的属性信息。

之后根据获取的处理对象,并行的确定多组预设词汇中各个预设词汇的属性信息,这也就是上述介绍的赋值操作,该过程是在各个数据分片中,由各个处理单元分别的并行处理的,因此可以有效提升处理效率。

S411、释放各处理对象,并将释放的处理对象存储在对象池中。

在根据处理对象对属性信息赋值完成之后,可以将处理对象释放,并将释放的处理对象放回对象池,以便于实现对处理对象的复用。

S412、对多组预设词汇和每组预设词汇中各预设词汇的属性信息进行归并处理得到词表数据,并将词表数据存储至目标设备,词表数据包括多个预设词汇和各预设词汇的属性信息。

在上述实现针对每组的预设词汇(每个数据分片)的处理之后,还需要最后将预设词汇和其对应的属性信息汇入目标设备的cache中,则可以采用归并处理的方法,加快写入cache的速度。

在一种可能的实现方式中,预设词汇的属性信息中还例如可以包括预设词汇的标识,该标识例如可以为1、2、3等数字标识,则例如可以根据敏感信息的标识,按照从小->大的方式对预设词汇和其对应的属性信息进行归并,具体的归并处理的实现可以参照相关技术中的描述,此处对此不进行赘述。

S412中其余的实现方式与S304的实现方式类似,此处不再赘述。

在一种可能的实现方式中,本实施例中还设置有一个加载指示信息,该加载指示信息用于指示词表数据的加载是否完成,例如在进行预设词汇的获取之前,可以将该加载指示信息设置为第一状态,用于指示词表数据未加载完成,在执行完S412的操作,在词表数据加载完成之后,可以将加载指示信息设置为第二状态,第二状态用于指示词表数据加载完成。

值得说明的是,针对不同的业务线需要加载不同的词表数据,则可以针对各个业务线分别设置各自对应的加载指示信息,例如当前针对某条业务线设置了加载指示信息flag,其初始情况下为false,表示该条业务线的词表数据加载未完成,在词表数据加载完成之后,可以将该flag设置为ture。

此外,在本实施例中还针对程序设置有随机休眠(sleep)的时间,以保证程序可以让出CPU进行其他操作,减缓CPU的压力。

本公开实施例提供的数据处理方法,通过从第一预设设备中获取预设词汇,以及采用第二预设设备进行兜底,从而可以保证稳定有效的获取到多个预设词汇,以及对获取的多个预设词汇,通过mmap的数据映射的方式以及强制类型转换,可以在减少数据拷贝量的方式下,将预设词汇写入数据通道中,从而有效减少了内存分配,减缓了系统的GC压力,同时本实施例中通过设置对象池,通过对对象池中的处理对象的复用,对各个预设词汇的属性信息进行赋值,从而可以有效减少内存分配的压力,为业务的服务提高了更高的可用性,并且通过并发的方式获取数据,在数据写入缓存的时候,采用归并的算法,有效降低了时间复杂度,极大的提升了词表数据的加载效率。

上述实施例介绍的是冷启动的实现方式,在实际实现过程中,上述实现过程例如可以在目标设备启动时进行,还例如可以在目标设备启动之后,按照一定的周期重复执行,比如说每个月执行一次,以保证加载的预设词汇的准确性。

在上述介绍内容的基础上,还可以采用热加载的方式,对目标设备中存储的词表数据进行更新,下面结合图7对热加载的实现方式进行介绍。图7为本公开实施例提供的数据处理方法的流程图三。

如图7所示,该方法包括:

S701、以第一预设时长为预设周期,热加载单元在预设周期结束时,判断加载指示信息是否为第二状态,若是,则执行S702,若否,则执行S701。

在本实施例中,热加载的实现可以周期性的进行,具体的,可以以第一预设时长为预设周期,周期性的判断在当前预设周期结束的时候,加载指示信息是否为第二状态,因为加载指示信息为第二状态时,就表示当前业务线的词表数据的加载已经完成了,就可以对词表数据进行更新了。

若加载指示信息不是第二状态,则表示当前业务线的词表数据的加载还未完成,无需进行更新,因此可以重复执行S701,在下一个预设周期结束的时候,判断加载指示信息是否为第二状态,持续的进行周期性的判断,直至加载指示信息为第二状态。

其中,第一预设时长比如说可以为10秒,在实际实现过程中,第一预设时长的具体实现可以根据实际需求进行选择,本实施例对此不做限制。

S702、热加载单元根据当前时刻确定更新时段,其中,更新时段为当前时刻之前第一预设时长的时段。

在一种可能的实现方式中,若确定加载指示信息为第二状态,则表示当前业务线的词表数据已经加载完成,则可以通过热加载单元对目标设备中的词表数据进行更新。

本实施例中的热加载单元可以理解为协程、线程、进程等等,与上述介绍的处理单元类似,只是其实现的作用不相同。

具体的,热加载单元可以首先确定更新时段,更新时段为当前时刻之前的第一预设时长的时段,比如说当前时刻是8点30分30秒,第一预设时长为10秒,则更新时段就是8点30分20秒到8点30分30秒。

在一种可能的实现方式中,可以获取当前时刻的时间戳,根据当前时刻的时间戳和第一预设时长确定更新时段。

S703、获取更新时段内的多个更新词汇,其中,更新词汇中包括待添加词汇和待删除数词汇。

在确定更新时段之后,可以获取更新时段内的多个更新词汇,在更新词汇中包括待添加的词汇和待删除的词汇。

在一种可能的实现方式中,可以将更新时段作为请求参数,向第一预设设备发送请求信息,该请求信息用于确定在更新时段中的更新数据的数据量。

之后第一预设设备可以根据请求信息向目标设备发送更新时段中的更新数据的数据量,目标设备中的热加载进程可以根据更新数据的数据量进行可控制的并发分页获取。

其中,一次请求获取的数据量是固定的,则可以根据一次请求的数据量和需要更新的数据总量,确定请求次数,之后根据请求次数按照相应的频率进行数据的并发分页获取,以实现对更新数据的获取,其中并发获取的实现方式与上述介绍的类似,例如可以在热加载进程内部进行数据的并发获取。

本实施例中针对更新数据还可以进行分类,将更新数据分配为待删除数据和待添加数据,以便于后续进行相应的操作。

S704、根据多个更新词汇中的待删除词汇,将词表数据中与待删除词汇对应的预设词汇和属性信息删除。

在本实施例中,在多个更新词汇中包括待删除词汇,待删除词汇是需要从词表数据中删除的词汇,本实施例中已经实现了对待删除词汇和待添加词汇的分类,因此可以对待删除数据进行批量的删除,具体的,将词表数据中与待删除词汇对应的预设词汇和属性信息删除。

S705、根据多个更新词汇中的待添加词汇,将多个待添加词汇确定为多组待添加词汇,每组待添加词汇中包括至少一个待添加词汇;并行对多组待添加词汇进行处理,得到每组待添加词汇中各待添加预设词汇的属性信息;对多组待添加词汇和每组待添加词汇中各待添加词汇的属性信息进行归并处理得到待添加词表数据,并向目标设备上传待添加词表数据,以将待添加词表数据添加至词表数据中。

在本实施例中,在更新词汇中还包括待添加词汇,待添加词汇是需要添加至词表数据中的词汇,本实施例中的热加载单元在将待添加词汇添加至词表数据中时,复用上述介绍的冷启动实现过程中添加词表数据的逻辑,实现将待添加词汇及其对应的属性信息添加至词表数据中,具体的实现方式可以参照上述实施例的介绍,此处不再赘述。

在实际实现过程中,S704和S705的执行顺序可以根据实际需求进行选择,本实施例对此不做限制。

以及本实施例中针对热加载单元,还可以以第二预设时长为周期,监听热加载单元是否运行正常,若未监听到热加载单元,则重新启动一个热加载单元进行热加载,相当于增加了热加载单元的心跳检查逻辑。

本公开实施例提供的数据处理方法,通过在热加载过程中复用冷启动过程中的预设词汇加载方法,并且在热加载单元的内部又实现了并发和分片满足,从而可以对大量的增量数据实现快速有效的处理,进而保证各个目标设备中可以在极短的时间内实现数据的一致性,从而保证审核的准确性,并且在热加载处理过程中增加心跳检查逻辑,对于有问题的线程可以自动进行重启,进而保证可以成功热加载所有的数据,提高了系统的稳定性。

在上述实施例的基础上,下面结合图8对本公开中的数据处理方法进行一个系统的介绍,图8为本公开实施例提供的数据处理方法的流程示意图。

如图8所示,在程序启动前,可以将加载指示信息flag初始化为false,之后可以进行可控制的并发,例如设置最大的处理单元数量。

之后可以批量获取预设词汇,例如可以从BOS中获取多个敏感数据,若从BOS中获取失败,则以http进行失败兜底,根据http的方式进行获取。

在获取到多个预设词汇之后,可以将多个预设词汇存储在数据通道中,具体的,可以利用mmap,将预设词汇的文件的数据直接映射到内存中,内存中的数据为[]byte类型,之后再通过强制类型转换,将[]byte类型的切片的指针类型进行重新解读,转化为string类型的数据,写入数据通道中,更为具体的实现方式可以参照上述实施例的介绍。

之后可以启动多个处理单元,本实施例中以处理单元是协程为例,各个协程可以并行的从数据通道中获取数据,并且将各个协程取到的数据进行数据分片,得到多个数据分片,各个协程可以针对各自对应的数据分片分别进行处理。

在各个协程处理各自对应的数据分片的过程中,各个协程可以从对象池中拿取数据对象,对各自对应的数据分片中的预设词汇进行属性信息的赋值,以确定各个预设词汇各自对应的属性信息,在对预设词汇的属性信息赋值完成之后,再将数据对象放入对象池中,以实现对数据对象的复用,减少内存分配和系统GC压力。

之后对各个预设词汇机器对应的属性信息进行归并操作,得到词表数据,其中通过归并进行预设词汇机器对应的属性信息的遍历,可以有效的降低时间复杂度,提升处理效率。

同时,本实施例中还加入了随机sleep的时间,来保证程序可以让出CPU进行其它操作,减缓CPU的压力。

在当前业务线的词表数据加载完成之后,可以将加载指示信息flag设置为ture。

之后可以以第一预设时长为周期,检查加载指示信息是否为第二状态,在确定加载指示信息为第二状态时,可以根据当前时间戳和第一预设时长确定更新时段,并向第一预设设备发送包括更新时段的请求信息,以确定需要更新的更新数据的数据量。

之后根据待更新数据的数据量,通过频控分页的方式获取更新词汇,具体的实现方式可以参照上述实施例的介绍,此处不再赘述,以及本实施例中可以对更新词汇直接进行分类,更新词汇中包括待添加词汇和待删除词汇。

针对待删除词汇,可以直接从词典数据中批量删除,针对待添加词汇,可以复用冷启动过程中添加数据的处理方式,将待添加词汇添加到词典数据中,从而实现对词典数据的热加载。

以及本实施例中可以定期监听热加载协程是否运行,若没有监听到,则可以重新启动一个协程以进行热加载。

本公开实施例提供的数据处理方法,通过增加协程的心跳检查逻辑,对于异常的协程可以自动进行重启,从而保证可以成功热加载所有的待更新数据,有效提升了系统的稳定性。同时采用了并发的方式获取和处理预设词汇的相关数据,在数据写入缓存时,采用了归并的算法,将时间复杂度降为O(log n),极大的提升了词表生成的效率。同时,采用了零拷贝和对象池的方式,大量减少内存分配,减缓CPU的GC压力,为业务服务提供了更高的可用性。以及,热加载中复用了冷启动的数据处理方式,并且内部又实现了并发和分片满足,对应大量的增量数据可以实现快速的更新,使各个目标设备可以在极短的时间内实现数据的一致性,保证审核的准确率。

图9为本公开实施例的数据处理装置的结构示意图。如图9所示,本实施例的数据处理装置900可以包括:第一确定模块901、第二确定模块902、处理模块903、存储模块904、更新模块905。

第一确定模块901,用于确定待上传至目标设备的多个预设词汇;

第二确定模块902,用于在所述多个预设词汇中确定多组预设词汇,每组预设词汇中包括至少一个预设词汇;

处理模块903,用于并行对所述多组预设词汇进行处理,得到每组预设词汇中各预设词汇的属性信息;

存储模块904,用于对所述多组预设词汇和所述每组预设词汇中各预设词汇的属性信息进行归并处理得到词表数据,并将所述词表数据存储至目标设备,所述词表数据包括所述多个预设词汇和各预设词汇的属性信息。

一种可能的实现方式中,所述第二确定模块902包括:

创建单元,用于创建多个处理单元903;

第一获取单元,用于通过各所述处理单元903分别获取所述多个预设词汇;

第一确定单元901,用于分别将各所述处理单元903获取的预设词汇确定为一组预设词汇,得到所述多组预设词汇。

一种可能的实现方式中,所述多个预设词汇存储在数据通道中;

所述第一获取单元具体用于:

通过各所述处理单元903,并行的从所述数据通道中获取所述多个预设词汇。

一种可能的实现方式中,所述处理模块903包括:

第二获取单元,用于通过各所述处理单元903,分别从对象池中获取至少一个处理对象,其中,所述处理对象用于确定所述预设词汇的属性信息;

第二确定单元902,用于根据各所述处理对象,并行确定所述多组预设词汇中各预设词汇的属性信息;

释放单元,用于释放各所述处理对象,并将释放的所述处理对象存储在所述对象池中。

一种可能的实现方式中,所述第一确定模块901包括:

第三确定单元,用于若根据第一地址从第一预设设备中获取到所述多个预设词汇,则将从所述第一预设设备中获取的多个预设词汇确定为所述待上传至目标设备的多个预设词汇;或者,

第三获取单元,用于若从第一预设设备中未获取到所述多个预设词汇,则根据第二地址从第二预设设备中获取所述多个预设词汇,得到待上传至目标设备的多个预设词汇;

存储单元,用于将所述待上传至目标设备的多个预设词汇存储在所述数据通道中。

一种可能的实现方式中,所述存储模块904还包括:

切换单元,用于在所述将所述词表数据存储至目标设备之后,将加载指示信息由第一状态切换为第二状态,其中,所述加载指示信息用于指示所述词表数据的加载是否完成,所述第一状态用于指示所述词表数据未加载完成,所述第二状态用于指示所述词表数据加载完成。

一种可能的实现方式中,所述更新模块905,用于以第一预设时长为预设周期,若在预设周期结束时,确定所述加载指示信息为第二状态,则通过热加载单元对所述目标设备中的词表数据进行更新。

一种可能的实现方式中,所述更新模块905包括:

时段确定单元,用于所述热加载单元根据当前时刻确定更新时段,其中,所述更新时段为当前时刻之前第一预设时长的时段;

更新词汇获取单元,用于获取所述更新时段内的多个更新词汇,其中,所述更新词汇中包括待添加词汇和待删除数词汇;

更新单元,用于根据所述多个更新词汇,对所述目标设备中的词表数据进行更新。

一种可能的实现方式中,所述更新单元具体用于:

根据所述多个更新词汇中的待删除词汇,将所述词表数据中与所述待删除词汇对应的预设词汇和属性信息删除;

根据所述多个更新词汇中的待添加词汇,将所述多个待添加词汇确定为多组待添加词汇,每组待添加词汇中包括至少一个待添加词汇;并行对所述多组待添加词汇进行处理,得到每组待添加词汇中各待添加预设词汇的属性信息;对所述多组待添加词汇和所述每组待添加词汇中各待添加词汇的属性信息进行归并处理得到待添加词表数据,并向所述目标设备上传所述待添加词表数据,以将所述待添加词表数据添加至所述词表数据中。

一种可能的实现方式中,所述更新模块905还包括:监听单元;

所述监听单元用于:

以第二预设时长为周期,监听所述热加载单元是否运行正常;

若否,则重新启动所述热加载单元。

本公开提供一种数据处理方法及装置,应用于数据处理领域中的人工智能技术,以达到提升加载词典数据的效率的目的。

根据本公开的实施例,本公开还提供了一种电子设备和一种可读存储介质。

根据本公开的实施例,本公开还提供了一种计算机程序产品,计算机程序产品包括:计算机程序,计算机程序存储在可读存储介质中,电子设备的至少一个处理器可以从可读存储介质读取计算机程序,至少一个处理器执行计算机程序使得电子设备执行上述任一实施例提供的方案。

图10示出了可以用来实施本公开的实施例的示例电子设备1000的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。

如图10所示,电子设备1000包括计算单元1001,其可以根据存储在只读存储器(ROM)1002中的计算机程序或者从存储单元1008加载到随机访问存储器(RAM)1003中的计算机程序,来执行各种适当的动作和处理。在RAM 1003中,还可存储设备1000操作所需的各种程序和数据。计算单元1001、ROM 1002以及RAM 1003通过总线1004彼此相连。输入/输出(I/O)接口1005也连接至总线1004。

设备1000中的多个部件连接至I/O接口1005,包括:输入单元1006,例如键盘、鼠标等;输出单元1007,例如各种类型的显示器、扬声器等;存储单元1008,例如磁盘、光盘等;以及通信单元1008,例如网卡、调制解调器、无线通信收发机等。通信单元1008允许设备1000通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。

计算单元1001可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1001的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元1001执行上文所描述的各个方法和处理,例如数据处理方法。例如,在一些实施例中,数据处理方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1008。在一些实施例中,计算机程序的部分或者全部可以经由ROM1002和/或通信单元1008而被载入和/或安装到设备1000上。当计算机程序加载到RAM 1003并由计算单元1001执行时,可以执行上文描述的数据处理方法的一个或多个步骤。备选地,在其他实施例中,计算单元1001可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行数据处理方法。

本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。

用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。

在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。

为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。

可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。

计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务("Virtual Private Server",或简称"VPS")中,存在的管理难度大,业务扩展性弱的缺陷。服务器也可以为分布式系统的服务器,或者是结合了区块链的服务器。

应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。

上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

相关技术
  • 图像数据处理方法、用于图像数据处理方法的程序、记录有用于图像数据处理方法的程序的记录介质和图像数据处理装置
  • 药箱的数据处理方法、装置、数据处理方法和装置
技术分类

06120113148021