【问题标题】:When are n-grams (n>3) important as opposed to just bigrams or trigrams?什么时候 n-gram (n>3) 比 bigrams 或 trigrams 更重要?
【发布时间】:2012-05-04 09:21:44
【问题描述】:

考虑到计算它们的计算开销,我只是想知道 n-gram (n>3) (及其出现频率)的用途是什么。是否有任何应用程序中二元组或三元组根本不够用?

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

【问题讨论】:

  • 这可能没有达到 Legend 正在寻找的信息水平,但是来自 Pycon 2012 的这段视频很好地解释了在 python 中计算 n-gram 的基础知识(并使用它们来构建搜索引擎):pyvideo.org/video/715/building-a-python-based-search-engine。对于任何偶然发现这个问题的人。
  • 计算 ngram 的“计算开销”可以忽略不计:您可以通过语料库一次性完成。即使存储高阶 ngram 也不是什么大问题。真正的代价是,对于较大的 n,您需要越来越大的语料库来克服稀疏问题。
  • @alexis:如果您能提供更多信息,那就太好了。具体来说,与稀疏问题有关的任何研究表明“计算 n-gram 的计算开销可以忽略不计”?谢谢。
  • @alexis:再次与您核对一下(关于我的评论)。谢谢。
  • @Legend,你看到下面我的回答了吗?

标签: nlp data-mining nltk n-gram


【解决方案1】:

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

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

这些是我想不到的,但列出的更多 on Wikipedia

就“最先进的”n-gram 提取而言,不知道。 N-gram“提取”是一种临时尝试,旨在加快某些过程,同时仍保持 n-gram 样式建模的好处。简而言之,“最先进的”取决于你想要做什么。如果您正在查看模糊匹配或模糊分组,这取决于您匹配/分组的数据类型。 (例如,街道地址与名字的模糊匹配会有很大的不同。)

【讨论】:

    【解决方案2】:

    一种(非常规)思考高阶 n-gram 的方法可以通过连接到非标准化的autocorrelation function 来完成,即信号与其自身的相关性。 2-gram 语料库将测量单词与单个单词的“时间”滞后的相关性,而 3-gram 可以为我们提供两步“时间”滞后的信息。高阶 n-gram 给出了特定语料库(无论是 Moby Dick 还是人类 DNA)的概率分布的度量。这样,如果一个 n-gram 与空期望值不同,那么对于 n 的值就有有用的统计信息。

    【讨论】:

      【解决方案3】:

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

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

      但是您的所有示例都涉及单词 ngram,我想不出任何发现 n > 3 在该领域有用的工作。我不认为这是计算成本或找到足够训练数据的问题:语言中的表面自相关似乎在 3 个单词左右后逐渐消失。随机示例:this article 试图根据基于 ngram 的信息内容重新解释 Zipf 定律。他们认为 n 最多为 4,但三元组计数的总体相关性最高。

      我并不是说n > 3 没有有用;但你认为它似乎没有出现太多的观察是有根据的。

      但请注意,计算文本中 ngram 的复杂性不是问题:如果您有一个长度为 L 的标记化语料库,您可以像这样收集语料库的所有 ngram:

          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 也是如此)。然后,您需要拟合复杂的统计模型,其计算成本取决于不同 ngram 的数量。

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

      【讨论】:

        【解决方案4】:

        除了Kaganar的回答:

        任何类型的stylometric analysis(例如,基于写作风格的作者分析,或者尝试检测文本的时代)都需要更长的 n-gram 来进行浅句法解析。通常此类方法辅以基于PCFGTAG 等的深度句法解析。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 应该是评论
          猜你喜欢
          • 2016-08-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-14
          • 1970-01-01
          • 2013-10-06
          • 1970-01-01
          • 2016-10-03
          相关资源
          最近更新 更多