NLP – CQU软件学院

1 绪论

1.1基本概念

1.2NLP发展历史

1.3NLP研究内容

1.4NLP基本问题

1.5NLP面临的困难

1.6NLP基本研究方法

2 NLP前置数学基础

2.1 概率论基础

2.1.1概率

2.1.2 条件概率

2.1.3 贝叶斯公式

2.1.4 期望

2.1.5 二项分布

2.1.6 激活函数

2.1.7 最大似然估计

2.1.8 梯度下降

2.2 信息论基础

2.2.1 熵 entropy

2.2.2 联合熵

2.2.3 条件熵

2.2.4 熵的连锁反应

2.2.5 熵率

2.2.6 互信息

2.2.7 互信息与熵的关系

2.2.8 相对熵

2.2.9 交叉熵

2.2.10语言与其模型的交叉熵

2.2.11 迷惑度(困惑度 Perplexity)

我们一般要找困惑度最小的模型 (本质上就是交叉熵 )

2.2.12 噪声信道模型

信息在传输过程中可能受到干扰,为了描述这种干扰,创造出一个噪声信道模型

一个常见的噪声信道模型是加性高斯白噪声信道(AWGN Channel, Additive White Gaussian Noise),其基本结构如下:

  1. 信息源:这是原始的消息或信号,通常是数字信号或模拟信号。
  2. 编码器:为了增加信号在传输中的可靠性,编码器会将信息源进行编码,例如进行误差检测和纠正。
  3. 信道:信号通过一个可能带有噪声的传输媒介传输。噪声通常被假设为加性白噪声,这种噪声具有零均值和常数方差,且在不同频率下功率谱密度是均匀的。
  4. 噪声:信号在传输过程中会受到噪声的干扰,噪声通常用一个随机变量来表示,可能是高斯分布的,也可能是其他类型的噪声(如泊松噪声、脉冲噪声等)。
  5. 解码器:接收到的信号通过解码器恢复原始信息。如果噪声较强,信号可能会出现错误,解码器需要采用一些策略来减少错误。

4 语料库与语言知识库

4.1 语料库/语料库语言学的基本概念

4.2 研究内容和发展历程

发展历程

1950前 早期

1957-1980 沉寂

1980-至今 复苏发展

4.3 语料库类型

4.3.1 按语言种类 是否有标注划分语料库

4.3.2 平衡语料库

4.3.3 平行语料库

4.3.4 共时语料库与历时语料库

4.4 典型语料库

常用到的

等等 过于多了

4.5 WordNet

4.6 知网(HowNet)

4-1 语言模型(主要集中讲n-gram和数据平滑)

4.1基本概念

经典老模型 注意n=1,2,3

4.2参数估计(极大似然估计)

4.3数据平滑

现在存在数据稀疏问题,语料库太少了导致有些概率计算过小,出现下溢出

+1平滑 比较经典需要掌握

所有未出现n-gram相同

所有n-gram+相同频度

+delta平滑(加法平滑)

Good-Turing平滑 经典 掌握例子

案例

Katz平滑

类似优化搜索算法

进行分段 根据情况选择最优方法

线性插值平滑

lamda如何选?

可以推广 N阶往N+1阶推 思想是由低阶模型线性插值

4.4统计语言模型的评价

4.5统计语言模型的不足之处

说简单点神经网络模型更牛逼 有 自注意力机制

5 神经网络语言模型

1. 目标与背景

  • 核心问题:如何用神经网络建模语言,使机器能够理解和生成自然语言?
  • 出发点:从传统的统计语言模型(如 n-gram)过渡到神经网络,解决稀疏性和泛化能力不足的问题。
  • 思维切入:语言是序列数据,神经网络通过学习词与词之间的关系来预测或生成文本。

2. 基本概念

  • 词嵌入(Word Embedding):将单词映射为低维稠密向量,捕捉语义和句法关系(如 Word2Vec、GloVe)。
  • 语言模型(Language Model):给定前文,预测下一个词的概率分布,形式化为 P(wt∣w1:t−1)P(w_t | w_{1:t-1})P(w_t | w_{1:t-1})
  • 神经网络角色:用神经网络(如 RNN、LSTM、Transformer)替代传统的计数方法,建模长期依赖和上下文。

