文档主题生成模型的训练方法和装置与流程

文档序号:20773365发布日期:2020-05-19 20:30阅读:217来源:国知局
文档主题生成模型的训练方法和装置与流程

本发明涉及计算机领域,具体而言,涉及一种文档主题生成模型的训练方法和装置。



背景技术:

lda(latentdirichletallocation,一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构,非监督机器学习技术)是机器学习领域的一个经典算法,可以用来识别大规模文档集或语料库中潜藏的主题信息。近年来机器学习领域因为数据量的爆发以及模型复杂度的提升,单机因为资源的限制,已不能应对这种变化。对于lda,业界也出现了各种各样的实现。例如,可以通过graphx基于最大期望算法em(expectation-maximizationalgorithm)实现,使用吉布斯采样。但是这种实现训练速度慢,同时极其耗费内存,性能较差。

针对上述的问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种文档主题生成模型的训练方法和装置,以至少解决文档主题生成模型的训练速度慢、耗费内存的技术问题。

根据本发明实施例的一个方面,提供了一种文档主题生成模型的训练方法,包括:在大数据处理框架spark任务中启动文档主题生成模型lda的消息传递接口mpi进程;mpi进程创建输入命名管道和输出命名管道;spark任务通过输入命名管道将输入数据输入给mpi进程,其中,输入数据用于对lda进行训练;mpi进程使用输入数据完成对lda的训练,得到训练结果;mpi进程通过输出命名管道将训练结果发送给spark任务。

根据本发明实施例的另一方面,还提供了一种文档主题生成模型的训练装置,包括:生成模块,用于在大数据处理框架spark任务中启动文档主题生成模型lda的消息传递接口mpi进程;创建模块,用于通过mpi进程创建输入命名管道和输出命名管道;输入模块,用于控制spark任务通过输入命名管道将输入数据输入给mpi进程,其中,输入数据用于对lda进行训练;训练模块,用于通过mpi进程使用输入数据完成对lda的训练,得到训练结果;发送模块,用于控制mpi进程通过输出命名管道将训练结果发送给spark任务。

根据本发明实施例的又一方面,还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述文档主题生成模型的训练方法。

根据本发明实施例的又一方面,还提供了一种电子装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,上述处理器通过计算机程序执行上述的文档主题生成模型的训练方法。

在本发明实施例中,采用在大数据处理框架spark任务中启动lda的消息传递接口mpi进程,spark任务通过mpi进程创建的输入命名管道将输入数据输入给mpi进程,使得mpi进程可以使用输入数据对lda进行训练,并将训练结果发送给的spark任务方式,外围数据访问及任务调度基于spark实现以保证易用性,基于mpi实现对lda的训练,可以保证其性能,通过spark与mpi的完美结合,同时兼顾性能及易用性,从而实现了文档主题生成模型lda训练速度快,所耗内存低且易用性高的技术效果,进而解决了文档主题生成模型的训练速度慢、耗费内存的技术问题。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明实施例的一种可选的文档主题生成模型的训练方法的应用环境的示意图;

图2是根据本发明实施例的一种可选的文档主题生成模型的训练方法的流程示意图;

图3是根据本发明实施例的大数据处理框架spark任务的结构示意图;

图4是根据本发明实施例的lda的训练示意图;

图5是根据本发明实施例的另一种可选的文档主题生成模型的训练方法的流程示意图;

图6是根据本发明实施例的又一种可选的文档主题生成模型的训练方法的流程示意图;

图7是根据本发明实施例的一种可选的文档主题生成模型的训练装置的结构示意图;

图8是根据本发明实施例的一种可选的电子装置的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

根据本发明实施例的一个方面,提供了一种文档主题生成模型的训练方法,可选地,作为一种可选的实施方式,上述文档主题生成模型的训练方法可以但不限于应用于如图1所示的环境中。

