分词-概率图实现

分词-概率图实现

本文主要介绍分词的若干实现方法;

基本知识

概率图基本概念

概率图模型(Probabilistic graphical models)在概率模型的基础之上,使用了基于图的方法来表示概率分布(或者概率密度、密度函数),其主要由有向、无向两种模型结构。
在这里插入图片描述
静态贝叶斯网络中,主要由Naive Bayes、Logistic Regression等模型,将其在时间上延伸,即可得到动态贝叶斯网络;
动态贝叶斯网络主要由HMM模型,相对于Naive Bayes,其主要是多了一个时间上的维度和隐变量;
自然语言处理中的概率图演变
生成式模型:以 状态序列y决定观测序列x 为假设,针对联合分布p(x,y)进行建模,为全概率模型,所以其即可求解观测序列x的概率,也可求解状态序列y的概率;这类模型中一遍都有严格的独立假设,特征是事先给定的,且特征之间的关系可以直接体现在公式中。典型的模型有:n元语法模型、HMM、朴素贝叶斯;
判别式模型:以 观测序列x决定状态序列y 为假设,直接对后验概率p(y|x)进行建模,它从x中提取特征,学习模型参数,使得条件概率符合一定形式的最优。代表性的模型有:最大熵模型、CRF、SVM、MEMM(最大熵马尔可夫模型)

先验概率:所谓“先”,就是在事情之前,即在事情发生之前事情发生的概率。是根据以往经验和分析得到的概率。如P(x)
后验概率:事情已经发生了,事情发生可能有很多原因,判断事情发生时由哪个原因引起的概率。如P(y|x)

常用模型

朴素贝叶斯
(1)模型描述(贝叶斯公式/条件概率公式)
P ( y / x ) = P ( x y ) P ( x ) = P ( x / y ) P ( y ) P ( x ) P(y/x)= \frac{P(xy)}{P(x)}=\frac{P(x/y)P(y)}{P(x)} P(y/x)=P(x)P(xy)=P(x)P(x/y)P(y)
理解/例子:给定一段文本 x = [ x 1 , x 2 , … … ] x=[x_1,x_2,……] x=[x1,x2,],求解其类别 (如 情感分类 等) y = [ y 1 , y 2 … … ] y=[y_1, y_2……] y=[y1,y2]
(2)模型估计
极大似然估计:
根据训练语料,使用频率来近似概率,然后带入贝叶斯公式中;
输入文本 x x x,所以可以理解 P ( x ) P(x) P(x)为常数,求解
P ( y / x ) ∼ max ⁡ y ⊂ { y 1 , y 2 … } ( P ( x / y ) P ( y ) ) P(y/x)\sim\max_{y\subset\{y_1,y_2…\}}(P(x/y)P(y)) P(y/x)y{y1,y2}max(P(x/y)P(y))
而后者可以根据训练语料使用极大似然来估计概率(即使用频率估计概率),例子:
P ( x i / y 1 ) P(x_i/y_1) P(xi/y1):训练语料中 y 1 y_1 y1类中,词 x i x_i xi出现的频率;
P ( y 1 ) P(y_1) P(y1):训练语料中 y 1 y_1 y1占所有类别中的频率;

贝叶斯估计:
如果说某个词在训练语料中没有出现,可能会导致概率为0,这会导致后台概率的计算,所以需要对 P ( x i / y 1 ) P(x_i/y_1) P(xi/y1)进行平滑。简单理解,贝叶斯估计=极大似然估计+平滑算法;最简单的平滑算法,即为默认没出现过的词,其频数为1,当然还有一些复杂的平滑算法如拉普拉斯平滑等。