3. 模型发展脉络

  • 早期模型:基于前馈神经网络(NNLM),用固定窗口预测下一个词。
  • 循环神经网络(RNN):引入序列建模能力,解决固定窗口限制,但面临梯度消失问题。
  • 改进模型(LSTM/GRU):通过门控机制增强长期依赖建模能力。
  • Transformer:基于自注意力机制,彻底改变语言建模方式,支持并行计算和捕捉全局上下文。

4. 关键技术与方法

  • 训练目标:
    • 最大似然估计:优化 log⁡P(wt∣w1:t−1)\log P(w_t | w_{1:t-1})\log P(w_t | w_{1:t-1})
    • 自监督任务:如掩码语言模型(MLM,BERT)或因果语言模型(CLM,GPT)。
  • 词嵌入学习:从独立训练(如 Skip-Gram、CBOW)到与模型联合优化(如 BERT)。
  • 正则化与优化:Dropout、注意力机制、Adam 优化器等。

5. 应用与评估

  • 应用场景:机器翻译、文本生成、问答系统、情感分析等。
  • 评估指标:困惑度(Perplexity,衡量预测能力)、BLEU(翻译质量)、ROUGE(摘要质量)等。
  • 思维重点:模型如何从输入到输出?如何衡量效果?

6. 挑战与未来

  • 挑战:多义性、上下文依赖性、计算成本、跨语言泛化。
  • 趋势:预训练模型(如 BERT、GPT)、多模态融合、轻量化部署。

框架总结

  • 从“是什么”到“怎么做”:理解语言模型的目标 → 学习词嵌入和神经网络基础 → 掌握模型演进和技术细节 → 应用到实际任务。
  • 层层递进:从静态词向量到动态上下文表示,从简单预测到复杂生成。
  • 实践导向:关注输入(文本)、模型(架构)、输出(概率分布或生成结果)之间的关系。

引入 存在问题 同义词无法识别 比如 枯燥 无聊 这两个相似度机器识别为0

word embedding ??

语义空间?

一种 word embedding的办法 Word2vec

该算法其中一种训练模式


词嵌入\NNLM\Word2Vec\前馈神经网络 关系?

  • 词嵌入是 NNLM 和 Word2Vec 的共同基础,作为输入表示存在。
  • 前馈神经网络是 NNLM 的架构基础,Word2Vec 则对其进行了简化。
  • NNLM是早期尝试,用 FNN 建模语言并生成词嵌入。
  • Word2Vec是 NNLM 的优化版本,专注于高效生成词嵌入,去除了复杂的隐藏层,应用更广泛。

前馈神经网络FNN和循环神经网络RNN区别?

前馈神经网络(Feedforward Neural Network, FNN)和循环神经网络(Recurrent Neural Network, RNN)是两种常见的神经网络架构,它们在结构、功能和应用场景上有显著区别。以下是简要对比:

1. 结构差异

  • 前馈神经网络 (FNN):
    • 数据流是单向的:从输入层 → 隐藏层 → 输出层,没有循环或反馈。
    • 层与层之间是全连接的,每一层只处理当前输入,不保留历史信息。
    • 典型的静态网络,适合独立样本的处理。
  • 循环神经网络 (RNN):
    • 具有循环结构:隐藏层不仅接收当前输入,还接收前一时间步的隐藏状态,形成“记忆”。
    • 数据流是动态的,网络在时间维度上展开,适合序列数据。
    • 参数在时间步间共享。

2. 时间维度

  • FNN:无时间概念,每个输入是独立的,处理时不考虑前后关系。
  • RNN:引入时间维度,能够处理序列数据(如时间序列、文本),当前输出依赖于之前的输入。

3. 功能与用途

  • FNN:
    • 擅长静态任务,如图像分类、回归问题。
    • 在 NLP 中,如 NNLM,用固定窗口处理局部上下文,无法捕捉长距离依赖。
  • RNN:
    • 擅长序列任务,如语言建模(预测下一个词)、机器翻译、语音识别。
    • 通过“记忆”机制捕捉序列中的依赖关系。

