0有1/意2见3/分4歧5
两种标识方案
最常见的分词方法是基于词典匹配,规则是按照最大长度查找,由方向的不同可分为两类:前向查找和后向查找(后向查找准确度相对较高)
例子:大学生活动中心
从统计思想的角度来看,分词问题的输入是一个字串 C = c 1 . c 2 , . . . , c n C=c_1.c_2,...,c_n C=c1.c2,...,cn,输出是一个词串 S = w 1 , w 2 , . . . , w m ( n > m ) S=w_1,w_2,...,w_m(n>m) S=w1,w2,...,wm(n>m),对于一个特定的字串,对应着多个切分方案 S S S,分词的任务是在这些S中找出一个合适的切分方案,使得 p ( S ∣ C ) p(S|C) p(S∣C)最大。
p ( S ∣ C ) p(S|C) p(S∣C)是字串C产生词串S的概率
S e g ( C ) = a r g max S ϵ G p ( S ∣ C ) = a r g max S ϵ G p ( C ∣ S ) p ( S ) p ( C ) Seg(C)=arg\max_{S\epsilon G}p(S|C)=arg\max_{S\epsilon G}\frac{p(C|S)p(S)}{p(C)} Seg(C)=argSϵGmaxp(S∣C)=argSϵGmaxp(C)p(C∣S)p(S)
如果一个词的出现不依赖前面出现的词,叫做一元模型
p ( S ) = p ( w 1 , w 2 , . . . , w n ) = p ( w 1 ) p ( w 2 ) p ( w 3 ) . . . p ( w n ) p(S)=p(w_1,w_2,...,w_n)=p(w_1)p(w_2)p(w_3)...p(w_n) p(S)=p(w1,w2,...,wn)=p(w1)p(w2)p(w3)...p(wn)
如果简化为一个词的出现仅依赖于前面出现的一个词,那么称之为二元模型
p ( S ) = p ( w 1 , w 2 , … … , w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 2 ) … … p ( w n ∣ w n − 1 ) p(S)=p(w_1,w_2,……,w_n)=p(w_1)p(w_2|w_1)p(w_3|w_2)……p(w_n|w_{n-1}) p(S)=p(w1,w2,……,wn)=p(w1)p(w2∣w1)p(w3∣w2)……p(wn∣wn−1)
如果简化为一个词的出现仅依赖于前面出现的两个词,那么称之为三元模型
p ( S ) = p ( w 1 , w 2 , … … , w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 1 , w 2 ) … … p ( w n ∣ w n − 2 , w n − 1 ) p(S)=p(w_1,w_2,……,w_n)=p(w1)p(w_2|w_1)p(w_3|w_1,w_2)……p(w_n|w_{n-2},w_{n-1}) p(S)=p(w1,w2,……,wn)=p(w1)p(w2∣w1)p(w3∣w1,w2)……p(wn∣wn−2,wn−1)
定义:每一个状态只依赖于前面有限个状态
参数
定义:描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测随机序列的过程。
隐藏的序列称为状态序列;每一个状态数据生成一个观测数据而生成一个观测序列,称为观测序列。
应用:
观察序列O的数据通常是由对应的隐藏序列数据决定的,彼此之间相互独立;隐藏序列数据间相互依赖,构成马尔可夫序列
隐马尔可夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。
设Q是所有可能的状态集合,V是所有可能的观测集合 Q = { q 1 , q 2 , . . . , q N } , V = { v 1 , v 2 , . . . , v M } Q=\lbrace q_1,q_2,...,q_N \rbrace,V=\lbrace v_1,v_2,...,v_M \rbrace Q={q1,q2,...,qN},V={v1,v2,...,vM}
初始状态概率 π i = p ( i 1 = q i ) , i ∈ ( 1 , 2 , . . . , N ) \pi_i=p(i_1=q_i),i\in (1,2,...,N) πi=p(i1=qi),i∈(1,2,...,N)
A是状态转移概率分布 A = [ a i j ] N × N A=[a_{ij}]_{N \times N} A=[aij]N×N a i j = p ( i t + 1 = q j ∣ i t = q i ) , ( i , j ∈ ( 1 , 2 , . . . , N ) ) a_{ij}=p(i_{t+1}=q_j|i_t=q_i),(i,j\in (1,2,...,N)) aij=p(it+1=qj∣it=qi),(i,j∈(1,2,...,N))
B是观测概率分布 B = [ b j ( k ) ] N × M B=[b_j(k)]_{N\times M} B=[bj(k)]N×M b j ( k ) = p ( o t = v k ∣ i t = q j ) k ∈ ( 1 , 2 , . . . , M ) ; j ∈ ( 1 , 2 , . . , N ) b_j(k)=p(o_t=v_k|i_t=q_j) k\in (1,2,...,M);j\in (1,2,..,N) bj(k)=p(ot=vk∣it=qj)k∈(1,2,...,M);j∈(1,2,..,N)
条件概率的转化 p ( w 2 , w 3 ∣ w 1 ) = p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 1 , w 2 ) p(w_2,w_3|w_1)=p(w_2|w_1)p(w_3|w_1,w_2) p(w2,w3∣w1)=p(w2∣w1)p(w3∣w1,w2)
思想:通过列举所有可能的长度为T的状态序列S,求各个状态序列S与观测序列O的联合概率P(O,S|λ),然后对所有可能的状态序列求和,得到P(O|λ)。
某一状态序列的概率 P ( S ∣ λ ) = π s 1 a s 1 , s 2 a s 2 , s 3 ⋯ a s t − 1 , s t P(S|\lambda)=π_{s_1}a_{s_1,s_2}a_{s_2,s_3} \cdots a_{s_t-1,s_t} P(S∣λ)=πs1as1,s2as2,s3⋯ast−1,st
观察序列和对应的隐藏序列的联合概率为 P ( O 1 : t , S 1 : t ∣ λ ) = P ( S 1 : t ∣ λ ) P ( O 1 : t ∣ S 1 : t , λ ) = π s 1 a s 1 , s 2 a s 2 , s 3 ⋯ a s t − 1 : s t b s 1 ( o 1 ) b s 2 ( o 2 ) ⋯ b s t ( o t ) = π s 1 ∏ i = 1 t − 1 a s i , s i + 1 ∏ i = 1 t b s i ( o i ) \begin{aligned} P(O_{1:t},S_{1:t}|λ)&=P(S_{1:t}|\lambda) P(O_{1:t}|S_{1:t},\lambda)\\ &= π_{s_1}a_{s_1,s_2}a_{s_2,s_3} \cdots a_{s_{t-1}:s_t}b_{s_1}(o_1)b_{s_2}(o_2) \cdots b_{s_t}(o_t)\\ &=π_{s_1}\prod_{i=1}^{t-1}a_{s_i,s_{i+1}}\prod_{i=1}^{t}b_{s_i}(o_i) \end{aligned} P(O1:t,S1:t∣λ)=P(S1:t∣λ)P(O1:t∣S1:t,λ)=πs1as1,s2as2,s3⋯ast−1:stbs1(o1)bs2(o2)⋯bst(ot)=πs1i=1∏t−1asi,si+1i=1∏tbsi(oi)
复杂度为 O ( T ∗ N T ) O(T*N^T) O(T∗NT)
给定隐马尔可夫模型参数 λ λ λ,定义到时刻t的部分观测序列为 o 1 , o 2 , . . . , o t o_1,o_2,...,o_t o1,o2,...,ot且对应的隐藏状态为 k k k的概率为前向概率。
α t ( k ) = p ( O 1 : t , S t = k ∣ λ ) = ∑ l = 1 N p ( O 1 : t , S t − 1 = l , S t = k ∣ λ ) = ∑ l = 1 N p ( O t ∣ O 1 : t − 1 , S t − 1 = l , S t = k , λ ) p ( O 1 : t − 1 , S t − 1 = l , S t = k ∣ λ ) = ∑ l = 1 N p ( O t ∣ O 1 : t − 1 , S t − 1 = l , S t = k , λ ) p ( S t = k ∣ O 1 : t − 1 , S t − 1 = l , λ ) p ( O 1 : t − 1 , S t − 1 = l ∣ λ ) = ∑ l = 1 N p ( O t ∣ S t = k , λ ) p ( S t = k ∣ S t − 1 = l , λ ) p ( O 1 : t − 1 , S t − 1 = l , λ ) = ∑ l = 1 N b k ( O t ) a l , k α t − 1 ( l ) \begin{aligned} \alpha_t(k) &= p(O_{1:t},S_t=k|\lambda) \\ & =\sum_{l=1}^Np(O_{1:t},S_{t-1}=l,S_t=k|\lambda) \\ &=\sum_{l=1}^Np(O_t|O_{1:t-1},S_{t-1}=l,S_t=k,\lambda)p(O_{1:t-1},S_{t-1}=l,S_t=k|\lambda) \\ &=\sum_{l=1}^Np(O_t|O_{1:t-1},S_{t-1}=l,S_t=k,\lambda)p(S_t=k|O_{1:t-1},S_{t-1}=l,\lambda)p(O_{1:t-1},S_{t-1}=l|\lambda)\\ &=\sum_{l=1}^Np(O_t|S_t=k,\lambda)p(S_t=k|S_{t-1}=l,\lambda)p(O_{1:t-1},S_{t-1}=l,\lambda)\\ &=\sum_{l=1}^Nb_k(O_t)a_{l,k}\alpha_{t-1}(l) \end{aligned} αt(k)=p(O1:t,St=k∣λ)=l=1∑Np(O1:t,St−1=l,St=k∣λ)=l=1∑Np(Ot∣O1:t−1,St−1=l,St=k,λ)p(O1:t−1,St−1=l,St=k∣λ)=l=1∑Np(Ot∣O1:t−1,St−1=l,St=k,λ)p(St=k∣O1:t−1,St−1=l,λ)p(O1:t−1,St−1=l∣λ)=l=1∑Np(Ot∣St=k,λ)p(St=k∣St−1=l,λ)p(O1:t−1,St−1=l,λ)=l=1∑Nbk(Ot)al,kαt−1(l)
前向概率公式表示 p ( O ∣ λ ) p(O|λ) p(O∣λ) p ( O ∣ λ ) = ∑ l = 1 N α T ( l ) p(O|\lambda)=\sum_{l=1}^N\alpha_T(l) p(O∣λ)=l=1∑NαT(l)
p ( O ∣ λ ) p(O|λ) p(O∣λ)的时间复杂度为 O ( T ∗ N 2 ) O(T*N^2) O(T∗N2)
给定隐马尔可夫模型 λ λ λ,定义在t时刻状态为 k k k的条件下,从 t + 1 t+1 t+1到 T T T的部分观测序列为 O t + 1 , O t + 2 , . . . , O T O_{t+1},O_{t+2},...,O_T Ot+1,Ot+2,...,OT的概率为后向概率。
β t ( k ) = p ( O t + 1 , T ∣ S t = k , λ ) = ∑ l = 1 N p ( O t + 1 : T , S t + 1 = l ∣ S t = k , λ ) = ∑ l = 1 N p ( S t + 1 = l ∣ S t = k , λ ) p ( O t + 1 : T ∣ S t + 1 = l , S t = k , λ ) = ∑ l = 1 N p ( S t + 1 = l ∣ S t = k , λ ) p ( O t + 1 : T ∣ S t + 1 = l , λ ) = ∑ l = 1 N p ( S t + 1 = l ∣ S t = k , λ ) p ( O t + 2 : T ∣ S t + 1 = l , λ ) p ( O t + 1 ∣ O t + 2 : T , S t + 1 = l , λ ) = ∑ l = 1 N p ( S t + 1 = l ∣ S t = k , λ ) p ( O t + 1 ∣ S t + 1 = l , λ ) p ( O t + 2 : T ∣ S t + 1 = l , λ ) = ∑ l = 1 N a k , l b l ( O t + 1 ) β t + 1 ( l ) \begin{aligned} \beta_t(k)&=p(O_{t+1,T}|S_t=k,\lambda)\\ &=\sum_{l=1}^Np(O_{t+1:T},S_{t+1}=l|S_t=k,\lambda)\\ &=\sum_{l=1}^Np(S_{t+1}=l|S_t=k,\lambda)p(O_{t+1:T}|S_{t+1}=l,S_t=k,\lambda)\\ &=\sum_{l=1}^Np(S_{t+1}=l|S_t=k,\lambda)p(O_{t+1:T}|S_{t+1}=l,\lambda)\\ &=\sum_{l=1}^Np(S_{t+1}=l|S_t=k,\lambda)p(O_{t+2:T}|S_{t+1}=l,\lambda)p(O_{t+1}|O_{t+2:T},S_{t+1}=l,\lambda)\\ &=\sum_{l=1}^Np(S_{t+1}=l|S_t=k,\lambda)p(O_{t+1}|S_{t+1}=l,\lambda)p(O_{t+2:T}|S_{t+1}=l,\lambda)\\ &=\sum_{l=1}^Na_{k,l}b_l(O_{t+1})\beta_{t+1}(l) \end{aligned} βt(k)=p(Ot+1,T∣St=k,λ)=l=1∑Np(Ot+1:T,St+1=l∣St=k,λ)=l=1∑Np(St+1=l∣St=k,λ)p(Ot+1:T∣St+1=l,St=k,λ)=l=1∑Np(St+1=l∣St=k,λ)p(Ot+1:T∣St+1=l,λ)=l=1∑Np(St+1=l∣St=k,λ)p(Ot+2:T∣St+1=l,λ)p(Ot+1∣Ot+2:T,St+1=l,λ)=l=1∑Np(St+1=l∣St=k,λ)p(Ot+1∣St+1=l,λ)p(Ot+2:T∣St+1=l,λ)=l=1∑Nak,lbl(Ot+1)βt+1(l)
后向概率表示 p ( O ∣ λ ) p(O|λ) p(O∣λ) p ( O ∣ λ ) = ∑ l = 1 N π l b l ( O 1 ) β 1 ( l ) p(O|\lambda)=\sum_{l=1}^N\pi_lb_l(O_1)\beta_1(l) p(O∣λ)=l=1∑Nπlbl(O1)β1(l)
前向概率和后向概率表示观测序列概率 p ( O ∣ λ ) = ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j ( O t + 1 ) β t + 1 ( j ) p(O|\lambda)=\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(O_{t+1})\beta_{t+1}(j) p(O∣λ)=i=1∑Nj=1∑Nαt(i)aijbj(Ot+1)βt+1(j)
(1) 给定模型 λ λ λ和观测序列 O O O,在时刻 t t t的状态为 k k k的概率
γ t ( k ) = p ( S t = k ∣ O 1 : T , λ ) = p ( O 1 : T , S t = k , λ ) p ( O 1 : T , λ ) = α t ( k ) β t ( k ) ∑ l = 1 N α t ( l ) β t ( l ) \gamma_t(k)=p(S_t=k|O_{1:T},\lambda)=\frac{p(O_{1:T},S_t=k,\lambda)}{p(O_{1:T},\lambda)}=\frac{\alpha_t(k)\beta_t(k)}{\sum_{l=1}^N\alpha_t(l)\beta_t(l)} γt(k)=p(St=k∣O1:T,λ)=p(O1:T,λ)p(O1:T,St=k,λ)=∑l=1Nαt(l)βt(l)αt(k)βt(k)
(2) 给定模型 λ λ λ和观测序列 O O O,在时刻 t t t的状态为 i i i,时刻 t + 1 t+1 t+1状态为 j j j的概率 ξ t ( i , j ) = p ( S t = i , S t + 1 = j ∣ O , λ ) = p ( S t = i , S t + 1 = j , O ∣ λ ) p ( O ∣ λ ) = p ( S t = i , S t + 1 = j , O ∣ λ ) ∑ m = 1 N ∑ n = 1 N p ( S t = m , S t + 1 = n , O ∣ λ ) = α t ( i ) a i , j b j ( O t + 1 ) β t ( j ) ∑ m = 1 N ∑ n = 1 N α t ( m ) a m , n b n ( O t + 1 ) β t ( n ) \begin{aligned} \xi_t(i,j)&=p(S_t=i,S_{t+1}=j|O,\lambda)\\ &=\frac{p(S_t=i,S_{t+1}=j,O|\lambda)}{p(O|\lambda)}\\ &=\frac{p(S_t=i,S_{t+1}=j,O|\lambda)}{\sum_{m=1}^N\sum_{n=1}^Np(S_t=m,S_{t+1}=n,O|\lambda)}\\ &=\frac{\alpha_t(i)a_{i,j}b_j(O_{t+1})\beta_t(j)}{\sum_{m=1}^N\sum_{n=1}^N\alpha_t(m)a_{m,n}b_n(O_{t+1})\beta_t(n)}\end{aligned} ξt(i,j)=p(St=i,St+1=j∣O,λ)=p(O∣λ)p(St=i,St+1=j,O∣λ)=∑m=1N∑n=1Np(St=m,St+1=n,O∣λ)p(St=i,St+1=j,O∣λ)=∑m=1N∑n=1Nαt(m)am,nbn(Ot+1)βt(n)αt(i)ai,jbj(Ot+1)βt(j)
假设已给训练数据包含了观测序列O和对应的状态序列S,利用极大似然估计方法来估计隐马尔可夫模型的参数
假设给定训练数据只包含了 S S S个长度为 T T T的观测序列 O O O,而没有对应的状态序列,目标是学习隐马尔可夫模型参数 λ = ( A , B , π ) λ=(A,B,π) λ=(A,B,π)
维特比算法:动态规划求概率最大路径,这时一条路径对应着一个最优的状态序列。过程是从时刻t=1开始,递推地计算在时刻t状态为i的各条部分路径的最大概率,直至得到时刻t=T状态的各条路径的最大概率。时刻T的最大概率即为最优路径的概率P,得到最优路径的终结点。之后,为了找出最优路径的各个结点,从终结点开始,由后向前逐步求结点,从而得到最优状态序列。
每一个字所对应四种状态(BMES),status_matrix记录k的四种状态到j的某种状态(pi+A+B)的概率最大值,数据结构为【max_p,max_status】(BMES),直到最后一个字。从最后一个字的四种状态查询概率最大值,回溯搜索前一个字的最优状态,从而得到最优序列。
动态规划在t+1的位置重用t的结果。
变量δ定义了在时刻t状态为k的所有路径 O 1 : t O_{1:t} O1:t中概率最大值为
δ t ( k ) = max S 1 : t − 1 p ( S 1 : t − 1 , S t = k , O 1 : t ∣ λ ) δ t + 1 ( k ) = max S 1 : t p ( S 1 : t , S t + 1 = k , O 1 : t + 1 ∣ λ ) = max 1 ≤ l ≤ M ( max S 1 : t − 1 p ( S 1 : t − 1 , S t = l , S t + 1 = k , O 1 : t + 1 ∣ λ ) ) = max 1 ≤ l ≤ M ( max S 1 : t − 1 p ( S t + 1 = k , O t + 1 ∣ S 1 : t − 1 , S t = l , O 1 : t , λ ) p ( S 1 : t − 1 , S t = l , O 1 : t ∣ λ ) ) = max 1 ≤ l ≤ M ( max S 1 : t − 1 p ( S t + 1 = k , O t + 1 ∣ S t = l , λ ) p ( S 1 : t − 1 , S t = l , O 1 : t ∣ λ ) ) = max 1 ≤ l ≤ M ( max S 1 : t − 1 p ( S t + 1 = k ∣ S t = l , λ ) p ( O t + 1 ∣ S t + 1 = k , λ ) p ( S 1 : t − 1 , S t = l , O 1 : t ∣ λ ) ) = max 1 ≤ l ≤ M a l , k b k ( O t + 1 ) δ t ( l ) \begin{aligned} \delta_t(k)&=\max_{S_{1:t-1}}p(S_{1:t-1},S_t=k,O_{1:t}|\lambda) \delta_{t+1}(k)=\max_{S_{1:t}}p(S_{1:t},S_{t+1}=k,O_{1:t+1}|\lambda)\\ &=\max_{1\leq l\leq M}(\max_{S_{1:t-1}}p(S_{1:t-1},S_t=l,S_{t+1}=k,O_{1:t+1}|\lambda))\\ &=\max_{1\leq l\leq M}(\max_{S_{1:t-1}}p(S_{t+1}=k,O_{t+1}|S_{1:t-1},S_t=l,O_{1:t},\lambda)p(S_{1:t-1},S_t=l,O_{1:t}|\lambda))\\ &=\max_{1\leq l\leq M}(\max_{S_{1:t-1}}p(S_{t+1}=k,O_{t+1}|S_t=l,\lambda)p(S_{1:t-1},S_t=l,O_{1:t}|\lambda))\\ &=\max_{1\leq l\leq M}(\max_{S_{1:t-1}}p(S_{t+1}=k|S_t=l,\lambda)p(O_{t+1}|S_{t+1}=k,\lambda)p(S_{1:t-1},S_t=l,O_{1:t}|\lambda))\\ &=\max_{1\leq l\leq M}a_{l,k}b_k(O_{t+1})\delta_t(l) \end{aligned} δt(k)=S1:t−1maxp(S1:t−1,St=k,O1:t∣λ)δt+1(k)=S1:tmaxp(S1:t,St+1=k,O1:t+1∣λ)=1≤l≤Mmax(S1:t−1maxp(S1:t−1,St=l,St+1=k,O1:t+1∣λ))=1≤l≤Mmax(S1:t−1maxp(St+1=k,Ot+1∣S1:t−1,St=l,O1:t,λ)p(S1:t−1,St=l,O1:t∣λ))=1≤l≤Mmax(S1:t−1maxp(St+1=k,Ot+1∣St=l,λ)p(S1:t−1,St=l,O1:t∣λ))=1≤l≤Mmax(S1:t−1maxp(St+1=k∣St=l,λ)p(Ot+1∣St+1=k,λ)p(S1:t−1,St=l,O1:t∣λ))=1≤l≤Mmaxal,kbk(Ot+1)δt(l)
ψ定义了时刻t状态为k的所有路径中概率最大的路径的第t-1个结点为
ψ t ( k ) = a r g max 1 ≤ l ≤ M [ δ t − 1 ( l ) a l , k ] \psi_t(k)=arg\max_{1\leq l\leq M}[\delta_{t-1}(l)a_{l,k}] ψt(k)=arg1≤l≤Mmax[δt−1(l)al,k]
import jieba
str = "中国第十九届人工智能机器学习会议将在重庆举办,举办的内容主要包括大数据云计算多粒度粗糙集"
print("/".join(jieba.cut(str,cut_all=False)))
结果显示:一些专有名词被切开(词典没有这些专有名词)
中文分词
大数据
云计算
机器学习
多粒度
import jieba
def_dict = "user_dict.txt" #自定义词典路径
jieba.load_userdict(def_dict) # 加载外部的词典
str = "中国第十九届人工智能机器学习会议将在重庆举办,举办的内容主要包括大数据云计算多粒度粗糙集"
print("/".join(jieba.cut(str,cut_all=False)))
结果显示:这些专有名词作为一个词被切割(外部词典加载到默认词典)
import jieba
from sklearn.feature_extraction.text import CountVectorizer
# 新词发现
s_list = ['中文分词中文计算','大数据中国好声音','云计算中国好声音','用结巴分词来做中文分词','云计算大数据']
s_l = [' '.join(jieba.cut(x)) for x in s_list]
# ngram_range : tuple (min_n, max_n)表示合并词的数量范围 如【人工 [智能】 机器]
# min_df : float in range [0.0, 1.0] or int, default=1表示为词频的最小值,筛选出大于这个值的组合词
# token_pattern表示切分词后的模式
ngram_vec = CountVectorizer(token_pattern=r'\b\w+\b',ngram_range=(2,2),min_df=0.4)
x1 = ngram_vec.fit_transform(s_l) # 训练模型
print(x1)
print(ngram_vec.vocabulary_)
# 新词格式化
new_word = dict()
for k,v in ngram_vec.vocabulary_.items():
new_word[k.replace(' ','')] = v
print(new_word)
输出结果发现新词,然后加载到词典用于jieba切词