用于标识语料库中出现的N-GRAM的计数的方法和设备与流程

文档序号:18093163发布日期:2019-07-06 10:53阅读:411来源:国知局
用于标识语料库中出现的N-GRAM的计数的方法和设备与流程
本公开一般涉及文本处理,并且更具体地,涉及用于标识语料库中出现的n-gram(n元)的计数的方法和设备。背景近年来,文本处理系统已被用于处理文本(语料库)并导出关于文本的统计。此类统计可用于开发语言模型,创建分类模型、拼写检查、剽窃检测等。可以被计算的一个示例统计是文本中出现的n-gram的计数。附图说明图1是示出基于n-gram的第一词条(token)在文本中出现的n-gram的计数的图表。图2是标识语料库中出现的n-gram的计数的示例n-gram计数器的框图。图3是表示示例机器可读指令的流程图,当该指令被执行时,使得图2的n-gram计数器标识语料库中出现的n-gram的计数。图4是表示示例机器可读指令的流程图,当该指令被执行时,使得图2的集群在图2的示例集群的一个或多个节点处执行具有热词提取作业的后缀σ。图5是表示示例机器可读指令的流程图,当该指令被执行时,使得图2的集群在图2的示例集群的一个或多个节点处执行热词排序作业。图6是表示示例机器可读指令的流程图,当该指令被执行时,使得图2的集群在图2的示例集群的一个或多个节点处使用经排序的热词后缀来执行后缀σ词计数作业。图7是示例处理器平台的框图,该处理器平台能够执行图3、图4、图5和/或图6的指令以便实现图2的示例n-gram计数器。附图并非按比例绘制。在任何可能的情况下,相同的参考编号将贯穿附图和所附书面说明书被使用来指代相同或相似的部分。具体实施方式计算语言学系统利用关于文本的不同统计。重要的统计数据是文本中出现的n-gram的数量。gram(元)(例如,数据单元、词条)是一个或多个字符的序列。在一些示例中,通过一个或多个分隔符(例如,标点符号、空格等)将gram与另一个字符序列分开。在一些示例中,gram是固定长度(例如,单个字符、固定数量的字符等)。单个gram(例如,单个词条)有时被称为“一元(unigram)”,两个gram短语(例如,两个连续词条)有时被称为“二元(bigram)”,以及三个词gram(例如,三个连续词条)有时被称为“三元(trigram)”。n-gram是来自给定数据序列(例如,文本)的多个gram的连续序列。在一些示例中,n-gram有时也被称为短语。n-gram可以是任何长度。也就是说,n-gram可以由任意数量的gram形成。理解文本中出现的n-gram计数是计算语言学的重要统计量。存在一些用于计算出现在文本中的n-gram的(多个)计数的方法。例如,一种简单的方法读取文本并对n-gram的数量计数,记录在阅读文本时遇到的n-gram。虽然这种方法对小文本非常有效,但由于n-gram可以是任意长度,大型语料库(例如,包括千兆字节数据的语料库)通常需要很长时间来处理(例如,数天、数周等)。结果,对大型的文本语料库的简单处理通常限于最大长度的n-gram(例如,包括不超过5元gram的n-gram)。此类方法不能解释可能出现在文本中的更长的n-gram。计算出现在文本中的n-gram的(多个)计数的另一示例方法是后缀σ方法。后缀σ方法利用mapreduce(映射归约)来确定n-gram的计数。mapreduce是在hadoop环境内操作的框架,并且实现在经集群的环境中(可能具有数百或数千个经集群的计算节点)处理大量数据(例如,多兆字节数据集)。mapreduce作业通常包括三种类型的任务:映射任务,由映射节点执行,该映射节点并行地对语料库的经分区的部分进行操作以产生(多个)键值对;混洗任务,将键值对分配给特定归约器节点;以及减少任务,对分配的键值对进行操作以形成最终结果。框架对映射的输出进行排序,然后将其输入到归约任务。可以并行执行映射任务和归约任务(例如,归约任务可以在完成所有映射任务之前开始)。通常,作业的输入和输出都被存储在文件系统(例如,hadoop分布式文件系统(hdfs))中。该框架负责调度任务,监视它们并重新执行失败的任务。后缀σ方法标识一些n-gram可以基于它们的后缀(例如,n-gram的最后一个单词)被简化。例如,虽然对诸如“bax”的句子中的n-gram进行计数的简单方法的映射阶段会发出n-gram{bax}、{ba}、{ac}、{b}、{a}和{x},此类n-gram可以简化成三个可能后缀的表示:{bax}、{ba}和{b}。在后缀σmapreduce作业的映射任务中,映射任务仅针对包含在语料库中的n-gram的子集发出键值对,这些键值对表示以相同的gram开始的所有后缀(例如,相同的词条)。为了确保准确计数,对应于相同后缀的键值对必须由单个归约器任务处理(尽管不同的归约器任务可以对与其他后缀对应的其他键值对进行操作)。仅基于它们的第一gram对后缀进行划分,而不是包含在n-gram中的所有gram,确保单个归约器(reducer)接收以相同gram开始的所有后缀,这使得后缀σ方法能够产生准确的计数。后缀σ方法应用两个不变量来实现其目标。首先,所有以相同gram开始的n-gram必须在集群中的单个节点处组合在一起。其次,集群中的单个节点中的所有n-gram必须按反向词典编纂顺序排序。不幸的是,对于非常大型的语料库,第一不变量趋向于导致集群中节点之间的工作不均匀分布。考虑英文文本中有多少个n-gram可能以单词“dog”开始,相比于相同文本中有多少个n-gram可能以“the”开始。由于预期更多的句子包含单词“the”而不是那些包含“dog”的单词,因此相应地有更多的n-gram以“the”开始,而不是以“dog”开始。此外,因为几乎每一句英文文本将包含单词“the”,并且只有一些将包含单词“dog”,集群中的更多节点将以“the”开始提供n-gram。图1是示出基于n-gram的第一词条在文本中出现的n-gram的计数的图表100。图1的示例图表包括表示以特定词条开始的n-gram的水平轴105,以及表示以该词条开始的n-gram的数目的垂直轴110。在图1所示出的示例中,许多n-gram以词条“,”115、“the(那)”120,“of(……的)”125、“and(和)”130、“to(向……)”135、“a(一个)”140、和“by(通过)”145。词条“,”115、“the(该)”120,“of(……的)”125、“and(和)”130、“to(向……)”135、“a(一个)”140、和“by(通过)”145可以被认为是频繁开始后缀180的词条。当使用后缀σ方法时,以相同词条开始的n-gram各自都由相同的归约器(例如,集群中的单个节点)处理。如图1所示出的示例中所示,具有以相同词条开始的n-gram的不均匀分布同样导致集群中的节点之间的工作的不均匀分布。当输入语料库和集群大小很大时,这种不均匀分布可能成为mapreduce作业运行时的主导因素。在一些示例中,运行时间可能变得太长而不能使用(例如,几天、几周等),而一些集群利用率太低而不能证明大型集群的大小。例如,虽然许多节点将完成其开始仅几个n-gram的词条的减少任务,但是一些节点将继续处理长时间开始许多n-gram的词条的数据。本文公开的示例方法将工作分成三个作业(与后缀σ方法的单个mapreduce作业相反)并且利用附加的输入。在本文公开的示例中,额外输入是单词和/或词条的列表(在本文中称为“热词”),“热词”导致大部分不均匀分布(通常是发生率最高的一元gram,诸如开始许多图1的n-gram的词条)。一旦标识“热词”列表,就提交第一作业。第一作业使用后缀σ方法,除了以“热词”开始的后缀(本文称为“热后缀”)与原始后缀σ方法的正常流程分离。第一作业现在很快完成,因为所有热词都被移除了。结果,第一作业标识不是以热词列表中出现的词开始的n-gram的计数。在本文公开的示例中,然后提交第二作业,处理临时存储的“热后缀”。第二作业将数据强制转换为另一个本地化后缀σ运行所需的不变量,并执行初始n-gram计数以减少数据大小。然后提交第三作业,该作业运行后缀σ方法的本地化版本,并使用简单的词计数技术输出以“热词”开始的n-gram的最终计数。第三作业的结果是n-gram的(多个)计数,该n-gram以在热词列表中出现的词和/或词条开始。在一些示例中,以热词列表中出现的词和/或词条开始的n-gram的计数被添加到不以热词列表中出现的词和/或词条开始的n-gram的计数,以产生文本中出现的n-gram的总(多个)计数。利用本文公开的方法减少了与计算大的文本语料库中的n-gram的计数相关联的计算时间,以及更好地利用执行此类计算的集群的资源。例如,给定大型的输入语料库(例如,包含1.7兆字节文本的语料库,以及超过300亿个不同的n-gram),先前的后缀σ方法使用200个节点的集群在4小时内完成大约95%的作业,而剩余的5%的作业需要附加的17个小时的计算。一般来说,最后5%的作业重点是以热词开始的n-gram。另外,在最后的5%期间,集群中的许多节点都处于空闲,因为剩下的任务只集中在以热词开始的n-gram上,n-gram集中在集群中的节点的子集上。后缀σ方法的主要瓶颈是许多节点将试图同时将其“热后缀”(映射任务的结果)的一部分传输到单个节点(用于减少任务的性能)。因此,随着输入的大小增加,将对执行以热词开始的n-gram的减少的(多个)节点施加甚至更多的负载,从而导致附加的资源争用和计算中的指数延迟。本文公开的示例方法在使用相同的200个节点的集群处理相同的大型输入语料库时分离出以热词开始的n-gram的处理,在6小时内产生结果(例如,运行时间提高了50%)。在此类计算期间,集群的节点被用于更均匀的分布中(与上述严格后缀σ方法相比)。图2是标识出现在语料库中n-gram的计数的示例n-gram计数器200的框图。图2所示出的示例的n-gram计数器200接收输入语料库205并输出出现在输入语料库中的n-gram210的(多个)计数。图2所示出的示例的示例n-gram计数器200包括n-gram计数控制器215、热词列表标识符220、和节点231、节点232、节点233的集群230。示例n-gram计数控制器215从热词列表标识符220接收输入语料库205和热词的列表。示例n-gram计数控制器215协调集群230处的mapreduce作业的执行。使用经协调的mapreduce作业的结果,示例n-gram计数控制器215输出出现在输入语料库205中的n-gram210的(多个)计数。在图2所示出的示例中,n-gram的(多个)计数是输入语料库205中出现的n-gram的列表以及输入语料库205中的n-gram的出现次数。此类信息对于例如,输入语料库中出现特定n-gram的频率、输入语料库中出现的多个不同的n-gram等的标识是有用的。示例热词列表标识符220标识输入语料库205的热词列表。在图2所示出的示例中,通过检测输入语料库205的语言(例如,英语、西班牙语、法语等)并选择频繁开始检测到的语言中的后缀的词和/或词条来标识热词列表。然而,可以另外地或替代地使用任何其他方法以标识热词列表。例如,可以执行简单的词计数,以及在输入语料库中最频繁出现的(多个)词(例如,在输入语料库中出现超过阈值次数的词(在语料库中出现超过1000次的词)、出现输入语料库的阈值百分比的词(出现超过5%的词)、输入语料库中出现的单词的最高百分比(词的前5%)、输入语料库中出现的最高次数的词的数量(例如,最频繁出现的15个词)等可以选择包括在热词列表中。图2所示出的示例的示例集群230是hadoop集群。然而,可以附加地或可替代地使用任何其他类型的集群和/或分布式计算环境。在图2所示出的示例中,示例集群230包括节点231、节点232、节点233。虽然在图2所示的示例中示出了三个节点,实际上,可以附加地或替代地使用任何数量的节点231、节点232、节点233。例如,集群230中可以包括数十、数百、数千等的节点。在图2所示出的示例中,每个节点231、节点232、节点233由集群230中的硬件处理器平台(例如,单独的物理处理器平台)实现。在一些示例中,每个节点231、节点232、节点233由虚拟处理器平台(例如,虚拟机,容器等)实现。在图2所示出的示例中,集群230被示为n-gram计数器200的本地组件。然而,在一些示例中,集群230可以从n-gram计数器200(例如,n-gram计数控制器215和/或示例热词列表标识符)远程地实现。在图2所示出的示例中,每个节点包括热词检测器240、分区器245、后缀标识符250、文件系统255、后缀分组器260、后缀排序器265、散列创建器270、分配器275、计数器280和n-gram构造器285。在本文公开的示例中,节点231、节点232、节点233实现mapreduce作业。因此,每个节点可以在任何给定时间执行映射任务、混洗任务(shufflingtasks)和/或减少任务。如上所述,映射任务并行地对输入数据的被分区的部分进行操作以产生(多个)键值对,混洗任务将这些键值对分配和/或分发给另一个节点(例如,归约器节点),以及减少任务对分配的和/或分发的(多个)键值对进行操作以形成最终结果。示例热词检测器240、示例分区器245、示例后缀标识符250、示例文件系统255、示例后缀分组器260、示例后缀排序器265、示例散列创建器270、示例分配器275、示例计数器280、和/或示例n-gram构造器285中的任意一项可以在映射任务、混洗任务和/或减少任务期间操作。图2所示示例的示例热词检测器240访问由热词列表标识器220提供的输入语料库的热词列表。使用所访问的热词列表,示例热词检测器240将每个热词与由后缀标识符250标识的后缀的第一项进行比较,以确定后缀是否以热词列表中的词开始。通过执行此类检测,可以从结合图4描述的后缀σ计算中省略此类后缀。一旦从后缀σ计算中省略,对于n-gram计数,后缀可以比使用后缀σ方法处理它们时更均匀地分布。也就是说,用于处理后缀的节点数量大于后缀的数量。图2所示出的示例的示例分区器245将输入语料库划分为由每个节点分析的部分。在本文公开的示例中,对应于每个节点231、节点232、节点233的每个分区器245读取输入数据的一部分(例如,语料库、热词后缀列表、后缀的精简列表等)并且使得能够在映射作业/mapreduce作业的阶段中处理此类输入数据。图2所示出的示例的示例后缀标识符250标识数据的语料库(例如,文本)内的后缀。例如,如果文本的语料库是“abcde”,则示例后缀标识符250将后缀标识为“abcde”、“bcde”、“cde”、“de”和“e”。作为附加的示例,示例后缀标识符250可以将“那只大狗(thebigdog)”标识为文本“我看到那只大狗(iseethebigdog)”的后缀。在一些示例中,当热词检测器240将词“那(the)”标识为热词时,示例后缀标识符250将后缀“那只大狗(thebigdog)”写入文件系统255。结果,后缀“那只大狗(thebigdog)”免于使用后缀σ方法进行处理,而是使用热词排序作业和热词后缀σ作业来处理。图2所示出的示例的示例文件系统255由hadoop分布式文件系统(hdfs)实现。示例文件系统255跨集群230中的多个节点231、节点232、节点233存储文件(通常是非常大的文件,在千兆字节到兆兆字节以及更高的范围内)。在集群230中的节点231、节点232、节点233之间复制数据,以在节点故障的情况下提供冗余。图2所示出的示例的示例后缀分组器260根据其第一项(例如,他们第一词条)将由后缀标识符250标识的后缀进行分组。根据其第一项对后缀进行分组应用后缀σ方法的第一不变量,该后缀σ方法要求将所有以相同词条(例如,词)开始的n-gram分组在一起以在同一节点处进行减少。图2所示示例的示例后缀排序器265按照反向词典编纂顺序对经分组的后缀进行排序。以反向词典编纂顺序对分组后缀进行排序应用后缀σ方法的第二个不变量,该方法要求在单个节点处组合在一起的所有n-gram按反向词典编纂顺序排序。以反向词典编纂顺序排序有助于对n-gram的高效计数。图2所示出的示例的示例散列创建器270在热词后缀列表中创建每个热词后缀的散列表示。更一般地,示例散列创建器270创建n-gram(或其部分)的散列表示。在本文公开的示例中,散列标识集群230中应该被分发热词后缀的节点231、节点232、节点233。使用示例散列创建器270来创建每个热词的散列确保了在集群的节点之间的热词后缀列表中存在后缀的均匀分布。在一些示例中,散列创建器270基于后缀的第一词条(例如,词)来标识散列热词后缀。图2所示出示例的示例分配器275基于由散列创建器270创建的n-gram的散列来分发n-gram的处理(例如,后缀、热词后缀等)。示例分配器275将经分组的和经排序的后缀转发到集群230的节点,以用于基于后缀的排序和分组进行减少。图2所示示例的示例计数器280在节点处聚合和/或输出接收到的n-gram的计数。在一些示例中,计数器280对以每个后缀开始的n-gram进行计数。在一些示例中,计数器280执行简单的词计数以聚合接收到的n-gram或后缀的出现次数。图2所示出示例的示例n-gram构造器285使用一个或多个接收到的后缀的前缀来构造n-gram。例如,如果示例n-gram构造器285接收后缀“thebigdog(那只大狗)”,则示例n-gram构造器285构造n-gram“the(那只)”,“thebig(那只大的)”和“thebigdog(那只大狗)”。示例n-gram构造器285通过迭代后缀中以后缀的第一项开始的项的组合来创建n-gram。在本文公开的示例中,示例n-gram构造器285不将n-gram“big(大)”、“bigdog(大狗)”或“dog(狗)”标识为以后缀的第一个词开始的n-gram(例如,因为它们不要以“the”开始)。虽然在图2中示出了实现n-gram计数器220的示例方式,但是在图2中所示的元件、过程和/或设备中的一个或多个可以以任何其他的方式被组合、划分、重新布置、省略、消除和/或实现。此外,示例n-gram计数控制器215、示例热词列表标识符220、示例热词检测器240、示例分区器245、示例后缀标识符250、示例文件系统255、示例后缀分组器260、示例后缀排序器265、示例散列创建器270、示例分配器275、示例计数器280、示例n元构造器285、和/或更一般地,图2的示例n-gram计数器200可以通过硬件、软件、固件和/或硬件、软件和/或固件的任意组合来实现。因此,例如,示例n-gram计数控制器215、示例热词列表标识符220、示例热词检测器240、示例分区器245、示例后缀标识符250、示例文件系统255、示例后缀分组器260、示例后缀排序器265、示例散列创建器270、示例分配器275、示例计数器280、示例n-gram构造器285、和/或更一般地,图2的示例n-gram计数器200可以由一个或多个(多个)模拟或数字电路、逻辑电路、(多个)可编程处理器、(多个)专用集成电路(asic)、(多个)可编程逻辑器件(pld)和/或(多个)现场可编程逻辑器件(fpld(s))来实现。当阅读本专利的任何标识或系统权利要求以涵盖纯粹的软件和/或固件实现时,示例n-gram计数控制器215、示例热词列表标识符220、示例热词检测器240、示例分区器245、示例后缀标识符250、示例文件系统255、示例后缀分组器260、示例后缀排序器265、示例散列创建器270、示例分配器275、示例计数器280、示例n-gram构造器285、和/或更一般地,图2的示例n-gram计数器200中的至少一者在此明确定义包括有形计算机可读存储设备或存储软件和/或固件的存储盘(诸如存储器、数字通用盘(dvd)、压缩盘(cd)、蓝光盘等)。又进一步地,图2的示例n-gram计数器200可包括除了在图2中所示的这些元件、过程和/或设备之外或代替在图2中所示的这些元件、过程和/或设备的一个或多个元件、过程和/或设备,和/或可包括所示的元件、过程和设备中的任何或所有中的超过一个。图3、图4、图5和/或图6中示出的流程图表示用于实现图2的n-gram计数器200的示例机器可读指令。在这些示例中,机器可读指令包括由处理器(诸如结合图7在以下所讨论的示例处理器平台700中所示的处理器712)执行的(多个)程序。程序可以被具体化在存储于有形计算机可读存储介质上的软件中,有形计算机可读存储介质诸如处理器712相关联的cd-rom、软盘、硬盘驱动、数字多功能盘(dvd)、蓝光盘或与存储器,但是全部和/或其部分程序可以替代地由除处理器712之外的设备执行,和/或可以体现在固件或专用硬件中。进一步地,尽管参考在图3、图4、图5和/或图6中所示出的(多个)流程图对示例程序进行了描述,但是可以可替代地使用实现示例n-gram计数器200的许多其他方法。例如,可以改变框的执行次序,和/或可以改变、消除或组合所描述的框中的一些框。如上所提及的,可以使用存储于有形计算机可读存储介质上的经编码的指令(例如,计算机和/或机器可读指令)实现图3、图4、图5和/或图6的示例过程,有形计算机可读存储介质诸如:硬盘驱动器、闪存、只读存储器(rom)、紧凑盘(cd)、数字多功能盘(dvd)、高速缓存、随机存取存储器(ram)和/或其他任何信息被存储达任何时长(例如:达扩展时间段、永久地、达简短的实例、用于临时缓冲和/或用于信息的高速缓存)的存储设备或存储盘。如在本文中所使用的,术语“有形计算机可读存储介质”被明确定义为包括任何类型的计算机可读存储设备和/或存储盘,并且排除传播的信号和传输媒介。如在此所使用的,“有形计算机可读存储介质”和“有形机器可读存储介质”可互换使用。附加地或可替代地,可使用存储在非瞬态计算机和/或机器可读介质上的经编码的指令(例如,计算机和/或机器可读指令)实现图3、图4、图5和/或图6的示例过程,非瞬态计算机和/或机器可读介质诸如硬盘驱动、闪存、只读存储器、紧凑盘、数字多功能光盘、高速缓存、随机存取存储器和/或任何其他信息被存储达任何时长(例如,达延长的时间段、永久地、达短暂的实例、用于暂时地缓冲、和/或用于信息的高速缓存)的存储设备或存储盘。如本文中所使用,术语“非瞬态计算机可读介质”被明确地限定为包括任何类型的计算机可读存储设备和/或存储盘,并且排除传播信号和传输媒介。如在此所使用的,当短语“至少”被用作权利要求前序部分中的连接术语时,其与术语“包括”是开放式的方式同样也是开放式的。图3是表示示例机器可读指令300的流程图,当该指令被执行时,使得图2的n-gram计数器标识语料库中出现的n-gram的计数。示例过程300始于在示例性n-gram计数控制器访问输入语料库框310。示例性n-gram计数控制器与热词列表标识符交互以标识输入语料库205框320的热词列表。在本文公开的示例中,基于输入语料库205的语言来标识热词列表。这样,示例热词列表标识符通过确定输入语料库205的语言并选择用于所标识的语言的列表(例如,预定义列表)来标识输入语料库的热词。然而,可以以任何其他方式标识示例热词列表,例如,确定在输入语料库中出现最频繁的词的列表(例如,在输入语料库中出现超过阈值次数的词(在语料库中出现超过1000次的词)、出现输入语料库的阈值百分比的词(出现超过5%的词)、输入语料库中出现的词的最高百分比(前5%)等)。示例n-gram计数控制器215在集群上发起具有热词提取作业的后缀σ(框330)。在图3所示出的示例中,语料库和热词列表都被提供作为集群的输入。在框330处发起的具有热词提取作业的示例后缀σ类似于上述后缀σ方法,除了在热词列表内具有后缀的n-gram从计算中省略并且单独输出之外。下面结合图4公开了利用热词后缀提取作业来执行后缀σ的示例方法。在图3所示的示例中,使用hadoopmultipleoutputs(hadoop多个输出)函数将热词列表内具有后缀的n-gram输出到文件系统255。然而,可附加地或替代地可以使用将n-gram输出到文件系统255的任何其他方法。结果,在热词列表中以后缀开始的n-gram在此时被跳过计数,并且不需要符合后缀σ方法中使用的两个不变量。集群230将由后缀σ标识的具有热词提取作业的n-gram的出现次数返回给n-gram计数控制器215。示例n-gram计数控制器215确定具有热词后缀提取作业的已发起的后缀σ的输出是否完成(框332)。如果示例n-gram计数控制器215在完成所发起的具有热词后缀提取作业的后缀σ时确定输出完成。然而,可以附加地或替代地使用任何其他指示符,诸如例如,指示与所发起的具有热词后缀提取作业的后缀σ相关联的映射任务完成(例如,其用作存储在文件系统255的热词列表内具有后缀的n-gram列表由具有有热词后缀提取作业的示例后缀σ输出完成)。如果输出未完成(框332返回否的结果),则示例n-gram计数控制器215等待直到输出完成。在一些示例中,n-gram计数控制器215可以在再次确定输出是否完成之前等待阈值时间量。一旦具有热词后缀提取作业的示例后缀σ的输出完成(框332返回是(yes)的结果),示例n-gram计数控制器215就收集由具有热词提取作业的后缀σ返回的n-gram的数量(框335)。如结合图1所指出的,该返回的n-gram的数量通常表示经映射的输入的95%。但是,此数量不反映以热词列表中的词开始的n-gram。如上所述,如果没有使用热词列表,由于由后缀σ方法应用的不变量,那些n-gram将被分配给单个节点以用于计数。此类方法不成比例地将工作分发给集群内的节点,从而导致延长的计算时间和集群资源的无效(例如,不均匀)利用。由具有热词提取作业的后缀σ返回的n-gram的收集到的(多个)计数可以稍后由n-gram计数控制器使用以形成输入语料库中出现的n-gram的总计数(见框390)。利用存储在文件系统255中的热词列表中具有后缀的每个n-gram列表,示例n-gram计数控制器215发起热词排序作业以在整个集群上均匀地分布“热前缀”(框350)。下面结合图5公开了在所述节点的每一个节点处实现热词排序作业的示例方法。在图3所示出的示例中,热词排序作业不遵循后缀σ方法的第一不变量。然而,应用第二变量(反向词典编纂排序),并且执行简单的词计数以将由每个节点231、节点232、节点233返回的后缀的数量减少到出现在文件系统中的唯一后缀的列表。出现在文件系统255中的后缀列表的简化版本作为简化列表存储在文件系统255中。示例n-gram计数控制器215等待直到热词排序作业完成(框352)。存储在文件系统255中的简化列表不符合后缀σ方法的第一不变量。也就是说,在热词排序作业期间可能已经由不同节点处理以相同热词开始的一些后缀(例如,由第一节点处理的简化列表的第一部分可以包括在由第二节点处理的简化列表的第二部分中包括的后缀)。在完成热词排序作业时(例如,当框352返回“是(yes)”的结果时),示例性n-gram计数控制器215发起热词后缀σ作业(框370)。尽管前一个作业的输出不符合不变量的一个,意味着,以相同的“热词”开始的后缀将出现在此作业的不同处理块中,但是保持不变量的两个,意味着,它们都按词典编纂顺序排序的。当执行热词后缀σ作业时,集群230的示例节点231、节点232、节点233通过采用简化列表中的每个后缀的前缀,分发那些n-gram并执行简单的词计数以聚每个n-gram的出现次数。在执行热词后缀σ作业期间,示例n-gram计数控制器215收集由热词后缀σ作业标识的n-gram的(多个)计数(框371)(例如,以热词开始的n-gram的计数,该计数不是由后缀σ与框330的热词后缀提取作业标识的)。示例n-gram计数控制器215等待直到热词后缀σ作业完成(框372)。在完成热词后缀σ作业时(例如,当框372返回“是(yes)”的结果时),示例n-gram计数控制器215将不以热词开始的n-gram的n-gram(多个)计数(在框335中收集到的(多个)计数)与以热词开始的n-gram的n-gram(多个)计数(在框371中收集到的(多个)计数)组合,以形成输入语料库中的n-gram的总(多个)计数(框390)。图4是表示在图2的示例集群230的一个或多个节点231、节点232、节点233处执行具有热词提取作业的后缀σ的示例机器可读指令400的流程图。当示例性热词检测器240访问输入语料库的热词列表时,图4所示出示例的示例过程400开始(框405)。示例分区器245将输入的语料库进行分区(框410)。分区各自由集群230中的节点231、232、233来处理,以用于执行图4的映射归约作业的映射任务412。示例后缀标识符250标识分配给后缀标识符250在其上操作的节点231、节点232、节点233的分区内的后缀(框415)。示例热词检测器240确定后缀是否以热词列表中的热词开始(框420)。如果后缀以热词开始(框420返回“是(yes)”的结果),则示例后缀标识符250将后缀写入存储在文件系统255上的热词后缀的列表(框425)。在图4所示出的示例中,使用hadoopmultipleoutputs函数将后缀写入文件系统255。然而,可附加地或替代地可以使用将后缀写入到文件系统255的任何其他方法。写入文件系统255的后缀不在图4的示例指令400中进一步处理。这些后缀的处理稍后结合下面所公开的图5和/或图6来处理。如果后缀不以热词开始(框420返回“否”的结果),则示例后缀标识符250聚合后缀以用于进一步处理(框427)。示例后缀标识符250确定是否存在用于与热词列表中的词进行比较的附加后缀(框430)。如果存在附加后缀(框430返回“是”的结果),则重复框415到框430的过程,直到不存在附加的后缀(直到框430返回“否”的结果)。图4的具有热词提取作业的后缀σ前进至混洗任务框432。示例后缀分组器260根据它们的第一项(例如,它们的第一词条)对后缀进行分组(框435)。根据它们的第一项对后缀进行分组应用后缀σ方法的第一不变量。示例后缀排序器265以反向词典编纂顺序对经分组的后缀进行排序(框440)。以反向词典编纂顺序对经分组的后缀进行排序应用后缀σ方法的第二不变量。示例分配器275将经分组和经排序的后缀转发到节点(例如,与操作映射任务412的节点分开的节点,操作映射任务412的相同节点),以基于后缀的排序和分组进行归约(框441)。也就是说,以相同术语开始的每个后缀被发送到同一节点以进行归约。在归约任务442期间,示例计数器280(在归约器节点处操作)对以每个后缀开始的n-gram的数量进行计数(框445)。示例计数器280聚合并输出转发到该节点的所有后缀的n-gram的计数(框450)。实现具有热词提取作业的示例后缀σ的示例指令400然后终止,准备了不以热词列表中的词开始的n-gram计数。图5是表示在图2的示例集群230的一个或多个节点231、节点232、节点233处执行热词提取作业的示例机器可读指令500的流程图。在图5所示出的示例中,没有显示映射任务。在图5所示出的示例中,热词排序作业的映射任务是识别性任务。也就是说,映射任务简单地返回用于混洗任务508的作业的输入(例如,所访问的热词后缀列表)。当散列创建器270访问存储在文件系统255上的热词后缀列表时(框505),图5的所示出示例的示例过程500开始(参见框425)。在混洗任务508期间,示例散列创建器270计算所访问的热词后缀列表中的每个热词后缀的散列表示(框509)。在本文公开的示例中,散列标识集群230中应该被分发热词后缀的节点。示例分配器275基于热词后缀列表中的热词的经计算的散列来分发对热词后缀的处理(例如,使用散列来标识将执行缩减任务518的节点)(框510)。在图5所示出的示例中,创建热词的散列确保了在集群230的节点231、节点232、节点233之间的热词后缀列表中存在后缀的均匀分布。示例后缀排序器265以反向词典编纂顺序对经分发的后缀进行排序(框515)。以反向词典编纂顺序对经分组的后缀进行排序应用后缀σ方法的第二不变量,并确保按顺序向执行缩减任务518的节点提供所有类似的后缀。当按顺序向节点提供键值对时,键值对作为键提供,接着是相同键的多个值(对应于使用相同键排序的键值对中的每一个键值对)从而减少了与传输键值对相关的任何传输开销。示例后缀标识符250标识分发给执行归约任务的节点的后缀(框520)。示例计数器280聚合所标识的后缀的相关联的计数(框525)。示例计数器280输出所标识的后缀和所聚合的计数(框530)。在图5所示出的示例中,如果输入后缀表示后缀“thebigdog”出现5次和6次,则示例计数器280将输出键值对“键:'thebigdog'值:11”。示例后缀标识符250确定是否向执行缩减任务518的节点231、节点232、节点233提供了附加(多个)后缀(框540)。如果提供了附加后缀(框540返回“是”的结果),则重复520到540的操作,直到已经聚合并输出所有后缀的相关联的计数。由图5的示例指令500实现的示例热词排序作业然后终止。结果,示例热词排序作业的输出是与后缀及其出现次数相对应的键值对的列表。计算每个后缀的出现次数减少了后续后缀σ词计数作业中要读取的数据量。此类减少更及时地完成了集群的节点之间的数据传输,因为减少的列表被传输而不是包括重复数据的列表。下面的表1表示图5的示例指令500的示例输出:键(后缀)值thebigdog11次出现thebigcat8次出现表1上面的表1包括两列:键列和值列。在表1所示出的示例中,键列表示后缀,并且值列表示热词后缀的列表中的后缀的出现次数(例如,如在框505处访问的)。经由下面结合图6描述的后缀σ词计数作业进一步处理示例表1。图6是表示使用图2的示例集群230的一个或多个节点231、节点232、节点233处的经排序的热词后缀来执行后缀σ词计数统计作业的示例机器可读指令600的流程图。当示例后缀标识符访问由在图5的框530处的示例计数器280输出的经排序的和经简化的后缀时,图6的示例程序600开始。示例n-gram构造器285使用后缀中的每一个后缀的一个或多个前缀来构造n-gram(框620)。继续以上表1的示例,假设操作图6的映射任务615的第一节点231接收后缀“那只大狗”。类似地,假设操作映射任务615的第二节点232接收后缀“thebigcat”。第一节点231的示例n-gram构造器285构造n-gram“the(那个)”、“thebig(那只大的)”和“thebigdog”。第二节点232的示例n-gram构造器285构造n-gram“the(那个)”、“thebig(那只大的)”和“thebigcat”。对于每个所构造的n-gram,n-gram构造器285应用与原始后缀关联的值。按照表1的示例,源自“thebigdog”的n-gram“the”接收值为11,而源自“thebigcat”的n-gram“the”接收值为8(分别地对应于“thebigdog”和“thebigcat”的出现次数)。在混洗任务625处,基于n-gram的散列来分发所构造的n-gram(框630)。结果,像n-gram一样将被分发到执行缩减任务的同一节点635。例如,n-gram“the”(来自“thebigdog”)将被分发到与n-gram“the”(来自“thebigcat”)相同的节点。同样地,n-gram“thebig”(来自“thebigdog”)将被分发到与n-gram“thebig”(来自“thebigcat”)相同的节点(可能是也可能不是与n-gram“the”相同的节点)。n-gram“thebigdog”和“thebigcat”可能不会分发到同一节点(但如果它们的散列值表明它们应该分布到同一节点,则可能是这样)。例如,将n-gram“the”传输到第一节点、将n-gram“thebig”传输到第二节点、将n-gram“thebigdog”发送到第三节点、以及将n-gram“thebigcat”传输到第四节点。第一节点、第二节点、第三节点和/或第四节点中的任何一个节点可以是相同的节点。利用分发给执行缩减任务635的节点的类似n-gram,执行归约任务635的每个节点的示例计数器280执行简单的词计数以聚合每个n-gram的出现次数(框640)。例如,第二节点的示例计数器280,该计数器280接收源自“thebigdog”和“thebigcat”的n-gram“thebig”,简单地标识“thebig”是相同的,并且具有计数为19(对应于来自“thebigdog”中的“thebig”出现次数为11,以及来自“thebigcat”中的“thebig”出现次数为8)。示例计数器280输出(多个)n-gram及其对应的(多个)计数(框650)。然后图6的示例流程600终止。在一些示例中,示例过程300继续进行(参见框390)以将n-gram及其对应的框650处的计数输出(对应于以热词开始的后缀)与n-gram及其对应的框330处的计数输出组合(参见图3),以形成输入语料库中出现的所有n-gram的总n-gram的计数(多个)。图7是示例处理器平台700的框图,该处理器平台能够执行图3、图4、图5和/或图6的指令以便实现图2的示例n-gram计数器200。处理器平台700可以是,例如,服务器、个人计算机、移动设备(例如,手机、智能电话、诸如ipadtm的平板电脑)、互联网家电、游戏控制台、或任何其他类型的计算设备。所示示例的处理器平台700包括处理器712。所示示例的处理器712是硬件。例如,处理器712可以由来自任何期望的族或制造商的一个或多个集成电路、逻辑电路、微处理器或控制器来实现。所示示例的处理器712包括本地存储器713(例如,高速缓存)并执行指令以实现示例n-gram计数控制器215、示例热词列表标识符220、示例热词检测器240、示例分区器245、示例后缀标识符250、示例后缀分组器260、示例后缀排序器265、示例散列创建器270、示例分配器275、示例计数器280、和/或示例n-gram构造器285。所示示例的处理器712经由总线718与包括易失性存储器714和非易失性存储器716的主存储器通信。易失性存储器714可由同步动态随机存取存储器(sdram)、动态随机存取存储器(dram)、rambus动态随机存取存储器(rdram)和/或任何其他类型的随机存取存储器设备来实现。非易失性存储器716可由闪存和/或任何其他期望类型的存储器设备来实现。对主存储器714、716的访问是由存储器控制器控制的。所示示例的处理器平台700还包括接口电路720。接口电路720可以由任何类型的接口标准(诸如,以太网接口、通用串行总线(usb)和/或pci快速接口)来实现。在所示的示例中,将一个或多个输入设备722连接到接口电路720。(多个)输入设备722准许用户将数据和命令输入到处理器712中。(多个)输入设备可以由例如音频传感器、麦克风、相机(静止或视频)、键盘、按钮、鼠标、触摸屏、轨迹板、轨迹球、等位点(isopoint)和/或语音识别系统来实现。一个或多个输出设备724也可以连接到所示示例的接口电路720。输出设备724可以例如由显示设备(例如,发光二极管(led)、有机发光二极管(oled)、液晶显示器、阴极射线管显示器(crt)、触摸屏、触觉输出设备、打印机和/或扬声器)来实现。因而,所示示例的接口电路720通常包括图形驱动卡、图形驱动器芯片或图形驱动处理器。所示示例的接口电路720还包括通信设备(诸如发射机、接收机、收发机、调制解调器和/或网络接口卡)以便促进经由网络726(例如,以太网连接、数字用户线(dsl)、电话线、同轴电缆、蜂窝电话系统等)与外部机器(例如,任何种类的计算设备)的数据交换。所示示例的处理器平台700还包括用于存储软件和/或数据的一个或多个大容量存储设备728。这种大容量存储设备728的示例包括软盘驱动、硬盘驱动、紧凑盘驱动、蓝光盘驱动、raid系统和数字多功能盘(dvd)驱动。在一些示例中,示例大容量存储设备728实现示例文件系统255。图3、图4、图5和/或图6的编码指令732可以存储在大容量存储设备728中、在易失性存储器714中、在非易失性存储器716中和/或在如cd或dvd的可移除的有形计算机可读存储介质上。从上文将可以理解,上述公开的方法、设备和制品使得能够比现有已知方法更有效地计数数据(例如,文本语料库)中出现的n-gram。例如,通过分割以频繁出现的“热词”开始的n-gram的处理,计算在集群内的节点之间更均匀地分布,从而更有效地使用处理资源。此外,因为更有效地利用资源,所以可以更频繁地执行n-gram的计数。更频繁的处理可以使得关于经处理的语料库实现更多最新统计信息。示例1包括用于标识出现在语料库中的n-gram的计数的设备,该设备包括热词检测器,用于标识频繁开始语料库中找到的后缀的词条;后缀标识符,用于标识语料库中的第一后缀和第二后缀,该后缀标识符,用于检测第一后缀以词条开始,以及第二后缀不以词条开始;以及n-gram计数控制器,用于指导节点的集群以执行第一计数算法以用于标识第一后缀中出现的n-gram的第一计数,该n-gram计数控制器,用于指导节点的集群以执行第二计数算法以用于标识第二后缀中出现的n-gram的第二计数,第二计数算法不同于第一计数算法。示例2包括示例1的设备,其中,节点的集群通过在集群中的第一数量的节点之间分发第二后缀来执行第二计数算法,节点的第一数量大于出现在第二后缀中的后缀的第二数量。示例3包括示例1-2中任一项的设备,其中,基于检测到的语料库的语言来标识频繁开始后缀的词条。示例4包括示例1-3中任一项的设备,其中,第一计数算法是后缀σ计数。示例5包括示例1-4中任一项的设备,其中,使用在经集群的计算环境内执行的mapreduce作业来执行第一计数算法。示例6包括示例1-5中任一项的设备,其中,为了执行第二计数算法,集群中的每个节点包括:后缀排序器,用于将第二后缀按反向词典编纂顺序进行排序;计数器,用于将第二后缀精简为后缀列表以及第二后缀中每个后缀的出现次数;n-gram构造器,用于构造n-gram,n-gram以后缀列表中每个后缀的前缀开始;该计数器用于聚合所构造的n-gram的计数以标识第二后缀中出现的n-gram的第二计数。示例7包括示例6的设备,其中,基于用于构造对应的n-gram的后缀的出现次数来聚合所构造的n-gram的计数。示例8包括示例1-7中任一项的设备,其中n-gram计数控制器进一步用于将第一计数与第二计数组合以形成语料库中的出现的n-gram的总计数。示例9包括标识语料库中出现的n-gram计数的方法,该方法包括标识频繁开始语料库中找到的后缀的词条,标识语料库内的第一后缀和第二后缀,检测以词条开始的第一后缀以及不以词条开始的第二后缀,执行第一计数算法以标识第一后缀中出现的n-gram的第一计数,并执行第二计数算法以标识标识第二后缀中出现的n-gram的第二计数,第二计数算法与第一计数算法不同。示例10包括示例9的方法,其中,执行第二计数算法包括:在集群中的第一数量的节点之间分发第二后缀,节点的第一数量大于出现在第二后缀中的后缀的第二数量。示例11包括示例9-10中任一项的方法,其中,基于检测到的语料库的语言来标识频繁开始后缀的词条。示例12包括示例9-11中任一项的方法,其中,第一计数算法是后缀σ计数。示例13包括示例9-12中任一项的方法,其中,使用在经集群的计算环境内执行的mapreduce作业来执行第一计数算法。示例14包括示例9-13中任一项的方法,其中,通过以反向词典编纂顺序对第二后缀进行排序来执行第二计数算法,将第二后缀简化为后缀列表和第二后缀中的每个后缀出现次数,构造以后缀列表中每个后缀的前缀开始的n-gram,并聚合所构造的n-gram的计数以标识第二后缀中出现的n-gram的第二计数。示例15包括示例14的方法,其中,基于用于构造对应的n-gram的后缀的出现次数来聚合所构造的n-gram的计数。实施例16包括示例9-15中任一项的方法,进一步包括将第一计数与第二计数组合以形成语料库中出现的n-gram的总计数。示例17包括一种包括指令的非瞬态机器可读介质,当该指令被执行时,使得处理器至少用于:标识频繁开始语料库中找到的后缀的词条,标识语料库内的第一后缀和第二后缀,检测以词条开始的第一后缀以及不以词条开始的第二后缀,执行第一计数算法以标识第一后缀中出现的n-gram的第一计数,并执行第二计数算法以标识标识第二后缀中出现的n-gram的第二计数,第二计数算法与第一计数算法不同。示例18包括示例17的机器可读介质,其中,执行第二计数算法包括:在集群中的第一数量的节点之间分发第二后缀,节点的第一数量大于出现在第二后缀中的后缀的第二数量。示例19包括示例17-18中任一项的机器可读介质,其中,基于检测到的语料库的语言来标识频繁开始后缀的词条。示例20包括示例17-19中任一项的机器可读介质,其中,第一计数算法是后缀σ计数。示例21包括示例17-20中任一项的机器可读介质,其中,使用在经集群的计算环境内执行的mapreduce作业来执行第一计数算法。示例22包括示例17-21中任一项的机器可读介质,其中,当该指令被执行时,进一步使得机器用于:通过以反向词典编纂顺序对第二后缀进行排序来执行第二计数算法,将第二后缀精简为后缀列表和第二后缀中的每个后缀出现次数,构造以后缀列表中每个后缀的前缀开始的n-gram,并聚合所构造的n-gram的计数以标识第二后缀中出现的n-gram的第二计数。示例23包括示例22的机器可读介质,其中,基于用于构造对应的n-gram的后缀的出现次数来聚合所构造的n-gram的计数。实施例24包括示例17-23中任一项的机器可读介质,其中,当该指令被执行时,进一步使得机器用于:将第一计数与第二计数组合以形成语料库中出现的n-gram的总计数。示例25包括标识语料库中出现的n-gram计数的设备,该设备包括用于标识频繁开始语料库中找到的后缀的词条的装置,用于标识语料库内的第一后缀和第二后缀的装置,用于检测以词条开始的第一后缀以及不以词条开始的第二后缀的装置,用于执行第一计数算法以标识第一后缀中出现的n-gram的第一计数的装置,以及用于执行第二计数算法以标识标识第二后缀中出现的n-gram的第二计数的装置,第二计数算法与第一计数算法不同。示例26包括示例25的设备,其中,用于执行第二计数算法的装置包括:用于在集群中的第一数量的节点之间分配第二后缀的装置,节点的第一数量大于出现在第二后缀中的后缀的第二数量。示例27包括示例25-26中任一项的设备,其中,基于检测到的语料库的语言来标识频繁开始后缀的词条。示例28包括示例25-27中任一项的设备,其中,第一计数算法是后缀σ计数。示例29包括示例25-28中任一项的设备,其中,使用在经集群的计算环境内执行的mapreduce作业来执行第一计数算法。示例30包括示例25-29中任一项的设备,其中,用于通过以反向词典编纂顺序对第二后缀进行排序来执行第二计数算法的装置,用于将第二后缀简化为后缀列表和第二后缀中的每个后缀出现次数的装置,用于构造以后缀列表中每个后缀的前缀开始的n-gram的装置,以及用于聚合所构造的n-gram的计数以标识第二后缀中出现的n-gram的第二计数的装置。示例31包括示例30的设备,其中,基于用于构造对应的n-gram的后缀的出现次数来聚合所构造的n-gram的计数。实施例32包括示例25-31中任一项的设备,进一步包括:用于将第一计数与第二计数组合以形成语料库中出现的n-gram的总计数的装置。虽然本文中已经公开了某些示例方法、装置和制品,但是本专利的覆盖范围不限于此。相反地,本专利覆盖了完全落入本专利权利要求书的范围内的所有方法、装置和制品。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1