4. 计算方式

  • FNN:
    • 计算简单,前向传播一次性完成。
    • 输出 y=f(Wx+b)y = f(Wx + b)y = f(Wx + b),其中 xxx 是输入,WWW 和 bbb 是权重和偏置。
  • RNN:
    • 计算复杂,前向传播随时间步递推。
    • 隐藏状态 ht=f(Wxhxt+Whhht−1+b)h_t = f(W_{xh}x_t + W_{hh}h_{t-1} + b)h_t = f(W_{xh}x_t + W_{hh}h_{t-1} + b),其中 ht−1h_{t-1}h_{t-1} 是前一状态。

5. 优缺点

  • FNN:
    • 优点:结构简单,计算效率高,易于并行化。
    • 缺点:无法处理序列数据,缺乏记忆能力。
  • RNN:
    • 优点:能建模时间依赖关系,适合动态数据。
    • 缺点:梯度消失/爆炸问题,难以捕捉长期依赖(改进版如 LSTM/GRU 解决)。

6. NLP 中的应用对比

  • FNN:如 NNLM,用固定窗口预测下一个词,上下文范围有限。
  • RNN:如基于 RNN 的语言模型,能处理变长序列,捕捉更广的上下文。

神经网络语言模型学习框架?思路?

简明总结

  • 本质:神经网络语言模型是用神经网络建模语言概率。
  • 演进:FNN → RNN → LSTM → Transformer。
  • 学习路径:基础概念 → 模型结构 → 实践应用 → 优化扩展。

1. 核心概念

  • 什么是神经网络语言模型?
    • 用神经网络预测语言序列的概率分布,如 P(wt∣w1:t−1)P(w_t | w_{1:t-1})P(w_t | w_{1:t-1}),即给定前文预测下一个词。
    • 目标:取代传统统计模型(如 n-gram),解决稀疏性和泛化问题。
  • 关键要素:
    • 词嵌入:将单词转化为向量,作为模型输入。
    • 神经网络:建模词间关系,捕捉上下文依赖。
    • 输出:概率分布或生成文本。

2. 发展脉络

  • 前馈神经网络语言模型 (NNLM):
    • 提出者:Bengio (2003)。
    • 结构:输入层(词嵌入)→ 隐藏层 → 输出层。
    • 特点:固定窗口,学习词嵌入,计算复杂。
  • 循环神经网络语言模型 (RNN-LM):
    • 提出者:Mikolov (2010)。
    • 结构:引入循环,隐藏状态随时间步更新。
    • 特点:处理变长序列,建模长期依赖。
  • 改进模型 (LSTM/GRU):
    • 解决:RNN 的梯度消失问题。
    • 特点:门控机制,增强长距离依赖捕捉。
  • Transformer 模型:
    • 提出者:Vaswani (2017)。
    • 结构:自注意力机制,无循环,支持并行。
    • 特点:全局上下文建模,主导现代 NLP(如 BERT、GPT)。

3. 技术细节

  • 输入表示:
    • 词嵌入:静态(如 Word2Vec)→ 动态(如 BERT)。
    • 处理:分词、字符嵌入、子词单元(如 BPE)。
  • 训练目标:
    • 最大化似然:$log⁡P(wt∣w1:t−1)\log P(w_t | w_{1:t-1})\log P(w_t | w_{1:t-1})$。
    • 自监督:掩码预测(MLM)、因果预测(CLM)。
  • 优化方法:
    • 损失函数:交叉熵。
    • 技术:负采样、层次 Softmax、Adam 优化。
  • 评估指标:
    • 困惑度(Perplexity):衡量预测能力。
    • 下游任务:BLEU、F1 等。

4. 应用场景

  • 文本生成:聊天机器人、文章续写。
  • 机器翻译:序列到序列建模。
  • 问答系统:上下文理解。
  • 情感分析:序列分类。

