维比特算法与分词实例

\qquad 对于一个有很多分词可能的长句子,我们当然可以用暴力方法去计算出所有的分词可能的概率,再找出最优分词方法。但是用维特比算法可以大大简化求出最优分词的时间。

\qquad 大家一般知道维特比算法是用于隐式马尔科夫模型HMM解码算法的,但是它是一个通用的求序列最短路径的方法,不光可以用于HMM,也可以用于其他的序列最短路径算法,比如最优分词。

\qquad 维特比算法采用的是动态规划来解决这个最优分词问题的,动态规划要求局部路径也是最优路径的一部分。

\qquad 首先我们看一个简单的分词例子:“人生如梦境”。它的可能分词可以用下面的概率图表示:
在这里插入图片描述
\qquad 图中的箭头为通过统计语料库而得到的对应的各分词位置BEMS(开始位置,结束位置,中间位置,单词)的条件概率。比如 P ( 生 ∣ 人 ) = 0.17 P(生|人)=0.17 P()=0.17

\qquad 有了这个图,维特比算法需要找到从Start到End之间的一条最短路径。对于在End之前的任意一个当前局部节点,我们需要得到到达该节点的最大概率 δ \delta δ,和记录到达当前节点满足最大概率的前一节点位置 Ψ \Psi Ψ

\qquad 首先我们初始化有:
δ ( 人 ) = 0.26 , Ψ ( 人 ) = s t a r t \delta(人) = 0.26 ,\Psi(人) = start \\ δ()=0.26Ψ()=start
δ ( 人 生 ) = 0.44 , Ψ ( 人 生 ) = s t a r t \delta(人生) = 0.44, \Psi(人生) = start δ()=0.44,Ψ()=start

\qquad 对于节点"生",它只有一个前向节点,因此有:
δ ( 生 ) = δ ( 人 ) P ( 生 ∣ 人 ) = 0.26 ∗ 0.17 = 0.0442 , Ψ ( 生 ) = 人 \delta(生) = \delta(人) P(生|人) = 0.26 * 0.17 = 0.0442, \Psi(生) = 人 δ()=δ()P()=0.260.17=0.0442Ψ()=

\qquad 对于节点"如",就稍微复杂一点了,因为它有多个前向节点,我们要计算出到“如”概率最大的路径:
δ ( 如 ) = m a x { δ ( 生 ) P ( 如 ∣ 生 ) , δ ( 人 生 ) P ( 如 ∣ 人 生 ) } = m a x { 0.0442 ∗ 0.038 , 0.44 ∗ 0.72 } = m a x { 0.0168796 , 0.3168 } = 0.3168 , Ψ ( 如 ) = 人 生 \begin{aligned} \delta(如) & = max\{ \delta(生)P(如|生),\delta(人生)P(如|人生)\} \\ & = max \{0.0442*0.038 ,0.44*0.72 \} \\ & = max \{0.0168796,0.3168 \} \\ & = 0.3168 \end{aligned} , \Psi(如) = 人生 δ()=max{δ()P()δ()P()}=max{0.04420.038,0.440.72}=max{0.0168796,0.3168}=0.3168,Ψ()=

