1.本发明涉及人工智能技术领域,具体而言,涉及一种数据编码生成方法、装置、电子设备及存储介质。
背景技术:
2.深度模型训练时,首先需要对参与训练的特征数据做向量化(embedding)处理,即将特征数据编码成满足深度模型的输入要求的形式。对于取值个数较少或者取值跨度范围较小的单一特征数据,存储向量化的空间大小(也称为字典大小)可以根据取值的最大值预先确定。例如,对于性别这种单一特征数据,实际表示时,其取值个数只有两个:0或1,字典大小由特征的取值空间(最大值)1决定。而对于取值跨度范围较大的高维id类特征数据,比如广告id或者用户id,或者一些不定长文本类特征,其取值跨度范围会非常大,甚至达到上亿或几十亿,如果直接使用与单一特征数据类似的存储方式,会造成模型参数量巨大,模型训练和部署均无法进行。
3.对于高维id类特征数据,现有技术通过改写底层训练框架,或者提供一些训练插件,在模型训练中自动支持id特征数据的过滤解析,以缩小高维id类特征数据的取值跨度范围,再将其编码成满足深度模型的输入要求的形式后进行存储,实现了利用高维id类特征数据的模型训练和部署。这种方式由于需要对模型训练涉及的上下游链路统一进行改造,一方面,实现成本极高,另一方面,要求上下游链路具有一定的开放度,在开放度受限的情况下,该方式几乎无法实现。
技术实现要素:
4.本发明的目的在于提供了一种数据编码生成方法、装置、电子设备及存储介质,其能够在不需要改造模型训练涉及的上下游链路的情况下生成高维id类特征数据的编码,以根据生成的编码进行模型训练,极大地降低了模型训练的成本,且不受模型训练涉及的上下游链路的开放度的限制。
5.为了实现上述目的,本发明实施例采用的技术方案如下:
6.第一方面,本发明实施例提供了一种数据编码生成方法,所述方法包括:
7.获取预设数据集中任一待编码数据,其中,由所述预设数据集中的数据的最大值和最小值确定的数值区间大于预设区间;
8.对所述待编码数据进行编码运算,得到所述待编码数据的多个编码索引值;
9.根据每一所述编码索引值,从预设编码矩阵中获取与每一所述编码索引值对应的目标编码行;
10.将所述多个目标编码行进行合并,得到所述待编码数据的编码结果,以根据所述待编码数据的编码结果进行模型训练。
11.进一步地,所述对所述待编码数据进行编码运算,得到所述待编码数据的多个编码索引值的步骤包括:
12.利用多个不同的预设哈希函数分别对所述待编码数据进行哈希运算,得到多个第一哈希值;
13.按照预设模值对每一所述第一哈希值进行取模运算,得到每一所述第一哈希值的取模结果;
14.将多个第一哈希值的取模结果作为所述待编码数据的多个编码索引值。
15.进一步地,每一所述预设哈希函数对应一个所述预设编码矩阵,每一所述预设编码矩阵的行数与所述预设模值相同,所述根据每一所述编码索引值,从预设编码矩阵中获取与每一所述编码索引值对应的目标编码行的步骤包括:
16.对任一目标编码索引值,根据所述目标编码索引值对应的所述预设哈希函数,确定与所述目标编码索引值对应的目标预设编码矩阵;
17.将所述目标编码索引值作为行索引,从所述目标预设编码矩阵中获取与所述行索引对应的目标编码行。
18.进一步地,所述对所述待编码数据进行编码运算,得到所述待编码数据的多个编码索引值的步骤还包括:
19.对所述待编码数据进行哈希运算,得到第二哈希值;
20.按照预设段数将所述第二哈希值依次进行切分,得到多个哈希分段;
21.根据预设模值,确定每一所述哈希分段的编码索引值;
22.将多个哈希分段的编码索引值作为所述待编码数据的多个编码索引值。
23.进一步地,按照切分顺序对所述哈希分段进行排序,所述根据所述预设模值,确定每一所述哈希分段的编码索引值的步骤包括:
24.按照所述预设模值对每一所述哈希分段进行取模运算,得到每一所述哈希分段的取模结果;
25.根据所述哈希分段的序号、取模结果及所述预设模值,计算所述哈希分段的编码索引值。
26.进一步地,所述预设编码矩阵的行数为所述预设模值与所述哈希分段的个数之乘积。
27.进一步地,所述编码结果用目标矩阵表示,所述目标矩阵的行数为一行,所述目标矩阵的列数与所述预设编码矩阵的列数相同,所述将所述多个目标编码行进行合并,得到所述待编码数据的编码结果的步骤包括:
28.对于所述目标矩阵中的任一目标列,根据所述多个目标编码行中处于所述目标列的元素,确定所述目标矩阵中目标列的元素。
29.第二方面,本发明实施例提供了一种数据编码生成装置,所述装置包括:
30.获取模块,用于获取预设数据集中任一待编码数据,其中,由所述预设数据集中的数据的最大值和最小值确定的数值区间大于预设区间;
31.运算模块,用于对所述待编码数据进行编码运算,得到所述待编码数据的多个编码索引值;
32.获取模块,还用于根据每一所述编码索引值,从预设编码矩阵中获取与每一所述编码索引值对应的目标编码行;
33.合并模块,用于将所述多个目标编码行进行合并,得到所述待编码数据的编码结
果。
34.第三方面,本发明实施例还提供了一种电子设备,包括处理器和存储器;所述存储器用于存储程序;所述处理器用于在执行所述程序时,实现上述第一方面中的数据编码生成方法。
35.第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述第一方面中的数据编码生成方法。
36.相对于现有技术,本发明实施例提供的一种数据编码生成方法、装置、电子设备及存储介质,通过对待编码数据进行编码运算,得到待编码数据的多个编码索引值,根据每一编码索引值,从预设编码矩阵中获取与每一编码索引值对应的目标编码行,最后将多个目标编码进行合并,得到待编码数据的编码结果,通过将待编码数据进行编码运算得到多个编码索引值,再对多个编码索引值进行合并,最终得到编码结果,明显减小了编码结果的宽度范围大大减小,且整个过程不需要对模型训练涉及的上下游链路的情况进行任何变动,因此,在有效降低高维id类特征数据占用的存储空间,极大地降低了模型训练的成本,且不受模型训练涉及的上下游链路的开放度的限制。
附图说明
37.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
38.图1示出了本发明实施例提供的现有技术的编码实现方式的示例图。
39.图2示出了本发明实施例提供的一种数据编码生成方法的流程示例图。
40.图3示出了本发明实施例提供的另一种数据编码生成方法的流程示例图。
41.图4示出了本发明实施例提供的另一种数据编码生成方法的流程示例图。
42.图5示出了本发明实施例提供的多次哈希的编码实现方式的示例图。
43.图6示出了本发明实施例提供的另一种数据编码生成方法的流程示例图。
44.图7示出了本发明实施例提供的多次切分的编码实现方式的示例图。
45.图8示出了本发明实施例提供的一种数据编码生成方法的流程示例图。
46.图9示出了本发明实施例提供的数据编码生成装置的方框示意图。
47.图10示出了本发明实施例提供的电子设备的方框示意图。
48.图标:10-电子设备;11-处理器;12-存储器;13-总线;100-数据编码生成装置;110-获取模块;120-运算模块;130-合并模块。
具体实施方式
49.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
50.因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护
的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
51.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
52.在本发明的描述中,需要说明的是,若出现术语“上”、“下”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
53.此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
54.需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
55.为了避免对模型训练涉及的上下游链路进行修改以降低成本,同时不受其开放度的限制,现有技术的一种处理方式为:先通过哈希降维,缩小取值空间(即取值跨度范围)到原来1/10到1/2。具体实现方式是:将待降维的id数值,通过哈希函数转换成为长数值型整数,然后通过对该整数取模(即整除后取余数,比如10对3取模,结果为1),最后将模的大小作为待降维的id数值的取值空间,也即前文所述的字典大小。请参照图1,图1示出了本发明实施例提供的现有技术的编码实现方式的示例图,图1中,待编码数据首先经过一次哈希,得到哈希结果hashresult1,然后对哈希结果hashresult1进行取模,根据取模结果2,在预设编码矩阵中检索到第2行,将第2行对应的向量作为该待编码数据的编码结果,对所有训练数据均进行如此方式的编码,将所有编码结果作为训练数据对模型进行训练。
56.上述方式虽然可以有效缩小取值空间,但是利用上述方式编码的数据进行模型训练时,训练效果并不理想,针对这一问题,发明人对现有技术进行了仔细而深入的研究发现,训练效果不理想,是因为上述方式编码时哈希冲突较大,所谓的哈希冲突为:不同的待编码数据,经过上述方式的编码,对应到相同的向量,比如按3取模,4、7、10等不同的数值,由于取模的结果都是1,则最终都会对应到1对应的向量,由此造成模型学习效果不佳。针对哈希冲突高的问题,发明人进行进一步研究发现,哈希冲突高的原因在于模的大小过小,为了降低哈希冲突,发明人尝试增大模的大小,但是模的大小过大,一方面,会造成模型训练的参数过多,导致训练所需的样本数据也随之增加,影响模型训练的效率,取值空间缩小效果并不明显,另一方面,如果预设数据集的数据增加导致其数值区间发生变化,则需要更新模值后重新对模型进行训练,增加了模型训练的成本。
57.针对上述问题,发明人进一步尝试将待编码数据出现的频次进行统计,过滤掉长久没有出现的取值,然后将高频的待编码数据做成字典,取该字典中的前若干个。这样虽然降低哈希冲突,但是,该方法需要维护比较大的字典,非常不利于模型的上线部署。同时,由于需要做数据统计,该字典需要经常维护更新,更新后还需要重新训练模型,维护成本很大。
58.有鉴于此,本发明实施例提供一种数据编码生成方法、装置、电子设备及存储介质,既不需要改造模型训练涉及的上下游链路,又不会出现较高的哈希冲突,同时还具有明显的缩小取值空间,下面将对其进行详细描述。
59.请参照图2,图2示出了本发明实施例提供的一种数据编码生成方法的流程示例图,该方法包括以下步骤:
60.步骤s101,获取预设数据集中任一待编码数据,其中,由预设数据集中的数据的最大值和最小值确定的数值区间大于预设区间。
61.在本实施例中,为了对模型进行训练,通常需要获取包括多个特征属性的原始样本,原始样本可以用表组织,处于表中相同列的数据属于同一个特征属性。预设数据集中的数据属于同一个特征属性,预设数据集可以包括表中的任一列数据,相同特征属性的原始样本的特征属性的取值可以相同,也可以不同,由预设数据集中数据的最大值和最小值可以确定一个数值区间,可以直接将该最大值和最小值作为数值区间,也可以在该最大值和最小值的基础上进行上下浮动后,得到数值区间,例如,预设数据集包括性别这一特征属性的数据,其取值可以用0和1表示,0代表女性,1代表男性,则其数值区间可以是[0,1],又例如,预设数据集包括年龄这一特征属性的数据,其取值的最小值为0,最大值为110,则可以将数值区间确定为:[0,150],即预设数据集中的取值可以为0~150之间的整数。预设区间用于表征预设数据集中的数据的最小跨度范围,例如,预设区间为[0,100000000],则意味着预设数据集中的数据的取值范围要大于该预设区间,预设区间可以根据实际场景的需要预先进行设定,例如,将预设区间设置为[0,10亿]或者[0,100亿]。
[0062]
步骤s102,对待编码数据进行编码运算,得到待编码数据的多个编码索引值。
[0063]
在本实施例中,一个待编码数据对应多个编码索引值,多个编码索引值既可以保证预设数据集中不同的待编码数据对应不同的编码结果,又可以保证预设数据集的数值区间通过编码得以有效地缩小,进而减少编码结果占用的存储空间。
[0064]
在本实施例中,多个编码索引值可以基于多次哈希运算实现,即对待编码数据分别用不同的哈希运算对待编码数据进行哈希处理,在对每一哈希处理的结果进行取余处理,最终得到多个编码索引值,也可以基于对待编码数据进行切分实现,将待编码数据进行一次哈希处理,再对哈希处理的结果进行切分,得到多个哈希分段,再基于每一哈希分段进行取余处理,最终得到多个编码索引值。
[0065]
步骤s103,根据每一编码索引值,从预设编码矩阵中获取与每一编码索引值对应的目标编码行。
[0066]
在本实施例中,在模型训练之前,预设编码矩阵可以根据预设数据集的数值区间进行随机初始化,例如,数值区间在[-1,1]之间,则预设编码矩阵中的数据可以包括0.001,-0.002,0.0004。在模型训练的过程中,该预设编码矩阵可以根据每轮或者每若干轮训练的结果进行更新。
[0067]
步骤s104,将多个目标编码行进行合并,得到待编码数据的编码结果,以根据待编码数据的编码结果进行模型训练。
[0068]
在本实施例中,将多个目标编码行进行合并,可以通过对多个目标编码行同一列的数据进行组合,或者进行求和、平均等计算实现,例如,目标编码行为:1,1,1,1和3,3,3,3,求和计算就是将这两个目标编码行按列进行求和,得到的编码结果为:4,4,4,4,求平均计算就是将这两个目标编码行按列进行求平均,得到的编码结果为:2,2,2,2,当然还可以使用其他方式进行合并,例如加权平均等。
[0069]
本发明实施例提供的上述方法,通过将待编码数据进行编码运算得到多个编码索
引值,再对多个编码索引值进行合并,最终得到编码结果,明显减小了编码结果的宽度范围大大减小,且整个过程不需要对模型训练涉及的上下游链路的情况进行任何变动,因此,在有效降低高维id类特征数据占用的存储空间,极大地降低了模型训练的成本,且不受模型训练涉及的上下游链路的开放度的限制。
[0070]
在图2的基础上,本发明实施例还提供了一种得到待编码数据的多个编码索引值的具体实现方式,请参照图3,图3示出了本发明实施例提供的一种数据编码生成方法的流程示例图,步骤s102包括以下子步骤:
[0071]
子步骤s102-10,利用多个不同的预设哈希函数分别对待编码数据进行哈希运算,得到多个第一哈希值。
[0072]
在本实施例中,由于现有技术中需要将预设模值设置很大,以避免哈希冲突,例如,对于区间范围为[0,10000000]的数值区间,预设模值需要设置为300万~500万才不会出现明显的哈希冲突,预设模值越大,模型参数也会越多,模型收敛速度也会越慢,本发明实施例通过利用多个不同的预设哈希函数进行多次哈希,使得预设模值无需设置过大即可避免出现明显的哈希冲突,极大地缩小了模型参数的规模,提升了模型收敛的速度,同时在待编码数据集的数值区间发生变化时无需更新预设模值,也无需对模型进行重新训练。
[0073]
在本实施例中,预设哈希函数的个数可以根据需要进行设定,发明人通过测试发现,预设哈希函数的个数设置为3即可有效地降低哈希冲突。
[0074]
在本实施例中,预设哈希函数不同,得到的第一哈希值也不一样。
[0075]
子步骤s102-11,按照预设模值对每一第一哈希值进行取模运算,得到每一第一哈希值的取模结果。
[0076]
在本实施例中,预设模值可以根据需要进行设定,由于采用多次哈希,预设模值无需设置太大,故而无需在数值区间发生变化时更新预设模值后重新对模型进行训练。
[0077]
子步骤s102-12,将多个第一哈希值的取模结果作为待编码数据的多个编码索引值。
[0078]
在本实施例中,每一预设哈希函数对应一个预设编码矩阵,每一预设编码矩阵的行数与预设模值相同,在图3的基础上,本发明实施例还提供了一种获取目标编码行的具体实现方式,请参照图4,图4示出了本发明实施例提供的一种数据编码生成方法的流程示例图,步骤s103包括以下子步骤:
[0079]
子步骤s1031,对任一目标编码索引值,根据目标编码索引值对应的预设哈希函数,确定与目标编码索引值对应的目标预设编码矩阵。
[0080]
在本实施例中,目标编码索引值为待编码数据的多个编码索引值中任意一个,多个编码索引值中每一编码索引值的处理方式均相同。
[0081]
在本实施例中,各预设编码矩阵相互独立,互不影响,按照各自的方式进行初始化和更新。
[0082]
在本实施例中,例如,预设哈希函数有3个,分别为a、b、c,对应的预设编码矩阵为a、b、c,待编码数据分别经过a、b、c进行哈希和取模处理,得到的编码索引值为:index1、index2、index3,对于目标编码索引值index1,其对应的预设哈希函数为a,则对应的目标预设编码矩阵为a。
[0083]
子步骤s1032,将目标编码索引值作为行索引,从目标预设编码矩阵中获取与行索
引对应的目标编码行。
[0084]
为了便于和现有技术更清楚地进行对比,请参照图5,图5示出了本发明实施例提供的多次哈希的编码实现方式的示例图,图5中,采用3个不同的预设哈希函数:哈希函数1、哈希函数2和哈希函数3,分别利用这3个哈希函数对待编码数据进行哈希运算,得到三个不同的第一哈希值:hashresult1、hashresult2、hashresult3,再分别对每一第一哈希值进行取模运算,得到对应的取模结果,分别为:2、1、2。每一预设哈希函数对应一个预设编码矩阵,分别为预设编码矩阵1、预设编码矩阵2和预设编码矩阵3,根据hashresult1的取模结果2,将预设编码矩阵1的第2行x
21
x
22
x
23
x
24
作为目标编码行,同样的,根据hashresult2的取模结果1,将预设编码矩阵2的第1行y
11y12y13y14
作为目标编码行、根据hashresult3的取模结果2,将预设编码矩阵3的第2行z
21z22z23z24
作为目标编码行,最后将这3个目标编码行进行合并,得到最终的待编码数据的编码结果:xyz1xyz2xyz3xyz4。
[0085]
本发明实施例提供的上述方法,在显著降低参数量的同时,也能显著降低哈希的冲突率。但在一些极端场景中,多重哈希的实现方式会造成一定性能上的损失,若该场景同时对性能要求极高,则该方法会受到限制,为了减少对性能的影响,在图2的基础上,本发明实施例还提供了另一种得到待编码数据的多个编码索引值的具体实现方式,请参照图6,图6示出了本发明实施例提供的一种数据编码生成方法的流程示例图,步骤s102还包括以下子步骤:
[0086]
子步骤s102-20,对待编码数据进行哈希运算,得到第二哈希值。
[0087]
在本实施例中,本步骤中对于一个待编码数据,只进行一次哈希运算,得到的第二哈希值也只有一个。
[0088]
子步骤s102-21,按照预设段数将第二哈希值依次进行切分,得到多个哈希分段。
[0089]
在本实施例中,上述方法中的利用多个不同的预设哈希函数分别对待编码数据进行哈希运算的多重哈希的本质在于:为了使用多个小的分桶,例如原本使用1000,000,000的分桶可以通过三个1000的分桶保证唯一性.对于多个哈希运算结束后最终依然是做模运算进行分桶,由于第二哈希值的各bit位无相关性,发明人基于这一特点和多重哈希的本质,将多重哈希改进为对第二哈希值依次进行切分,得到多个哈希分段,再基于多个哈希分段,最终得到多个编码索引值。在本实施例中,预设段数可以根据需要进行设置,例如,预设段数为3,则将第二哈希值切分成3个哈希分段。
[0090]
在本实施例中,切分可以从前往后切分,也可以从后往前切分,作为一种具体实施方式,以从后往前切分为例,可以通过与操作和移位操作实现切分,例如,第二哈希值为1000110010111111,预设段数为3,则首先利用掩码000000001111取第二哈希值的第13~16bit位,得到1111,再将第二哈希值右移4个bit位,得到0000100011001011,再利用掩码0000000000001111取第二哈希值的第9~12bit位,得到1011,依次类推,得到第5~8bit位和第1~4bit位。通过与操作和移位操作可以实现第二哈希值的高效切分。
[0091]
子步骤s102-22,根据预设模值,确定每一哈希分段的编码索引值。
[0092]
在本实施例中,按照切分顺序对哈希分段进行排序,例如,第一次切分得到的哈希分段的序号为1,第二次切分得到的哈希分段的序号为2,依次类推,作为一种具体实施方式,计算哈希分段的编码索引值的方法可以是:
[0093]
首先,按照预设模值对每一哈希分段进行取模运算,得到每一哈希分段的取模结
果。
[0094]
在本实施例中,预设模值可以根据需要进行设置。
[0095]
其次,根据哈希分段的序号、取模结果及预设模值,计算哈希分段的编码索引值。
[0096]
在本实施例中,当哈希分段从1开始编号时,哈希分段的编码索引值=哈希分段的取模结果 (哈希分段的序号-1)*预设模值计算得到,当哈希分段从0开始编号时,哈希分段的编码索引值=哈希分段的取模结果 哈希分段的序号*预设模值计算得到。
[0097]
需要说明的是,当预设模值为2的幂时,取模运算也可以通过移位来实现,例如,右移一个bit位,相当于除以2,预设模值为2的n次幂,可以通过右移n个bit位实现,由此,通过对指定长度进行位与操作,正好做到了切分和取模同时完成,提升了转换的效率。
[0098]
子步骤s102-23,将多个哈希分段的编码索引值作为待编码数据的多个编码索引值。
[0099]
在本实施例中,子步骤s102-20~子步骤s102-23得到待编码数据的多个编码索引值后,同样需要根据编码索引从预设编码矩阵中获取目标编码行,此时,预设编码矩阵只有一个,预设编码矩阵的行数为预设模值与哈希分段的个数之乘积,由于预设编码矩阵只有一个,避免了多次创建预设编码矩阵的耗时操作,提升了处理效率。
[0100]
在本实施例中,由于编码索引值是根据哈希分段的序号、取模结果及预设模值得到的,因此,各编码索引值生成的3个结果不会冲突,可以直接在预设编码矩阵进行查找操作,得到对应的目标编码行。
[0101]
需要说明的是,上述子步骤s102-10~子步骤s102-12和子步骤s102-20~子步骤s102-23这两种实现方式可以只使用其中的一种,也可以根据需要自适应地选择合适的实现方式。
[0102]
为了便于和现有技术和多次哈希的编码方式进行更清楚地对比,请参照图7,图7示出了本发明实施例提供的多次切分的编码实现方式的示例图,图7中,将第二哈希值进行3次切分,得到3个哈希分段,其值分别为:r1、r2、r3,预设模值为mod,对于r1,取模运算得到的取模结果为2,则其对应的编码索引值即为2,对于r2,取模运算得到的取模结果为1,则其对应的编码索引值为:1 1*mod=n,其对应的编码索引为n,若mod为3,则n=4,其对应的编码索引为4,同理,r3对应的编码索引为m,则目标编码行为预设编码矩阵中第2、n、m行的数据,分别为:x
21
x
22
x
23
x
24
、xn1xn2xn3xn4、xm1xm2xm3xm4,最后再将第2、n、m行的数据进行合并,得到最终的编码结果。
[0103]
在图2的基础上,本发明实施例还提供了一种得到待编码数据的编码结果的具体实现方式,请参照图8,图8示出了本发明实施例提供的一种数据编码生成方法的流程示例图,步骤s104还包括以下子步骤:
[0104]
子步骤s1041,对于目标矩阵中的任一目标列,根据多个目标编码行中处于目标列的元素,确定目标矩阵中目标列的元素。
[0105]
在本实施例中,编码结果可以用目标矩阵表示,目标矩阵的行数为一行,目标矩阵的列数与预设编码矩阵的列数相同。
[0106]
在本实施例中,根据多个目标编码行中处于目标列的元素,确定目标矩阵中目标列的元素的实现方式可以是:将多个目标编码行中处于目标列的元素值进行求和,得到目标矩阵中目标列的元素值,也可以是:将多个目标编码行中处于目标列的元素值进行求平
均,得到目标矩阵中目标列的元素值,或者直接将多个目标编码行中处于目标列的元素进行组合,得到目标矩阵中目标列的元素。
[0107]
在本实施例中,为了更好地证明上述数据编码生成方法达到的技术效果,本发明实施例还提供了现有技术采用的一次哈希的方式和本发明实施例提供的多次哈希方式的试验结果,使用预设数据集中包括随机生成的500万个数字,其数值区间为[0,1亿],一次哈希的方法在不同预设模值下的冲突率和3次哈希在预设模值为4096时的冲突率如下表1所示,其中,冲突率=(4987421-哈希结果不重复结果数)/哈希结果不重复结果数:
[0108]
表1
[0109][0110]
由表1可知,单次哈希如果想取得和多次哈希近似的冲突率,模的大小需要取得极大,是多次哈希取模大小的1万倍,会造成后续模型参数巨大,预设编码矩阵中存在许多无效元素,模型训练时收敛很慢,训练效率低,部署困难。
[0111]
本发明实施例还提供的不同次数的哈希方式的试验结果,使用预设数据集中包括随机生成的500万个数字,其数值区间为[0,1亿],不同次数的哈希方式的冲突率如表2所示:
[0112]
表2
[0113][0114]
由表2可知,2次哈希时冲突率为15%,但3次哈希冲突率已经非常小,已经满足大部分应用场景的需求,考虑到哈希次数对于性能的影响,此时不必再进行更多次哈希操作了。
[0115]
本发明实施例还提供的3次哈希时采用不同的预设模值的冲突率,为了方便位操作,预设模值选用2的位数倍大小,当然也可以选用比如5000,10000作为预设模值,对整体效率影响不大,使用预设数据集中包括随机生成的100万个数字,其数值区间为[0,10亿],冲突率计算方式同上,采用不同的预设模值的冲突率的实验结果如表3所示:
[0116]
表3
[0117][0118]
由表3可知,预设模值越大,冲突率越小,但是模型参数也越多,模型收敛速度也会越慢。经过实验可知,模取12位,即预设模值=4096是一个适中的选择。如果容忍更大冲突可能,可以降低位数,反之亦然。注意,表3中的取值位数不影响哈希整体的性能,仅对后续模型的参数量有影响。
[0119]
本发明实施例还对子步骤s102-10~子步骤s102-12和子步骤s102-20~子步骤s102-23这两种实现方式的处理耗时通过实验进行对比,预设模值=4096,预设数据集中数据量为1亿,两种实现方式的处理耗时如表4所示:
[0120]
表4
[0121][0122]
由表4可知,相较子步骤s102-10~子步骤s102的方法,子步骤s102-20~子步骤s102-23的方法的处理耗时接近减少1半。在大规模数据处理中,子步骤s102-20~子步骤s102-23的方法能在取得相同冲突率的情况下,有着更好的性能表现。
[0123]
为了执行上述实施例及各个可能的实施方式中模型训练方法的相应步骤,下面给出一种数据编码生成装置100的实现方式。请参照图9,图9示出了本发明实施例提供的数据编码生成装置100的方框示意图。需要说明的是,本实施例所提供的数据编码生成装置100,其基本原理及产生的技术效果和上述实施例相同,为简要描述,本实施例部分未提及指出。
[0124]
数据编码生成装置100包括获取模块110、运算模块120及合并模块130。
[0125]
获取模块110,用于获取预设数据集中任一待编码数据,其中,由预设数据集中的数据的最大值和最小值确定的数值区间大于预设区间。
[0126]
运算模块120,用于对待编码数据进行编码运算,得到待编码数据的多个编码索引值。
[0127]
具体地,运算模块120具体用于:利用多个不同的预设哈希函数分别对待编码数据进行哈希运算,得到多个第一哈希值;按照预设模值对每一第一哈希值进行取模运算,得到每一第一哈希值的取模结果;将多个第一哈希值的取模结果作为待编码数据的多个编码索引值。
[0128]
具体地,运算模块120具体还用于:对待编码数据进行哈希运算,得到第二哈希值;按照预设段数将第二哈希值依次进行切分,得到多个哈希分段;根据预设模值,确定每一哈希分段的编码索引值;将多个哈希分段的编码索引值作为待编码数据的多个编码索引值。
[0129]
具体地,运算模块120具体用于根据预设模值,确定每一哈希分段的编码索引值时,具体用于:按照预设模值对每一哈希分段进行取模运算,得到每一哈希分段的取模结果;根据希分段的序号、取模结果及预设模值,计算哈希分段的编码索引值。
[0130]
具体地,运算模块120中的预设编码矩阵的行数为预设模值与哈希分段的个数之乘积。
[0131]
获取模块110,还用于根据每一编码索引值,从预设编码矩阵中获取与每一编码索引值对应的目标编码行。
[0132]
具体地,每一预设哈希函数对应一个预设编码矩阵,每一预设编码矩阵的行数与预设模值相同,获取模块110具体用于:对任一目标编码索引值,根据目标编码索引值对应的预设哈希函数,确定与目标编码索引值对应的目标预设编码矩阵;将目标编码索引值作为行索引,从目标预设编码矩阵中获取与行索引对应的目标编码行。
[0133]
合并模块130,用于将多个目标编码行进行合并,得到待编码数据的编码结果。
[0134]
具体地,编码结果用目标矩阵表示,目标矩阵的行数为一行,目标矩阵的列数与预设编码矩阵的列数相同,合并模块130具体用于:对于目标矩阵中的任一目标列,根据多个目标编码行中处于目标列的元素,确定目标矩阵中目标列的元素。
[0135]
请参照图10,图10示出了本技术实施例提供的电子设备10的方框示意图。电子设备10可以是计算机设备,例如,智能手机、平板电脑、个人电脑、服务器、地面站、私有云、公有云等中的任意一种,上述设备都可以用于实现上述实施例提供的数据编码生成方法,具体可根据实际应用场景确定,在此不作限制。电子设备10包括处理器11、存储器12及总线13,处理器11通过总线13与存储器12连接。
[0136]
存储器12用于存储程序,例如图9所示的数据编码生成装置100,数据编码生成装置100均包括至少一个可以软件或固件(firmware)的形式存储于存储器12中的软件功能模块,处理器11在接收到执行指令后,执行所述程序以实现上述实施例揭示的数据编码生成方法。
[0137]
存储器12可能包括高速随机存取存储器(random access memory,ram),也可能还包括非易失存储器(non-volatile memory,nvm)。
[0138]
处理器11可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器11中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器11可以是通用处理器,包括中央处理器(central processing unit,cpu)、微控制单元(microcontroller unit,mcu)、复杂可编程逻辑器件(complex programmable logic device,cpld)、现场可编程门阵列(field programmable gate array,fpga)、嵌入式arm等芯片。
[0139]
本技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器11执行时实现上述实施例揭示的数据编码生成方法。
[0140]
综上所述,本发明实施例提供了一种数据编码生成方法、装置、电子设备及存储介质,所述方法包括:获取预设数据集中任一待编码数据,其中,由所述预设数据集中的数据的最大值和最小值确定的数值区间大于预设区间;对所述待编码数据进行编码运算,得到所述待编码数据的多个编码索引值;根据每一所述编码索引值,从预设编码矩阵中获取与每一所述编码索引值对应的目标编码行;将所述多个目标编码行进行合并,得到所述待编码数据的编码结果,以根据所述待编码数据的编码结果进行模型训练。与现有技术相比,本发明实施例通过将待编码数据进行编码运算得到多个编码索引值,再对多个编码索引值进行合并,最终得到编码结果,明显减小了编码结果的宽度范围大大减小,且整个过程不需要对模型训练涉及的上下游链路的情况进行任何变动,因此,在有效降低高维id类特征数据占用的存储空间,极大地降低了模型训练的成本,且不受模型训练涉及的上下游链路的开放度的限制。
[0141]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
技术特征:
1.一种数据编码生成方法,其特征在于,所述方法包括:获取预设数据集中任一待编码数据,其中,由所述预设数据集中的数据的最大值和最小值确定的数值区间大于预设区间;对所述待编码数据进行编码运算,得到所述待编码数据的多个编码索引值;根据每一所述编码索引值,从预设编码矩阵中获取与每一所述编码索引值对应的目标编码行;将所述多个目标编码行进行合并,得到所述待编码数据的编码结果,以根据所述待编码数据的编码结果进行模型训练。2.如权利要求1所述的数据编码生成方法,其特征在于,所述对所述待编码数据进行编码运算,得到所述待编码数据的多个编码索引值的步骤包括:利用多个不同的预设哈希函数分别对所述待编码数据进行哈希运算,得到多个第一哈希值;按照预设模值对每一所述第一哈希值进行取模运算,得到每一所述第一哈希值的取模结果;将多个第一哈希值的取模结果作为所述待编码数据的多个编码索引值。3.如权利要求2所述的数据编码生成方法,其特征在于,每一所述预设哈希函数对应一个所述预设编码矩阵,每一所述预设编码矩阵的行数与所述预设模值相同,所述根据每一所述编码索引值,从预设编码矩阵中获取与每一所述编码索引值对应的目标编码行的步骤包括:对任一目标编码索引值,根据所述目标编码索引值对应的所述预设哈希函数,确定与所述目标编码索引值对应的目标预设编码矩阵;将所述目标编码索引值作为行索引,从所述目标预设编码矩阵中获取与所述行索引对应的目标编码行。4.如权利要求1所述的数据编码生成方法,其特征在于,所述对所述待编码数据进行编码运算,得到所述待编码数据的多个编码索引值的步骤还包括:对所述待编码数据进行哈希运算,得到第二哈希值;按照预设段数将所述第二哈希值依次进行切分,得到多个哈希分段;根据预设模值,确定每一所述哈希分段的编码索引值;将多个哈希分段的编码索引值作为所述待编码数据的多个编码索引值。5.如权利要求4所述的数据编码生成方法,其特征在于,按照切分顺序对所述哈希分段进行排序,所述根据所述预设模值,确定每一所述哈希分段的编码索引值的步骤包括:按照所述预设模值对每一所述哈希分段进行取模运算,得到每一所述哈希分段的取模结果;根据所述哈希分段的序号、取模结果及所述预设模值,计算所述哈希分段的编码索引值。6.如权利要求4或5中所述的数据编码生成方法,其特征在于,所述预设编码矩阵的行数为所述预设模值与所述哈希分段的个数之乘积。7.如权利要求1所述的数据编码生成方法,其特征在于,所述编码结果用目标矩阵表示,所述目标矩阵的行数为一行,所述目标矩阵的列数与所述预设编码矩阵的列数相同,所
述将所述多个目标编码行进行合并,得到所述待编码数据的编码结果的步骤包括:对于所述目标矩阵中的任一目标列,根据所述多个目标编码行中处于所述目标列的元素,确定所述目标矩阵中目标列的元素。8.一种数据编码生成装置,其特征在于,所述装置包括:获取模块,用于获取预设数据集中任一待编码数据,其中,由所述预设数据集中的数据的最大值和最小值确定的数值区间大于预设区间;运算模块,用于对所述待编码数据进行编码运算,得到所述待编码数据的多个编码索引值;获取模块,还用于根据每一所述编码索引值,从预设编码矩阵中获取与每一所述编码索引值对应的目标编码行;合并模块,用于将所述多个目标编码行进行合并,得到所述待编码数据的编码结果。9.一种电子设备,其特征在于,包括处理器和存储器;所述存储器用于存储程序;所述处理器用于在执行所述程序时,实现如权利要求1-7中任一项所述的数据编码生成方法。10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1-7中任一项所述的数据编码生成方法。
技术总结
本发明涉及人工智能技术领域,提供了一种数据编码生成方法、装置、电子设备及存储介质,所述方法包括:获取预设数据集中任一待编码数据,其中,由预设数据集中的数据的最大值和最小值确定的数值区间大于预设区间;对待编码数据进行编码运算,得到待编码数据的多个编码索引值;根据每一编码索引值,从预设编码矩阵中获取与每一编码索引值对应的目标编码行;将多个目标编码行进行合并,得到待编码数据的编码结果,以根据待编码数据的编码结果进行模型训练。本发明有效降低高维ID类特征数据占用的存储空间,极大地降低了模型训练的成本,且不受模型训练涉及的上下游链路的开放度的限制。模型训练涉及的上下游链路的开放度的限制。模型训练涉及的上下游链路的开放度的限制。
技术研发人员:李超
受保护的技术使用者:上海喜马拉雅科技有限公司
技术研发日:2022.02.21
技术公布日:2022/5/25
转载请注明原文地址:https://tc.8miu.com/read-6580.html