计算词的TF-IDF值的方法、装置、设备及存储介质与流程

文档序号:20684496发布日期:2020-05-08 18:42阅读:224来源:国知局
计算词的TF-IDF值的方法、装置、设备及存储介质与流程

本申请涉及数据处理技术领域,特别是涉及一种计算词的tf-idf值的方法、装置、设备及存储介质。



背景技术:

智能问答,被重要应用于人工智能领域中,相较于传统的客服系统而言,具有高效率、低成本等诸多优势。目前,越来越多的企业,使用智能问答系统为用户提供对话服务。

智能问答系统在与用户进行智能对话时,通常需要针对于用户提出的问题,根据该问题中所包含的关键词在文本库中的词频-逆文本频率(termfrequency–inversedocumentfrequency,tf-idf)值从文本库中确定出相应的答案。但是,随着智能问答系统的文本库的不断增加,计算关键词的tf-idf值所需的计算量也随之增加,从而使得智能问答系统在根据关键词的tf-idf值确定答案的过程中,需要消耗较大的计算资源。



技术实现要素:

本申请实施例提供了一种计算词的tf-idf值的方法、装置、设备及存储介质,以减少计算词的tf-idf值所需的计算量。

第一方面,本申请实施例提供了一种计算词的tf-idf值的方法,所述方法包括:

根据第一目标词遍历树形数据结构的根节点下的子节点,确定出第一目标子节点,所述第一目标子节点所指示的分词为所述第一目标词;

获取所述第一目标子节点对应的第一目标集合,所述第一目标集合包括第一文本标识以及所述第一目标词在所述第一文本标识对应的文本中的第一词频tf值,不同第一文本标识所对应的文本互不相同;

根据所述第一目标集合中所包括的第一文本标识的数量以及所述根节点所指示的文本总数,确定出所述第一目标词的第一逆文本频率idf值;

根据所述第一tf值以及所述第一idf值,计算出所述第一目标词对应的tf-idf值。

在一种可能的实施方式中,所述方法还包括:

根据第二目标词遍历所述第一目标子节点下的虚拟子节点,确定出第一虚拟子节点,所述第一虚拟子节点的指针指向所述根节点下的第二目标子节点,所述第二目标子节点所指示的分词为所述第二目标词,所述第二目标词与所述第一目标词在同一文本中连续;

获取所述第二目标子节点对应的第二目标集合,所述第二目标集合包括第二文本标识以及所述第二目标词在所述第二文本标识对应的文本中的第二tf值,不同第二文本标识所对应的文本互不相同;

根据所述第二目标集合中所包括的第二文本标识的数量以及所述根节点所指示的文本总数,确定出所述第二目标词的第二idf值;

根据所述第二tf值以及所述第二idf值,计算出所述第二目标词对应的tf-idf值。

在一种可能的实施方式中,所述第一目标词与所述第二目标词为分词集合中的分词,所述分词集合是通过对问题文本进行分词处理而得到,所述方法还包括:

确定每个所述第一文本标识对应的文本的关键词集合以及每个第二文本标识对应的文本的关键词集合,所述关键词集合中的每个关键词所对应的tf-idf值均不低于所述文本中其它分词对应的tf-idf值,所述关键词集合包括所述第一目标词和/或所述第二目标词;

将目标关键词集合所对应的文本确定为所述问题文本对应的答案文本,所述目标关键词集合与所述分词集合之间的相似度高于其它关键词集合与所述分词集合之间的相似度。

在一种可能的实施方式中,所述关键词集合中所包括的关键词数量不超过所述分词集合中所包括的分词数量。

在一种可能的实施方式中,所述方法还包括:

将待处理文本进行分词,得到所述待处理文本的分词集合,所述分词集合至少包括第一分词,所述待处理文本为文本库中的任一文本或待添加至所述文本库中的新增文本;

当所述树形数据结构的根节点下的子节点所指示的分词中不包括所述第一分词时,在所述树形数据结构的根节点下创建第一子节点以及所述第一子节点对应的集合,所述第一子节点所指示的分词为所述第一分词,并在所述第一子节点对应的集合中添加所述待处理文本的文本标识以及所述第一分词在所述待处理文本中的第一tf值;

当所述根节点下的子节点中存在第一子节点所指示的分词为所述第一分词时,在所述第一子节点对应的集合中添加所述待处理文本的文本标识以及所述第一分词在所述待处理文本中的第一tf值。

在一种可能的实施方式中,所述待处理文本的分词集合还包括第二分词,所述第二分词与所述第一分词在所述待处理文本中连续,所述方法还包括:

当所述第一子节点下的虚拟子节点所指示的分词中不包含所述第二分词时,在所述第一子节点下创建目标虚拟子节点,并为所述目标虚拟子节点建立指向所述根节点下的第二子节点的指针,所述第二子节点所指示的分词为所述第二分词,并在所述第二子节点对应的集合中添加所述待处理文本的文本标识以及所述第二分词在所述待处理文本中的第二tf值;

当所述第一子节点下的虚拟子节点中存在目标虚拟子节点所指示的分词为所述第二分词时,在所述目标虚拟子节点的指针指向的第二子节点所对应的集合中,添加所述待处理文本的文本标识以及所述第二分词在所述待处理文本中的第二tf值。

在一种可能的实施方式中,所述分词集合还包括第三分词,所述方法还包括:

当确定所述第三分词与所述第一分词相同时,不在所述第一子节点对应的集合中添加所述待处理文本的文本标识以及所述第三分词在所述待处理文本中的tf值。

第二方面,本申请实施例还提供了一种计算词的tf-idf值的装置,所述装置包括:

第一确定模块,用于根据第一目标词遍历树形数据结构的根节点下的子节点,确定出第一目标子节点,所述第一目标子节点所指示的分词为所述第一目标词;

第一获取模块,用于获取所述第一目标子节点对应的第一目标集合,所述第一目标集合包括第一文本标识以及所述第一目标词在所述第一文本标识对应的文本中的第一词频tf值,不同第一文本标识所对应的文本互不相同;

第二确定模块,用于根据所述第一目标集合中所包括的第一文本标识的数量以及所述根节点所指示的文本总数,确定出所述第一目标词的第一逆文本频率idf值;

第一计算模块,用于根据所述第一tf值以及所述第一idf值,计算出所述第一目标词对应的tf-idf值。

在一种可能的实施方式中,所述装置还包括:

第三确定模块,用于根据第二目标词遍历所述第一目标子节点下的虚拟子节点,确定出第一虚拟子节点,所述第一虚拟子节点的指针指向所述根节点下的第二目标子节点,所述第二目标子节点所指示的分词为所述第二目标词,所述第二目标词与所述第一目标词在同一文本中连续;

第二获取模块,用于获取所述第二目标子节点对应的第二目标集合,所述第二目标集合包括第二文本标识以及所述第二目标词在所述第二文本标识对应的文本中的第二tf值,不同第二文本标识所对应的文本互不相同;

第四确定模块,用于根据所述第二目标集合中所包括的第二文本标识的数量以及所述根节点所指示的文本总数,确定出所述第二目标词的第二idf值;

第二计算模块,用于根据所述第二tf值以及所述第二idf值,计算出所述第二目标词对应的tf-idf值。

在一些可能的实施方式中,所述第一目标词与所述第二目标词为分词集合中的分词,所述分词集合是通过对问题文本进行分词处理而得到,所述装置还包括:

第五确定模块,用于确定每个所述第一文本标识对应的文本的关键词集合以及每个第二文本标识对应的文本的关键词集合,所述关键词集合中的每个关键词所对应的tf-idf值均不低于所述文本中其它分词对应的tf-idf值,所述关键词集合包括所述第一目标词和/或所述第二目标词;

第六确定模块,用于将目标关键词集合所对应的文本确定为所述问题文本对应的答案文本,所述目标关键词集合与所述分词集合之间的相似度高于其它关键词集合与所述分词集合之间的相似度。

在一些可能的实施方式中,所述关键词集合中所包括的关键词数量不超过所述分词集合中所包括的分词数量。

在一些可能的实施方式中,所述装置还包括:

分词模块,用于将待处理文本进行分词,得到所述待处理文本的分词集合,所述分词集合至少包括第一分词,所述待处理文本为文本库中的任一文本或待添加至所述文本库中的新增文本;

第一创建模块,用于当所述树形数据结构的根节点下的子节点所指示的分词中不包括所述第一分词时,在所述树形数据结构的根节点下创建第一子节点以及所述第一子节点对应的集合,所述第一子节点所指示的分词为所述第一分词,并在所述第一子节点对应的集合中添加所述待处理文本的文本标识以及所述第一分词在所述待处理文本中的第一tf值;

第一添加模块,用于当所述根节点下的子节点中存在第一子节点所指示的分词为所述第一分词时,在所述第一子节点对应的集合中添加所述待处理文本的文本标识以及所述第一分词在所述待处理文本中的第一tf值。

在一些可能的实施方式中,所述待处理文本的分词集合还包括第二分词,所述第二分词与所述第一分词在所述待处理文本中连续,所述装置还包括:

第二创建模块,用于当所述第一子节点下的虚拟子节点所指示的分词中不包含所述第二分词时,在所述第一子节点下创建目标虚拟子节点,并为所述目标虚拟子节点建立指向所述根节点下的第二子节点的指针,所述第二子节点所指示的分词为所述第二分词,并在所述第二子节点对应的集合中添加所述待处理文本的文本标识以及所述第二分词在所述待处理文本中的第二tf值;

第二添加模块,用于当所述第一子节点下的虚拟子节点中存在目标虚拟子节点所指示的分词为所述第二分词时,在所述目标虚拟子节点的指针指向的第二子节点所对应的集合中,添加所述待处理文本的文本标识以及所述第二分词在所述待处理文本中的第二tf值。

在一些可能的实施方式中,所述分词集合还包括第三分词,所述装置还包括:

不添加模块,用于当确定所述第三分词与所述第一分词相同时,不在所述第一子节点对应的集合中添加所述待处理文本的文本标识以及所述第三分词在所述待处理文本中的tf值。

第三方面,本申请实施例还提供了一种设备,所述设备包括处理器以及存储器;

所述存储器,用于存储程序代码,并将所述程序代码传输给所述处理器;

所述处理器,用于根据所述程序代码中的指令执行上述第一方面中任一种实施方式所述的计算词的tf-idf值的方法。

第四方面,本申请实施例还提供了一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行上述第一方面中任一种实施方式所述的计算词的tf-idf值的方法。

在本申请实施例的上述实现方式中,当需要计算目标词的tf-idf值时,可以根据该目标词遍历预先构建的树形数据结构的根节点下的子节点,确定出目标子节点,该目标子节点所指示的分词为该目标词;在确定出目标子节点后,可以进一步获取该目标子节点对应的目标集合,该目标集合中包括有文本标识以及该目标词在该文本标识对应的文本中的tf值,可以理解,该目标集合中每个文本标识所对应的文本中均包含有该目标词;接着,可以根据该目标集合中所包括的文本标识的数量以及该根节点所指示的文本总数,确定出该目标词的idf值,进而在得到目标词的tf值以及idf值后,可以进一步计算出该目标词的tf-idf值。