终端设备102可以通过处理器104执行步骤s110,在大数据处理框架spark任务中启动文档主题生成模型lda的消息传递接口mpi进程;s112,mpi进程创建输入命名管道和输出命名管道;s114,spark任务通过输入命名管道将输入数据输入给mpi进程,其中,输入数据用于对lda进行训练;s116,mpi进程使用输入数据完成对lda的训练,得到训练结果;s118,mpi进程通过输出命名管道将训练结果发送给spark任务。终端设备102可以通过执行上述步骤完成对lda的训练。这里,终端设备102可以通过存储器104存储输入数据、训练后的lda等。终端设备102可以通过显示器108显示训练后的lda等。

可选地,在本实施例中,上述文档主题生成模型的训练方法可以但不限于应用于终端102中,用于协助应用客户端对lda进行训练。其中,上述应用客户端可以但不限于运行在终端设备102中,该用户设备102可以但不限于为pc机、平板电脑、笔记本电脑、手机等支持运行应用客户端的终端设备。上述仅是一种示例,本实施例中对此不作任何限定。

可选地,作为一种可选的实施方式,如图2所示,上述文档主题生成模型的训练方法包括:

步骤s202,在大数据处理框架spark任务中启动文档主题生成模型lda的消息传递接口mpi进程;

步骤s204,mpi进程创建输入命名管道和输出命名管道;

步骤s206,spark任务通过输入命名管道将输入数据输入给mpi进程,其中,输入数据用于对lda进行训练;

步骤s208,mpi进程使用输入数据完成对lda的训练,得到训练结果;

步骤s210,mpi进程通过输出命名管道将训练结果发送给spark任务。

在本发明实施例中,采用在大数据处理框架spark任务中启动lda的消息传递接口mpi进程,这里大数据处理框架spark是一种全新的大数据处理框架,一个实现快速通用的集群计算平台,通用内存并行计算框架,可以用于构建大型的、低延迟的数据分析应用程序,mpi(messagepassinginterface,消息传递接口)可以用于做单机多线程的并发编程。本发明实施例将spark与mpi有效结合,通过mpi对lda进行训练,可以保证核心lda算法的性能,通过spark任务传递输入数据和训练结果,可以实现外围数据访问及任务调度,保证了易用性。同时在spark任务中启动lda的消息传递接口mpi进程,使得mpi进程位于spark任务中,总体上看是一个spark应用程序,从而可以部署到任何支持spark的平台,例如hadoop(hadoopdistributedfilesystem,一种对大量数据进行分布式处理的软件框架)或者kubernetes上执行,从而本发明实施例的训练方法具有灵活的易用性,同时,本发明实施例利用了spark的大数据处理优势与mpi的高性能优势,可以支持超大规模的主题模型训练。

可选的,在大数据处理框架spark任务中启动文档主题生成模型lda的消息传递接口mpi进程,包括:在n个spark任务中启动n个mpi进程,其中,在每个spark任务中启动一个mpi进程,n个mpi进程组成一个分布式mpi程序。如图3所示的,大数据处理框架spark任务302可以包括n个spark任务304,每一个spark任务304中启动有一个mpi进程306,所有的spark任务304中的mpi进程306构成了一个分布式lda程序,这些mpi进程306通过消息传递实现lda的训练。在本发明实施例中,每个spark任务中,mpi进程306均创建有输入命名管道和输出命名管道,分布式lda程序由spark调度执行,mpi进程306通过输入命名管道和输出命名管道与spark任务304交换数据。通过n个mpi进程组成一个分布式mpi程序对lda进行训练,可以保证训练的性能。

可选的,n个mpi进程包括m个word进程和n-m个document进程,其中,spark任务通过输入命名管道将输入数据输入给mpi进程,包括:与n-m个document进程对应的n-m个spark任务通过n-m个document进程创建的n-m个输入命令管道将输入数据输入给n-m个document进程,其中,n-m个spark任务中的每个spark任务通过n-m个输入命令管道中的一个输入命令管道将输入数据输入给n-m个document进程中的一个document进程,与m个word进程对应的m个spark任务被设置为不输入输入数据给m个word进程。