隐层马尔可夫(Hmm)
在这里插入图片描述
假设
假设1:一阶齐次马尔可夫假设( y t y_t yt只与 y t − 1 y_{t-1} yt1有关; y t y_t yt的分布与t无关,或者说不同时刻的 y t y_t yt是同分布的)
假设2:观测独立假设(给定 y t y_t yt x t x_t xt唯一确定,与 x t − 1 x_{t-1} xt1无关)
模型描述
{ π A B } \{\pi AB\} {πAB}
π \pi π:初始状态概率,即 P ( y 1 ) P(y_1) P(y1)
A:转移概率,即 P ( y 2 ∣ y 1 ) … P(y_2|y_1)… P(y2y1)
B:发射概率/观测概率,即 P ( x 1 ∣ y 1 ) … P(x_1|y_1)… P(x1y1)
基本问题
(1)概率计算:给定模型 λ = { π A B } \lambda=\{\pi AB\} λ={πAB}和观测序列 X = [ x 1 , x 2 … x T ] X=[x_1,x_2…x_T] X=[x1,x2xT],求解观测序列 P ( X / λ ) P(X/\lambda) P(X/λ)概率;
前向算法;
(2)参数估计:已知观测序列 X = [ x 1 , x 2 … x T ] X=[x_1,x_2…x_T] X=[x1,x2xT],估计模型 λ = { π A B } \lambda=\{\pi AB\} λ={πAB}参数,使得观测序列概率 P ( X / λ ) P(X/\lambda) P(X/λ)最大;
EM算法
(3)预测/解码问题:已知模型 λ = { π A B } \lambda=\{\pi AB\} λ={πAB}和观测序列 X = [ x 1 , x 2 … x T ] X=[x_1,x_2…x_T] X=[x1,x2xT],求解给定观测序列下,条件概率 P ( Y / X ) P(Y/X) P(Y/X)最大的状态序列。
Viterbi算法
总结/不足
HMM是为了简化计算量,进行了齐次马尔可夫假设和观测/条件独立假设,但是这并不是合理的。如观测独立假设,给定时刻t,状态y唯一确定观测x,这明显是不合理的。
例子:
分词使用4标签进行分裂,即每个字,均有一个标签:
s:start 表示单字词语
b:begin 表示多字词语的第一个字
m:middle 表示多字词语中间的字
e:end 表示多字词语中最后一个字

序号1234567
观测x
状态ysssbebe

考虑前2个字,给定状态 y 2 = s y_2=s y2=s的情况下,我们能说 x 2 x_2 x2唯一被确定吗?显然是不对的,很明显, x 2 x_2 x2还与 x 1 x_1 x1有关。
同理,齐次马尔可夫假设也是不合理的,在给定 y 5 = e y_5=e y5=e的情况下, y 4 y_4 y4只可能是b或者m,这说明 y t y_t yt与上文、下文均有关系。
求解过程如下:
由贝叶斯公式得
P ( Y ∣ X ) = P ( X Y ) P ( X ) = P ( X ∣ Y ) P ( Y ) P ( X ) P(Y|X)=\frac{P(XY)}{P(X)}=\frac{P(X|Y)P(Y)}{P(X)} P(YX)=P(X)P(XY)=P(X)P(XY)P(Y)
由于观测序列X是已知的,可以把它当作常数,得
P ( Y ∣ X ) ∼ P ( X ∣ Y ) P ( Y ) P(Y|X) \sim P(X|Y)P(Y) P(YX)P(XY)P(Y)
由一阶齐次马尔可夫假设可得
P ( Y ) = P ( y 1 y 2 … y 7 ) = P ( y 1 ) P ( y 2 ∣ y 1 ) P ( y 3 ∣ y 2 ) … P ( y 7 ∣ y 6 ) P(Y)=P(y_1y_2…y_7)=P(y_1)P(y_2|y_1)P(y_3|y_2)…P(y_7|y_6) P(Y)=P(y1y2y7)=P(y1)P(y2y1)P(y3y2)P(y7y6)
由观测独立假设得:
P ( X ∣ Y ) = P ( x 1 x 2 … x 7 ∣ y 1 y 2 … y 7 ) = P ( x 1 ∣ y 1 ) P ( x 2 ∣ y 2 ) … P ( x 7 ∣ y 7 ) P(X|Y)=P(x_1x_2…x_7|y_1y_2…y_7)=P(x_1|y_1)P(x_2|y_2)…P(x_7|y_7) P(XY)=P(x1x2x7y1y2y7)=P(x1y1)P(x2y2)P(x7y7)
由此可得:
P ( Y ∣ X ) ∼ P ( X ∣ Y ) P ( Y ) = P ( y 1 ) P ( x 1 ∣ y 1 ) P ( y 2 ∣ y 1 ) P ( x 2 ∣ y 2 ) … P(Y|X) \sim P(X|Y)P(Y)=P(y_1)P(x_1|y_1)P(y_2|y_1)P(x_2|y_2)… P(YX)P(XY)P(Y)=P(y1)P(x1y1)P(y2y1)P(x2y2)
即,给定x的情况下,y的概率可以用发射概率和转移概率来表示;
训练过程就是统计语料的过程:
转移概率 P ( x 1 ∣ y 1 ) P(x_1|y_1) P(x1y1)可通过统计字 y 1 y_1 y1所对应所有标签(s,b,m,e)的概率;
发射概率 P ( y 2 ∣ y 1 ) P(y_2|y_1) P(y2y1)可通过相邻标签之间的统计概率(ss,sb,sm,se……)
解码阶段则可以通过viterbi算法来进行求解:
viterbi本质是贪心思想,寻找最大路径/概率

最大熵马尔可夫模型(Memm)
在这里插入图片描述

