考虑到计算它们的计算开销,我只是想知道 n-gram (n>3) (及其出现频率)的用途是什么。是否有任何应用程序中二元组或三元组根本不够用?
如果是这样,n-gram 提取的最新技术是什么?有什么建议么?我知道以下几点:
考虑到计算它们的计算开销,我只是想知道 n-gram (n>3) (及其出现频率)的用途是什么。是否有任何应用程序中二元组或三元组根本不够用?
如果是这样,n-gram 提取的最新技术是什么?有什么建议么?我知道以下几点:
我不熟悉这里列出的大量标签,但是 n-gram(抽象概念)通常与统计模型相关。因此,这里有一些不仅限于二元组和三元组的应用程序:
这些是我想不到的,但维基百科上列出的还有更多。
至于“最先进的”n-gram 提取,不知道。N-gram“提取”是一种临时尝试,旨在加速某些过程,同时仍保持 n-gram 样式建模的好处。简而言之,“最先进的”取决于您要做什么。如果您正在查看模糊匹配或模糊分组,这取决于您匹配/分组的数据类型。(例如街道地址将与模糊匹配与名字非常不同。)
一种考虑高阶 n-gram 的(非常规)方法可以通过连接到非归一化自相关函数来完成,即信号与其自身的相关性。2-gram 语料库将测量单词与单个单词的“时间”滞后的相关性,而 3-gram 可以为我们提供两步“时间”滞后的信息。高阶 n-gram 给出了特定语料库(无论是Moby Dick还是人类 DNA)的概率分布的度量。这样,如果一个 n-gram 与空期望值不同,那么对于 n 的值就有有用的统计信息。
我认为您的问题提出的不太正确:Ngrams 是一种工具,而不是要解决的问题,因此 ngrams 中没有“最先进的技术”。正如@Hooked 指出的那样,ngram 是一种自相关函数(或“自回归函数”)。所以你真正想知道的是,如果有任何问题,最先进的解决方案涉及长 ngram。
对于拟合金融或天气模型或语音识别等数值应用,您肯定会使用维度> 3的向量。例如,自回归隐马尔可夫模型拟合最后n次测量的分段函数,如果过去的状态与预测未来相关,则n可以适度大。
但是您所有的示例都涉及单词 ngram,我想不出任何发现n > 3在该领域有用的工作。我不认为这是计算成本或找到足够训练数据的问题:语言中的表面自相关似乎在 3 个单词左右后逐渐消失。随机示例:本文试图从基于 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”,你会发现大量的参考资料。
如果您的数据集非常大,您也可以使用 n>3 语言模型。