一种基于Zolu函数的词嵌入学习模型及训练方法与流程

文档序号:11774486阅读:282来源:国知局
本发明涉及一种基于zolu函数的词嵌入学习模型及训练方法,属于自然语言处理、词嵌入、词相似度计算以及词表达准确度
技术领域
:。
背景技术
::自然语言学习模型是神经网络模型的一种典型应用。其发展过程中有如下几个里程碑:(1)bengio在2003年将神经网络分为输入层(词语id),投影层(projection层,由词语id转换为词向量),隐含层和输出层,此神经网络的复杂度如下:q=n*d+n*d*h+h*v;其中n*d为输入层和投影层之间的权重,n表示上下文长度,不是n-gram中的n,d是输入词的实数表示的维度;n*d*h计算出了投影层到隐含层之间的权重数量,h是隐含层的节点数目,h*v表示隐含层和输出层之间的权重数目,v是输出层的节点数目;此模型在n-gram模型基础上,引入词向量的关联度,是后续所提模型的基础;(2)mikolov2010年提出recurrentneuralnetworklanguagemodel(rnnlm)模型的复杂度为q=h*h+h*v;(3)2013年,mikolov在上述神经网络模型基础之上,提出了cbow和sg学习模型,其本质是一种log-bilinear模型。此模型利用huffman二叉树来代替原模型中的线性结构,同时对输出层进行了改造,使得神经网络的复杂度降低为h*log(v),将神经网络训练语言模型的效率提升了40%;(4)2013年10月,mikolov在nips会议上对连续词袋(continuousbag-of-words,cbow)及跳词(skip-gram,sg)模型中的负采样(negativesampling,ns)和分层softmax(hierarchicalsoftmax,hs)模块进行了分析,并同时公开了word2vec源代码。从而引发了对这一强大的词向量表示工具的广泛分析与研究。word2vec作为浅层深度学习模型的代表之作,极大降低了语言模型以及词向量训练的复杂度,同时由于将词向量之间的相关含义加入到了训练过程中,使得词向量的训练结果有着良好的相似度匹配关系。也正因为word2vec可以在向量空间上将含义相近的词的距离缩短,使得该工具在“推荐”方面拥有了广泛的应用市场。例如在输入法中,对于成型的自然语言,用户只需输入前面的个别字或者是词,输入法可以自动通过推断来推荐出用户接下来可能要打的语句。这一应用极大的便利了电脑输入法的使用。继2013年后,鲜有文章对mikolov所提的cbow及sg模型进行改进,大部分是将其所提模型应用于各个领域中,往往均能取得良好的效果。因为,所提模型解决了维度灾难问题,能够高效进行降维处理,训练样本充足情况下,相似度及准确度性能也比现有其他模型都高。因此,随着近几年的应用,人们发现word2vec代码及其揭示的cbow和sg学习模型,是近乎“完美”的;改进空间不大。但依然有相关改进文献产生,经过资料检索,有如下几项:1)文章“implicitlyincorporatingmorphologicalinformationintowordembedding”在mikolov提出模型基础上引入词素:即前缀、后缀和词根,并基于此提出了mwe-a、mwe-s和mwe-m三种模型。文章将词素含义作为计算词向量空间距离的一个因素;从实验结果来看,在wordsim-353黄金准则下,比cbow模型在准确度性能方面提升了5%,在rg-65黄金准则下,比原cbow在准确度性能方面提升了7%。2)文献“too/twosimpleadaptationsofword2vecforsyntaxproblems”结合词向量顺序进一步增加词向量计算的关联度。也使得cbow模型性能得到了一定的提升。技术实现要素:本发明的目的在于进一步提升现有词嵌入模型的准确度和相似度性能,提出了一种基于zolu函数的词嵌入学习模型及训练方法。一种基于zolu函数的词嵌入学习模型及训练方法,包括一种基于zolu函数的词嵌入学习模型及一种基于zolu函数的词向量训练方法。一种基于zolu函数的词嵌入学习模型,从功能上又具体包括zl-cbow模型和zl-sg模型;还包括hs模式和ns模式;其中,hs指hierarchicalsoftmax即分层softmax,ns指negativesampling,即负采样;ss即subsampling是ns可选的功能组成之一,可进一步设定和选择实现ss功能;一种基于zolu函数的词嵌入学习模型,从组成上包括参数输入模块、初始化模块、激活函数表建立模块、构建词汇表模块、霍夫曼二叉树构建模块、词向量处理模块、词向量训练模块以及聚类处理模块;一种基于zolu函数的词嵌入学习模型,各模块功能如下:参数输入模块的功能是接收以训练文件名、输出文件名、batch大小、窗口尺寸、输出的词向量维数、采样阈值、负采样数目、hs选择、cbow选择以及循环次数为主的输入参数;参数输入模块的功能还包括配置以debug模式、binary输出选择、学习率、线程数、最小词频、聚类簇个数、建立词典结构体以及哈希表分配为主的参数;其中,输出文件名是存储训练好的词向量的文件;cbow选择为0时使用zl-sg模型,为1时,选择zl-cbow模型;采样阈值是指词频超过多少将被采样;负采样数目的大小控制着负采样映射表的建立;hs选择为1时,选择hs模式,为0时,为ns模式;初始化模块的功能是接收参数输入模块的变量及参数,并且分别针对hs模式和ns模式申请动态数组;激活函数表建立模块的功能是基于zolu函数建立激活函数表,并且存储到exptable数组中;构建词汇表模块的功能是构建词汇表;霍夫曼二叉树构建模块的功能是构建霍夫曼二叉树;词向量处理模块的功能是在负采样数目大于1时,为每个单词建立能量对应表,即负采样映射表;词向量训练模块的功能是基于zolu函数展开zl-cbow学习模型的hs或ns;以及zl-sg学习模型的hs或ns模式词训练;聚类处理模块的功能是对词向量训练结果基于k-means算法进行分类。一种基于zolu函数的词嵌入学习模型,各模块的连接关系如下:参数输入模块与初始化模块相连;初始化模块与激活函数表建立模块相连;构建词汇表模块与霍夫曼二叉树构建模块相连;霍夫曼二叉树构建模块与词向量处理模块相连;词向量处理模块与词向量训练模块相连;激活函数表建立模块与词向量训练模块相连;词向量训练模块与聚类处理模块相连。一种基于zolu函数的词向量训练方法,包括如下步骤:步骤一、参数输入模块接收各种词训练参数并配置各种参数;其中,词训练参数主要包括:训练文件名、输出文件名、batch大小、窗口尺寸、输出的词向量维数、采样阈值、负采样数目、hs选择、cbow选择以及循环次数;其中,训练文件名也可以不输入,如果不输入训练文件名,则在构建词汇表时,通过读原有词库来生成词汇表;其中,配置的各种参数包括debug模式、binary输出选择、学习率、线程数、最小词频、聚类簇个数、建立词典结构体以及哈希表分配;步骤二、激活函数表建立模块建立激活函数表;其中,激活函数表基于如下公式(1)中的zolu函数:其中,表格大小可以根据精度需要进行调整,zolu函数也可以替换为还可以替换成其他输入范围不受限制,输出值为0到1之间的激活函数;步骤三、构建词汇表模块构建词汇表,具体分为如下两种情况:3.1从原有词库中生成词汇表;具体调用readvocab()函数实现;3.2从训练文本中提取词汇表;具体调用learnvocabfromtrainfile()函数实现;其中,原有词库生成词汇表,仅发生在无训练文本输入文件情况下;步骤四、初始化模块初始化各词向量;初始化的各词向量包括syn0、syn1、syn1neg并给syn0赋予初始值;还包括给hs和ns模式申请动态数组;步骤五、霍夫曼二叉树构建模块构建映射层到输出层的权重,即生成二叉树,并根据词频给每个词设定其在霍夫曼二叉树的位置;生成二叉树具体通过createbinarytree函数实现,生成一棵节点数为2*vocab_size+1个节点的霍夫曼二叉树;其中,步骤四和步骤五具体通过initnet()函数实现;步骤六、判断是否为ns模式,若为ns,则根据词频建立负采样映射表,若不是ns模式,跳过此步骤,直接执行步骤七;步骤六具体为:判断是否为ns通过判断步骤一参数中的负采样数目是否大于零,若大于零表明采用要建立负采样映射表,否则不建立;负采样映射表具体通过initunigramtable()函数实现,在建立词频映射表时,优选的词频指数为0.75次方,也可以是其他数值;步骤七、词向量训练模块对步骤三构建的词向量通过基于zolu函数的不同词训练模型进行训练,具体为:判断步骤一中的cbow参数选项是0还是1,并根据cbow参数选项决定执行7.1还是7.2操作:7.1cbow参数选项为1时,则进一步判断hs选择是0还是1,并进行如下操作:7.1a当hs为1时,跳入zl-cbow模型的hs模式进行词向量训练;其中,zl-cbow模型的hs模式下词向量训练xw和的更新公式分别为(2)和(3):其中,xw代表更新的词向量;代表从根节点出发到w路径上第j-1个非叶子节点对应的向量,为更新参数;代表从根节点出发到w路径上第j个节点对应的编码,具体含义为:表明第j个节点是第j-1个节点的子节点,对应编码为0,条件概率表达为:表明第j个节点不是第j-1个节点的子节点,对应编码为1,ηθ和ηw分别代表动态更新的和xw的学习率,两者初始值是相同的,优选的初始值是0.025,也可以不同;中的参数t代表xw和的内积;7.1b当hs为0时,跳入zl-cbow模型的ns模式进行词向量训练;其中,zl-cbow模型在ns模式下词向量训练的xw和θu的更新公式分别为(4)和(5):其中,xw代表更新的词向量;θu代表当前样本u对应的辅助向量,为待训练参数;lw(u)=1代表u=w,即u是正样本,否则lw(u)=0代表u≠w,即u是负样本;和分别代表动态更新的θu和xw的学习率,两者初始值可以相同,也可以不同,若需要设置不同的初始学习率,需要分别设置两个学习率参数,word2vec源代码中采用的是相同的初始学习率初值及动态更新值;中的参数t代表xw和的内积;7.2cbow参数选项为0时,则进一步判断hs选择是0还是1,并进行如下操作:7.2a当hs为1时,跳入zl-sg模型中的hs模式进行词向量训练;其中,更新的词向量vw及待更新参数分别表示如下公式(6)和(7);其中,vw代表更新的词向量,每处理完contex(w)中的一个词中的更新一次词向量vw;是待更新参数;和分别代表动态更新的和vw的学习率,两者可以相同,也可以不同;中的参数t代表vw和的内积;代表从根节点出发到路径上第j-1个非叶子节点对应的向量,为节点的路径长度;代表从根节点出发到w路径上第j个节点对应的编码,具体含义为:代表第j个节点是第j-1个节点的子节点,对应编码为0,条件概率设置为:表明第j个节点不是第j-1个节点的子节点,对应编码为1,条件概率被设置为:7.2b当hs为0时,跳入zl-sg模型的ns模式进行词向量训练;其中,zl-sg模型在ns模式下词向量训练的和待更新参数的更新公式分别为(8)和(9):其中,代表更新的词向量,每处理完中的一个词,更新一次;代表即是正样本,否则代表即是负样本;和分别代表动态更新的和的学习率;neg(w)代表w的负样本集合;步骤八、聚类处理模块判断步骤一配置各种参数中的聚类参数是否聚类,并根据聚类与否,决定是否进行聚类,再保存训练结果,具体操作为:8.a若聚类参数k-means为1,则进行聚类操作后再保存聚类及词向量训练结果;8.b若聚类参数k-means为0,则保存词向量训练结果;至此,经过步骤一到步骤八,完成了一种基于zolu函数的词向量训练方法。有益效果本发明所述的一种基于zolu函数的词嵌入学习模型及训练方法,与现有词嵌入模型与方法相比,具有如下有益效果:1.本发明将zolu激活函数应用于词嵌入领域,并提出了zl-cbow及zl-sg两个词嵌入训练模型,与现有mikolov所提模型及ll-cbow模型相比,在词相似度方面有所提高;2.本发明所述模型及词嵌入方法在训练准确度方面也比mikolov所提的cbow以及ll-cbow有提高;3.本发明所述的一种基于zolu函数的词嵌入学习模型及训练方法,在实现复杂度方面,与mikolov所提模型相比,处于同一数量级,也可以适用于极大规模语料库的训练;4.本发明所提的一种基于zolu函数的词嵌入学习模型及训练方法,可应用于各种不同的“推荐”功能,即指从用户的某一特点出发,通过计算相似度从而为用户推荐契合其特点的类似商品、书籍、音乐等;例如:依照用户网购的足迹为其推荐可能喜欢的物品,依照音乐app用户收藏的歌曲为其推荐可能喜欢的歌曲等。附图说明图1是本发明一种基于zolu函数的词嵌入学习模型及实施例1中的模型组成示意图;图2是本发明一种基于zolu函数的词向量训练方法及实施例1中的训练方法流程图;图3是本发明一种基于zolu函数的词向量训练方法步骤7中的词向量训练流程图。具体实施方式本发明所述模型和方法是对word2vec词嵌入模型的改进,word2vec源代码下载网址如下:https://code.google.com/p.word2vec.提出word2vec模型的mikolov分别通过如下两篇文章对word2vec模型进行了较为细致的阐述:[1]tomasmikolov,kaichen,gregcorrado,andjeffreydean.efficientestimationofwordrepresentationsinvectorspace.corr,abs/1301.3781,2013.[2]t.mikolovetc.distributedrepresentationsofwordsandphrasesandtheircompositionality.oct.2013.然而,依然有一些作者写了很多中文和英文的描述,如:[3]yoavgoldbergandomerlevy,word2vecexplained:derivingmikolovetal.’snegative-samplingword-embeddingmethod.[4]http://blog.csdn.net/itplus/article/details/37998797本发明中的公式符号及含义描述与[4]文献中一致,[4]文献是对word2vec数学原理的深入剖析,如有需要参考的,请详细阅读上述[1]到[4]文献。下面再结合附图和实施例对本发明做进一步说明和详细描述。实施例1本实施例结合附图1和附图2,叙述了本发明一种基于zolu函数的词嵌入学习模型及训练方法的详细组成与词训练流程。图1是本发明一种基于zolu函数的词嵌入学习模型及实施例1中的模型组成示意。从图1可以看出参数输入模块与初始化模块相连;初始化模块与激活函数表建立模块相连;构建词汇表模块与霍夫曼二叉树构建模块相连;霍夫曼二叉树构建模块与词向量处理模块相连;词向量处理模块与词向量训练模块相连;激活函数表建立模块与词向量训练模块相连;词向量训练模块与聚类处理模块相连。图2是本发明一种基于zolu函数的词向量训练方法的程图。从图2可以看出一种基于zolu函数的词向量训练方法,包含如下步骤:步骤a:输入及配置参数,具体包括输入参数和配置参数:其中,输入参数为:训练文件名、输出文件名、batch大小、窗口尺寸、采样数目、负采样数目、是否使用hs、是否使用cbow以及循环次数;配置参数为:debug模式、binary输出、cbow初始学习率、sg初始学习率、线程数、最小词频删除设置、是否聚类、词典结构体以及哈希表分配;步骤b:计算激活函数值,并存到exptable中;其中,激活函数采用zolu函数,即:这里,tanh(x)=2σ(2x)-1,其中,σ(x)是sigmoid激活函数,表达式为:步骤c:调用trainmodel函数,具体为:步骤c.1构建词汇,具体又包括两种情况:c.1a从原有词库中生成,通过调用readvocab()函数实现;c.1b从训练文本中提取,通过调用learnvocabfromtrainfile()函数实现;步骤c.2初始化网络,具体通过调用initnet()函数来实现,具体为:分别针对hs和ns申请动态数组,建立huffman树,即哈夫曼树,再对每个单词进行编码;步骤c.3判断是否是负采样,即ns为1,如果是,则调用initunigramtable()函数,为每个单词建立能量分布表;若否,跳过此步骤;步骤c.4建立多线程,并进行词训练,词训练的具体流程如图3;步骤c.5词训练结束后,释放临时变量,退出;步骤d判断是否聚类,若需要聚类,调用k-means算法聚类;否则,跳过聚类过程,直接保存词向量训练结果;至此,从步骤a到步骤d,完成了一种基于zolu函数的词向量训练方法。图3是本发明一种基于zolu函数的词向量训练方法步骤7以及本实施例中步骤c.4的具体流程,对应word2vec源代码中trainmodelthread函数的操作。从图3可以看出,步骤c.4,具体又包括:步骤i)给neu1及nue1e分配空间;其中,neu1对应cbow相应公式中的xw,对应sg模型公式中的vw及nue1e对应[4]文献中伪代码中的e,代表隐藏层中的误差向量;累加word_count_actual,并更新last_word_count;步骤ii)打开train_file文件,判断debug_mode值,若debug_mode值大于1,则显示当前学习率值、处理流程及所在线程;否则不显示;步骤iii)更新alpha学习率;其中,学习率的更新是每训练10000个词更新一次;也可以通过步骤a中的配置参数修正这个数值10000为别的数值;步骤iv)从train_file读入一个词;步骤v)对高频词进行下采样subsampling;步骤vi)判断sentence是否超过1000字,若超过了就不处理;步骤vii)判断是否cbow,并根据判断结果进行相应操作,具体为:vii.a若cbow=1,则跳到步骤viii),进入cbow;vii.b否则cbow=0,则跳到步骤viiii),进入sg;步骤viii)判断是否hs,并根据判断结果进行相应操作,具体为:viii.a若hs=1,则进行zl-cbow学习模型的hs模式训练,具体通过公式(2)和公式(3)进行词嵌入更新;viii.b否则hs=0,则进行zl-cbow学习模型的ns模式训练,具体通过公式(4)和公式(5)进行词嵌入更新;步骤viiii)判断是否hs,并根据判断结果进行相应操作,具体为:viiii.a若hs=1,则进行zl-sg学习模型的hs模式训练,具体通过公式(6)和公式(7)进行词嵌入更新;viiii.b否则hs=0,则进行zl-sg学习模型的ns模式训练,具体通过公式(8)和公式(9)进行词嵌入更新;步骤x)训练结束后,释放临时变量,退出trainmodelthread函数。实施例2本实施例具体阐述了词嵌入训练时的zl-cbow、zl-sg及激活函数对应的代码。zl-cbow模型中xw和更新的源代码if(cw){for(c=0;c<layer1_size;c++)neu1[c]/=cw;if(hs)for(d=0;d<vocab[word].codelen;d++){f=0;l2=vocab[word].point[d]*layer1_size;//propagatehidden->outputfor(c=0;c<layer1_size;c++)f+=neu1[c]*syn1[c+l2];if(f<=-max_exp)f=0;elseif(f>=max_exp)f=1;elsef=exptable[(int)((f+max_exp)*(exp_table_size/max_exp/2))];//'g'isthegradientmultipliedbythelearningrateg=(1-2*vocab[word].code[d]-f)*alpha;//propagateerrorsoutput->hiddenfor(c=0;c<layer1_size;c++)neu1e[c]+=g*syn1[c+l2];//learnweightshidden->outputfor(c=0;c<layer1_size;c++)syn1[c+l2]+=g*neu1[c];}zl-cbow模型中zolu激活函数的查找表建立源代码zl-sg模型中xw和更新的源代码zl-sg模型中zolu激活函数的查找表建立源代码实施例3本实施例叙述了本发明一种基于zolu函数的词嵌入学习模型及训练方法,与mikolov所提模型及及ll-cbow模型相比,在词相似度方面的提高。在该功能中,word2vec依据输入的一个词,将其转换为对应词向量,通过对词向量的数学运算来找出与其有一定相似度的词汇,按照相似度从高到低罗列出来作为结果。在该项功能的测试中,选择“meat”单词为样例,具体测试结果如表1所示。表1相似词推荐结果从表1可以看出,输入meat,我们所提出的zl-cbow模型训练结果显示前5个都是“肉”,且都属于meat的相似词;而“janodkillian;mohamedmorchid;richarddufour;georgeslinarèsalog-linearweightingapproachintheword2vecspaceforspokenlanguageunderstandingieeespokenlanguagetechnologyworkshop(slt)year:2016pages:356-361,doi:10.1109/slt.2016.7846289”提出的ll-cbow模型显示结果中,第四个和第五个已经不是“meat”了;cbow显示结果中,前四个是“meat”。可见,本专利所提的zl-cbow模型的相似词推荐结果比cbow和ll-cbow都要好。实施例4本实施例叙述了本发明一种基于zolu函数的词嵌入学习模型及训练方法在具体实施时与mikolov所提cbow模型相比,在准确度方面的提高。以capital-common-countries为例,通过改变窗口尺寸大小得到不同的词相似度准确值,如下表2所述:表2不同窗口尺寸大小zl-cbow与cbow准确率对比从表2中可以看出窗口尺寸从2到9依次增大情况下,使用zolu作为激活函数的zl-cbow训练模型在窗口尺寸变化过程中其词向量计算的准确率数值比同样窗口尺寸的使用sigmoid函数作为激活函数的cbow模型词训练的准确率数值每一列均有提高,其中窗口尺寸为2和3时,准确度的提升分别高达17%,即73.72%-56.72%,和11.07%,即82.02%-70.95%;即使针对窗口尺寸为7,提升也有0.6%,即:82.81%-82.21%。下表3是针对不同数量的隐层节点数大小,对比zl-cbow和cbow在预测单词功能方面的准确度(运行脚本analogy.sh)。表3隐层节点数不同zl-cbow及cbow模型在预测单词方面的准确率对比100200300zl-cbow86.17%86.36%84.98%cbow81.42%82.61%81.23%从表3可以看出:a).不论隐藏层节点是100、200还是300,本发明所提的zl-cbow模型,均比mikolov的cbow预测单词的准确率要高。b).由200个隐层节点下降至100个隐层节点时,其计算词向量相似度的复杂性降低一半,然而本发明所提zl-cbow模型的预测准确性却几乎没受到影响,即:zl-cbow性能好又稳定。c).无论是使用zolu作为激活函数的zl-cbow模型还是使用sigmoid函数作为激活函数的cbow模型,都在隐层节点数为200时达到了准确率的最大值;为了降低复杂度节省资源,在不影响预测效果的前提下,仍应该选择100为最佳的隐层节点数目。实施例5本实施例叙述了本发明一种基于zolu函数的词嵌入学习模型及训练方法在具体实施时与mikolov所提cbow模型相比,在复杂度方面,属于同一量级。以步骤7.1a中的zl-cbow学习模型中采用hs为例,更新公式为(1)和(2);而对应mikolov所提出的cbow学习模型中采用hs的更新公式如下(10)和(11):对比(2)和(10)以及(3)和(11),可以发现,有如下两点区别:a:对于zl-cbow,前面的系数是2,而cbow,前面的系数是1;b:对于zl-cbow,更新函数为zolu,而cbow,更新函数为sigmoid。下表4分别针对词相似度及预测单词功能对zl-cbow及cbow运行时间做以对比。表4zl-cbow和cbow运行时间对比从表4可以看出,在运行词相似度及预测单词功能时,zl-cbow模型的运行时间只是稍微比cbow分别多7%到9%的时间,没有数量级的提升,在实际应用过程中是完全可以忍受的。因此,zl-cbow算法复杂度与cbow复杂度量级相同,也可以适用于极大规模语料库的训练。以上所述为本发明的较佳实施例而已,本发明不应该局限于该实施例和附图所公开的内容。凡是不脱离本发明所公开的精神下完成的等效或修改,都落入本发明保护的范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1