memm打破了hmm的观测独立假设,给定 y t y_t yt x t x_t xt x t − 1 x_{t-1} xt1是有关的。(通过D划分来确定)
hmm是y决定x,memm是x决定y,注意箭头的方向;

条件随机场(CRF)
在这里插入图片描述
上图为链式条件随机场,我们平时遇到的一般是这种形式,在分词、词性标注、实体抽取中应用广泛;理论上的CRF远比链式CRF复杂,其打破了HMM的齐次马尔可夫假设,但是由于计算复杂,所以我们一遍使用简单的链式CRF。下文将链式CRF统称为CRF;
由图可见,状态序列之间是无向图,状态由其上下文确定,但是,链式CRF也仅仅考虑了上一个字和下一个字;

语言模型

分词-最大匹配(Max Matching)

主要有前向最大匹配和后向最大匹配2种,本节只介绍前向最大匹配;这种方法主要依赖词典来进行分词。
给定词典:
【“他”,“说”,“的”,“的确”,“确实”,“实在”,“在理”】
给定问题:对句子“他说的确实在理”分词;
求解思路:从前向后,针对序列中每个字,依次从词典种查找其最大匹配词;
结果:他/说/的确/实在/理
正确结果应为:他/说/的/确实/在理

思想:单纯依赖词典来进行分词;
缺点
(1)分词效果完全依赖词典,未考虑语义信息;

分词-有向无环图

分词的时候,如何考虑语义信息呢?
朴素的想法:对句子所有可能的分词罗列出来,选择概率最大的那个;
还是用上面的例子,其可能的分词有:
他/说/的/确实/在理
他/说/的确/实在/理
他/说/的确/实/在理
……
把所有可能的分词序列,可以一个有向无环图来表示:
分词-有向无环图

那么如何选择概率最大的分词序列呢?
给定:一堆训练语料(已经分好词)
算法步骤
(1) 统计语料中每个词的频率,并将其作为概率(最大似然估计)
(2) 计算每个可能分词序列的概率,取最大的概率的序列
求解
(1) 假设,经过统计分析得到其概率分布为:

的确确实实在在理
概率0.10.10.10.10.10.10.10.20.40.30.5

(2) 遍历其所有可能的路径,求解最大概率组合:
概率乘积太小,可进行log操作,乘积–>连加:
P(他/说/的/确实/在理)
P(他/说/的确/实在/理)
P(他/说/的确/实/在理)
……
遍历所有可能的路径,计算量较大,如上例子,其可能的路径组合有8种,如果句子较长,遍历其所有可能性,计算量会更大;

简化计算
动态规划(Viterbi),其本质是贪心思想,将大问题化解为小问题,将上述问题转换为求解概率最大路径问题。
在这里插入图片描述

问题:求解从1到8的概率最大路径 P m a x ( 8 ) P_{max}({8}) Pmax(8)
贪心思想:到达节点8,有2条路径:节点7+0.1和节点6+0.5;求解到达节点8的概率最大路径,则等价于max{到达节点7的最大路径+0.1,到达节点6的最大路径+0.5},即:
P m a x ( 8 ) = m a x { P m a x ( 7 ) + 0.1 , P m a x ( 6 ) + 0.5 } P_{max}({8})=max\{P_{max}(7)+0.1,P_{max}(6)+0.5\} Pmax(8)=max{Pmax(7)+0.1Pmax(6)+0.5}
同理,可以递推得到:
P m a x ( 7 ) = m a x { P m a x ( 6 ) + 0.1 , P m a x ( 5 ) + 0.3 } P_{max}({7})=max\{P_{max}(6)+0.1,P_{max}(5)+0.3\} Pmax(7)=max{Pmax(6)+0.1Pmax(5)+0.3}
P m a x ( 6 ) = m a x { P m a x ( 5 ) + 0.1 , P m a x ( 4 ) + 0.4 } P_{max}({6})=max\{P_{max}(5)+0.1,P_{max}(4)+0.4\} Pmax(6)=max{Pmax(5)+0.1Pmax(4)+0.4}
……

ViterBi算法伪代码:

node_prob=[]  # 计算每个节点的最大概率
node_pt=[]  # 记录该节点的最大概率 是由哪个节点进入的
node_prob.append(0)  # 节点1的概率为0
node_pt.append(1)  # 起始节点1
trans_score={"12":0.1,"23":0.1,"35":0.2 ……}  # 转移概率
node_income={"2":["1"],"3":["2"],……}  # 每个节点对应的输入节点
foreach(i in range(2: len(word_s)+1)): # 遍历序列,从节点2开始
	tmp_prob=[]  # 临时变量,记录到达节点i的所有路径(概率)
	foreach n_ in node_income(i)  # 每个字对应一个节点,遍历节点的所有输入节点
		tmp_prob.append(log(node_prob[n_]) + log(trans_score[n_ + str(i)]))  # 到达节点i的所有路径概率 = 起点概率 + 转移概率
	node_prob.append(max(tmp_prob)) # 节点i的最大概率
	node.pt.append(node_income(i).value()[index(max(tmp_prob))] )  # 到达节点i最大概率的输入节点