在本发明实施例中,n个mpi进程包括:word进程组和document进程组。这里,将用于训练lda的输入数据分为n个分区,相应的启动n个spark任务行,在每个spark任务中启动lda核心程序即mpi进程,前m个spark任务中运行word进程,这,m个word进程构成了word进程组,后n-m个spark任务中运行document进程,这n-m个document进程构成了document进程组。其中,n个分区中的前m个分区没有数据,后n-m个分区有数据。前m个任务对应word进程组,没有分配数据,所以写入为空,后n-m个任务对应document进程组,将训练用的输入数据写入输入命名管道,document进程读取训练数据后,开始迭代训练,从而实现对lda的训练。如图4所示的,在本发明实施例中,word进程组402提供模型服务,相当于参数服务器,用于响应参数的拉取和更新。其中,每个word进程404用于维护语料库word-topic模型参数中的一部分。换言之,可以对word-topic模型参数进行分区,每个word进程404用于维护word-topic模型参数中的一个分区,这样,整个语料库的word-topic模型参数被分配到不同的word进程404中。对于,word-topic模型参数分区方法可以有多种,例如,按wordid对word进程个数取模,那么在document进程训练过程中,就可以通过wordid找到对应的word进程请求模型参数。这里的word-topic模型指的是word-topic矩阵,word-topic模型参数也就是分区后word-topic矩阵中一个分区对应的参数。可以理解的是,本发明实施例的doc-topic模型指的是doc-topic矩阵,doc-topic模型参数也就是分区后doc-topic矩阵中一个分区对应的参数。在本发明实施例中,document进程组406负责文档的训练,相当于工作节点,用于对输入数据进行训练,在训练过程中可以采用数据并行的方式进行训练,也就是,每个document进程408通过输入命名管道加载训练文档doc,不同document进程408加载到的数据仅为整个训练数据的一部分,每个document进程408训练doc-topic模型参数中的一部分。这里的doc-topic模型指的是doc-topic矩阵。在训练完成的情况下,例如达到最大迭代次数时,每个word进程通过输出命名管道输出对应的word-topic模型参数,每个document进程通过输出命名管道输出对应的doc-topic模型参数,由于每个document进程对word-topic矩阵中的一部分进行训练,从而可以根据所有document进程输出的doc-topic模型参数可以获得最终的doc-topic矩阵,类似的,所有word进程输出的word-topic模型参数可以获得最终的word-topic矩阵。

在本发明实施例中,mpi进程启动后首先创建输入输出命名管道,每个word进程初始化word-topic矩阵并启动模型服务,每个document进程开始等待输入命名管道的输入数据,以便于对doc-topic模型参数进行训练。由于输入数据是用于document进程进行训练的,word进程对word-topic矩阵的更新是根据document进程发送的消息通知进行更新,word进程对word-topic矩阵的更新不需要输入数据。故而,与m个word进程对应的m个spark任务被设置为不输入输入数据给m个word进程,从而避免将数据输入给word进程。在本发明实施例中,在所有mpi进程启动完毕后,spark任务往输入命名管道中写入训练数据,因为前m个spark任务被设置为不输入输入数据给m个word进程,故而前m个spark任务不会被分到数据。后n-m个spark任务会写入用于训练的输入数据,从而便于根据输入数据进行训练。

可选的,mpi进程使用输入数据完成对lda的训练,得到训练结果,包括:n-m个document进程读取输入的输入数据;n-m个document进程使用读取到的输入数据对lda的训练,得到最终的word-topic矩阵和最终的doc-topic矩阵,其中,训练结果包括最终的word-topic矩阵和最终的doc-topic矩阵,最终的word-topic矩阵中的每行表示语料库中的一个词在各个主题中的权重,最终的doc-topic矩阵中的每行表示一个文档在各个主题中的权重。在本发明实施例中,document进程读取输入的输入数据进对lda的训练,得到训练后的doc-topic矩阵,也就是最终的doc-topic矩阵。其中,在document进程训练过程中,会拉取word进程所对应的word-topic矩阵,并根据word-topic矩阵和输入数据对doc-topic矩阵进行更新。同时,在更新doc-topic矩阵后,document进程会通过mpi消息通知word进程更新word-topic矩阵。在训练结束时,word进程通过输出命名管道输出更新后的word-topic矩阵,也就是最终的word-topic矩阵。