\qquad 类似的方法可以用于其他节点如下:
δ ( 如 梦 ) = δ ( 人 生 ) P ( 如 梦 ∣ 人 生 ) = 0.44 ∗ 0.55 = 0.242 , Ψ ( 如 梦 ) = 人 生 \delta(如梦) = \delta(人生)P(如梦|人生) = 0.44 * 0.55 = 0.242,\Psi(如梦) = 人生 δ()=δ()P()=0.440.55=0.242Ψ()=
δ ( 梦 ) = δ ( 如 ) P ( 梦 ∣ 如 ) = 0.3168 ∗ 0.63 = 0.1996 , Ψ ( 梦 ) = 如 \delta(梦) = \delta(如)P(梦|如) = 0.3168 * 0.63 = 0.1996,\Psi(梦) = 如 δ()=δ()P()=0.31680.63=0.1996Ψ()=
δ ( 境 ) = m a x { δ ( 梦 ) P ( 境 ∣ 梦 ) , δ ( 如 梦 ) P ( 境 ∣ 如 梦 ) } = m a x { 0.1996 ∗ 0.18 , 0.242 ∗ 0.13 } = m a x { 0.0359 , 0.03146 } = 0.0359 , Ψ ( 境 ) = 梦 \begin{aligned} \delta(境) &= max \{ \delta(梦)P(境|梦) ,\delta(如梦)P(境|如梦)\} \\ &=max\{0.1996 * 0.18,0.242*0.13 \} \\ &=max\{ 0.0359 ,0.03146 \} \\ &=0.0359 \end{aligned},\Psi(境) = 梦 δ()=max{δ()P(),δ()P()}=max{0.19960.18,0.2420.13}=max{0.0359,0.03146}=0.0359,Ψ()=
δ ( 梦 境 ) = δ ( 如 ) P ( 梦 境 ∣ 如 ) = 0.3168 ∗ 0.51 = 0.161568 , Ψ ( 梦 境 ) = 如 \delta(梦境) = \delta(如)P(梦境|如) = 0.3168 * 0.51 = 0.161568,\Psi(梦境) = 如 δ()=δ()P()=0.31680.51=0.161568Ψ()=

\qquad 最后我们看看最终节点End:
δ ( e n d ) = m a x { δ ( 境 ) P ( e n d ∣ 境 ) , δ ( 梦 境 ) P ( e n d ∣ 梦 境 ) } = m a x { 0.0359 ∗ 0.13 , 0.161568 ∗ 0.25 } = m a x { 0.004667 , 0.040392 } = 0.0404 , Ψ ( e n d ) = 梦 境 \begin{aligned} \delta(end) &= max\{ \delta(境)P(end|境),\delta(梦境)P(end|梦境)\} \\ &=max\{0.0359 *0.13, 0.161568 * 0.25\} \\ &=max\{0.004667,0.040392\} \\ &=0.0404 \end{aligned},\Psi(end) = 梦境 δ(end)=max{δ()P(end),δ()P(end)}=max{0.03590.13,0.1615680.25}=max{0.004667,0.040392}=0.0404,Ψ(end)=
\qquad 由于最后的最优解为“梦境”,现在我们开始用 Ψ \Psi Ψ反推:
Ψ ( e n d ) = 梦 境 → Ψ ( 梦 境 ) = 如 → Ψ ( 如 ) = 人 生 \Psi(end) = 梦境 \rightarrow \Psi(梦境) = 如 \rightarrow \Psi(如) = 人生 Ψ(end)=Ψ()=Ψ()=
\qquad 从而最终的分词结果为"人生/如/梦境"。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
比特算法(Viterbi Algorithm)是一种常用于解码和推断的动态规划算法,主要用于隐马尔可夫模型(Hidden Markov Model)和卷积码等领域。它通常用于找到最有可能的隐藏状态序列,从而进行解码或推断。 在密码破解中,比特算法可以用于解码密码的隐藏状态序列,从而恢复出原始的明文信息。但是,比特算法并非是专门用于密码破解的算法,而是一种通用的动态规划算法。因此,对于密码破解而言,比特算法的性能分析需要结合具体的密码算法和密码破解的场景来进行。 性能分析通常涉及以下几个方面: 1. 密码算法的复杂度:不同的密码算法具有不同的复杂度,包括加密和解密过程中的计算量。比特算法的性能分析需要结合具体的密码算法来评估其复杂度。 2. 密码破解的搜索空间:密码破解需要对可能的密钥空间进行搜索,而比特算法可以用于搜索隐藏状态序列。搜索空间的大小直接影响破解的时间复杂度。 3. 硬件和软件优化:密码破解可以通过使用高性能硬件和优化的软件实现加速。比特算法的性能也可以通过这些优化来提升。 综上所述,对于比特算法在密码破解中的性能分析,需要具体考虑密码算法的复杂度、搜索空间的大小以及硬件和软件优化等因素。对于不同的密码算法和破解场景,结果可能会有所不同。因此,在实际应用中,需要根据具体情况进行评估和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值