可见,上述在计算目标词的tf-idf值的过程中,在确定该目标词对应的目标集合后,可以直接从该目标集合中确定出文本库中存在哪些文本(即目标集合中的文本标识所对应的文本)包含该目标词,而无需通过消耗大量计算资源对文本库进行遍历的方式确定文本库中包含有该目标词的文本,这样不仅可以有效减少确定这些文本所需消耗的计算资源,也即为计算出该目标词的idf值所需的计算资源,而且也可以有效提高确定目标词的idf值的效率;同时,根据该目标集合还能确定目标词在每一个包含该目标词的文本中的tf值,从而对于每个文本无需重复计算出目标词的tf值,这同样不仅可以减少重复计算目标词的tf值所需的计算量,而且通过查询集合的方式获取目标词的tf值,也可以有效提高获取目标词的tf值的效率。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1为本申请实施例中一示例性应用场景示意图;

图2为本申请实施例中一种计算词的if-idf值的方法流程示意图;

图3为一种树形数据结构的示意图;

图4为另一种树形数据结构的示意图;

图5为本申请实施例中一种计算词的tf-idf值的装置结构示意图;

图6为本申请实施例中一种设备的硬件结构示意图。

具体实施方式

当用户向智能问答系统提出问题时,智能问答系统根据从用户所提出的问题中确定出关键词,并基于该关键词从文本库中检索出用于回复用户的答案。具体实现时,智能问答系统可以根据该关键词从文本库中定位出包含该关键词的文本,这些文本均可能是作为回复用户问题的文本,此时,为了尽可能提高智能问答系统回复用户问题的准确度(即尽可能避免“答非所问”),智能问答系统可以进一步计算已定位出的每个文本中所包括的该关键词的tf-idf值,从而可以将具有较高tf-idf值的关键词的文本,作为用于回复用户问题的答案的文本。

其中,关键词的tf值可以通过公式(1)进行计算得到:

其中,n为该关键词在一篇文本中出现的次数,∑kni为该文本中所有的分词总数。

关键词的idf值可以通过下述公式(2)进行计算得到:

其中,|d|为文本库中的文本总数,|{j:{ti∈dj}|为包含该关键词的文本总数。

然后,计算该关键词的tf与idf的乘积,即可得到该关键词对应的tf-idf值。

但是,每次在计算关键词的idf值时,均需要遍历文本库中每个文本中所包括的词,以便从众多文本中确定出包含该关键词的文本,而随着智能问答系统的文本库的增加,这种遍历文本确定|{j:{ti∈dj}|的方式,需要消耗智能问答系统较大的计算资源;并且,针对于同一关键词,每次均需要重复计算该关键词在每个文本中的tf值,从而其消耗的资源也较大。

基于此,本申请实施例提供了一种计算词的tf-idf值的方法,旨在减少计算词的tf-idf值所需的计算量。具体实现时,当需要计算目标词的tf-idf值时,可以根据该目标词遍历预先构建的树形数据结构的根节点下的子节点,确定出目标子节点,该目标子节点所指示的分词为该目标词;在确定出目标子节点后,可以进一步获取该目标子节点对应的目标集合,该目标集合中包括有文本标识以及该目标词在该文本标识对应的文本中的tf值,可以理解,该目标集合中每个文本标识所对应的文本中均包含有该目标词;接着,可以根据该目标集合中所包括的文本标识的数量以及该根节点所指示的文本总数,确定出该目标词的idf值,进而在得到目标词的tf值以及idf值后,可以进一步计算出该目标词的tf-idf值。

可见,上述在计算目标词的tf-idf值的过程中,在确定该目标词对应的目标集合后,可以直接从该目标集合中确定出文本库中存在哪些文本(即目标集合中的文本标识所对应的文本)包含该目标词,而无需通过消耗大量计算资源对文本库进行遍历的方式确定文本库中包含有该目标词的文本,这样不仅可以有效减少确定这些文本所需消耗的计算资源,也即为计算出该目标词的idf值所需的计算资源,而且也可以有效提高确定目标词的idf值的效率;同时,根据该目标集合还能确定目标词在每一个包含该目标词的文本中的tf值,从而对于每个文本无需重复计算出目标词的tf值,这同样不仅可以减少重复计算目标词的tf值所需的计算量,而且通过查询集合的方式获取目标词的tf值,也可以有效提高获取目标词的tf值的效率。

作为一种示例,本申请实施例可以应用于如图1所示的示例性应用场景。在该场景中,用户101可以与智能问答系统进行语音交互,其中,该智能问答系统承载于终端102上。用户101可以向终端102语音输入目标词;终端102上的智能问答系统可以根据该目标词遍历树形数据结构的根节点下的子节点,确定出目标子节点,该目标子节点所指示的分词为该目标词;然后,终端102上的智能问答系统可以获取该目标子节点对应的目标集合,该目标集合中包括有文本标识以及该目标词在该文本标识对应的文本中的tf值;接着,终端102上的智能问答系统可以根据该目标集合中所包括的文本标识的数量以及该根节点所指示的文本总数,确定出该目标词的idf值,进而在得到目标词的tf值以及idf值后,可以进一步计算出该目标词相对于目标集合中每个文本标识所对应的文本的tf-idf值。这样,终端102上的智能问答系统可以将目标词的最大tf-idf值所对应的文本作为回复用户的文本,并将其转换成语音告知给用户101。

可以理解的是,上述场景仅是本申请实施例提供的一个场景示例,本申请实施例并不限于此场景。比如,在其它可能的应用场景中,智能问答系统也可以承载服务器上,终端102负责将用户语音输入的问题转化成文本,并将该文本发送给服务器,由服务器执行上述计算目标词的tf-idf值的过程,并将最终所确定出的文本返给至终端102,以便终端102将该文本呈现给用户101;当然,上述计算目标词对应的tf-idf值的过程,不仅仅可以应用于上述用户与智能问答系统进行问答交互的场景,也可以是应用于关键词检索等其它应用场景等。总之,本申请实施例可以应用于任何可适用的场景中,而不局限于上述场景示例。

为使本申请的上述目的、特征和优点能够更加明显易懂,下面将结合附图对本申请实施例中的各种非限定性实施方式进行示例性说明。显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

参阅图2,图2示出了本申请实施例中一种确定中心词的方法的流程示意图。该方法可以是由上述图1所示的终端102上的智能问答系统执行,也可以是由服务器或者其它设备执行等。该方法具体可以包括:

s201:根据第一目标词遍历树形数据结构的根节点下的子节点,确定出第一目标子节点,该第一目标子节点所指示的分词为该第一目标词。

s202:获取该第一目标子节点对应的第一目标集合,该第一目标集合包括第一文本标识以及第二目标词在该第一文本标识对应的文本中的第一tf值,不同第一文本标识所对应的文本互不相同。

本实施例中,基于包含多个文本的文本库(或者称为语料库),可以预先构建树形数据结构。在该树形数据结构中,根节点可以指示该文本库中所包含的文本总数,而根节点下的子节点可以指示文本中所包括的分词。其中,每个子节点可以指示一个分词,而该根节点下的不同子节点可以指示不同的分词。对于构建树形数据结构的具体实现过程,在后文中具有详细介绍。

值得注意的是,每个子节点可以具有与之对应的集合,该集合中可以包含一个或者多个文本标识,每个文本标识所对应的文本中包含有该子节点所指示的分词。其中,文本标识可以唯一标识出该文本,并且不同文本标识所对应的文本互不相同,例如可以利用逐渐递增的数值来标识不同文本。这样,基于该集合中所记录的文本标识,就可以确定出文本库中的哪些文本包含有该分词,或者说该分词在文本库中的哪些文本中出现。同时,该集合中还可以记录有该分词在每个文本标识对应的文本中的tf值,作为一种示例,可以是在构建树形数据结构的过程中,预先计算出该分词在每个文本标识所对应的文本中的tf值,并将该tf值与文本标识进行对应保存。例如对于子节点n,其对应的集合可以包括[id1,tf1]、[id2,tf2]、[id3,tf3]等,表征了该分词分别在id1、id2以及id3所标识的文本中出现,并且,在id1所标识的文本中的tf值为tf1,在id2所标识的文本中的tf值为tf2,在id3所标识的文本中的tf值为tf3等。

这样,对于每个子节点所指示分词,通过查找该子节点对应的集合,即可确定包含该分词的文本所对应的文本标识,以及该分词在该文本中的tf值,从而无需从文本库中针对于每一篇文本进行遍历,也无需重复计算同一分词在每个文本中的tf值,在减少计算资源的消耗的同时,也能提高获取该分词在各个文本中的tf值的效率。

当需要计算某个词(为便于描述,以下称之为第一目标词)对应的tf-idf值时,可以对树形数据结构的根节点下的子节点进行遍历,具体是遍历该根节点下的哪个子节点所指示的分词为该第一目标词,从而确定出指示该第一目标词的第一目标子节点。如图3所示,假设第一目标词为“去”,则可以遍历该根节点下的多个子节点(图3中示例性的示出5个子节点,分别指示分词“你们”、“好”、“去”、“哪”、“吧”),从而可以确定第3个子节点(从左到右)所指示分词为“去”,则该第3个子节点即为上述第一目标子节点。

在确定出第一目标子节点后,可以进一步确定出该第一目标子节点所对应的集合(为便于描述,以下称之为第一目标集合),从而根据该第一目标集合中所包含的信息可以确定该文本库中记录的文本标识以及该第一目标词在该文本标识对应的文本中的tf值。其中,在第一目标子节点被创建时,可以同时为该第一目标子节点创建一个集合,并将该集合与该第一目标子节点进行关联,从而建立第一目标子节点与该集合之间的对应关系。

s203:根据该第一目标集合中所包括的第一文本标识的数量以及该根节点所指示的文本总数,可以确定出该第一目标词的第一idf值。

可以理解,第一目标集合中的第一文本标识,可以标识出包含该第一目标词的文本,则,该第一目标集合中所包括的文本标识数量,也即为文本库中包含该第一目标词的文本数量。因此,在计算该第一目标词的idf值(为便于描述,以下称之为第一idf值)时,可以统计该第一目标集合中的第一文本标识的数量,并根据该第一文本标识的数量以及根节点所指示的文本库中文本总数,利用前述公式(2)可以计算出该第一目标词的idf值。

可见,在计算第一目标词的idf值的过程中,由于第一目标集合中记录有第一文本标识,因此,无需通过消耗大量计算资源对文本库进行遍历的方式来确定文本库中包含有该第一目标词的文本数量,从而可以有效减少计算资源的消耗,并提高计算第一目标词的idf值的效率。

s204:根据该第一tf值以及该第一idf值,计算出第一目标词对应的tf-idf值。

具体实现时,在根据第一目标集合中所记录的信息,计算出第一目标词对应的第一tf值以及第一idf值后,可以计算该第一tf值与第一idf值的乘积,从而得到该第一目标词对应的tf-idf值。需要说明的是,所确定出的tf-idf值为第一目标词针对于第一目标集合中每个第一文本标识对应的文本所具有的tf-idf值,具体的,当第一目标集合中仅包含一个第一文本标识时,则基于该第一文本标识对应的tf值,所计算出的tf-idf值也为一个;而当第一目标集合中包含多个第一文本标识时,基于每个第一文本标识对应的tf值,可以计算出与该tf值对应的tf-idf值,由此可以得到多个tf-idf值。

实际应用的众多场景中,可能需要连续计算多个分词对应的tf-idf值。比如,在用户与终端进行问答交互的场景中,针对于用户所提出的问题文本,可能包括多个分词,终端需要计算出每个分词对应的tf-idf值。因此,本实施例中,在计算出第一目标词对应的tf-idf值后,还可以继续计算与第一目标词连续的第二目标词。其中,第一目标词与第二目标词连续,是指第一目标词与第二目标词在同一语句中连续出现。比如,对于语句“你们去哪玩”,则当第一目标词为“你们”时,第二目标词为与“你们”连续的词“去”,当第一目标词为“哪”时,第二目标词即为与“哪”连续的词“玩”。

在计算第二目标词对应的tf-idf值时,与第一目标词类似,同样可以对根节点下的子节点进行遍历,从而可以确定指示第二目标词的第二目标子节点,并根据该第二目标子节点对应的第二目标集合中所记录的信息,分别确定出该第二目标词在各个文本中对应的tf值以及该第二目标词对应的idf值,从而得到该第二目标词对应的tf-idf值。

由于在为第二目标词确定第二目标子节点时,需要再次从根节点下的众多字节点中遍历出指示第二目标词的第二目标子节点,而在众多子节点中遍历出第二目标子节点也需要消耗一定的计算资源(当然,遍历子节点所消耗的计算资源远小于遍历文本库中每个文本的分词所需消耗的计算资源),因此,在其它可能的实施方式中,第一目标子节点下还可以具有虚拟子节点,每个虚拟子节点的指针可以指向根节点下的相应子节点,该虚拟子节点所指示的分词即为根节点下的相应子节点所指示的分词。这样,在为第一目标词遍历出第一目标子节点后,即可以从该第一目标子节点下的虚拟子节点中遍历出指示第二目标词的虚拟子节点(以下称之为第一虚拟子节点),进而可以确定出该第一虚拟子节点的指针所指向的第二目标子节点(其为根节点下的子节点)。可以理解,实际应用中,与第一目标词连续的分词的个数(也即为第一目标子节点下的虚拟子节点的个数),通常远远少于根节点下的子节点数量,因此,仅仅遍历第一目标子节点下的虚拟子节点,进而根据遍历得到的第一虚拟子节点确定第二目标子节点,可以有效减少确定指示第二目标词的第二目标子节点所需消耗的计算资源,从而可以进一步减少计算第二目标词的tf-idf值的计算资源消耗。

如图4所示,当确定出第一目标词“你们”对应的第一目标子节点后,可以遍历该第一目标子节点下的虚拟子节点(包括“好”和“去”两个虚拟子节点,并在图中用虚线线圈示出),可以进一步确定出指示第二目标词“去”的虚拟子节点,而该虚拟子节点的指针可以指向根节点下的子节点“去”(实线线圈示出),如图4中虚线箭头所示,从而在确定出第二目标词“去”对应的第二目标子节点时,无需从根节点下的子节点进行遍历。

当然,如果遍历第一目标子节点下的虚拟子节点,确定不存在指示第二目标词的虚拟子节点,则可以从根节点下的子节点中进行遍历,以确定该第二目标词对应的第二目标子节点。而若根节点下的子节点中仍不存在指示第二目标词的子节点,则可以在该根节点下创建新的子节点,并且该新的子节点所指示的分词为该第二目标词。

在确定出目标第二子节点后,可以进一步获取该第二目标子节点对应的第二目标集合,从而可以获取到该第二目标集合中所记录的文本标识(为便于区分,以下称之为第二文本标识)以及该第二目标词在该第二文本标识对应的文本中的第二tf值。其中,不同的第二文本标识所对应的文本互不相同,多个文本标识对应于多个第二tf值。然后,根据第二目标集合中所包括的第二目标文本标识的数量以及该根节点所指示的文本总数,可以确定出该第二目标词的第二idf值,进而根据该第二tf值以及第二idf值,可以计算出该第二目标词对应的tf-idf值。其中,当第二目标集合中包含多个第二文本标识时,基于每个第二文本标识对应的tf值,可以计算出与该tf值对应的tf-idf值,由此可以得到多个tf-idf值。

值得注意的是,本实施例中是以计算第一目标词与第二目标词作为一种示例,对本申请实施例的技术方案进行描述。在进一步可能的实施方式中,除了计算第一目标词与第二目标词以外,还可以继续计算第三目标词、第四目标词等。其中,在计算第三目标词对应的tf-idf值时,可以从指示第二目标词的第一虚拟子节点下的虚拟子节点中进行遍历,如图4中在计算第三目标词对应的tf-idf值时,可以从指示第二目标词“去”的第一虚拟子节点下的虚拟子节点(分别为指示“哪”和“吧”的虚拟子节点)中进行遍历,确定第一虚拟子节点下的指示第三目标词“哪”对应的虚拟子节点,同样,该虚拟子节点“哪”的指针也指向根节点下对应的子节点“哪”。在确定出第一虚拟子节点下的虚拟子节点(“哪”)的指针所指向的根节点下对应的子节点(“哪”)后,对于后续根据该子节点对应的集合计算出第三目标词对应的tf-idf值的过程,可以参阅前述计算第二目标词对应的tf-idf值的过程,在此不做赘述。

实际应用的一种场景中,该第一目标词与第二目标词可以是一个问题文本中的词,当需要从文本库中确定出用于回复该问题的答案文本时,首先,可以获取问题文本,并对该问题文本进行分词处理,得到该问题文本对应的分词集合,该分词集合中至少包括第一目标词与第二目标词。

然后,执行上述过程可以分别确定出包含第一目标词的文本所对应的第一文本标识,以及包含第二目标词的文本所对应的第二文本标识,从而可以从文本库中所包含的众多文本中确定出包含第一目标词和/或第二目标词的文本。

接着,针对于确定出的每一个文本,可以计算出该文本中每个分词对应的tf-idf值,其中,每个分词对应的tf-idf的计算过程可以参照上述第一目标词与第二目标词的tf-idf的计算过程,从而根据该文本中每个分词对应的tf-idf值,确定出该文本对应的关键词集合,该关键词集合中的每个关键词所对应的tf-idf值均不低于该文本中其它分词对应的tf-idf值,并且,每个关键词集合中所包含的关键词互不相同。具体实现时,针对于每个文本,可以是从该文本中挑选出具有较大tf-idf值的分词作为关键词,构成该文本对应的关键词集合。

这样,所确定出的每一个文本(包含第一目标词和/或第二目标词),均具有与之对应的关键词集合,然后可以计算每个文本对应的关键词集合与问题文本对应的分词集合之间的相似度,如计算两个关键词集合之间的余弦相似度等,从而可以从这些关键词集合中确定出与分词集合之间的相似度最高的关键词集合(为便于描述,以下称之为目标关键词集合),即该目标关键词集合与分词集合之间的相似度高于其他关键词集合与该分词集合之间的相似度,并将该目标关键词集合对应的文本确定为该问题文本对应的答案文本。

当然,在进一步可能的实施方式中,在为确定出的每一个文本确定与之对应的关键词集合时,还可以对该关键词集合中所包括的关键词的数量进行限制。作为一种示例,可以限制关键词集合中所包括的关键词数量不超过该分词集合中所包括的分词数量,比如,分词集合中的分词为8个,则每个关键词集合中所包括的关键词集合可以是8个或者7个等。当然,实际应用中,关键词集合中所包括的关键词数量也可以超出分词集合中所包括的分词数量等,比如,分词集合中的分词为8个,则每个关键词集合中所包括的关键词集合可以是9个等。

值得注意的是,当分词集合中所包含的分词还包括除第一目标词与第二目标词以外的其它词时,从文本库中所确定出的文本,还可以是包括其它分词的文本。相应的,所确定出的目标关键词集合,也可能是包括其它分词的文本所对应的关键词集合。

需要说明的是,本实施例中,每个根节点下的子节点所对应的集合,具体可以是为该子节点所创建的列表,即在该子节点对应的列表中对应记录有该子节点所指示的分词所在文本的文本标识以及该分词在该文本中的tf值;当然,在其它可能的实施方式中,该子节点所对应的集合,具体也可以是以键值对的形式存在。即在该子节点对应的键值对(“key=value”)中,“key”可以是分词所在文本的文本标识,“value”可以是该分词该在文本中的tf值。实际应用中,该子节点对应的集合也可以是其它形式存在,本实施例对此并不进行限定。

接下来,对基于文本库中的多个文本构建树形数据结构的过程进行详细描述:

在构建树形数据结构的过程中,对于文本库中的任一文本(为便于描述,以下称之为待处理文本),可以对待处理文本进行分词,得到该待处理文本的分词集合,其中,该分词集合中至少包括第一分词。可以理解,实际应用中,该分词集合中可以包括多个分词,这里先以多个分词中的其中一个分词(以下称之为第一分词)为例,对构建树形数据结构的过程进行示例性说明。首先,可以遍历该树形数据结构的根节点下的子节点所指示的分词中是否包括该第一分词,当不包括第一分词时(比如初始构建数据结构时,根节点下没有子节点,或者,根节点下的子节点较少,不包括指示该第一分词的子节点等),可以在该树形数据结构的根节点下创建第一子节点以及该第一子节点对应的集合,并且在该第一子节点对应的集合中添加待处理文本的文本标识以及该第一分词在待处理文本中的第一tf值,其中,该第一子节点所指示的分词为该第一分词,其中,该第一tf值可以通过前述公式(1)进行计算得到。而当该根节点下的子节点中存在第一子节点所指示的分词为该第一分词时,在第一子节点对应的集合中添加该待处理文本的文本标识以及该第一分词在该待处理文本中的第一tf值,在这种情况下,第一子节点预先完成了创建,则在向第一子节点对应的集合中添加文本标识以及相应地第一tf值后,该集合中至少包括两个不同的文本标识以及两个tf值。由此,完成基于该待处理文本中的第一分词对树形数据结构的构建过程。

进一步的,在基于待处理文本的分词集合中的第二分词对树形数据结构进行构建时,也可以是按照类似于第一分词的构建过程进行树形数据结构的构建。

而在另一种可能的实施方式中,在完成根据第一分词构建树形数据结构的过程后,针对于与该第一分词在待处理文本中连续的第二分词,可以先遍历该第一子节点下的虚拟子节点所指示的分词中是否包含第二分词,当不包含该第二分词时,可以在该第一子节点下创建目标虚拟子节点,并为该目标虚拟子节点建立指向根节点下的第二子节点的指针。其中,该目标虚拟子节点与该第二子节点所指示的分词均为第二分词,而第二子节点可以是通过遍历根节点下的子节点进行确定(类似于根据第一分词确定自己子节点的过程),当然,如若根节点下的子节点也不包含指示该第二分词的子节点,则可以为该第二分词创建该第二子节点以及该第二子节点所对应的集合。同时,还可以在该第二子节点对应的集合中添加待处理文本的文本标识以及该第二分词在该待处理文本中的第二tf值。这样,当需要查询该第二分词对应的tf值时,可以先遍历第一子节点下的虚拟子节点来确定出指示第二分词的目标虚拟子节点,从而基于该目标虚拟子节点的指针确定出第二子节点,进而得到该第二子节点对应的集合中所记录的tf值(当然,也可以在该集合中获得待处理文本的文本标识)。由于虚拟子节点的数量通常远小于根节点下的子节点数量,因此,通过遍历虚拟子节点来确定指示第二分词对应的子节点,可以有效减少所需的计算资源,同时,也可以提高处理效率。

而当第一子节点下的虚拟子节点所指示的分词中包含第二分词时,可以根据该指示第二分词的虚拟子节点的指针确定第二子节点,进而在该第二子节点对应的集合中添加该待处理文本的标识以及该第二分词在该待处理文本中的第二tf值。由此,完成基于待处理文本中的第二分词对树形数据结构的构建过程。

需要说明的是,实际应用中待处理文本的分词集合中还可能包括与第一分词相同的第三分词,由于第一分词与第三分词为同一待处理文本中的分词,并且,第一分词与第三分词在该待处理文本中的tf相同,因此,基于第一分词在第一子节点对应的集合中添加待处理文本的文本标识以及该第一分词在该待处理文本中的第一tf值后,针对于与第一分词相同的第三分词,无需再向该第一子节点对应的集合中重复添加相同的文本标识以及tf值(当然,即使重复添加相同的文本标识以及tf值,后续也可以对该相同的文档标识且相同的tf值进行合并处理)。

基于此,在一种示例性的具体实施方式中,当确定分词集合中的第三分词与第一分词相同时,可以不在该第一子节点对应的集合中添加该待处理文本的文本标识以及该第三分词在该待处理文本中的tf值。

针对于文本库中每个文本中的每个分词,可以按照上述过程进行树形数据结构的构建,从而可以得到基于该文本库所构建得到的树形数据结构。

此外,当需要向文本库中新增文本时,与上述利用文本库构建树形数据结构过程类似。当然,该树形数据结构中根节点所指示的文本总数增加,所增加的数量为该新增文本的数量。

本实施例中,当需要计算目标词的tf-idf值时,可以根据该目标词遍历预先构建的树形数据结构的根节点下的子节点,确定出目标子节点,该目标子节点所指示的分词为该目标词;在确定出目标子节点后,可以进一步获取该目标子节点对应的目标集合,该目标集合中包括有文本标识以及该目标词在该文本标识对应的文本中的tf值,可以理解,该目标集合中每个文本标识所对应的文本中均包含有该目标词;接着,可以根据该目标集合中所包括的文本标识的数量以及该根节点所指示的文本总数,确定出该目标词的idf值,进而在得到目标词的tf值以及idf值后,可以进一步计算出该目标词的tf-idf值。可见,上述在计算目标词的tf-idf值的过程中,在确定该目标词对应的目标集合后,可以直接从该目标集合中确定出文本库中存在哪些文本包含该目标词,而无需通过消耗大量计算资源对文本库进行遍历的方式确定文本库中包含有该目标词的文本,这样不仅可以有效减少确定这些文本所需消耗的计算资源,也即为计算出该目标词的idf值所需的计算资源,而且也可以有效提高确定目标词的idf值的效率;同时,根据该目标集合还能确定目标词在每一个包含该目标词的文本中的tf值,从而对于每个文本无需重复计算出目标词的tf值,这同样不仅可以减少重复计算目标词的tf值所需的计算量,而且通过查询集合的方式获取目标词的tf值,也可以有效提高获取目标词的tf值的效率。

此外,本申请实施例还提供了一种计算词的tf-idf值的装置。参阅图5,图5示出了本申请实施例中一种计算词的tf-idf值的装置,所述装置500包括:

第一确定模块501,用于根据第一目标词遍历树形数据结构的根节点下的子节点,确定出第一目标子节点,所述第一目标子节点所指示的分词为所述第一目标词;

第一获取模块502,用于获取所述第一目标子节点对应的第一目标集合,所述第一目标集合包括第一文本标识以及所述第一目标词在所述第一文本标识对应的文本中的第一词频tf值,不同第一文本标识所对应的文本互不相同;

第二确定模块503,用于根据所述第一目标集合中所包括的第一文本标识的数量以及所述根节点所指示的文本总数,确定出所述第一目标词的第一逆文本频率idf值;

第一计算模块504,用于根据所述第一tf值以及所述第一idf值,计算出所述第一目标词对应的tf-idf值。

在一种可能的实施方式中,所述装置500还包括:

第三确定模块,用于根据第二目标词遍历所述第一目标子节点下的虚拟子节点,确定出第一虚拟子节点,所述第一虚拟子节点的指针指向所述根节点下的第二目标子节点,所述第二目标子节点所指示的分词为所述第二目标词,所述第二目标词与所述第一目标词在同一文本中连续;

第二获取模块,用于获取所述第二目标子节点对应的第二目标集合,所述第二目标集合包括第二文本标识以及所述第二目标词在所述第二文本标识对应的文本中的第二tf值,不同第二文本标识所对应的文本互不相同;

第四确定模块,用于根据所述第二目标集合中所包括的第二文本标识的数量以及所述根节点所指示的文本总数,确定出所述第二目标词的第二idf值;

第二计算模块,用于根据所述第二tf值以及所述第二idf值,计算出所述第二目标词对应的tf-idf值。

在一些可能的实施方式中,所述第一目标词与所述第二目标词为分词集合中的分词,所述分词集合是通过对问题文本进行分词处理而得到,所述装置500还包括:

第五确定模块,用于确定每个所述第一文本标识对应的文本的关键词集合以及每个第二文本标识对应的文本的关键词集合,所述关键词集合中的每个关键词所对应的tf-idf值均不低于所述文本中其它分词对应的tf-idf值,所述关键词集合包括所述第一目标词和/或所述第二目标词;

第六确定模块,用于将目标关键词集合所对应的文本确定为所述问题文本对应的答案文本,所述目标关键词集合与所述分词集合之间的相似度高于其它关键词集合与所述分词集合之间的相似度。

在一些可能的实施方式中,所述关键词集合中所包括的关键词数量不超过所述分词集合中所包括的分词数量。

在一些可能的实施方式中,所述装置500还包括:

分词模块,用于将待处理文本进行分词,得到所述待处理文本的分词集合,所述分词集合至少包括第一分词,所述待处理文本为文本库中的任一文本或待添加至所述文本库中的新增文本;

第一创建模块,用于当所述树形数据结构的根节点下的子节点所指示的分词中不包括所述第一分词时,在所述树形数据结构的根节点下创建第一子节点以及所述第一子节点对应的集合,所述第一子节点所指示的分词为所述第一分词,并在所述第一子节点对应的集合中添加所述待处理文本的文本标识以及所述第一分词在所述待处理文本中的第一tf值;

第一添加模块,用于当所述根节点下的子节点中存在第一子节点所指示的分词为所述第一分词时,在所述第一子节点对应的集合中添加所述待处理文本的文本标识以及所述第一分词在所述待处理文本中的第一tf值。

在一些可能的实施方式中,所述待处理文本的分词集合还包括第二分词,所述第二分词与所述第一分词在所述待处理文本中连续,所述装置500还包括:

第二创建模块,用于当所述第一子节点下的虚拟子节点所指示的分词中不包含所述第二分词时,在所述第一子节点下创建目标虚拟子节点,并为所述目标虚拟子节点建立指向所述根节点下的第二子节点的指针,所述第二子节点所指示的分词为所述第二分词,并在所述第二子节点对应的集合中添加所述待处理文本的文本标识以及所述第二分词在所述待处理文本中的第二tf值;

第二添加模块,用于当所述第一子节点下的虚拟子节点中存在目标虚拟子节点所指示的分词为所述第二分词时,在所述目标虚拟子节点的指针指向的第二子节点所对应的集合中,添加所述待处理文本的文本标识以及所述第二分词在所述待处理文本中的第二tf值。

在一些可能的实施方式中,所述分词集合还包括第三分词,所述装置500还包括:

不添加模块,用于当确定所述第三分词与所述第一分词相同时,不在所述第一子节点对应的集合中添加所述待处理文本的文本标识以及所述第三分词在所述待处理文本中的tf值。

需要说明的是,上述装置各模块、单元之间的信息交互、执行过程等内容,由于与本申请实施例中方法实施例基于同一构思,其带来的技术效果与本申请实施例中方法实施例相同,具体内容可参见本申请实施例前述所示的方法实施例中的叙述,此处不再赘述。

另外,本申请实施例还提供了一种设备。参阅图6,图6示出了本申请实施例中一种设备的硬件结构示意图,该设备600包括处理器601以及存储器602:

所述存储器602用于存储程序代码,并将所述程序代码传输给所述处理器601;

所述处理器601用于根据所述程序代码中的指令执行上述方法实施例中所述的计算词的tf-idf值的方法。

本申请实施例还提供了一种计算机可读存储介质。上述实施例中描述的方法可以全部或部分地通过软件、硬件、固件或者其任意拼接来实现。如果在软件中实现,则功能可以作为一个或多个指令或代码存储在计算机可读介质上或者在计算机可读介质上传输。计算机可读介质可以包括计算机存储介质和通信介质,还可以包括任何可以将计算机程序从一个地方传送到另一个地方的介质。存储介质可以是可由计算机访问的任何目标介质。

作为一种可选的设计,计算机可读介质可以包括ram,rom,eeprom,cd-rom或其它光盘存储器,磁盘存储器或其它磁存储设备,或目标于承载的任何其它介质或以指令或数据结构的形式存储所需的程序代码,并且可由计算机访问。而且,任何连接被适当地称为计算机可读介质。例如,如果使用同轴电缆,光纤电缆,双绞线,数字用户线(dsl)或无线技术(如红外,无线电和微波)从网站,服务器或其它远程源传输软件,则同轴电缆,光纤电缆,双绞线,dsl或诸如红外,无线电和微波之类的无线技术包括在介质的定义中。如本文所使用的磁盘和光盘包括光盘(cd),激光盘,光盘,数字通用光盘(dvd),软盘和蓝光盘,其中磁盘通常以磁性方式再现数据,而光盘利用激光光学地再现数据。上述的拼接也应包括在计算机可读介质的范围内。

需要说明的是,本申请中“的(英文:of)”,相应的“(英文corresponding,relevant)”和“对应的(英文:corresponding)”有时可以混用,应当指出的是,在不强调其区别时,其所要表达的含义是一致的。

需要说明的是,本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。

本申请中,“至少一个”是指一个或者多个。“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b的情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意拼接,包括单项(个)或复数项(个)的任意拼接。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上述实施例方法中的全部或部分步骤可借助软件加通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如只读存储器(英文:read-onlymemory,rom)/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者诸如路由器等网络通信设备)执行本申请各个实施例或者实施例的某些部分所述的方法。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅是本申请示例性的实施方式,并非用于限定本申请的保护范围。

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