在本发明实施例中,document进程会通过mpi消息通知word进程更新word-topic矩阵,同时由于document进程需要根据word进程对应的word-topic矩阵更新自身的doc-topic矩阵,故而还会向word进程发出拉取消息。这里,word进程响应document进程发送过来的模型更新以及拉取消息对word-topic矩阵进行更新,并将更新后的word-topic矩阵发送给document进程。其中,word-topic矩阵(矩阵大小=词汇数目×主题数目),矩阵每行表示语料库中的一个词(word)在各个主题(topic)中的权重,doc-topic矩阵(矩阵大小=文档数目×主题数目),矩阵每行表示文档库中的一个文档(doc)在各个主题(topic)中的权重。对于document进程,会根据输入数据和由word进程拉取到的word-topic矩阵,获得中间数据,中间数据用于指示词(word)在各个主题(topic)中的权重。document进程会通过消息通知word进程将中间数据发送至word进程,word进程可以根据word-topic矩阵和中间数据,更新word-topic矩阵。例如,可以对word-topic矩阵和中间数据进行求和,从而更新词(word)在各个主题(topic)中的权重。对于求和的方式可以是加权求和。

可选的,mpi进程通过输出命名管道将训练结果发送给spark任务,包括:m个word进程将最终的word-topic矩阵写入m个word进程创建的m个输出命名管道,n-m个document进程将最终的doc-topic矩阵写入n-m个document进程创建的n-m个输出命名管道;与m个word进程对应的m个spark任务读取m个输出命名管道,得到最终的word-topic矩阵,并且与n-m个document进程对应的n-m个spark任务读取n-m个输出命名管道,得到最终的doc-topic矩阵。这里,在本发明实施例中,由于每个document进程只持有语料库的一部分文档,同时维护训练过程中该部分文档的主题分布,也就是对doc-topic矩阵中的一部分进行训练。每个word进程也只持有语料库的部分word-topic模型参数,整个语料库所对应的word-topic模型参数可以被平均分配到不同的word进程中。故而,为了获取最终的word-topic矩阵和最终的doc-topic矩阵,需要每一个word进程将最终的word-topic矩阵写入相对应的输出命名管道,每一个document进程将最终的doc-topic矩阵写入相对应的输出命名管道,从而根据m个word进程输出的word-topic矩阵得到最终的word-topic矩阵,根据n-m个document进程输出的doc-topic矩阵得到最终的doc-topic矩阵。

可选的,在与m个word进程对应的m个spark任务读取m个输出命名管道,得到最终的word-topic矩阵,并且与n-m个document进程对应的n-m个spark任务读取n-m个输出命名管道,得到最终的doc-topic矩阵之后,方法还包括:m个spark任务将最终的word-topic矩阵写入外部存储系统,n-m个spark任务将最终的doc-topic矩阵写入外部存储系统。在本发明实施例中,通过spark任务将最终的word-topic矩阵和最终的doc-topic矩阵写入外部存储系统,从而便于后续对训练完成的最终的word-topic矩阵和最终的doc-topic矩阵进行利用。

可选的,n-m个document进程使用读取到的输入数据对lda的训练,得到最终的word-topic矩阵和最终的doc-topic矩阵,包括:

n-m个document进程中的每个document进程均执行以下操作,其中,document进程在执行以下操作时被视为当前document进程:

当前document进程从当前document进程创建的当前输入命名管道读取文档数据并缓存到内存,其中,word进程启动模型服务,监听当前document进程发来的模型更新及拉取消息;