5. 挑战与趋势

  • 挑战:
    • 长距离依赖:早期模型不足,Transformer 解决。
    • 计算成本:大规模预训练资源需求高。
    • 多语言泛化:跨语言适配问题。
  • 趋势:
    • 预训练 + 微调:如 BERT、GPT。
    • 多模态融合:文本 + 图像/语音。
    • 轻量化:DistilBERT、MobileBERT。

总结:完整的NLP学习框架

  1. N-Gram
    • 学习基础统计模型,理解其简单性和局限性。
  2. 前馈神经网络(NNLM)
    • 引入神经网络和词嵌入,掌握语义表示。
  3. Word2Vec(CBOW与Skip-gram)
    • 深入词嵌入的高效生成与应用。
  4. 循环神经网络(RNN)
    • 理解序列建模及其挑战。
  5. LSTM与GRU
    • 解决长依赖问题,提升序列处理能力。
  6. Transformer
    • 掌握自注意力与现代NLP的核心技术。

Transformer很重要

包含编码器和解码器两个重要组件 以及自注意力机制这个重要插件

6 隐马尔可夫模型

前向算法? 动态规划思想

例题 必考

好的,我现在需要根据用户提供的图片信息,猜测这幅图的题目,并给出它的计算过程。用户已经告诉我图片的题目是“前向算法求解实例”,不过可能他们希望我验证这个猜测是否正确,并详细解释计算过程。首先,我需要仔细分析用户提供的图片描述,理解其中的各个部分,然后按照前向算法的步骤来解析每个时间步的计算。

首先,确认题目是否正确。根据用户描述,图片的标题确实是“前向算法求解实例”,所以这个猜测是正确的。接下来需要详细解释前向算法在这里的应用过程。

图片中的关键元素包括隐藏状态集合Q={盒子1,盒子2,盒子3},观测状态集合V={红,白},观测序列O={红,白,红}。还有初始概率π,状态转移矩阵A,观测概率矩阵B。接下来分三个时间步t=1,2,3计算前向概率,最后得到观测序列的概率P(O|λ)=0.13022。

首先,我需要回顾前向算法的基本步骤。前向算法用于计算给定HMM模型λ下观测序列O的概率。它通过递推计算前向概率α_t(i),表示在时间t处于状态i且观测到前t个观测值的概率。具体步骤包括初始化、递推和终止。

根据用户提供的图片中的详细文本,比如初始概率π=(0.2,0.4,0.4)^T,状态转移矩阵A和观测概率矩阵B的具体数值,我需要将这些数值代入公式,分步计算每个时间点的α值。

首先处理t=1的情况。初始时刻,观测到第一个红色球。计算每个隐藏状态的α1(i)=π_i * b_i(o1)。例如,α1(1)=0.20.5=0.1,α1(2)=0.40.4=0.16,α1(3)=0.4*0.7=0.28。然后这三个值加起来就是当前的前向概率,不过可能在t=1时暂时不需要求和,而是保存每个状态的α值用于下一步。

接下来是t=2,观测到白色球。此时需要计算每个隐藏状态的α2(j)=Σ{i=1}^3 α1(i)*a{ij} * b_j(o2)。例如,计算α2(1)=α1(1)a_{11}b1(白) + α1(2)a_{21}b1(白) + α1(3)a_{31}b1(白)。根据用户提供的图片中的数值,可能a_{11}=0.5(从盒子1转移到盒子1的概率),a_{21}=0.3(从盒子2转移到盒子1的概率),a_{31}=0.2(从盒子3转移到盒子1的概率)。而b1(白)是盒子1生成白色球的概率,根据用户提供的B矩阵,可能盒子1生成白色的概率是0.5?这里需要确认。用户提到B矩阵中,盒1的观测概率是0.5和0.5?例如,盒1生成红球是0.5,白球也是0.5?或者可能用户描述中有不同的数值?

根据用户给出的文本中有:

B=盒2 0.4 0.6,盒3 0.7 0.3。可能盒1的观测概率是红0.5,白0.5,盒2是红0.4,白0.6,盒3是红0.7,白0.3?但用户提到的观测序列第一个是红色,所以在t=1时,b_i(o1)是红对应的概率。例如,盒1生成红的概率是0.5,盒2是0.4,盒3是0.7。然后在t=2时,观测到白色,所以此时b_j(o2)是白的概率:盒1的0.5,盒2的0.6,盒3的0.3?

