语义数据存储调度方法
技术领域
本发明涉及大数据挖掘,特别涉及一种语义数据存储调度方法。
背景技术
大数据尤其是社交网络数据蕴涵着巨大的商业价值和社会价值,有效地管理和利用这些数据、挖掘数据的价值对企业和个人将带来巨大的影响。另一方面,大数据带来新的发展机遇的同时,也带来很多技术挑战。传统的信息处理与计算技术已难以有效地应对大数据的处理。大规模社交网络数据的有效处理面临数据的存储、算法分析等多个层面上的主要技术困难。巨大的数据量使得传统的单机机器学习和数据挖掘算法都难以在可接受时间内完成计算,导致算法失效。以即时通信数据为例,由于实时更新性和变化性的特点,数据量的剧增会使自然语言处理及机器学习过程变得更加复杂,而当前的并行计算环境的总体架构并不适用于文本数据的高效并行处理,特别是进程管理和缓存管理上并未与文本挖掘算法所需要的存储和分布式计算架构相匹配;再者,文本的不规范增加了用户对信息理解和事件发现的困难程度,最终导致数据分布出现严重的不平衡。此外还存在中文词缺乏语义表示的问题,使得传统方法不能完全适用于对社交文本的分析和计算,因此难以实现信息的智能化、人机交互和自动问答。
发明内容
为解决上述现有技术所存在的问题,本发明提出了一种语义数据存储调度方法,包括:
建立用于文本数据分析的Map/Reduce并行计算环境;
文本挖掘主进程维护文档元数据,启动工作线程等待来自文本挖掘分进程的文本检索请求;
如果检索请求的文件已经存在于云端缓存中,则工作线程将文件的元数据对象发送给分进程。
优选地,所述主进程一旦启动运行,首先初始化一个散列表作为文档元数据缓存,所述散列表存储记录文档文件信息的key-value对。
优选地,所述每一个key-value对中,key值为文件名,value为一个元数据对象。
优选地,所述元数据对象中记录文件的大小、存储该文件数据块的各个分进程以及所有数据块在各个分进程管理的文档缓存中的位置。
优选地,分进程将接收到的对象存入本地缓存中,并且主进程记录每个文档元数据对象被哪些分进程缓存,以当该文件被从云端缓存中删除时,通知它们无效相应的文档元数据对象。
优选地,还包括,如果请求的文件还没被缓存,工作线程首先从云端缓存中申请足够的空间并生成文档元数据对象,然后通知负责缓存该文件数据块的各个分进程将相应数据块加载到各自本地文档缓存中,最后工作线程将元数据对象发送给请求进程并记录存储该元数据的分进程ID。
优选地,当从云端缓存中申请存储空间时,如果剩余空间不足,工作线程删除最久未访问的文件,删除文件的元数据的同时通知相应的分进程。
本发明相比现有技术,具有以下优点:
本发明提出了一种语义数据存储调度方法,从进程管理和缓存管理角度改进了MAPRUDUCE的并行框架,更好地适应文本数据挖掘的需要;并且针对社交文本的不规范特点,利用语义向量对文本数据进行有效表示和分析,适用于各种规模的社交文本挖掘分析和计算。
附图说明
图1是根据本发明实施例的语义数据存储调度方法的流程图。
具体实施方式
下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
本发明的一方面提供了一种语义数据存储调度方法。图1是根据本发明实施例的语义数据存储调度方法流程图。
本发明首先建立Map/Reduce并行计算环境。在执行文本并行数据分析业务之前,首先向云端资源管理器申请计算节点,为单个业务分配的所有节点将共同组成业务集。为了将各个节点上独立运行的文本挖掘进程组织为并行程序,对程序的代码进行修改,将主函数修改为可被各并行进程执行的函数。在业务集的每一个节点之上启动一个文本挖掘并行进程,ID为0的进程被选择成为主进程,其余进程作为分进程。主进程维护的文档元数据缓存,分进程维护的本地文档缓存以及分进程所开启的工作线程和数据线程。
为克服进程执行中可能遇到的性能瓶颈,在进程管理器调度执行业务的Map/Reduce进程之前,首先调度并执行文档初始化进程。具体地,当业务初始化完成之后,进程管理器等待一轮心跳通信的时间周期,以获知某个进程管理器有空闲的Map/Reduce时隙并且该进程管理器向进程管理器请求执行进程。当接到该心跳信息之后,进程管理器将调度该文档初始化进程到该进程管理器上执行。对应的进程管理器负责执行文档初始化进程,并在执行过程中通过周期性的心跳通信向进程管理器汇报该进程的状态直至进程完成。
对于主进程,一旦启动运行,首先初始化一个散列表作为文档元数据缓存,散列表用于存储一系列记录文档文件信息的key-value对。每一个key-
value对中,key值为文件名,而value为一个元数据对象。将文件划分为相同大小的数据块存储在缓存中。元数据对象中记录文件的大小、存储该文件数据块的各个分进程以及所有数据块在各个分进程管理的文档缓存中的位置。主进程将启动工作线程等待来自分进程的文本检索请求。
如果检索请求的文件已经存在于云端缓存中,则工作线程将文件的元数据对象发送给分进程,而分进程将接收到的对象存入本地缓存中以方便后续使用。主进程记录每个文档元数据对象被哪些分进程缓存,以便当该文件被从云端缓存中删除时,通知它们无效相应的文档元数据对象。
如果请求的文件还没被缓存,工作线程首先从云端缓存中申请足够的空间并生成文档元数据对象,然后通知负责缓存该文件数据块的各个分进程将相应数据块加载到各自本地文档缓存中。最后工作线程将元数据对象发送给请求进程并记录存储该元数据的分进程ID。当从云端缓存中申请存储空间时,如果剩余空间不足,工作线程删除最久未访问的文件,删除文件的元数据的同时通知相应的分进程。
本地文档缓存存储了各并行进程所共享文档的数据块。分进程在启动后首先初始化一个本地文档缓存并申请连续的内存区域用于构建缓存。本发明基于并行远程内存访问模式来构建云端缓存,各个分进程申请的内存区域被指定为允许远程访问的窗口,同属于一个并行程序的所有进程和所属线程允许直接访问这些内存窗口。
所述工作线程调用修改过的并行分析程序主函数。当执行程序的主函数时,工作线程从已建立的云端缓存中读取共享数据。分析工作线程的每一次数据访问,如果要访问的是共享文件,则将请求转发给数据线程。数据线程将从分布式内存缓存中获取相应的数据并将其写入指定的地址,在这个过程中数据线程作为工作线程的I/O代理。
当被指示读取共享文件的某一部分数据时,数据线程首先查找本地的文档元数据缓存以便获得相应文档的详细信息。如果未从本地缓存中获得相应文件的元数据,则询问主进程的工作线程以获得元数据并将其存储在本地。通过获取的元数据,数据线程将获得存储有相应数据块的分进程,结合工作线程的请求信息,数据线程将通过远程内存访问发起对相应分进程维护的内存窗口的访问。数据线程将获得的数据按照预设机制存储到工作线程指定的内存地址。当所有的工作线程执行完主函数,文档元数据缓存、各个节点上的本地文档缓存以及内存缓存将被释放。
采用挂载分布式内存缓存的文件系统,将与每个节点上的数据线程共同合作,完成对分布式缓存数据的读取。文件系统与数据线程通过套接字进行通信。如果程序尝试读取一个缓存内的共享文件,其与数据线程的交互过程为:文件系统的内核模块获取并转发请求,运行于用户空间的文件系统接收运行于内核态的文件内核模块发送的请求。产生一个记录,该记录包含发起调用的线程的ID号,数据的目的地址,目标文件名,目标数据在文件中的偏移以及目标数据的大小。文件系统将数据请求转发给数据线程。数据线程首先检查发起数据请求的线程是否是工作线程或工作线程启动的线程。如果是,数据线程将从记录中解析出需要的信息并从云端缓存中读取数据。当收到数据读取请求之后,数据线程从云端缓存中读取相应的数据并发送给文件系统。文件系统将接收到的数据从用户空间发送到运行于内核空间的文件内核模块。最后文件内核模块将数据从内核空间拷贝到指定的用户空间地址。
本发明采用以下主从并行训练框架,并基于该框架实现BP算法的并行化。主控节点协同调度整个训练过程。训练过程在n个训练节点上进行,每个训练节点的内存中存放本地训练数据子集。训练开始前,训练数据集被切分成若干个子集并被载入到训练节点的内存中。每个训练节点包含完整的神经网络,并且负责本地训练数据子集的训练。主控节点和训练节点先各自完成初始化。初始化完成后,主控节点将广播初始模型参数W到所有训练节点。当接收到W之后,每个训练节点就开始基于本地训练数据子集进行模型训练。本地训练过程主要包括对每个样本执行前向计算和后向训练,并累加每个样本训练得出的模型偏差Δwi当训练节点结束本地训练进程后,将Δwi发送到主控节点。在主控节点端,接收到所有训练节点发送Δwi的后,将所有的累加至上一轮的W整体更新模型参数。每轮训练结束后,主控节点还检查是否达到训练终止条件。如果达到,将终止整个训练工作,否则继续开始下一轮训练。
对于已训练数据的存储管理,本发明采用HBase存储大规模训练数据集。训练数据集以数据库表的形式组织存放在HBase中,每个样本是表中的一行,样本的编号是该行的行键,样本的数据内容存在该行的内容字段中。底层物理存储方式上,整个训练数据集以多个分片的形式分布式存储在集群上,并支持并发访问。每个训练节点设置本地缓存,可将对应的训练数据子集载入到本地内存或磁盘中。当训练子集不能全部放置在内存中时,训练节点也将其部分放在本地磁盘中。
进一步地,还可以使用上述BP神经网络建立节点性能测量之间的关系,最终训练得到的网络作为性能以及能耗模型。定义模型使用的输入参数向量x=[x1,x2,x3…xnx],测试空间为所有参数可能值的交叉乘积,测量的执行时间或能耗为y。采样集合I/O操作的执行时间以及能耗时,对测试空间中的采样点xj(为每一个输入参数指定一个值),测量得到的结果为yj(操作的能耗或执行时间)。从参数设置空间选取一定数量的采样点,经过测量获得采样测试集。
将测试集分为训练集和验证集,训练集包含ny个点。神经网络的输入为可量化描述的CPU频率、操作规模、数据集大小以及优化参数的值,输出为执行时间或能耗。当结束训练时,得到描述特定输入向量与最终的能耗以及执行时间之间的关系的针对某特定模式的集合I/O操作的神经网络。在验证阶段,随机将训练集划分为k个相同大小的子集,并使用k-l个子集产生l个模型,剩下的l个子集用于验证。因此将共产生k个模型,并选择验证时误差最小的作为最终模型。最终拟合的模型为y=f(x1,x2,x3…xnx)
性能以及能耗模型的多目标优化,本发明描述为:
min[f1(x),f2(x),…,fm(x)]
lb≤x≤ub
fi(x)为待优化的目标函数;x为变量向量;lb和ub分别为变量x的下限约束和上限约束。
基于上述并行计算环境的总体结构,本发明将语义向量引入文本挖掘和扩展中,文档数据挖掘过程总体为:
Stepl:给定一个检索语句,使用通用的停用词表对初始检索中的词进行过滤,仅保留有意义的检索词;
Step2:使用语义块模型对词汇进行语义向量表示;在语义向量的基础之上针对每个初始检索词采用余弦相似度从其它词汇中找出与之相似度最接近的m个词,作为扩展检索词;
作为查询扩展的前提条件,首先采用基于局部语境和全局语境的语义块向量,对文档数据集中所涉及到的所有词语进行训练,并从模型参数中提取出用于表示这些词语的语义向量。在给定一个检索语句时,经过停用词处理后,得到一个包含关键初始检索词的序列,即:
Q=(q1,q2,…,qt)
其中,qi表示序列中依次出现的词语,并且存在相对应的语义向量。使用余弦相似度将每一个初始检索词的语义向量与词典中其它的语义向量做相似度计算,并将计算结果降序排列,取出相似度最高的m个语义向量对应的词语。将这m个词作为的检索扩展词,即:
Pi={pi1,pi2,…pim}
其中,pim表示根据初始检索词qi的语义所扩展得到的与其语义相近的第m个检索扩展词,集合Pi中的每一个检索扩展词都可以作为初始检索词qi的替换词。即初始检索语句可以通过替换其任何初始检索词来形成新的检索语句,即:
Q0=(t1,t2,…,tt)
其中,ti∈{qi,pi1,pi2,…pim},表示新的检索语句中第i个位置的检索词;
Step3:使用初始检索中对应的扩展检索词在初始检索语句中进行替换,将新生成的检索词序列作为扩展检索语句;根据扩展检索词的排列组合得到不同表达形式的扩展检索语句;
Step4:将文本向量模型应用于文档摘要检索,具体过程为:
4.1得到多个文档文本后,将每个文本分解为语句。以标点分隔符,对所有文档中的语句进行切分操作,将所有语句作为一个新的检索库;
4.2:对摘要进行检索,第一次检索采用与文档检索中相同的检索扩展检索,使用语义向量扩展词组成的扩展检索语句通过预定义搜索引擎工具对语句进行检索,得到语句的排序结果RankE;第二次检索采用文本表示模型,将检索语句作为目标文本,检索库中的语句作为待比较文本,并分别对所有文本进行语义向量,并计算目标文本与待比较文本之间的相似度,得到相似度的排序结果RankS。
4.3:通过线性组合的方式,综合步骤4.2中得到的两次排序结果,得到最终的重排序结果:
Rank=α×RankEU+(1-α)×RankSU
其中,RankEU和RankSU分别表示RankE和RankS归一化后的排序得分,α为线性组合参数。
在排序问题上,考虑时间因素及局部语义的全局相关性,在语句所构成的语义集合之间搜索出最短路径作为排序结果。在文档集合中,在每篇文档选出候选的语句。根据标点符号对文档进行分句。然后,进行语句过滤。在向量空间模型中,语句被表示为k维向量,其中词的总数为k。用逆向文档模型计算每个词的权值,两个语句的相似度可以利用两个向量的余弦相似度求得。
整个文档集合中所有语句进行聚类,得到整个文档集合中所有语义集合后,每个簇中相似度高于预定义最高值的语句进行去重处理。在每个语义集合中选择一个语句向量与语义中心向量计算相似度,将整个文档向量的算术平均值作为语义中心向量。
步骤1:读入N个语义集合间的距离dxy,其中x,y∈[1,N];初始化N个语义集合的语义矩阵,该语义矩阵每行和每列只有一个1,代表语义集合的输出次序,其余元素为0。
步骤2:神经网络Uxi(t)初始化,Uxi(t)=U0+Φxi,其中x,i∈[1,N],U0=1/2Ub ln(N-1)(N为局部语义集合的总个数),Ub为预设权值,Φxi是区间(-1,+1)的随机数。
步骤4:通过欧拉运算得到Uxi(t+1):
步骤5:迭代结束后将Vx,i(t)代入矩阵更新函数:
以网络达到稳定状态时各个神经元的状态对应语义矩阵的值,各个语义集合间的距离作为约束信息决定各个神经元之间的连接强度。通过网络演变得到最优解,即语义矩阵最短路径条件下的顺序。
其中,基于局部语境和全局语境的语义块向量模型中,所述局部语境是指语义块所在的有序字符串,即该语义块之前的字符串,或者语义块之后的字符串,也可以是语义块前后的字符串。全局语境是指语义块序列所在的完整语义段落。通过预测语义块和其语境所组成的文本摘要或段落的内容是否符合其语境内容的有效性,从而完成语义学习。
由两个神经网络分别执行局部和全局语境的语义计算,其输入分别为语义块的局部语境字符串向量和全局语境向量。两个神经网络均只有一个输出节点,整个模型的输出则是两个神经网络通过计算得到的输出值之和,输出值表示该语义块在其局部语境和全局语境中的符合程度,并用于接下来的模型参数训练。
对于文档中的语义块,设定其附近的m个字符作为其局部语境s。在本发明中s取语义块所在位置之前的m个语义块所组成的字符串;而这个文本段落作为其全局语境s。由两部分语境所组成的输入(s,d),形成了基于局部和全局语境的正样本。将上述局部语境中的语义块随机替换为另一个语义块,使其成为一个非自然序列sw。将所述非自然序列与全局语境所组成的输入(sw,d)作为负样本。
神经网络的输入层为局部语境s或sw的向量,输出层为一个节点值的输出。本发明设定每个语义块均由一个n维实数向量来表示,初始向量值为随机生成,则局部语境由m个n维实数向量组成,将每个语义块的实数向量依次联结起来构成该神经网络的输入特征向量。经过神经网络模型的计算。全局语境的语义计算采用输入层、隐藏层和输出层神经网络来完成,输入层由语义块所在的段落d来表示。如果d由k个语义块构成,则全局的特征则有全部语义块的向量加权平均值来表示,即:
其中,di表示全局语境中第i个语义块。经过神经网络计算,从该网络的输出层得到一个输出值,表示该全局语境对应的语义块的记分。
将该语义块对应的局部语境和全局语境语义计算所得到的记分相加,即得到了模型最终的计算记分Score(s,d)或者Score(sw,d)。
定义二者的差值为ΔScore,即:
ΔScore=Score(s,d)-Score(sw,d)
如果ΔScore超过预设相关阈值T,则表示语义块的向量的不可替代性,如果ΔScore小于阈值T,则将两者差值计算为损失值costs,d,即:
costs,d=T-ΔScore
最终将损失函数表示为:
其中,S表示所有正样本的集合,D表示所有文本段落的集合。寻找最优的模型参数和语义块向量使得Cost值达到最小。
对于局部语境的计算,设输入层数据为s,即维度为m×n的局部语境特征向量,从输入层节点到首个隐藏层h1节点的权值是W1和b1,则首个隐藏层h1的节点输出值为:
h1=tanh(W1×s+b1)
其中,tanh为神经网络的非线性激活函数。
设首个隐藏层h1节点到第二个隐藏层h2节点的权值为W2和b2,则第二个隐藏层h2的节点输出值为:
h2=tanh(W2×s+b2)
设第二个隐藏层h2节点到输出层节点的权值为W3和b3,则局部语境神经网络的计算得分为:
ScoreL(s)=W3×s+b3
全局语境神经网络的输入层数据是该语义块的向量与全局语境的向量的联结,记sg=[send,g]。其中,send是局部语境中的最后一个语义块,即sg是维度为2n的特征向量,则全局语境神经网络计算得分ScoreG过程为:
其中
为输入层节点到隐藏层h节点的权值,
为输出层节点到隐藏层h节点的权值,通过将局部语境和全局语境神经网络计算的输出得分相加,得到整个模型的计算输出,即:
Score(s,d)=ScoreG(s,d)+ScoreL(s)
对于以上过程涉及的参数集合:
其中,L是所有文本段落中包含的全部语义块的向量集合,选定语义块向量的维度常量,同时采用共轭梯度法作为参数的学习方法寻找模型的最优参数,使得损失函数值Cost最小。
为计算文本之间相似度,将文本转化为含有语义的特征向量,设分词后文本中包含有m个词,本发明将其中第i个词用一个二元组来表示:
wdi=(indexi,vectori)
vectori=L×bk
其中,indexi表示第i个词出现在词典中的位置序号,vectori表示第i个词的语义向量。其中vectori相当于从整个词向量L中的一个映射,bk表示映射向量。由此可得到初始文本的初始向量化表示:
D=(wdi,wd2,...,wdm)
然后将每个文本由相同维度的特征向量来表示:
其中,m1表示目标文本中词的数量,η表示目标文本中每个词的权值。以上过程是对目标文本中出现的所有词向量进行平均值计算,进而得到与词向量维度相同的用来表示文本特征的向量。
对于待比较文本,为评价它与目标文本的相似程度,增加与目标文本中相同的权值,本发明采用带权值的均值方法计算待比较文本的向量:
其中,δ表示同时出现的词的权值增加的幅度,index
i∈(s
1∩s
2)表示两个文本中同时出现的词的序号,
表示待比较文本中没有在目标文本中出现的词的序号,m
2是待比较文本中词的数量。
由此得到了目标文本的向量Vt=(vti,vt2,...,vtn)和待比较文本的向量Vc=(vci,vc2,...,vcn),且它们的向量维度与词向量维度相同,两个文本的向量在维度上保持一致。这两个向量既保留了文本的语义信息,又完成了相似度文本匹配。优选地,采用以下相似度测量来计算目标文本与待比较文本的语义相似度:
综上所述,本发明提出了一种语义数据存储调度方法,从进程管理和缓存管理角度改进了MAPRUDUCE的并行框架,更好地适应文本数据挖掘的需要;并且针对社交文本的不规范特点,利用语义向量对文本数据进行有效表示和分析,适用于各种规模的社交文本挖掘分析和计算。
显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。