NLP概率图

面对越来越复杂的问题,传统的概率方法显得越来越力不从心。
概率图模型用图表示变量相关关系的概率模型。

  1. 贝叶斯网络:有向无环图
  2. 马尔可随机场:无向图

马尔可夫链

  1. 马尔可夫过程:系统第T+1次结果只受第T次结果的影响。
  2. 马尔可夫链:实践和状态都离散的马尔可夫过程:
    马尔科夫链
  3. NLP应用:基于马尔可夫的语言模型(每个词只与它前面的某几个词有关)

马尔可夫链的3元组:

这里写图片描述

NLP概率图_第1张图片


隐马尔可夫模型(HMM)

NLP概率图_第2张图片
NLP概率图_第3张图片
NLP概率图_第4张图片
NLP概率图_第5张图片
NLP概率图_第6张图片
NLP概率图_第7张图片

NLP概率图_第8张图片
NLP概率图_第9张图片
NLP概率图_第10张图片
NLP概率图_第11张图片


使用Python对隐马尔科夫模型实例求解

#HMM_weather
import numpy as np
startP = np.array([0.63,0.17,0.20])     #初始状态 分别为晴天、阴天、雨天的概率分布

trans_P = np.array([[0.5,0.375,0.125],  #状态转移矩阵
                    [0.25,0.125,0.625], #4.7
                    [0.25,0.375,0.375]])

emitP = np.array([[0.6,0.20,0.05],       #发射(输出)概率矩阵
                  [0.25,0.25,0.25],      #4.8混淆矩阵
                  [0.05,0.10,0.50]])
#第一天(初始)天气预测:初始状态乘以发射概率
#第二天天气预测:前一状态乘以状态转移矩阵再乘以发射概率
#第三天天气预测:前一状态乘以状态转移矩阵再乘以发射概率
#当前时刻状态(隐状态)由上一时刻状态(转移概率已定)和发射(输出)概率决定


#第一天天气(第一天观测状态为干旱)预测概率=初始状态*发射概率矩阵
state1emit = startP*emitP[:,0]

#第二天前一状态*状态转移矩阵(第一天天气预测概率*转移概率矩阵)(np.dot:矩阵乘法)
state2_mid = np.dot(state1emit,trans_P) 

#第二天天气(第二天观测状态为干燥)预测概率
state2emit = state2_mid*emitP[:,1]

state3_mid = np.dot(state2emit,trans_P)  #第二天天气预测概率乘以转移概率矩阵
state3emit = state3_mid*emitP[:,2]       #第三天天气预测概率

#第一天天气值
#第二天天气值
#第三天天气值
# argmax()取最大参数位置
state1 = state1emit.argmax()
state2 = state2emit.argmax()
state3 = state3emit.argmax()

print(state1emit)
print(state2emit)
print(state3emit)

print(state1,state2,state3)

Viterbi算法

NLP概率图_第12张图片
NLP概率图_第13张图片
NLP概率图_第14张图片
NLP概率图_第15张图片

使用Python运用Viterbi算法求解问题

# viterbi_weathaer
import numpy as np
# obs:   观察状态
# states:真实(隐)状态
# startP:初始状态/概率
# transP:转移概率(隐状态)
# emitP :发射(输出)概率
startP = np.array([0.63,0.17,0.20])      #初始状态
transP = np.array([[0.5, 0.375, 0.125],  #状态转移矩阵
                    [0.25, 0.125, 0.625],
                    [0.25, 0.375, 0.375]])

emitP = np.array([[0.6, 0.20, 0.05],     #发射(输出)概率矩阵
                  [0.25, 0.25, 0.25],
                  [0.05, 0.10, 0.50]])


state1emit = startP*emitP[:,0]   #第一天天气预测概率
#运用列表推导式
#使用np.array将列表转化为数组
state2emit = np.array([max(state1emit*transP[:,i])*emitP[i,1] for i in range(3)])  #第二天天气预测概率
state3emit = np.array([max(state2emit*transP[:,i])*emitP[i,2] for i in range(3)])  #第三天天气预测概率


#第一天天气值
#第二天天气值
#第三天天气值
state1 = state1emit.argmax()
state2 = state2emit.argmax()
state3 = state3emit.argmax()
print(state1emit)
print(state2emit)
print(state3emit)
print(state1,state2,state3)

以上是HMM在天气预测上的运用实例


在中文分词中,由于上下文语境常常没有考虑在内,分词结果常不佳。
将Viterbi算法用在 HMM针对中文分词应用中可规避此类问题。
NLP概率图_第16张图片
NLP概率图_第17张图片
NLP概率图_第18张图片

你可能感兴趣的:(机器学习)