当需要考虑超过两个或三个连续单词的组合时,n元语法(n>3)比仅使用二元组或三元组更为重要。

9

我想知道在计算n-gram时,包括n>3的使用频率时,考虑到计算开销,它们的用途是什么。是否存在一些应用程序,其中bigrams或trigrams并不足够?

如果有的话,n-gram提取的最新技术是什么?有什么建议吗?我已经了解了以下内容:


1
这可能不够满足Legend所寻找的信息水平,但是这个来自Pycon 2012的视频相当好地解释了如何在Python中计算n-grams(并使用它们构建搜索引擎):http://pyvideo.org/video/715/building-a-python-based-search-engine。对于其他任何偶然发现这个问题的人都有帮助。 - Wilduck
计算ngrams的“计算开销”是微不足道的:您可以通过一次遍历语料库来完成它。即使存储高阶ngrams也不是什么大问题。真正的成本在于,对于更大的n,您需要一个越来越大的语料库来克服稀疏性问题。 - alexis
@alexis:如果您能提供更多信息,那就太好了。具体来说,与稀疏性问题有关的任何研究,以及表明“计算n-gram的计算开销可以忽略不计”的内容。谢谢。 - Legend
@alexis:再次与您确认一下(关于我的评论)。谢谢。 - Legend
@Legend,你看到我下面的回答了吗? - alexis
@alexis:哎呀……抱歉!我可能错过了那个通知。感谢您的时间。 - Legend
5个回答

3
我认为您的问题没有提出得很正确:Ngrams是一种工具,而不是要解决的问题,因此在ngrams中没有“最先进的技术”。正如@Hooked所指出的那样,ngram是一种自相关函数(或“自回归函数”)。因此,您真正想知道的是是否存在某些问题,其最先进的解决方案涉及长ngrams。
对于数值应用程序,例如拟合金融或天气模型或语音识别,您肯定会使用维度> 3的向量。例如,自回归隐马尔可夫模型适合于上一个n个测量的分段函数,其中如果过去的状态与预测未来有关,则n可以相当大。
但是你提到的所有例子都涉及单词n元组,我想不出在该领域中发现n>3有用的任何工作。我认为这不是计算成本或找到足够的训练数据的问题:语言中的表面自相关似乎在3个单词左右就消失了。随机示例:this article试图从ngram-based信息内容的角度重新解释Zipf定律。他们考虑n高达4,但三元组计数的总体相关性最高。

我的意思不是说n>3没有用;但你观察到它似乎不经常出现是有根据的。

但请注意,对文本中的ngrams进行计数的复杂性不是问题:如果您拥有长度为L的分词语料库,可以像这样收集语料库中的所有ngrams:

    for i in range(0, L-n):
        tuple = corpus[i:i+n]
        ngrams[tuple] += 1

正如您所看到的,这仅需要O(L)步骤,即它在语料库大小上是线性的,并且不随n而增长。因此,收集任何维度的ngram都不是问题。但是可能的ngram数量迅速增加。举例来说,如果您区分32个字母标记(字母和一些标点符号类别),则有1024个字母二元组,但有1048576个四元组。要找到足够的数量以填充频率表,您需要指数级更多的文本。
对于单词ngram,稀疏性问题甚至更严重,因为不仅有比32个不同的单词令牌更多,而且词汇量随着语料库规模(缓慢地)增加:著名的“长尾”属性。因此,无论您收集多大的语料库,您的数据都将是稀疏的(即使对于小的n)。然后,您需要适合复杂的统计模型,其计算成本取决于不同ngrams的数量。
因此,在单词ngram应用中,稀疏性始终是一个问题(因此通常需要“平滑处理”)。如果您搜索“ngram稀疏性”,您会发现大量参考资料。

3

我对这里列出的标签不太熟悉,但是N-gram(抽象概念)通常与统计模型有关,因此以下是一些应用程序,不仅限于二元组和三元组:

  • 压缩算法(尤其是PPM变体),其中克拉姆的长度取决于提供特定上下文所需的数据量。
  • 近似字符串匹配(例如BLAST用于基因序列匹配)
  • 预测模型(例如名称生成器)
  • 语音识别(使用音素克拉姆来帮助评估当前音素识别可能性的概率)

以上是我想到的,但是还有更多内容在维基百科上列出。

至于“最先进的”N-gram提取,我不知道。 N-gram“提取”是一种试图加速某些过程同时仍保持N-gram样式建模优点的临时解决方案。简而言之,“最先进”的取决于您要做什么。如果您正在查看模糊匹配或模糊分组,则取决于您要匹配/分组的数据类型。(例如,街道地址将与名字不同,因此难以进行模糊匹配。)


3
一个(非传统的)思考高阶n-gram的方法是通过将其与未归一化的自相关函数联系起来,即信号与自身的相关性。 2-gram语料库将测量单词与单个单词的“时间”滞后的相关性,而3-gram可以为我们提供两个步骤的“时间”滞后的信息。 更高阶的n-gram给出了特定语料库的概率分布的度量(无论是白鲸还是人类DNA)。 这样,如果一个n-gram不同于零的期望值,则对于该n的值有有用的统计信息。

2
除了Kaganar的回答之外:
任何类型的样式分析(例如,基于写作风格的作者个人资料或尝试检测文本时代)都需要更长的n-gram进行浅层句法分析。通常,这些方法会结合基于PCFG、TAG等的深度句法分析。

0

如果你的数据集非常大,你也可以使用超过3个语言模型。


1
应该是一个注释。 - Robert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接