可能用户提供的图片中的B矩阵如下:

对于观测红和白,各隐藏态的发射概率:

盒1: 红0.5,白0.5;

盒2: 红0.4,白0.6;

盒3: 红0.7,白0.3?

或者可能相反?比如盒3的红概率是0.7,那么白是0.3。而盒2的红是0.4,白0.6。盒1的红0.5,白0.5。这样在t=1观测红时,各状态的b_i(红)是0.5, 0.4, 0.7。然后t=2观测白时,b_i(白)是0.5, 0.6, 0.3。这样计算。

接下来计算α2(1)的时候,需要把t=1的α1(i)乘以对应的转移概率a_ij,再乘以b_j(o2)。例如,计算α2(1) = α1(1)a_11b1(白) + α1(2)a_21b1(白) + α1(3)a_31b1(白)。代入数值:0.10.50.5(对吗?)或者可能状态转移的矩阵是行表示当前状态,列表示下一状态?比如A矩阵的行是当前状态i,列是下一状态j。例如,A矩阵的结构:

A = [
[0.5, 0.2, 0.3], // 从盒1转移到盒1、盒2、盒3的概率
[0.3, 0.5, 0.2], // 盒2的转移概率
[0.2, 0.3, 0.5] // 盒3的转移概率
]

这样,a_{ij}是从状态i转移到状态j的概率。比如从盒1到盒2的概率是0.2。

所以,在计算α2(j)时,对于每个j,需要累加所有i的α1(i)*a_{i,j},然后乘以b_j(o2)。

例如,计算α2(1):

= (α1(1)a_{1,1} + α1(2)a_{2,1} + α1(3)*a_{3,1}) ) * b_1(白)

根据用户给出的数据,可能用户在t=2时的计算示例中有:

α2(1) = [0.10.5 + 0.160.3 + 0.28*0.2] * b1(白)。这里,用户给出的文本中有一段:

