NLP(III):n-gram语言模型
什么是n-gram语言模型
这一篇文章讲的非常好:自然语言处理中N-Gram模型介绍
使用nltk训练n-gram语言模型
这里我们训练一元、二元以及三元模型(unigram, bigram, trigram)。数据是上一节预处理过的推文。
请注意,n-gram模型是一个滑窗模型,因此在句首和句尾需要padding。
from nltk.lm.preprocessing import padded_everygram_pipeline
from nltk.lm import MLE
def trainNGramAddOneSmoothing(trainData,ngram):
# Input: a list of tweet sentences, each element is a list of tokens; n for ngram model
# Output: a n-gram model with add-one smoothing trained on your input data.
train, vocab = padded_everygram_pipeline(ngram, trainData)
lm = MLE(ngram)
lm.fit(train, vocab)
return lm
unigramFish = trainNGramAddOneSmoothing(preprocessedFishTrain, 1)
bigramFish = trainNGramAddOneSmoothing(preprocessedFishTrain, 2)
trigramFish = trainNGramAddOneSmoothing(preprocessedFishTrain, 3)
计算困惑度
接下来我们分析生成的模型,其中一个指标是模型相对于测试集的困惑度(perplexity)。使用nltk计算困惑度可以参考官方网站:NLTK::nltk.lm package。
def computePerplexity(model,testData):
# Input: your model; the testing data
# Output: average perplexity of the model on your testing data.
scoreSum =