当前document进程随机为文档数据中的每个词选取对应的主题,更新本地的doc-topic矩阵,以及通过模型更新消息通知word进程更新word-topic矩阵,其中,word进程用于在接收当前document进程发送的模型更新消息,并响应于模型更新消息更新word-topic矩阵;

当前document进程从word进程拉取word-topic参数,使用吉布斯采样算法更新本地doc-topic矩阵,并通过mpi消息通知word进程更新word-topic矩阵,其中,word进程用于等待当前document进程拉取word-topic参数、以及更新word-topic矩阵。

在本发明实施例中,document进程从输入命名管道读取文档数据并缓存到内存,word进程启动模型服务,用于监听document进程发来的模型更新及拉取消息。这里,document进程会根据输入数据和由word进程拉取到的word-topic矩阵,随机为文档数据中的每个词选取对应的主题。可以理解的是,这里document进程随机为每个词选取对应的主题,后续document进程通过模型更新消息通知word进程更新word-topic矩阵时,会携带有document进程随机为每个词选取对应的主题,从而便于word进程对word-topic矩阵进行更新。在本发明实施例中,word进程通过模型服务监听document进程发来的模型更新及拉取消息,从而对word-topic矩阵进行更新,并将更新后的word-topic矩阵作为参数发送至document进程,以便于document进程进行下一次训练。

下面结合图5至图6,对本发明实施例进行举例说明。

s502,加载训练数据重新分区;例如,mpi的lda核心程序有n个进程,也就是有n个mpi进程,其中word进程为m个,document进程为n-m个,则可以将将训练数据,也就是输入数据分为与mpi进程数量相同的n个分区,其中前m个分区对应于word进程,不分配数据,后n-m个分区对应document进程,这n-m个分区可以平均分配所有训练数据。例如可通过自定义一个分区函数,通过公式key%(n-m)+m计算每条数据的分区id;s504,调度执行分布式mpi核心程序,基于重新分区的训练数据开始调度执行基于mpi的lda核心程序;s506,获取输出并写入外部存储系统,在mpi的lda核心程序训练完毕后,可以获取输出并写入外部存储系统,以便后续使用训练结果。

对于上述的训练过程,训练数据也就是输入数据已经被分为n个分区,相应的会启动n个spark任务执行,如图6所示的,spark任务执行s602,拉取mpi进程,mpi进程启动后执行步骤s604,创建输入输出命名管道。对于每个spark任务中的每个word进程,会对word-topic矩阵进行初始化,并启动模型服务,每个document进程开始等待输入命名管道的数据;spark任务等待所有mpi进程启动完毕后执行s606,向mpi创建的输入命名管道写入训练数据,因为前m个spark任务没有被分到数据,所以直接跳过,只有后n-m个spark任务会写训练数据。对应地,这个n-m个document进程执行s608,读取输入命名管道,并将数据保存到内存,并执行s610,根据输入的数据对lda进行迭代训练。训练完毕后,执行s612,将训练结果写入输出命名管道,从而将训练结果传给spark任务。spark任务执行s614,读取输出命名管道中的训练结果,并等待所有输出命名管道读取完毕,spark任务将其保存到外部存储系统,从而完成训练并获得最终的训练结果。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

根据本发明实施例的另一个方面,还提供了一种用于实施上述文档主题生成模型的训练方法的文档主题生成模型的训练装置。如图7所示,该装置包括:生成模块702,用于在大数据处理框架spark任务中启动文档主题生成模型lda的消息传递接口mpi进程;创建模块704,用于通过mpi进程创建输入命名管道和输出命名管道;输入模块706,用于控制spark任务通过输入命名管道将输入数据输入给mpi进程,其中,输入数据用于对lda进行训练;训练模块708,用于通过mpi进程使用输入数据完成对lda的训练,得到训练结果;发送模块710,用于控制mpi进程通过输出命名管道将训练结果发送给spark任务。

