可以考虑至少3种类型的n-gram来表示文本文档:
我不清楚哪一个应该用于给定的任务(聚类,分类等)。我在某处读到,当文字包含拼写错误时,字符级别的n-gram比字级n-gram更受欢迎,因此“Mary loves dogs”仍然类似于“Mary lpves dogs”。
是否还有其他标准需要考虑选择“正确”的表示形式?
答案 0 :(得分:6)
<强>评估即可。选择表示的标准是无论什么工作。
确实,字符级别(!=字节,除非你只关心英语)可能是最常见的表示形式,因为它对于拼写差异很强大(如果你看历史,它不需要是错误;拼写变化)。因此,对于拼写纠正目的,这很有效。
另一方面,Google Books n-gram查看器在其图书语料库中使用单词级别n-gram。因为他们不想分析拼写,而是随着时间的推移逐渐使用术语;例如“儿童保育”,其中的单词并不像他们的组合那样有趣。这被证明在机器翻译中非常有用,通常被称为“冰箱磁铁模型”。
如果您不处理国际语言,字节也可能有意义。
答案 1 :(得分:2)
我会彻底丢弃与文本相关的任务的字节级n-gram,因为字节不是任何有意义的表示。
在剩余的2个级别中,字符级n-gram将需要更少的存储空间,并且随后将保留更少的信息。它们通常用于诸如语言识别,作者识别(即指纹识别),异常检测等任务中。
对于单词级n-gram,它们可能具有相同的用途,而且更多,但它们需要更多的存储空间。例如,你需要高达几千兆字节来在内存中表示一个有用的英语单词3-gram子集(用于通用任务)。然而,如果你需要使用一组有限的文本,单词级n-gram可能不需要那么多的存储。
至于错误的问题,足够大的单词n-gram语料库也将包括并代表它们。此外,还有各种平滑方法来处理稀疏性。
n-gram的另一个问题是它们几乎永远无法捕获整个所需的上下文,所以只会近似它。
您可以在经典Foundations of Statistical Natural Language Processing中阅读有关n-gram的更多信息。
答案 2 :(得分:2)
我在小字符串上使用字符ngrams,对于较大的文本块的文本分类使用单词ngrams。问题是哪种方法可以保留您或多或少需要的上下文...
一般来说,对于文本的分类,单词ngram将有助于词义消歧,其中字符ngram很容易混淆,你的功能可能完全不明确。对于无监督的群集,它将取决于您希望群集的一般程度,以及您希望文档收敛的基础。在相当大的语料库中,我发现词干,删除词和单词双字母在无监督的聚类任务中运行良好。
字符ngram对于小字符串的模糊字符串匹配很有用。
我喜欢将一组克作为向量,并想象将向量与您所拥有的克数进行比较,然后问问自己,您所比较的内容是否保持足够的上下文来回答您要回答的问题。
HTH