精通Python自然语言处理 2 :统计语言建模

代码

https://github.com/PacktPublishing/Mastering-Natural-Language-Processing-with-Python

1、理解单词频率

   词的搭配可以被定义为倾向于并存的两个或多个标识符的集合。如The United States 

   Unigram(一元语法)代表单一标识符:以下为Alpino语料库生成unigrams

import nltk
from nltk.util import ngrams
from nltk.corpus import alpino
alpino.words()
# unigrams = ngrams(alpino.words(), 1)
quadgrams = ngrams(alpino.words(), 4)
for i in quadgrams:
	print(i)

     bigram(二元语法)。首先需要搜索小写单词,把文本创建为小写单词列表后,然后创建BigramCollocation- Finder 实例。在nltk.metrics包中找到BigramAssocMeasures可用于在文本中查找bigrams:

# -*- coding: utf-8
import nltk
from nltk.collocations import BigramCollocationFinder
from nltk.corpus import webtext
from nltk.metrics import BigramAssocMeasures
from nltk.corpus import stopwords
# 添加消除停止词和标点符号的单词过滤器
set = set(stopwords.words('english'))
stops_filter = lambda w: len(w) < 3 or w in set 
# 转为小写
tokens = [t.lower() for t in webtext.words('grail.txt')]
words = BigramCollocationFinder.from_words(tokens)
words.apply_word_filter(stops_filter)
print(words.nbest(BigramAssocMeasures.likelihood_ratio, 10))

      为给定的文本开发MLE:最大似然估计(Maximum Likelihood Estimate)也被称为多元逻辑回归或条件指数分类器。在nltk.classify.maxent模块里,所有的概率分布被认为是与训练数据保持一致的。该模型用于指代两个特征,即输入特征(未加标签)和联合特征(加标签)。MLE用于生成freqdist,包含了文本中给定标识符出现的概率分布。参数freqdist由作为概率分布基础的频率分布组成。

     为了获取频率分布,可以使用最大似然估计。它基于各个标识符在频率分布中的频率来计算器概率。

     隐马尔科夫模型估计

2、在MLE模型上应用平滑

      平滑(Smoothing)用于处理之前未曾出现过的单词。因此,未知单词的概率为0 。为了解决这个问题,我们用了平滑。

       加法平滑:

       Good Turing平滑:是一种有效的平滑方法,这种方法提高了用于执行语言学任务的统计技术的性能,例如词义消歧、命名实体识别、拼写矫正、机器翻译等。此方法有助于预测未来对象的概率。

       Kneser Ney平滑:

       Witten Bell平滑:

3、为MLE开发一个回退机制

      Katz回退模型可以认为是一个具备高效生产力的n-gram语言模型,如果在n-gram中能够给出一个指定标识符的先前信息,那么该模型可以计算出其条件概率。

4、应用数据的插值以便获取混合搭配

       使用加法平滑模型bigram的局部是当我们处理罕见文本时就会回退到一个不可知的状态。

5、通过复杂度来评估语言模型

       NLTK中的nltk.model.ngram模块有一个子模块perplexity(text)。

6、在语言建模中应用Metropolis-Hastings算法

        在马尔科夫链(Markov Chain Monte Carlo, MCMC)中有多种关于后验概率的执行处理方法。一种方法是使用Mertorpolis-Hastings采样器。为了实现,需要标准的均匀分布、建议分布和与后验概率成正比的目标分布。

7、在语言处理中应用Gibbs采样法

       在Gibbs采样法的帮助下,可以通过从条件概率中采样建立Markov。


猜你喜欢

转载自blog.csdn.net/QFire/article/details/80484797