在本发明实施例中,采用在大数据处理框架spark任务中启动lda的消息传递接口mpi进程,这里大数据处理框架spark是一种全新的大数据处理框架,一个实现快速通用的集群计算平台,通用内存并行计算框架,可以用于构建大型的、低延迟的数据分析应用程序,mpi(messagepassinginterface,消息传递接口)可以用于做单机多线程的并发编程。本发明实施例将spark与mpi有效结合,通过mpi对lda进行训练,可以保证核心lda算法的性能,通过spark任务传递输入数据和训练结果,可以实现外围数据访问及任务调度,保证了易用性。同时在spark任务中启动lda的消息传递接口mpi进程,使得mpi进程位于spark任务中,总体上看是一个spark应用程序,从而可以部署到任何支持spark的平台,例如hadoop(hadoopdistributedfilesystem,一种对大量数据进行分布式处理的软件框架)或者kubernetes上执行,从而本发明实施例的训练装置具有灵活的易用性,同时,本发明实施例利用了spark的大数据处理优势与mpi的高性能优势,可以支持超大规模的主题模型训练。

可选的,生成模块包括:启动单元,用于在n个spark任务中启动n个mpi进程,其中,在每个spark任务中启动一个mpi进程,n个mpi进程组成一个分布式mpi程序。这里,大数据处理框架spark任务可以包括n个spark任务,每一个spark任务中启动有一个mpi进程,所有的spark任务中的mpi进程构成了一个分布式lda程序,这些mpi进程通过消息传递实现lda的训练。在本发明实施例中,每个spark任务中,mpi进程均创建有输入命名管道和输出命名管道,分布式lda程序由spark调度执行,mpi进程通过输入命名管道和输出命名管道与spark任务交换数据。

可选的,n个mpi进程包括m个word进程和n-m个document进程,其中,输入模块包括:输入单元,用于控制与n-m个document进程对应的n-m个spark任务通过n-m个document进程创建的n-m个输入命令管道将输入数据输入给n-m个document进程,其中,n-m个spark任务中的每个spark任务通过n-m个输入命令管道中的一个输入命令管道将输入数据输入给n-m个document进程中的一个document进程,与m个word进程对应的m个spark任务被设置为不输入输入数据给m个word进程。在本发明实施例中,n个mpi进程包括:word进程组和document进程组。在本发明实施例中,将用于训练lda的输入数据分为n个分区,相应的启动n个spark任务行,在每个spark任务中启动lda核心程序即mpi进程,前m个spark任务中运行word进程,构成了word进程组,后n-m个spark任务中运行document进程,构成了document进程组。其中,n个分区中的前m个分区没有数据,后n-m个分区有数据,前m个任务对应word进程组,没有分配数据,所以写入为空,后n-m个任务对应document进程组,将训练用的输入数据写入输入命名管道,document进程读取训练数据后,开始迭代训练,从而实现对lda的训练。

在本发明实施例中,mpi进程启动后首先创建输入输出命名管道,每个word进程初始化word-topic矩阵并启动模型服务,每个document进程开始等待输入命名管道的输入数据,以便于对doc-topic模型参数进行训练。由于输入数据是用于document进程进行训练的,word进程对word-topic矩阵的更新是根据document进程发送的消息通知进行更新,word进程对word-topic矩阵的更新不需要输入数据。故而,与m个word进程对应的m个spark任务被设置为不输入输入数据给m个word进程,从而避免将数据输入给word进程。在本发明实施例中,在所有mpi进程启动完毕后,spark任务往输入命名管道中写入训练数据,因为前m个spark任务被设置为不输入输入数据给m个word进程,故而前m个spark任务不会被分到数据。后n-m个spark任务会写入用于训练的输入数据,从而便于根据输入数据进行训练。