print("最大概率路径:")
print(set(node_pt))

缺点:求解最大概率路径,依赖的语料库中词语的分布,换句话说,如果语料库中“的确”、“实在”出现的频率高于“确实”、“在理”,那么使用这种方法分词仍然不对。

HMM 隐层马尔可夫模型

还是使用4标签(sbme)来进行分词,这属于解码问题,使用viterbi算法(动态规划):
问题:给定训练语料和观测序列 X = [ x 1 , x 2 … … X T ] X=[x_1,x_2……X_T] X=[x1,x2XT],求解其对应的状态序列,使得 P ( Y / X ) P(Y/X) P(Y/X)最大;
训练语料:标注好文本中每个字及其对应的标签(sbme),或者使用分好词的词典也可以;
求解:
P ( Y / X ) m a x = P ( X Y ) P ( X ) = P ( X / Y ) P ( Y ) P ( X ) P(Y/X)_{max}= \frac{P(XY)}{P(X)}=\frac{P(X/Y)P(Y)}{P(X)} P(Y/X)max=P(X)P(XY)=P(X)P(X/Y)P(Y)
y i ⊂ ( s , b , m , e ) , i = 1 , 2 , … T y_i\subset(s,b,m,e), i=1,2,…T yi(s,b,m,e),i=1,2,T
上述仍是贝叶斯定理,之前已经分析过来, P ( X ) P(X) P(X)是给定的观测序列,不论其对应的何种Y状态序列,其值不变,因此,
P ( Y / X ) m a x ∼ P ( X / Y ) P ( Y ) P(Y/X)_{max}\sim P(X/Y)P(Y) P(Y/X)maxP(X/Y)P(Y)
由于hmm模型是在Naive Bayes Model在时间序列上的延伸,同时结合HMM的网络结构图,由齐次马尔可夫假设可得
P ( Y ) = P ( y 1 y 2 y 3 … y T ) = P ( y 1 ) P ( y 2 / y 1 ) P ( y 3 / y 2 ) … P ( y T / y T − 1 ) P(Y)=P(y_1y_2y_3…y_T)=P(y_1)P(y_2/y_1)P(y_3/y_2)…P(y_T/y_{T-1}) P(Y)=P(y1y2y3yT)=P(y1)P(y2/y1)P(y3/y2)P(yT/yT1)
由观测独立假设可得:
P ( X / Y ) = P ( x 1 / y 1 ) P ( x 2 / y 2 ) P ( x 3 / y 3 ) … P ( x T / y T ) P(X/Y)=P(x_1/y_1)P(x_2/y_2)P(x_3/y_3)…P(x_T/y_T) P(X/Y)=P(x1/y1)P(x2/y2)P(x3/y3)P(xT/yT)
带入得:
P ( Y / X ) m a x ∼ P ( X / Y ) P ( Y ) P(Y/X)_{max}\sim P(X/Y)P(Y) P(Y/X)maxP(X/Y)P(Y)
∼ P ( y 1 ) ⏟ π P ( x 1 / y 1 ) ⏟ B 11 P ( y 2 / y 1 ) ⏟ A 12 … \sim \begin{matrix} \underbrace{P(y_1)} \\ \pi \end{matrix} \begin{matrix} \underbrace{P(x_1/y_1)} \\ B_{11} \end{matrix} \begin{matrix} \underbrace{ P(y_2/y_1) } \\ A_{12} \end{matrix}… P(y1)π P(x1/y1)B11 P(y2/y1)A12
π \pi π:为初始状态概率
B 11 B_{11} B11:由状态 y 1 y_1 y1到观测 x 1 x_1 x1的发射概率,由训练语料统计得到;
A 11 A_{11} A11:由状态 y 1 y_1 y1到状态 y 2 y_2 y2的状态转移概率,由训练语料统计得到;
由此可得,给定观测X的情况下,状态序列概率最大的概率可由模型 { π A B } \{\pi AB\} {πAB}表示。
相关实现可参考苏剑林. (2016, Aug 19). 《【中文分词系列】 3. 字标注法与HMM模型 》

MEMM

苏剑林. (2020, Feb 24). 《CRF用过了,不妨再了解下更快的MEMM?》

CRF

苏剑林. (2017, Nov 25). 《果壳中的条件随机场(CRF In A Nutshell) 》

参考
科学空间-分词系列
统计学习方法 李航
统计自然语言处理 第二版 宗成庆
机器学习白板推导系列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值