我在SO上发现了上一个问题:N-grams: Explanation + 2 applications。 OP给出了这个例子并询问它是否正确:
Sentence: "I live in NY."
word level bigrams (2 for n): "# I', "I live", "live in", "in NY", 'NY #'
character level bigrams (2 for n): "#I", "I#", "#l", "li", "iv", "ve", "e#", "#i", "in", "n#", "#N", "NY", "Y#"
When you have this array of n-gram-parts, you drop the duplicate ones and add a counter for each part giving the frequency:
word level bigrams: [1, 1, 1, 1, 1]
character level bigrams: [2, 1, 1, ...]
答案部分有人证实这是正确的,但不幸的是我有点失落,因为我没有完全理解所说的其他一切!我正在使用LingPipe并按照教程说明我应该选择7到12之间的值 - 但是没有陈述原因。
什么是良好的nGram值,在使用LingPipe等工具时应该如何考虑?
编辑:这是教程:http://cavajohn.blogspot.co.uk/2013/05/how-to-sentiment-analysis-of-tweets.html
答案 0 :(得分:31)
N-gram只是您可以在源文本中找到的相邻单词或长度为 n 的字母的所有组合。例如,给定单词fox
,所有2克(或“双字母”)都是fo
和ox
。您还可以计算单词边界 - 这会将2-gram列表扩展为#f
,fo
,ox
和x#
,其中#
表示一个词边界。
您可以在单词级别执行相同操作。例如,hello, world!
文字包含以下单词级别的双字母:# hello
,hello world
,world #
。
n-gram的基本观点是它们从统计的角度捕捉语言结构,就像字母或单词可能跟随给定的一样。 n-gram越长( n 越高),您需要处理的上下文越多。最佳长度实际上取决于应用 - 如果你的n-gram太短,你可能无法捕捉到重要的差异。另一方面,如果它们太长,你可能无法捕捉到“一般知识”,只能坚持特定情况。
答案 1 :(得分:27)
来源:http://recognize-speech.com/language-model/n-gram-model/comparison
答案 2 :(得分:1)
n-gram是n-tuple或n个单词或字符组(克语,用于语法片段),它们彼此相继。因此,你的句子中的单词中的n为3,就像“我活着”,“我住在”,“住在纽约”,“在纽约#”。这用于创建单词彼此跟随的频率的索引。您可以在Markov Chain中使用此功能来创建与语言类似的内容。当您填充单词组或字符组的分布映射时,您可以将它们与输出接近自然的概率重新组合,n-gram的时间越长。
数字过高,输出将是原始单词副本的单词,数字太低,输出会太乱。