可选的,训练模块包括:第一读取单元,用于通过n-m个document进程读取输入的输入数据;训练单元,用于通过n-m个document进程使用读取到的输入数据对lda的训练,得到最终的word-topic矩阵和最终的doc-topic矩阵,其中,训练结果包括最终的word-topic矩阵和最终的doc-topic矩阵,最终的word-topic矩阵中的每行表示语料库中的一个词在各个主题中的权重,最终的doc-topic矩阵中的每行表示一个文档在各个主题中的权重。在本发明实施例中,document进程读取输入的输入数据进对lda的训练,得到训练后的doc-topic矩阵,也就是最终的doc-topic矩阵。其中,在document进程训练过程中,会拉取word进程所对应的word-topic矩阵,并根据word-topic矩阵和输入数据对doc-topic矩阵进行更新。同时,在更新doc-topic矩阵后,document进程会通过mpi消息通知word进程更新word-topic矩阵。在训练结束时,word进程通过输出命名管道输出更新后的word-topic矩阵,也就是最终的word-topic矩阵。

在本发明实施例中,document进程会通过mpi消息通知word进程更新word-topic矩阵,同时由于document进程需要根据word进程对应的word-topic矩阵更新自身的doc-topic矩阵,故而还会向word进程发出拉取消息。这里,word进程响应document进程发送过来的模型更新以及拉取消息,对word-topic矩阵进行更新,并将更新后的word-topic矩阵发送给document进程。其中,word-topic矩阵(矩阵大小=词汇数目×主题数目),矩阵每行表示语料库中的一个词(word)在各个主题(topic)中的权重,doc-topic矩阵(矩阵大小=文档数目×主题数目),矩阵每行表示文档库中的一个文档(doc)在各个主题(topic)中的权重。

可选的,发送模块包括:写入单元,用于通过m个word进程将最终的word-topic矩阵写入m个word进程创建的m个输出命名管道,n-m个document进程将最终的doc-topic矩阵写入n-m个document进程创建的n-m个输出命名管道;第二读取单元,用于通过与m个word进程对应的m个spark任务读取m个输出命名管道,得到最终的word-topic矩阵,并且与n-m个document进程对应的n-m个spark任务读取n-m个输出命名管道,得到最终的doc-topic矩阵。这里,在本发明实施例中,由于每个document进程只持有语料库的一部分文档,同时维护训练过程中该部分文档的主题分布,也就是对doc-topic矩阵中的一部分进行训练。每个word进程也只持有语料库的部分word-topic模型参数,整个语料库所对应的word-topic模型参数可以被平均分配到不同的word进程中。故而,为了获取最终的word-topic矩阵和最终的doc-topic矩阵,需要每一个word进程将最终的word-topic矩阵写入相对应的输出命名管道,每一个document进程将最终的doc-topic矩阵写入相对应的输出命名管道,从而根据m个word进程输出的word-topic矩阵得到最终的word-topic矩阵,根据n-m个document进程输出的doc-topic矩阵得到最终的doc-topic矩阵。

可选的,上述装置还包括:写入模块,用于通过m个spark任务将最终的word-topic矩阵写入外部存储系统,n-m个spark任务将最终的doc-topic矩阵写入外部存储系统。在本发明实施例中,通过spark任务将最终的word-topic矩阵和最终的doc-topic矩阵写入外部存储系统,从而便于后续对训练完成的最终的word-topic矩阵和最终的doc-topic矩阵进行利用。

