一种基于字符对编码的词向量存储空间压缩的方法与流程

文档序号:17774536发布日期:2019-05-28 19:53阅读:1201来源:国知局
一种基于字符对编码的词向量存储空间压缩的方法与流程
本发明涉及一种自然语言处理中的词向量压缩方法,主要涉及一种基于字符对编码的词向量存储空间压缩的方法。
背景技术
:词向量是自然语言处理(nlp)中的一组语言建模和特征学习技术的统称,其中来自词汇表的单词或短语被映射到实数的向量。从概念上讲,它涉及从每个单词一维的空间到具有更低维度的连续向量空间的数学嵌入。在语言学中,在分布语义学的研究领域中讨论了词嵌入。它旨在基于语言数据的大样本中的分布属性来量化和分类语言项之间的语义相似性。词向量最基本的性质就是,如果两个词语较为语义相近,那么他们在向量空间中的距离也较为相近。很多场景需要对词向量进行压缩,诸如手机收入法中的语言模型,需要预训练的词向量进行初始化,在移动存储设备中,词向量的存储空间不能太大,太大的存储空间意味着更多的外磁盘,内存等存储资源消耗。现有技术压缩词向量存储空间的算法,在语料集出现的词语中,选取词频极高的词语以及它们的词向量构成基词向量集,再使用算法为剩余的低频词语训练出稀疏向量表示集。这样通过矩阵乘法操作作为转换的稀疏矩阵,这样使用向量表示集与基词向量集,即可复原出原本的词向量集,但是高频词语构成的基词向量集加上低频词语的稀疏向量表示集的存储大小,远小于原本的词向量集,达到压缩词向量存储空间的目的。现有技术另一种常用方法是训练自编码器,使用自编码器达到矩阵降维的作用。现有技术存在的问题:1.算法训练速度慢,现有的词向量压缩算法得到的压缩后的词向量集,由高频词语构成的基词向量集加上低频词语的稀疏向量表示集两部分组成。对于低频词语的稀疏向量表示,是使用基词向量集中所有词向量w的线性组合wx来获得一个最接近原低频词词向量xe的结果,xe=wx,这个线性组合x就是该低频词的向量表示。但向量x的维度等于基词向量集的数量模||w||,因此从极高维的解空间中训练出一个最佳的基向量线性组合会花费大量的时间。2.使用压缩算法得到的词向量无法应对没有在语料中出现的罕见词,压缩后的词向量中只包含了有限个词语的词向量,一些没有出现在中的词向量表中的词语,就无法获得对应的词向量。深度学习及神经网络技术为我们的生活带来的许多变化。然而一个神经网络的运行依赖一定规模的训练参数,这些参数会占用大量的存储空间,这对将神经网络移植到移动端带来挑战,因此压缩网络存储空间就显得尤为重要。对于自然语言处理相关的神经网络,绝大多数存储空间都被词向量所占用,现阶段也有了一些压缩词向量存储空间的算法,但他们有一些不可忽视的问题。一是使用小规模词向量的线性组合,来表示余下大量的低频词词向量,这种线性组合训练任务解空间复杂,难以找到最优解,这种复杂性也让压缩算法得到的词向量与原词向量有一定的差距;二是词向量的规模有限,囊括所有词语的词向量不现实,对于一些罕见词就无法获取它对应的词向量。技术实现要素:针对以上问题,本发明提出一种基于字符对编码的词向量存储空间压缩的方法,在保证词向量性质基本不受影响的情况下,达到大幅压缩词向量的存储空间的目标,同时提升了依据原词向量训练出压缩后词向量的训练速度,并解决了无法获得罕见词语磁向量的问题。本发明的有益效果为:一是引入子词(subword)的思想。将一个词语看作由多个子词构成,例如单语“sunshine”可以拆分成“sun”和“shine”。对子词进行词向量训练,从而将传统的词向量转化为子词向量,对于一些罕见词,可以将其拆分成多个子词部分,用子词词向量的线性表示来间接获取罕见词的词向量,从而在一定程度上缓解了无法获取罕见词词向量的问题;二是由高频词的基词向量集训练低频词的线性组合表示的时候,为线性组合设置一个初始解,从而在训练阶段可以使用梯度下降方法快速找到最优解。附图说明图1为本发明的整体流程图;图2为本发明的步骤1的具体流程图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。如图1所示,本发明获取压缩词向量集的方法流程为步骤1,选取一定规模的、预处理完毕的语料,使用bpe算法,获得语料中每个词语的子词构成,将原语料中的词语后插入它相对应的子词表示,构成一个新语料集。如图2所示为步骤1的具体流程图。在步骤1中具体实现为:步骤1-1,首先根据空格切分原训练语料,因此需要先分词,以统计词语与词频。将每个词语变成单个词如’word’变为{w,o,r,d</w>},根据词频进行排序,形成{(w,o,r,d):1}类似的词语词频字典。步骤1-2,将排序字典中每个key进行前后组后,统计词频,如{(w,o,r,d):1}则变为{wo:1,or:1,rd:1}。生成词语词频统计结果。步骤1-3,基于指定生成子词的数目n,每次选择频率出现最高的词语,将词语词频字典中对应的两个词合并成一个词,如‘a”b’出现的合并为’ab’,并将其写入字符编码对里。并将与之相关的统计结果进行更新,如‘abcb’,如果ab合并,则对应的’bc’统计次数减少。最后将‘ab’的统计次数置为0。不断循环迭代,直至生成指定数目的字词n。步骤2,使用glove算法依据上述新语料训练出每个词语词向量集{wi}与子词的词向量集{si},每个词向量维度为n维,这里注意到子词的数量||s||远小于词语的总数量||w||。同时由于子词和原词语在一起进行训练,两者之间的词向量差距很小,不会使得词向量的性质受到较多损失。所述glove算法为统计语料库(文本)中词与词之间的共现(co-occurrence)信息,即在一个窗口中共同出现的次数,比如“我去北京上大学”在大小为3的窗口范围内,我-与共现次数为1,我-北京共现次数为1,去-北京共现次数为1,去-上共现次数为一等等,构成一个共现矩阵:我去北京上大学我11100去11110北京11111上01111大学00111其中共现矩阵的每一项为xij,函数f()根据词共现矩阵中不同数值大小,给予的误差进行不同程度的放缩。使用如上的损失函数,用随机梯度下降方法进行求解优化,具体的步骤如下,随机初始化v(词向量)和b(偏执项),然后使用梯度下降算法迭代优化,最后得到的vi就是对应词i的词向量。步骤3,得到词语词向量集与子词词向量集后,使用子词词向量集作为基词向量集,为每一个原词语都训练出一个基于基词向量集s的线性组合sxt,使得wi≈sxt,来表示出原词向量。先将x赋上一个可信的初始值,从而能加速优化过程。设计的损失函数中包含了x的l2正则化,正则化可以让词向量达到稀疏的目的。由于这里的向量表示是稀疏的,即线性方程组的解x中有大量的元素都是0,这样的解向量在存储中只会占用很少的空间。训练方法使用随机梯度下降方法,采用adagrad优化器,损失函数采用mse,及让复原的词向量尽可能的接近。构建损失函数对于此损失函数使用优化器,通过梯度下降方法,迭代求解,使得损失函数最小化,直到损失函数达到设定的阈值,或者训练轮数达到设定的目标轮数。通过损失函数使得loss函数最小化,具体的步骤描述如下。步骤3-1,使用正态分布随机初始化s和x,步骤3-2,计算输入样本wi对应的正向传播误差步骤3-3,使用adagrad优化器,梯度下降方法,迭代优化损失函数步骤3-4,验证样本的损失函数是否低于设定的目标阈值,或者是否迭代次数超过设定的目标轮数,若达到目标,则停止训练,否则继续3-2步骤。步骤3-5,输出s和x。通过以上的步骤最终将原本的词向量集w转化为了子词向量集s加上词向量的线性组合解向量集x,在对词向量性质影响不大的情况下,达到压缩词向量存储空间的作用。所述复原词向量的方式为,使用子词(subword)集合的词向量和稀疏矩阵t,构成一次矩阵乘法操作,得到复原后的矩阵,复原后的矩阵的每一行就是复原后的词向量。在面对一些罕见词的情况下,如果罕见词能够拆分由子词表中的子词来表示,那么也可以用它对应的子词的向量的等比例线性组合,来获取该罕见词有一定意义的词向量,从而在一定程度上缓解了罕见词的表示问题。最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1