发明内容
本说明书一个或多个实施例描述了一种方法和装置,在训练预料中的字典中词汇较多(例如数亿级别),需要负例数量较大的情况下,可以减少采样的时间,从而能够快速有效地进行负例采样。
根据第一方面,提供了一种针对训练语料从词频表中进行负例采样的方法,所述词频表包括多个备选词汇和各个备选词汇在所述训练语料中的出现频率,所述方法包括:
从所述多个备选词汇的未采样词汇集合中获取当前词汇,以及当前词汇对应的出现频率;
获取针对所述未采样词汇集合确定的剩余采样个数和剩余采样概率;
基于所述当前词汇对应的出现频率和所述剩余采样概率,确定当前采样概率;
根据所述当前词汇在所述剩余采样个数和所述当前采样概率条件下的二项分布,确定所述当前词汇被采样次数;
将所述当前词汇按照所述被采样次数添加到负例集中;
根据所述当前词汇被采样次数更新所述剩余采样个数,并根据所述当前词汇对应的出现频率更新所述剩余采样概率,用于对所述词频表中的其他备选词汇进行采样,直到检测到预定条件得到满足。
在一个实施例中,基于所述当前词汇对应的出现频率和所述剩余采样概率,确定当前采样概率包括:将所述当前采样概率确定为,所述当前词汇对应的出现频率与所述剩余采样概率的比值。
根据一个实施例,所述确定所述当前词汇被采样次数包括:
模拟执行所述剩余采样个数次的采样操作,其中,在各次采样操作中,所述当前词汇被采样到的概率为所述当前采样概率;
确定所述被采样次数为,所述当前词汇在所述剩余采样个数次的采样操作中被采样到的次数。
在一个实施方式中,根据所述当前词汇被采样次数更新所述剩余采样个数包括:将剩余采样个数更新为,所述剩余采样个数与所述被采样次数的差。
进一步地,在一个实施例中,所述预定条件包括:所述负例集中的负例个数达到预设数目;或者更新后的剩余采样个数为零;或者所述未采样词汇集合为空。
在一个可能的实施例中,所述根据所述当前词汇对应的出现频率更新所述剩余采样概率包括:将剩余采样概率更新为,所述剩余采样概率与所述当前词汇对应的出现频率的差。
根据一种可能的设计,所述方法还包括:在所述负例集中的负例个数满足预定条件的情况下,输出所述负例集。
在一些可能的实施例中,所述方法还包括:针对训练语料中的训练词汇,从所述负例集中选取负例。
进一步地,在一些实施例中,从所述负例集中选取负例包括:生成预定区间上的随机数,其中,所述预定区间上的各个数值分别与所述负例集中的各个负例相对应,所述随机数取自所述各个数值;从所述负例集中获取与所述随机数相对应的负例。
根据一种实施方式,所述从所述负例集中获取与所述随机数相对应的负例包括:
比较所获取的负例与所述训练词汇是否一致;在一致的情况下,重新执行所述生成预定区间上的随机数的步骤。
根据一种可能的设计,所述方法还包括:检测所述负例集的更新条件是否满足;在所述更新条件满足的情况下,重新生成负例集。
根据第二方面,提供一种针对训练语料从词频表中进行负例采样的装置,所述词频表包括多个备选词汇和各个备选词汇在所述训练语料中的出现频率,所述装置包括:
第一获取单元,配置为从所述多个备选词汇的未采样词汇集合中获取当前词汇,以及当前词汇对应的出现频率;
第二获取单元,配置为获取针对所述未采样词汇集合确定的剩余采样个数和剩余采样概率;
第一确定单元,配置为基于所述当前词汇对应的出现频率和所述剩余采样概率,确定当前词汇对应的当前采样概率;
第二确定单元,配置为根据所述当前词汇在所述剩余采样个数和所述当前采样概率条件下的二项分布,确定所述当前词汇被采样次数;
添加单元,配置为将所述当前词汇按照所述被采样次数添加到负例集中;
更新单元,配置为根据所述当前词汇被采样次数更新所述剩余采样个数,根据所述当前词汇对应的出现频率更新所述剩余采样概率,用于对所述词频表中的其他备选词汇进行采样,直到检测到所述负例集中的负例个数满足预定条件。
根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
通过本说明书实施例提供的方法和装置,针对训练语料从词频表中进行负例采样时,对于一个从词频表获取一个备选词汇作为当前词汇,并获取剩余采样个数和剩余采样概率,基于当前词汇在剩余采样个数和当前采样概率条件下的二项分布,确定当前词汇被采样次数,然后将当前词汇按照被采样次数添加到负例集中。由于对一个当前词汇执行以上步骤的情况下,可以添加被采样次数的当前词汇到负例集,使总体的负例采样次数减少,从而减少负例采样的时间,进而能够快速有效地进行负例采样。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
图1为本说明书披露的一个实施例的实施场景示意图。在一个无监督模型(例如Word2Vec、Node2Vec)训练过程中,损失函数可以为噪声对比估计NCE,表达式如下:
其中:V表示字典;wi表示第i个训练词汇;ci表示与第i个词汇相邻的上下文词汇;k表示wi对应的负例个数;wij表示wi的第j个负例;cj表示与该第j个负例相邻的上下文词汇。
由以上公式可知,在语料训练过程中,对每个训练词汇wi,都需要从其在字典的概率分布中进行k次随机取样,获取k个负例。
字典中的多个词汇和各个词汇在训练语料中的出现频率通常通过词频表来表示。往往将字典V对应的词频表投影到一个区间[0,1]上,区间中各段的长度和相应词汇的出现频率成正比。进一步地,在一种负例采样方式中,将各个词汇对应的区间段按照最小频率单位划分为多个“格子”,并记录各个格子的编号作为索引。一个词汇的出现频率越大,对应的区间段越长,包含的格子数目越多。每次进行负例采样时,生成索引中的随机数,并将索引为该随机数的相应词汇作为负例。实际使用中,索引数量越多,对字典词频表的模拟越准确。例如,由于每个索引对应一个“格子”,为了保证每个词汇都有对应的索引,出现频率最小的词汇对应的索引至少为1个,其他词汇对应的频率可能有多个,如词汇1的出现频率为0.03,词汇2的出现频率为词汇0.001……,则可以使词汇2对应1个索引,而词汇1对应30个索引。当字典V中词汇量较多(如以亿计)时,索引数量更多。需要较大的存储空间,甚至存储到远程服务器,每次获取负例花费额外通信时间。
如图1所示,本说明书实施例提供了一种方案,先通过词频表进行负例的预采样,将采样的词汇加入到负例集中。在预采样过程中,进行批量采样,对词频表中的各个词汇只采样一次,而采样的数量可以是多个,并保证最终各个词汇的采样数量与词频表中的出现频率一致。如图1中,对词频表中的词汇w1采样s1次,对词汇w2采样s2次,对词汇w3采样s3次,等等。如此,既减少了预采样时的采样次数,并保证负例集中各个词汇的采样数量与词频表中的出现频率一致。
在词汇训练过程中,如果需要负例,则从负例集中随机获取相应数量的负例即可。如图1中,针对训练词汇u1从负例集中随机取出k1个负例,对训练词汇u2从负例集中随机取出k2个负例,对训练词汇u3从负例集中随机取出k3个负例;等等。由于负例集中是预采样的负例,其中各个词汇的采样数量与词频表中的出现频率一致,因此使用时只需随机取出相应数量负例即可,而无需考虑词汇在词汇表中的出现频率,就可以保证对各个负例的取样概率与词频表中相应词汇的出现频率一致。如此,运算复杂度大大降低。同时,预采样的负例集可以多次使用,进一步提高模型训练中负例采样的有效性。
可以理解,图1中的计算平台可以是具有一定运算能力的各种装置、设备,例如台式计算机、服务器等等。可以理解,计算平台还可以是上述装置、设备组成的设备集群。在该计算平台是多个设备或装置的情况下,根据一种实施方式,可以由其中一些设备或装置完成负例采样操作,生成负例集,另一些设备或装置获取该负例集,在训练词汇时从该负例集中随机取出负例。
下面描述针对训练语料从词频表中进行负例采样的具体执行过程。
图2示出了本说明书一个实施例的针对训练语料从词频表中进行负例采样的方法流程图。该方法的执行主体例如是图1的计算平台。如图2所示,该方法包括以下步骤:步骤21,从词频表的未采样词汇集合中获取当前词汇,以及当前词汇对应的出现频率;步骤22,获取针对所述未采样词汇集合确定的剩余采样个数和剩余采样概率;步骤23,基于当前词汇对应的出现频率和所述剩余采样概率,确定当前词汇对应的当前采样概率;步骤24,根据当前词汇在剩余采样个数和当前采样概率条件下的二项分布,确定当前词汇被采样次数;步骤25,将当前词汇按照上述被采样次数添加到负例集中;步骤26,根据当前词汇被采样次数更新上述剩余采样个数,以及根据当前词汇对应的出现频率更新上述剩余采样概率,用于对词频表中的其他备选词汇进行采样,直到检测到预定条件得到满足。下面描述以上各个步骤的具体执行过程。
首先,在步骤21,从词频表的未采样词汇集合中获取当前词汇,以及当前词汇对应的出现频率。可以理解,词频表可以包括多个备选词汇,以及各个备选词汇在训练预料中的出现频率。这多个备选词汇可以包括训练预料中出现的所有词汇。词频表可以是表格、向量、数组、键值对(key-value)等各种形式,本说明书对此不作限定。
各个备选词汇在训练语料中的出现次数各不相同,如此,词频表还可以通过出现频率来衡量各个词汇在训练语料中的比重。一个备选词汇的出现频率可以包括,该备选词汇在训练语料中的总出现次数与训练语料中的总词汇数量的比值。其中,该总词汇数量计算时不合并重复的词汇,即:统计时,每个词汇每出现一次,总词汇数量增加1。
如前所述,根据本说明实施例的方法,对于词频表中的各个备选词汇,可以依次对其进行批量采样。因此,词频表可以划分为已采样词汇集合和未采样词汇集合,其各自包括已采样的备选词汇和未采样的备选词汇。在步骤21,从上述未采样词汇集合中获取当前词汇,以及当前词汇对应的出现频率,以便用于接下来对当前词汇进行采样。
在一个实施例中,可以按照词频表中各个词汇的存储地址依次获取一个备选词汇作为当前词汇,按这样的顺序取词可以保证不会重复取词重复采样,即每次都是从未采样的词汇集合中获取当前词汇。例如,获取词频表的存储地址,根据各个备选词汇相对于词频表的存储地址的偏移量来获取一个备选词汇。此时,词频表的存储地址加上偏移量就是各个备选词汇的存储地址。如上述偏移量在[0000-FFFF]之间,可以首先将偏移量为0000的备选词汇获取为当前词汇,下一轮执行该流程时会获取偏移量为0001的备选词汇,以此类推。可选地,备选词汇及其出现频率可以存储在同一个存储地址对应的存储单元中,此时,可以同时获取当前词汇及其出现频率。另一种情况下,备选词汇及其出现频率可以存储在不同的存储单元,此时,可以按照备选词汇的存储地址获取相关联的出现频率。
在另一个实施例中,也可以按照词频表中各个备选词汇的排列顺序获取一个备选词汇作为当前词汇,如此保证每次都是从未采样词汇集合中获取当前词汇。例如在词频表是表格的情况下,按照表格中的各行顺序获取备选词汇,如第一轮执行该流程时获取第一行的备选词汇,第二轮获取第二行的备选词汇,等等。在表格有多个列的情况下,还可以按照第一列第一行、第一列第二行……这样的顺序这样获取一个备选词汇。
在步骤22中,获取针对未采样词汇集合确定的剩余采样个数s和剩余采样概率r。
剩余采样个数s可以是负例集中还需要的负例个数,也是未采样词汇集合中所有未采样词汇需要被采样的总次数。
初始地,剩余采样个数s是整个负例集所需要的总的负例个数S0。在一个实施例中,整个负例集所需要的负例个数S0可以是根据训练语料中的词汇数计算得到的,也可以是人工设定的,本申请对此不作限定。例如,在前述损失函数中,针对每个训练词汇需要取k个负例,假定训练预料中包含n个词汇,那么可以将负例个数S0设定为S0=n*k。在另一实施例中,还可以将该初始需要的负例个数S0设定为训练预料中词汇数目的预定比例,等等。
在初始设置之后,每对一个备选词汇采样完毕,会对剩余采样次数进行更新,即剩余采样次数减小相应次数。例如,由人工设定了负例集需要10000个负例,对备选词汇w0采样了5次,则剩下的词总共需要的采样次数为10000-5=9995。
剩余采样概率r,可以是所有未采样词汇在生成负例集的负例采样过程中的总采样概率。作为示例,假定词频表中的备选词汇包括w0、w1、w2……,对应出现频率p0、p1、p2……,剩余采样概率r表示,未采样词汇的总采样概率。初始地,所有备选词汇均未被采样,此时剩余采样概率r即为词频表中所有备选词汇在生成负例集的负例采样过程中的总采样概率,因此,r的初始值为1。
可以理解,为了保证最终负例集中的各个负例在负例集中的占比与相应的备选词汇的出现频率一致,每对一个备选词汇采样完毕,会对剩余采样概率也进行更新。例如,在第一个备选词汇w0采样完毕的情况下,剩余采样概率会被更新为r'=r-p0=1-p0,以此类推,在第二个备选词汇w1采样完毕的情况下,剩余采样概率会被更新为r''=r'-p1=1-p0-p1……。
因此,如果当前词汇wi为词频表中的第一个词汇,那么在步骤22,分别获取负例集中需要的负例个数的初始值S0为所述剩余采样个数s,获取初始值r=1为所述剩余采样概率r。如果当前词汇wi不是词汇表的第一个词汇,那么在步骤22,分别读取在对前一词汇wi-1采样之后更新得到的剩余采样个数s和剩余采样概率r。
步骤23,基于当前词汇对应的出现频率pi和所述剩余采样概率r,确定当前词汇对应的当前采样概率P。当前采样概率P,可以是当前词汇在整个未采样集合中的采样概率。
可以理解,由于本实施例是针对各个备选词汇批量采样,换言之,要一次采集够相应数量的某个备选词汇。那么,当一个备选词汇采样完毕后,其会被加入已采样词汇集合,后续被采样到的概率是0。这样,之后的采样过程不需要考虑采样过的备选词汇,而是在未采样词汇集合中进行。其中,由于当前词汇还未进行采样,所以上述未采样词汇集合包括当前词汇在内。
仍然参考以上示例,容易理解,备选词汇w0、w1、w2……的出现频率分别为p0、p1、p2……。在对第一个备选词汇w0采样的情况下,采样概率为p0,剩余备选词汇(未采样词汇集合)的总采样概率为r=1-p0=p1+p2+…。第二个备选词汇w1的出现频率为p1,则其在剩余备选词汇(未采样词汇集合)中的采样概率为p1/(p1+p2+…)=p1/1-p0。以此类推,对于当前词汇wi,当前采样概率也可以表示为:P=pi/r,即:当前词汇对应的出现频率pi和剩余采样概率r的比值。
步骤24,根据当前词汇wi在剩余采样个数s和当前采样概率P条件下的二项分布,确定当前词汇wi的被采样次数b。可以理解,词频表中的备选词汇都对应一个被采样次数,例如图1所示的对词汇w1采样s1次,对词汇w2采样s2次,对词汇w3采样s3次,等等,以完成对备选词汇批量采样。可选地,当一个备选词汇的出现频率较小时,其被采样次数可能为0。
在一个实施例中,利用二项分布确定上述被采样次数。二项分布是若干次独立的伯努利试验中成功的次数的离散概率分布。在每次试验中,只能出现两个可能结果中的一个结果,并且各次实验的实验结果相互独立。每个结果发生的概率在每一次独立试验中都保持不变,当试验次数为1时,二项分布服从0-1分布,亦即,对其中的一个结果而言,要么发生(成功),要么不发生。
用ξ表示随机试验的结果。如果某个事件发生的概率是p,则不发生的概率q=1-p,用P表示n次独立重复试验中该事件发生k次的概率为:
P(ξ=k)=C(n,k)×pk×(1-p)(n-k);
其中:C(n,k)=n!/(k!×(n-k)!)。
这个就是该事件在次数n和概率p条件下的二项分布概率。
具体到该步骤24中,在一个实施例中,调用二项分布函数Binomial(s,P)来确定当前词汇的被采样次数b。可以看到,该二项分布函数的参数为剩余采样个数s和当前采样概率P,表示在s次采样试验,每次采样到当前词汇wi的概率为P的条件下,wi被采样到的次数。
上述二项分布函数的执行可以包括,模拟执行剩余采样个数s次的采样操作(伯努利试验),相当于采样试验,其中,这些采样操作是针对剩余的备选词汇执行的。在各次采样操作中,确保当前词汇wi被采样到(试验成功)的概率为当前采样概率P。统计当前词汇被采样到的次数,并确定当前词汇的被采样次数b为,当前词汇在剩余采样个数s次的采样操作中被采样到的次数。
在另一个实施例中,还可以从满足二项分布采样条件的数值中随机获取一个值,作为当前词汇被采样次数。可以理解,根据二项分布的含义,假设当前词汇“财富”最终被采样b次,则数值b满足的条件可以为:与剩余采样个数的比值应与当前采样概率一致。例如,剩余采样个数s为8000,当前采样概率P为0.03,则可能当b在200-272范围内时b/8000都可以四舍五入为0.03。如此,可以在200-272之间取一个随机数,作为当前词汇“财富”的被采样次数。
在步骤25,将当前词汇wi按照上述被采样次数b添加到负例集中。这里,步骤24确定的被采样次数b是多少,就添加多少个当前词汇到负例集。如以上示例中b的取值为232,则添加232个当前词汇“财富”到负例集中。
步骤26,根据当前词汇被采样次数b更新上述剩余采样个数s,根据当前词汇对应的出现频率pi更新上述剩余采样概率r。更新后的剩余采样次数s和剩余采样概率r可以用于对词频表中的其他备选词汇进行采样。例如对下一个备选词汇而言,步骤22中所获取的剩余采样个数和剩余采样概率是本步骤更新后的剩余采样个数和剩余采样概率。
可以理解,对每个备选词汇进行采样后,可以将其从未采样词汇集合移动到已采样词汇集合中。如此,针对未采样词汇集合设置的剩余采样个数s会减少相应数量,剩余采样概率r也会发生改变。换句话说,对于下一个备选词汇而言,采样条件发生变化。例如,负例集需要10000个负例,则初始剩余负例个数为10000,初始剩余采样频率为1,当对一个出现频率为0.03的备选词汇w0采样200次后,对下一个出现频率为0.05的备选词汇而言,是在剩余负例个数为9800、剩余采样概率为0.97的情况下进行采样。
在一个实施例中,对当前词汇采样完成后,可以将剩余采样个数s更新为,原剩余采样个数与当前词汇被采样次数b的差。如实现逻辑为:s=s-b;其中,s为剩余采样个数,b为当前词汇wi的被采样次数。
在一个实施例中,将剩余采样概率r更新为,原剩余采样概率与当前词汇对应的出现频率pi的差。如实现逻辑为:r=r-pi;其中,r为剩余采样概率,pi为当前词汇wi的出现频率。
值得说明的是,由于负例集中需要的负例个数是有限的,因此,还可以预先设置与负例集中的负例个数相关的预定条件,当满足该条件时,停止负例采样,否则继续针对词频表的其他备选词汇执行以上采样流程。该检测步骤可以在更新步骤26之后进行,也可以和步骤26并列执行。其可以是步骤26的一部分,也可以是步骤26的后续步骤27。下面以后续步骤27的方式详细说明该检测步骤的具体实现。
在该步骤27中,检测预定条件是否得到满足,在满足预定条件的情况下,该负例采样流程结束,在不满足预定条件的情况下,根据更新后的剩余采样个数和剩余采样概率对词频表中的其他备选词汇采样。
在一个实施例中,预定条件可以包括负例集中的负例总个数达到初始剩余采样个数,如人工设置的负例个数10000等。
在另一个实施例中,预定条件可以包括更新后的剩余采样个数为0。此时,代表着已经不需要采集其他备选词汇作为负例了。
在另一实施例中,预定条件可以包括,未采样词汇集合为空。此时,已经对词频表中所有词汇进行采样。
根据另一方面的实施例,在上述预定条件得到满足的情况下,还可以输出该负例集。该负例集可以输出到本地,也可以输出到其他设备。负例集中的各个词汇可以按照采样顺序排列,也可以随机打乱顺序排列,本申请对此不作限定。
在进一步的实施例中,针对训练语料中的训练词汇,可以从该负例集中选取负例。例如,针对训练语料中的训练词汇Ui需要k个负例的情况下,可以直接从该负例集中取出k个词汇。
根据一方面的实施例,负例集中的词汇可以和预定区间上的各个数值相对应,如图3所示,将负例集31中的各个备选负例与数值区间32中的数值一一对应。假如负例集31中有10000个预采样到的负例词汇,可以选择区间[1,10000]上的正整数,每个数值对应一个负例词汇。对一个训练词汇选取负例时,生成这个预定区间上的随机数,例如数值区间32上的随机数5,则可以选择负例集31中与数值5相对应的负例词汇w1。实践中,需要多少个负例,则生成多少个随机数。可以一次生成一个随机数,获取相应负例,也可以一次生成多个随机数,批量获取相应负例,本申请对此不作限定。
可以理解,在极小的概率下,所获取的负例还可能与训练词汇本身或其关联词汇一致,上述关联词汇例如是,在上下文预测模型中训练词汇的上下文,在同义词预测模型中训练词汇的同义词等。在这样的情况下,从负例集中选取的词汇将不能作为该训练词汇的负例。因此,针对训练词汇从负例集选取负例时,在选取的词汇与训练词汇本身或其关联词汇一致的情况下,重新执行生成预定区间上的随机数的步骤,生成新的随机数,获取新的随机数对应的负例词汇。
根据另一方面的实施例,负例集中的各个词汇随机打乱顺序排列的情况下,还可以从一个选定位置开始按顺序选定k个词汇作为负例。该选定位置可以按照一定规则确定,也可以将生成的随机数对应的位置确定为选定位置。例如:查找到第一个和训练词汇相同的词汇,将下一个词汇的位置作为选定位置。再例如:上述预定区间的例子中,生成一个1-10000之间的随机数。这种情况下只需生成一个随机数,计算量较小。如图4所示,对于负例集41而言,对一个训练词汇需要取出7个负例的情况下,可以生成一个数值区间42上的随机数,例如是数值5,则可以将数值5对应的位置作为选定位置,从该选定位置开始获取负例集41中,区间43上的7个备选负例w3、w9、w3、w7、w6、w4、w8,作为该训练词汇的负例。
如此,针对训练语料的训练词汇获取负例的过程就简化很多,获取速度也得以提高。
在一些可能的设计中,图2所示的流程还可以包括以下步骤:检测负例集的更新条件是否满足;在更新条件满足的情况下,重新执行针对训练语料从词频表中进行负例采样的方法,以重新生成负例集。可以理解,当需要的负例集中词汇数量较多时,例如几亿,计算量也非常大,因此可以一次生成一个较小的负例集,例如1千万,然后设定负例集更新条件(例如使用次数为1千万等),对负例集进行更新。由于上述方法执行过程中,针对每个备选词汇,获取被采样次数时,会模拟执行剩余采样个数s次的采样操作(伯努利试验),或者从满足条件的数值中随机获取一个值,等等,因此,每次重新执行针对训练语料从词频表中进行负例采样的方法生成的负例集都可能不同。
回顾以上过程,一方面,由于负例集中是预采样的负例,使用时只需随机取出相应数量负例即可,而无需考虑词汇在词汇表中的出现频率,运算复杂度大大降低。另一方面,在预采样过程中,进行批量采样,对词频表中的各个词汇只采样一次,而采样的数量可以是多个,从而减少负例采样的时间,进而能够快速有效地进行负例采样。总之,图2示出的流程可以提高负例采样的有效性。
根据另一方面的实施例,还提供一种针对训练语料从词频表中进行负例采样的装置。图5示出根据一个实施例的用于针对训练语料从词频表中进行负例采样的装置的示意性框图。如图5所示,用于针对训练语料从词频表中进行负例采样的装置500包括:第一获取单元51,配置为从词频表的未采样词汇集合中获取当前词汇,以及当前词汇对应的出现频率;第二获取单元52,配置为获取针对未采样词汇集合确定的剩余采样个数和剩余采样概率;第一确定单元53,配置为基于当前词汇对应的出现频率和剩余采样概率,确定当前采样概率;第二确定单元54,配置为根据当前词汇在剩余采样个数和当前采样概率条件下的二项分布,确定当前词汇被采样次数;添加单元55,配置为将所述当前词汇按照被采样次数添加到负例集中;更新单元56,配置为根据当前词汇被采样次数更新剩余采样个数,根据当前词汇对应的出现频率更新剩余采样概率,用于对词频表中的其他备选词汇进行采样,直到检测到预定条件得到满足。
第一获取单元51首先可以从词频表的多个备选词汇的未采样词汇集合中,获取一个备选词汇作为当前词汇,并获取该当前词汇对应的出现频率。其中,该出现频率可以是该当前词汇在训练语料中的出现频率。
第二获取单元52,配置为获取针对未采样词汇集合确定的剩余采样个数和剩余采样概率。剩余采样个数可以是负例集中还需要的负例个数。换句话说,就是未采样词汇在生成负例集的负例采样过程中的总采样次数。剩余采样概率,可以是未采样词汇在生成负例集的负例采样过程中的总采样概率。剩余采样概率为r的初始值一般为1。
第一确定单元53可以基于当前词汇对应的出现频率和剩余采样概率,确定当前词汇对应的当前采样概率。当前采样概率,可以是当前词汇在未采样词汇集合中的采样概率。在一个可选的实施例中,当前采样概率可以是当前词汇对应的出现频率和剩余采样概率的比值。
第二确定单元54可以根据当前词汇在剩余采样个数和当前采样概率条件下的二项分布,确定当前词汇被采样次数。二项分布是若干次独立的伯努利试验中成功的次数的离散概率分布。具体到某个实施例,对于进行的待采样负例个数次试验,对于每次试验,当前词汇被采样到的概率为当前采样概率。第二确定单元54的主要作用在于:确定在s次试验中,第i个词汇成功被采样的次数b。
根据另一方面的实施例,第二确定单元54可以模拟执行剩余采样个数次的采样操作,在各次采样操作中,确保当前词汇被采样到的概率为当前采样概率。统计当前词汇被采样到的次数,并确定当前词汇的被采样次数为,当前词汇被采样到的次数。
根据另一方面的实施例,第二确定单元54还可以从满足条件的数值中随机获取一个值,作为当前词汇被采样次数。这里的数值满足的条件可以为:与剩余采样个数的比值应与当前采样概率一致。
添加单元55,可以按照第二确定单元54确定的被采样次数将当前词汇添加到负例集中。被采样次数是多少,就添加多少个当前词汇到负例集。
更新单元56,根据当前词汇被采样次数更新上述剩余采样个数,根据当前词汇对应的出现频率更新上述剩余采样概率。可以理解,对每个备选词汇进行采样后,剩余采样个数会减少相应数量,剩余采样概率也会发生改变。换句话说,对于下一个备选词汇而言,采样条件发生变化。在一些可能的设计中,更新单元56可以将剩余采样个数更新为,原剩余采样个数与当前词汇被采样次数的差。更新单元56将剩余采样概率更新为,原剩余采样概率与当前词汇对应的出现频率的差。
另一方面,由于负例集中需要的负例个数是有限的,因此,还可以预先设置预定条件,当满足该条件时,停止负例采样,否则继续针对词频表的其他备选词汇执行采样流程。该检测功能可以由更新单元26实现,也可以由一个独立的检测单元实现。由此,在一些实施例中,装置500还包括检测单元57,配置为在更新单元26更新完剩余采样个数和剩余采样概率后,检测预定条件是否得到满足,在不满足预定条件的情况下,根据更新后的剩余采样个数和剩余采样概率对词频表中的其他备选词汇采样。这里,预定条件可以包括负例集中的负例总个数达到初始剩余采样个数,也可以包括更新后的剩余采样个数为0,还可以包括未采样词汇集合为空。
在一些可能的设计中,装置500还可以包括:
输出模块(未示出),配置为在所述负例集中的负例个数满足预定条件的情况下,输出所述负例集。该负例集可以输出到本地,也可以输出到其他设备。在进一步的实施例中,装置500还可以包括选择单元(未示出),配置为针对训练语料中的训练词汇,可以从该负例集中选取负例。
根据一方面的实施例,负例集中的词汇可以和预定区间上的各个数值相对应,选择单元进一步可以包括:生成模块,配置为生成预定区间上的随机数,其中,所生成随机数取自前述各个数值;获取模块,配置为从负例集中获取与上述随机数相对应的负例。
在一些实现中,所获取的负例还可能与训练词汇或其上下文词汇一致,此时,该负例词汇将不是该训练词汇的负例。因此,获取模块进一步可以配置为:比较所获取的负例与训练词汇是否一致;在一致的情况下,由上述生成模块重新生成预定区间上的随机数。
根据一种可能的设计,装置500还可以包括:检测单元(未示出),配置为检测负例集的更新条件是否满足;以使装置500在更新条件满足的情况下,重新生成负例集,从而对负例集进行更新。
通过以上装置,一方面,可以生成预采样的负例集,由于负例集中是预采样的负例,使用时只需随机取出相应数量负例即可,而无需考虑词汇在词汇表中的出现频率,运算复杂度大大降低。另一方面,可以在预采样过程中,进行批量采样,对词频表中的各个词汇只采样一次,而采样的数量可以是多个,从而减少负例采样的时间,进而能够快速有效地进行负例采样。总之,图5示出的装置500可以提高负例采样的而有效性。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2所述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。