可选的,训练单元具体用于:通过n-m个document进程中的每个document进程均执行以下操作,其中,document进程在执行以下操作时被视为当前document进程:通过当前document进程从当前document进程创建的当前输入命名管道读取文档数据并缓存到内存,其中,word进程启动模型服务,监听当前document进程发来的模型更新及拉取消息;通过当前document进程随机为文档数据中的每个词选取对应的主题,更新本地的doc-topic矩阵,以及通过模型更新消息通知word进程更新word-topic矩阵,其中,word进程用于在接收当前document进程发送的模型更新消息,并响应于模型更新消息更新word-topic矩阵;通过当前document进程从word进程拉取word-topic参数,使用吉布斯采样算法更新本地doc-topic矩阵,并通过mpi消息通知word进程更新word-topic矩阵,其中,word进程用于等待当前document进程拉取word-topic参数、以及更新word-topic矩阵。在本发明实施例中,document进程从输入命名管道读取文档数据并缓存到内存,word进程启动模型服务,用于监听document进程发来的模型更新及拉取消息。这里,document进程会根据输入数据和由word进程拉取到的word-topic矩阵,随机为文档数据中的每个词选取对应的主题。可以理解的是,这里document进程随机为每个词选取对应的主题,后续document进程通过模型更新消息通知word进程更新word-topic矩阵时,会携带有document进程随机为每个词选取对应的主题,从而便于word进程对word-topic矩阵进行更新。在本发明实施例中,word进程通过模型服务监听document进程发来的模型更新及拉取消息,从而对word-topic矩阵进行更新,并将更新后的word-topic矩阵作为参数发送至document进程,以便于document进程进行下一次训练。

根据本发明实施例的又一个方面,还提供了一种用于实施上述文档主题生成模型的训练方法的电子装置,如图8所示,该电子装置包括存储器802和处理器804,该存储器802中存储有计算机程序,该处理器804被设置为通过计算机程序执行上述任一项方法实施例中的步骤。

可选地,在本实施例中,上述电子装置可以位于计算机网络的多个网络设备中的至少一个网络设备。

可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:

s1,在大数据处理框架spark任务中启动文档主题生成模型lda的消息传递接口mpi进程;

s2,mpi进程创建输入命名管道和输出命名管道;

s3,spark任务通过输入命名管道将输入数据输入给mpi进程,其中,输入数据用于对lda进行训练;

s4,mpi进程使用输入数据完成对lda的训练,得到训练结果;

s5,mpi进程通过输出命名管道将训练结果发送给spark任务。

可选地,本领域普通技术人员可以理解,图8所示的结构仅为示意,电子装置也可以是移动互联网设备(mobileinternetdevices,mid)、智能手机(如android手机、ios手机等)、平板电脑、掌上电脑以及pad等终端设备。图8其并不对上述电子装置的结构造成限定。例如,电子装置还可包括比图8中所示更多或者更少的组件(如网络接口等),或者具有与图8所示不同的配置。

其中,存储器802可用于存储软件程序以及模块,如本发明实施例中的文档主题生成模型的训练方法和装置对应的程序指令/模块,处理器804通过运行存储在存储器802内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的文档主题生成模型的训练方法。存储器802可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器802可进一步包括相对于处理器804远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。其中,存储器802具体可以但不限于用于存储输入数据等信息。作为一种示例,如图8所示,上述存储器802中可以但不限于包括上述文档主题生成模型的训练装置中的生成模块702、创建模块704、输入模块706、训练模块708及发送模块710。此外,还可以包括但不限于上述文档主题生成模型的训练装置中的其他模块单元,本示例中不再赘述。

可选地,上述的传输装置806用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置806包括一个网络适配器(networkinterfacecontroller,nic),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置806为射频(radiofrequency,rf)模块,其用于通过无线方式与互联网进行通讯。

此外,上述电子装置还包括:显示器808,用于显示上述输入数据等;和连接总线810,用于连接上述电子装置中的各个模块部件。

根据本发明的实施例的又一方面,还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:

s1,在大数据处理框架spark任务中启动文档主题生成模型lda的消息传递接口mpi进程;

s2,mpi进程创建输入命名管道和输出命名管道;

s3,spark任务通过输入命名管道将输入数据输入给mpi进程,其中,输入数据用于对lda进行训练;

s4,mpi进程使用输入数据完成对lda的训练,得到训练结果;

s5,mpi进程通过输出命名管道将训练结果发送给spark任务。

可选地,在本实施例中,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(read-onlymemory,rom)、随机存取器(randomaccessmemory,ram)、磁盘或光盘等。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1