α2(1)=[α11b1(a21i]b1(a21iobl2(a11jbl02)=[0.10.5+0.160.3+0.28*0.2] * b1(白)。假设这里的计算是α2(1) = (0.10.5 + 0.160.3 + 0.28*0.2) * b1(白)。这里的a_{i,j}分别是盒1到盒1的0.5,盒2到盒1的0.3,盒3到盒1的0.2。然后乘以b1(白)=0.5。这样计算的话:

0.1*0.5 = 0.05;

0.16*0.3=0.048;

0.28*0.2=0.056;

总和是0.05+0.048+0.056=0.154;

然后乘以b1(白)=0.5,得到α2(1)=0.154*0.5=0.077?

但根据用户给出的文本中,α2(1)的计算可能写得更复杂,比如用户提供的文本中有:

α2(1)=[α11b1(a21i]b1(a21iobl2(a11jbl02)=[0.10.5+0.160.3+0.28*0.2] * … 这里的表达式可能有误,但数值部分是正确的。例如,用户可能想表达α2(1) = [0.10.5 + 0.160.3 + 0.28*0.2] * b1(白)。假设这里的b1(白)是0.5,所以得到0.154*0.5=0.077。但根据用户提供的后续结果,比如t=2时的α2(1)、α2(2)、α2(3)的值可能不同,需要看最终的数值结果。

根据用户给出的最终结果,P(O|λ)=0.13022,是三个时间步后的总和。现在需要逐步计算每个时间步的值,并确保中间的步骤正确。

现在,我需要按照标准前向算法的步骤,结合用户提供的数据,重新计算各个α的值,并确保结果与图片中的一致。这可能包括:

  1. 初始化:计算α1(i) = π_i * b_i(o1),对于每个i∈{1,2,3}。
  2. 对于t=2到T:
    αt(j) = [Σ{i=1}^N α{t-1}(i) * a{i,j}] * b_j(o_t)
  3. 终止:P(O|λ) = Σ_{i=1}^N α_T(i)

现在,用户提供的图片中给出了三个时间步的计算,每个时间步的α值:

t=1时:
α1(1)=0.1;
α1(2)=0.16;
α1(3)=0.28;

t=2时,计算白色球的概率:
例如,α2(1)的计算方式如上,得到0.077?或者根据用户给出的文本中,可能实际计算的值是:

用户提到:“α2(1)=[α11b1(a21i]b1(a21iobl2(a11jbl02)=[0.10.5+0.160.3+0.28*0.2] * …”,假设后面的乘数是b_j(o2)即白色球的概率。例如,盒1的白色概率是0.5,所以乘0.5:

[0.10.5(这是a_{1,1}) + 0.160.3(a_{2,1}) + 0.280.2(a_{3,1}) ] = 0.05 + 0.048 + 0.056 = 0.154。然后乘以b1(白)=0.5,得到α2(1)=0.1540.5=0.077。

同样的,计算α2(2):

= [α1(1)a_{1,2} + α1(2)a_{2,2} + α1(3)*a_{3,2}] * b2(白)

其中,a_{1,2}=0.2,a_{2,2}=0.5,a_{3,2}=0.3。所以,

0.1*0.2=0.02;

0.16*0.5=0.08;

0.28*0.3=0.084;

总和是0.02+0.08+0.084=0.184;

乘以b2(白)=0.6(盒2的白色概率),得到0.184*0.6=0.1104。这可能对应用户提到的α2(2)=0.1104。

然后计算α2(3):

= [α1(1)a_{1,3} + α1(2)a_{2,3} + α1(3)*a_{3,3}] * b3(白)

a_{1,3}=0.3,a_{2,3}=0.2,a_{3,3}=0.5;

计算:

0.1*0.3=0.03;

0.16*0.2=0.032;

0.28*0.5=0.14;

总和0.03+0.032+0.14=0.202;

乘以b3(白)=0.3,得到0.202*0.3=0.0606。所以α2(3)=0.0606。

这样,t=2时的三个α值为0.077,0.1104,0.0606。

接下来是t=3,观测到红色球。此时,需要计算α3(1)、α3(2)、α3(3)。

例如,计算α3(1):

= [α2(1)a_{1,1} + α2(2)a_{2,1} + α2(3)*a_{3,1}] * b1(红)

这里,a_{1,1}=0.5,a_{2,1}=0.3,a_{3,1}=0.2;

计算:

0.077*0.5=0.0385;

0.1104*0.3=0.03312;

0.0606*0.2=0.01212;

总和0.0385+0.03312+0.01212=0.08374;

乘以b1(红)=0.5,得到α3(1)=0.08374*0.5=0.04187,与用户给出的α3(1)=0.04187一致。

同样,计算α3(2):

= [α2(1)a_{1,2} + α2(2)a_{2,2} + α2(3)*a_{3,2}] * b2(红)

a_{1,2}=0.2,a_{2,2}=0.5,a_{3,2}=0.3;

计算:

0.077*0.2=0.0154;

0.1104*0.5=0.0552;

0.0606*0.3=0.01818;

总和0.0154+0.0552+0.01818=0.08878;

乘以b2(红)=0.4,得到0.08878*0.4=0.035512,四舍五入为0.03551,与用户给出的α3(2)=0.03551一致。

最后,计算α3(3):

= [α2(1)a_{1,3} + α2(2)a_{2,3} + α2(3)*a_{3,3}] * b3(红)

a_{1,3}=0.3,a_{2,3}=0.2,a_{3,3}=0.5;

计算:

0.077*0.3=0.0231;

0.1104*0.2=0.02208;

0.0606*0.5=0.0303;

总和0.0231+0.02208+0.0303=0.07548;

乘以b3(红)=0.7,得到0.07548*0.7=0.052836,四舍五入为0.05284,与用户给出的α3(3)=0.05284一致。

最后,P(O|λ)=α3(1)+α3(2)+α3(3)=0.04187+0.03551+0.05284≈0.13022,与用户给出的结果一致。

综上所述,计算过程正确,每个时间步都按照前向算法的递推公式计算,并最终得到了正确的观测序列概率。

这幅图的题目是“前向算法求解实例”,展示了如何通过隐马尔可夫模型(HMM)的前向算法计算观测序列的概率。以下是详细的计算过程:


模型参数

  1. 隐藏状态集合:( Q = {\text{盒子1}, \text{盒子2}, \text{盒子3}} ),共3个状态。
  2. 观测状态集合:( V = {\text{红}, \text{白}} ),共2个观测状态。
  3. 观测序列:( O = {\text{红}, \text{白}, \text{红}} )。
  4. 初始概率:( \pi = (0.2, 0.4, 0.4)^T )。
  5. 状态转移矩阵 ( A ):
    [
    A = [0.50.20.3 0.30.50.2 0.20.30.5]
    ]
  6. 观测概率矩阵 ( B ):
    [
    B = {盒子1:=0.5,=0.5 盒子2:=0.4,=0.6 盒子3:=0.7,=0.3
    ]

前向算法计算过程

前向算法通过递推计算前向概率 ( \alpha_t(i) ),表示在时间 ( t ) 处于状态 ( i ) 并观测到前 ( t ) 个观测值的概率。

1. 初始化(t=1)

计算第一个观测 ( O_1 = \text{红} ) 的前向概率:
[
\alpha_1(i) = \pi_i \cdot b_i(O_1)
]

  • ( \alpha_1(1) = 0.2 \times 0.5 = 0.1 )
  • ( \alpha_1(2) = 0.4 \times 0.4 = 0.16 )
  • ( \alpha_1(3) = 0.4 \times 0.7 = 0.28 )

2. 递推(t=2)

计算第二个观测 ( O_2 = \text{白} ) 的前向概率:
[
\alpha_2(j) = \left[ \sum_{i=1}^3 \alpha_1(i) \cdot a_{ij} \right] \cdot b_j(O_2)
]

  • 盒子1
    [
    \alpha_2(1) = (0.1 \times 0.5 + 0.16 \times 0.3 + 0.28 \times 0.2) \times 0.5 = 0.077
    ]
  • 盒子2
    [
    \alpha_2(2) = (0.1 \times 0.2 + 0.16 \times 0.5 + 0.28 \times 0.3) \times 0.6 = 0.1104
    ]
  • 盒子3
    [
    \alpha_2(3) = (0.1 \times 0.3 + 0.16 \times 0.2 + 0.28 \times 0.5) \times 0.3 = 0.0606
    ]

3. 递推(t=3)

计算第三个观测 ( O_3 = \text{红} ) 的前向概率:
[
\alpha_3(j) = \left[ \sum_{i=1}^3 \alpha_2(i) \cdot a_{ij} \right] \cdot b_j(O_3)
]

  • 盒子1
    [
    \alpha_3(1) = (0.077 \times 0.5 + 0.1104 \times 0.3 + 0.0606 \times 0.2) \times 0.5 = 0.04187
    ]
  • 盒子2
    [
    \alpha_3(2) = (0.077 \times 0.2 + 0.1104 \times 0.5 + 0.0606 \times 0.3) \times 0.4 = 0.03551
    ]
  • 盒子3
    [
    \alpha_3(3) = (0.077 \times 0.3 + 0.1104 \times 0.2 + 0.0606 \times 0.5) \times 0.7 = 0.05284
    ]

4. 终止

观测序列概率为所有终态前向概率之和:
[
P(O|\lambda) = \sum_{i=1}^3 \alpha_3(i) = 0.04187 + 0.03551 + 0.05284 = 0.13022
]


最终结果

观测序列 ( O = {\text{红}, \text{白}, \text{红}} ) 的概率为 0.13022。图中通过表格和公式清晰展示了每一步的计算过程。

Viterbi 搜索算法

本技术内容仅供学习和交流使用,如有疑问请联系qq2014160588并注明来意。请确保在使用过程中遵守相关法律法规。任何因使用本技术内容而导致的直接或间接损失,作者概不负责。用户需自行承担因使用本技术内容而产生的所有风险和责任。请勿将本技术内容用于任何非法用途。
上一篇
下一篇