Nlp 什么时候n-gram(n>;3)比bigram或trigram更重要?

Nlp 什么时候n-gram(n>;3)比bigram或trigram更重要?,nlp,data-mining,nltk,n-gram,Nlp,Data Mining,Nltk,N Gram,我只是想知道,考虑到计算它们的计算开销,n-gram(n>3)(及其出现频率)的用途是什么。是否有任何应用程序仅仅使用bigram或trigram是不够的 如果是这样,n克提取的最新技术是什么?有什么建议吗?我知道以下几点: 我不熟悉这里列出的很多标签,但是n-gram(抽象概念)通常与统计模型相关。因此,这里的一些应用程序不仅仅局限于bigram和trigram: 压缩算法(尤其是PPM算法),其中克的长度取决于有多少数据可用于提供特定上下文 近似字符串匹配(例如,遗传序列匹配的B

我只是想知道,考虑到计算它们的计算开销,n-gram(n>3)(及其出现频率)的用途是什么。是否有任何应用程序仅仅使用bigram或trigram是不够的

如果是这样,n克提取的最新技术是什么?有什么建议吗?我知道以下几点:


我不熟悉这里列出的很多标签,但是n-gram(抽象概念)通常与统计模型相关。因此,这里的一些应用程序不仅仅局限于bigram和trigram:

  • 压缩算法(尤其是PPM算法),其中克的长度取决于有多少数据可用于提供特定上下文
  • 近似字符串匹配(例如,遗传序列匹配的BLAST)
  • 预测模型(例如名称生成器)
  • 语音识别(音素图用于帮助评估当前音素被识别的可能性)
这些都是我脑子里想不出来的,但还有更多的


至于“最先进的”n克提取法,还不清楚。N-gram“提取”是一种特殊的尝试,旨在加速某些过程,同时仍保持N-gram样式建模的优点。简言之,“最先进的技术”取决于你想做什么。如果您正在查看模糊匹配或模糊分组,这取决于您正在匹配/分组的数据类型。(例如,街道地址将与模糊匹配非常不同,而不是名字。)

一种(非传统的)思考高阶n-gram的方法可以通过连接到非规范化的,即信号与自身的相关性来实现。2克语料库可以测量单词与单个单词“时间”滞后的相关性,而3克语料库可以为我们提供两步“时间”滞后的信息。高阶n-gram给出了特定语料库(无论是白鲸还是人类DNA)概率分布的度量。这样,如果n-gram与空期望值不同,那么除了Kaganar的答案外,还有该n值的有用统计信息:


任何类型的语法分析(例如,基于写作风格的作者分析,或者尝试检测文本的时代)都需要更长的n-gram来进行浅层语法分析。通常,这些方法都是通过基于等的深层语法分析来补充的。

我认为你的问题提出得不太正确:Ngrams是一种工具,不是一个需要解决的问题,所以Ngrams中没有“最先进的技术”。正如@Hooked所指出的,ngram是一种自相关函数(或“自回归函数”)。因此,你真正想知道的是,是否有任何问题需要最先进的解决方案来解决

对于数值应用,如拟合金融或天气模型,或语音识别,您肯定会使用维度>3的向量。例如,自回归隐马尔可夫模型拟合最后n个测量值的分段函数,其中,如果过去的状态与预测未来相关,则n可以适度大

但你们所有的例子都涉及到ngrams这个词,我想不出有哪项研究发现n>3在这个领域有用。我不认为这是一个计算成本或找到足够的训练数据的问题:语言中表面的自相关似乎在3个单词左右后逐渐消失。随机示例:尝试根据基于ngram的信息内容重新解释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增长。因此,收集任何维度的ngrams都不是问题。但可能的ngrams数量迅速增加。举例来说,如果您区分32个字母标记(字母和一些标点符号类),则有1024个字母的双字母标记,但有1048576个四字母标记。要找到足够的文本填充频率表,您需要指数级的文本

对于单词ngrams来说,稀疏性问题更为严重,因为不仅你有超过32个不同的单词标记,而且词汇大小随着语料库的大小(缓慢)增加:著名的“长尾”属性。因此,无论您收集的语料库有多大,您的数据都将是稀疏的(即使对于小的n)。然后需要拟合复杂的统计模型,其计算成本取决于不同NGRAM的数量


因此,稀疏性在word ngram应用程序中始终是一个问题(因此通常需要“平滑”)。如果你在谷歌上搜索“ngram sparsity”,你会发现大量的参考资料。

如果你的数据集非常大,你也可以使用n>3种语言模型。

这可能还没有达到Legend想要的信息水平,但是这段来自Pycon 2012的视频很好地解释了用python计算n-gram的基础知识(并将其用于构建搜索引擎):。对于任何其他在这个问题上遇到困难的人来说,“计算开销”计算Ngram的能力可以忽略不计:你可以在一次通过语料库的过程中完成。即使存储高阶Ngram也不是什么大问题。真正的成本是,对于更大的n,你需要一个越来越大的语料库来克服稀疏性问题。@alexis:如果你能提供更多的信息,那就太好了。特别是与Spar相关的信息任何研究表明“计算n-gram的计算开销可以忽略不计”?