N-grams简介:N-grams是什么以及我们用它干什么

在这篇文章中,我将讨论N-gram,一种在自然语言处理(又名NLP)中建立的概念。首先,让我们看看“N-gram”这个词的含义。含义非常简单,N-gram就是一个N个词的序列。例如,让我们看看以下示例:

  1. San Francisco (is a 2-gram)

  2. The Three Musketeers (is a 3-gram)

  3. She stood up slowly (is a 4-gram)

你经常看到这三个N-gram中的哪一个?可能是“San Francisco”和“The Three Musketeers”。另一方面,你可能没有经常看到“She stood up slowly”。基本上,“She stood up slowly”是一个不像例句1和2那么常见的N-gram的例子。


现在,如果我们为一个N-gram的出现可能性或这一个单词在一些单词后面出现的概率分配一个概率值,那么它可能非常有用。为什么?

首先,它可以帮助决定哪些N-gram可以组合在一起形成单个实体(例如“San Francisco”可以作为一个单词组合在一起,“high school”也作为一个单词出现)。

它还可以帮助进行下一个单词的预测。假设你有部分句子“Please hand over your”。然后,下一个单词更可能是“test”或“homework”或“paper”而不是“school”。

它还可以帮助进行拼写错误更正。例如,如果你知道“coffee”这个词在“drink”之后出现的概率很高,而且对于“cofee”和“coffee“,他们之间字母重叠的概率更高”,则可以将句子“drink cofee”改为“drink coffee”。

如你所见,分配这些概率在NLP领域中具有巨大的潜力。


现在我们理解了这个概念,我们可以用它来构建N-gram模型。基本上,N-gram模型基于其前N-1个单词的出现概率来预测第N个单词的出现概率。所以我们在这里回答这个问题 - 我们应该追溯多少个词序列中的单词来预测下一个词?例如,一个二元模型(N = 2)基于其前一个单词的出现概率来预测下一个单词(在这种情况下为N-1 = 1)。类似地,三元模型(N = 3)基于其前两个单词(在这种情况下为N-1 = 2)预测下一个单词的出现。


让我们看一种为单词序列中下一个出现的单词分配概率的方法。首先,我们需要一个非常大的英语句子样本(称为语料库)。

由于只是举例说明,我们只考虑一个非常小的句子样本,但在实际情况中,语料库将非常大。

假设我们的语料库包含以下句子:

  1. He said thank you.

  2. He said bye as he walked through the door.

  3. He went to San Diego.

  4. San Diego has nice weather.

  5. It is raining in San Francisco.

让我们假设一个二元模型。因此,我们将仅根据其前一个词找到下一个单词的概率。一般来说,我们可以说这个概率是(前一个单词wp出现在后一个单词wn之前的次数)/(前一单词wp出现在语料库中的总次数)=

 (Count (wp wn))/(Count (wp))


让我们以一个例子来说明:

为了找到单词“thank”后面的单词“you”的概率,我们可以将其写为P(you | thank),这是一个条件概率。
这等于:

=(No. of times “Thank You” occurs) / (No. of times “Thank” occurs) 
= 1/1 
= 1

在上面的语料库中 ”thank you“出现的次数为一次,”thank“出现的次数也为一次,所以是1/1。

我们可以肯定地说,每当“thank”发生时,它后面将紧跟“you”(这是因为我们已经训练了一组只有五个句子的语料库而且“thank”只在“thank”的上下文中发生过一次) 。


让我们再看一个前一个词出现在不同语境中的情况的例子。

让我们计算“San”之后“Diego”这个词的概率。我们想求P (Diego | San)。这意味着我们试图找到”San“的下一个单词为“Diego”的概率。我们可以这样做:

=(No of times “San Diego” occurs) / (No. of times “San” occurs) 
= 2/3 
= 0.67

这是因为在我们的语料库中,前三个“San”中的一个之后是“Francisco”。所以P(Francisco | San)= 1/3。
在我们的语料库中,只有“Diego”和“Francisco”出现在“San”之后,概率分别为2/3和1/3。

因此,如果我们想要根据我们的语料库建立一个”下一个单词预测软件“,并且用户输入“San”,我们将提供两个选项:“下一个单词最有可能是”Diego”,而不太可能是“Francisco”。


通常,bigram模型(二元模型)运行良好,可能没有必要使用trigram模型或更高的N-gram模型。


这是对N-gram的基本介绍。如需进一步阅读,请查看参考资料:https://web.stanford.edu/~jurafsky/slp3/4.pdf



评论