自然语言处理 课堂笔记 / 期末复习

课程基本信息

考试

内容来自PPT、课上提问

10选(10分)

8简(90分)每个 2-3小问

(CNN、RNN、Transformer、Bayes每章都有,绪论基本概念也有)

其他

虞剑飞

助教:宋晓(单)

10%课堂+40%实践+50%期末

20分课后作业

  • 基于CNN的文本分类

  • 基于RNN的命名实体识别

  • 基于transformer的机器翻译(英译中)

    代码+文档报告(方法、 实验结果、分析)+1~2分钟的程序演示视频

20分期末项目

  • 针对某个NLP任务复现最新论文中的算法

  • 结合最新NLP技术提升其他研究方向任务的性能

    项目报告+源代码+PPT+10-15分钟PPT演讲+答辩

教材

  • Foundations of Statistical Natural Language Processing
  • 统计自然语言处理 宗成庆
  • 文本数据挖掘 宗成庆

PPT主要基于宗成庆(中科院自动化所)、张家俊

网课

  • cs4705(columbia)
  • Christopher Manning(cs224n)
  • Dan Jurafsky

会议

  • ACL (Annual Meeting of the Association for Computational Linguistics)

  • COLING (International Conference on Computational
    Linguistics)

  • EMNLP (Conference on Empirical Methods in Natural Language
    Processing)

  • NAACL (Annual Conference of the North American Chapter of the Association for Computational Linguistics)

期末冲刺

1 概念

  • 语言学:研究语言的本质、结构、发展规律

  • 计算语言学 CL

  • 自然语言理解 NLU 概念来自达特茅斯会议 1956

回顾会议参与人员:

约翰·麦卡锡(John McCarthy)、马文·闵斯基(Marvin Minsky,人工智能与认知学专家)、克劳德·香农(Claude Shannon,信息论的创始人)、艾伦·纽厄尔(Allen Newell,计算机科学家)、赫伯特·西蒙(Herbert Simon,诺贝尔经济学奖得主)、所罗门诺夫、Arthur Samuel(搞国际象棋的)、奥利弗·塞尔弗里奇(Oliver Selfridge,提出了Pandemonium)、 罗切斯特(Nathaniel Rochester,计算机设计)、 Trenchard More

  • 自然语言处理 NLP
  • 人类语言技术 HLT 最大的一个概念

语言的一种分类

  • 屈折语(英语)
  • 黏着语(日语)
  • 孤立语/分析语(汉语)

学科发展:

基于模板—基于规则—基于统计—深度学习

理性主义—经验主义—连结主义

研究内容大致可分为:

分类、序列标注、生成、结构预测(如依存句法分析)

任务

  • 机器翻译
  • 信息检索
  • 自动文摘
  • 问答系统
  • 信息过滤
  • 信息抽取
  • 文档分类
  • 情感分类
  • 文字编辑和自动校对
  • 文字识别 CR
  • 语音识别 ASR
  • 语音合成 TTS
  • 说话人识别

基本问题

  • Morphology形态学问题

    研究词 (word) 是如何由有意义的基本单位词素 (morphemes) 构成的。

  • Syntax句法问题

  • Semantics语义学问题

  • Pragmatics语用学问题

  • Phonetics语音学问题

主要困难

  • 歧义ambiguity
  • 未知语言现象

基本方法

  • 规则方法

  • 统计机器翻译方法

  • 神经机器翻译方法

自然语言通常是指一种自然地随文化演化的语言。世界语则为人造语言,即是一种为某些特定目的而创造的语言。

2 基于规则的方法

例子:Text2SQL

规则方法可以用于词法分析、句法分析、语义分析等

词法分析包括:

  • 形态还原(针对英语等),把句子中的词还原成它们的基本词形即原形

  • 分词(针对汉语、日语等)

    信息处理用现代汉语分词规范:GB-13715

    切分歧义问题

    依据词典库和规则库的匹配分词方法,具体包括FMM、RMM、BMM等

    具体算法参考:

    自然语言处理-中文分词相关算法(MM、RMM、BMM、HMM)_在自然语言处理中,基于机器学习算法的中文分词算法包括-CSDN博客

    利用歧义字串前驱字串和后继字串的句法语义和语用信息分词

  • 词性标注,为句子中的词标上预定义类别集合中的类

    按句法相关性+语义相关性分类

    兼类词问题

    规则方法、统计方法、基于转换的错误驱动方法

  • 命名实体识别

    匹配方法,即依赖词典、模板、正则表达式

机器翻译之规则翻译:

​ 分析、转换、生成

  • 基于词的
  • 基于句法结构转换的
  • 基于语义转换的
  • 基于中间语言的

3 文本分类

将给定的文本文档或句子分类为预定义的类别

  • 单标签多类别文本分类
  • 多标签多类别文本分类

基准公开数据集:SST、IMDb Review等

传统机器学习方法

  • 文本表示

    向量空间模型(vector space model, VSM),核心是将文本视为特征项的集合

    特征项: VSM 中最小的语言单元,可以是字、词、短语等。

    特征项权重:用𝑤表示特征项𝑡的权重,相应地,文本可以表示为 (𝑡1:𝑤1,𝑡2:𝑤2,…,𝑡𝑛:𝑤𝑛)或(𝑤1,𝑤2,…,𝑤𝑛),可以是

    • 布尔变量

    • 词频tf

      (权重通常取log)

    • 逆文档频率idf = log(N/df)

    • TF-IDF = tf*idf

  • 特征选择

    • 文档频率df:文档集中含有该特征的文档数目

    • 互信息MI

      互信息MI是点式互信息PMI的期望。

    • 信息增益IG

  • 分类算法

    • 朴素贝叶斯(多项式分布版)【重要!】
    • 线性判别
    • SVM
    • 最大熵模型
    • 无监督
    • 半监督

性能评估:召回率、精确率和 𝐹1值

  • 宏平均

  • 微平均

在二分类且类别互斥的情况下,𝑴𝒊𝒄𝒓𝒐_𝑷、𝑴𝒊𝒄𝒓𝒐_𝑹、𝑴𝒊𝒄𝒓𝒐_𝑭𝟏都与正确率 𝑨𝒄𝒄相等。

ROC、AUC

4 语言模型

n元文法模型(n-gram model)

希望计算一段文字的概率。

n元文法模型基于一个假设:第n个词出现与前n-1个词相关,而与其他任何词不相关。

语句 $ s = w_1w_2 \ldots w_m $ 的先验概率: $$ p(s) = p(w_1) \times p(w_2|w_1) \times p(w_3|w_1w_2) \times \cdots \times p(w_m|w_1 \ldots w_{m-1}) $$ $$ p(s) = \prod_{i=1}^{m} p(w_i|w_1 \ldots w_{i-1}) $$

说明:

  • $ w_i $ 可以是字、词、短语或词类等,统称为统计基元。通常以“词”(token)代之;

  • $ w_i $ 的概率取决于 $ w_1, \ldots, w_{i-1} $,条件序列 $ w_1, \ldots, w_{i-1} $ 称为 $ w_i $ 的历史(history)。

问题:历史基元越来越长,参数量迅速增长

解决:将两个历史映射到同一个等价类当且仅当这两个历史中的最近𝑛−1个基元相同,即只考虑历史基元与当前词构成𝑛元词序列,又被称为n-1阶马尔可夫链

可以在句子首尾两端增加两个标志\(w_0=<BOS>,w_{m+1}=<EOS>\)

应用示例 音字转换问题/拼音输入法

那么n-gram的参数怎么计算呢?

  • 最大似然估计

    说白了是用频率替换概率

  • 数据平滑方法

    调整最大似然估计得到的概率值 使零概率增值 使非零概率下调 劫富济贫 消除零概率

    目标:降低困惑度

    困惑度就是在测试集上对语言模型的评价

    测试语料 $ T $ 由 $ l_T $ 个句子构成:$ (s_1, s_2, \cdots, s_{l_T}) $,共含 $ w_T $ 个词(是总词数),那么,整个测试集的概率为: $$ p(T) = \prod_{i=1}^{l_T} p(s_i) $$ 困惑度: $$ PP_P(T) = 2^{-\frac{1}{w_T} \log_2 p(T)} $$

    数据平滑方法:加1法(重要!)

神经语言模型

n-gram的问题:训练用数据稀疏、忽略语义相似性

  • 前馈神经网络语言模型

    在使用网络之前要进行词向量表示 Word Embeddings

    【词表规模的确定: 1 . 训练数据中所有词; 2 频率高于某个阈值的所
    有词; 3 前 V 个频率最高的词】

    然后拼接条件词向量送入网络,输出下一个词的概率分布(本质是多分类问题)

    问题:还是仅对小窗口的历史信息进行建模,n-gram 语言模型仅考虑了前面𝑛−1个词的历史信息

  • 循环神经网络语言模型

5 文本表示

简单的向量空间模型有很多问题。下面介绍表示学习模型。

两种代表性学习方法:文本概念表示模型(LSA、LDA)、深度表示学习模型

词语

  • 基于语言模型的方法

    • NNLM

      《A Neural Probabilistic Language Model(2003)》

      词向量表示用look-up表,也是参数的一部分!所以可以认为,词的表示是这个神经网络的副产品。

  • 直接学习法【重点?】

    • C&W Model(Collobert & Weston Model)

      《Natural Language Processing (Almost) from Scratch(2011)》

      负采样,词向量优化的过程中,C&W模型希望每一个正样本应该比对应的负样本打分高至少1分。

      \((w_i, C)=\)...

      以及loss的公式要会写。

    • CBOW(Continuous Bag of Words,连续词袋模型) and SG(Skip gram Model,跳字模型)

      由Tomas Mikolov等人在2013年提出,均在Word2Vec框架下实现。

      CBOW利用上下文词语预测中心词语。

      SG采用中心词语预测所有上下文词语 。

      缺陷:不能处理多义词 、无法建模词序信息、静态词向量、难以处理 OOV(Out-of-Vocabulary)词......

    • GloVe(Global Vectors for Word Representation)

      相比上面两个模型, 考虑到了全局信息。

    • 字-词混合的表示学习

      词语由字或字符构成,词语可以获得一个表示,词语作为字的组合,通过字的表示也可以获得一个表示,两种表示结合得到更优表示。

短语

  • 词袋:直接词嵌入求平均

  • 递归自动编码器

    掌握结构、误差函数

  • 双语约束模型

    重构误差+语义误差

句子

  • 词袋:直接词嵌入求平均

  • PV-DM

    Paragraph Vector with sentence as Distributed Memory

    是 CBOW 的扩展,建模P的时候增加一个SenId嵌入即可

  • PV-DBOW

    Distributed Bag of Words version of Paragraph Vector

    是 SG 的扩展,该模型以
    句子为输入,以句子中随机抽样的词语为输出,即要求句子能够预测句中的任意词语。
    gram 模型相同

  • Skip-Thought

    类似于 PV-DBOW,但不同于它利用句子预测句中的词语, Skip Thought 利用当前句子预测前一个句子与后一个句子 𝑠𝑘+1。

  • CNN

    顺序地对上下文窗口进行卷积 总结局部信息,并利用池化层 Pooling 提取全局的重要信息,再经过其他网络层 卷积池化层 、Dropout 层 、线性层等得到固定维度的句子向量表达

文档

  • 词袋

  • 层次化模型

    CNN / LSTM提取特征,然后送入双向LSTM,最后不同时刻输出取平均,再softmax

6 卷积神经网络

三层前向神经网络

可以改善句子模型无法考虑到词序的问题

可以用于情感分类

问题:参数量太大、很难捕获局部不变性特征

解决:共享参数,且让每个隐藏层神经元只与局部输入相连,如2-gram

卷积神经网络

在早期的文献中,卷积一般默认为窄卷积。而目前的文献中,卷积一般默认为等宽卷积(通过padding)

结构特性:权重共享、局部连接、空间或时间上的次采样


文本CNN

N-gram特征(如句子中的长为3的词组有哪些)——希望用CNN提取

一维卷积练习

博客:一维卷积练习理解

句子:(N, D) 卷积核:(K, D) ,D是词嵌入的维度,N是句子长度

代码实现

PPT代码实现有误,conv1接受的输入,应该为 (1, 4, 7),即长度在最后,通道数在中间。


应用:情感分类

TextCNN 是利用卷积神经网络对文本进行分类的算法,由 Yoon Kim 在 “Convolutional Neural Networks for Sentence Classification” 一文 中提出. 是2014年的算法.

PPT那个经典示意图则来自另一篇论文:

Zhang, Ye, and Byron Wallace. "A sensitivity analysis of (and practitioners' guide to) convolutional neural networks for sentence classification."

利用多个不同size的kernel来提取句子中的关键信息(类似于多窗口大小的n-gram),从而能够更好地捕捉局部相关性。

其他应用如:

  • 自然语言推断(Natural Language Inference),输入两个句子,判断句子之间的关系(蕴含、对立、中立),解决这个问题的模型有BCNN、Pyramid

老师还补充讲了Q-Q Matching相关的研究

Q-Q Matching(Query-Query Matching)

泛指对两个 query 级别的文本(如句子、短语)进行语义对齐与相似度计算的研究方向,广泛应用于: 问答系统中的问题相似匹配(类似问题推荐)、语义检索(Query-Query Retrieval)、文本蕴含(两个句子是否有逻辑关系)

常用方法:

Siamese(孪生)结构:两个句子共享编码器,输出嵌入后计算距离(如余弦相似)。

交互式结构:MatchPyramid、BCNN

BCNN(Bilateral Convolutional Neural Network)

出处:
Yin et al., “ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs”, 2016

输入两个句子 A 和 B。分别通过共享卷积层和池化层提取局部表示。在多个层次上计算两句话之间的交互信息。
双向匹配(Bilateral Matching):不仅 A->B,还 B->A。
拼接各层特征,送入全连接分类层。

比Siamese CNN 强。

Pyramid Matching

出处:
Pang et al., “Text Matching as Image Recognition”, AAAI 2016

输入两个句子,计算它们的词与词之间的相似度(例如余弦相似),构造一个 相似度矩阵(match matrix)。
把这个矩阵看作一张“图片”。
用多层 CNN(带池化)提取空间(匹配模式)信息,从局部到全局,形成金字塔结构。
最后将提取的特征送入全连接层分类。

7 RNN

可以直接应用于

  • 情感分类(序列到类别,可以只取最后一个隐层,也可以取所有隐层平均)
  • 分词(同步的序列到序列)
  • 机器翻译(异步的序列到序列)(这个之前不知道诶)

反向传播公式要会推。

训练算法:BPTT

变体们:

  • 门控循环单元(Gated Recurrent Unit, GRU)

  • 长短期记忆神经网络(Long Short-Term Memory, LSTM)

  • 深度循环神经网络(堆叠、双向)

  • 递归神经网络(Recursive Neural Network, RvNN)

    让神经网络按指定结构理解信息,比如指定语法树。

    递归神经网络具有更为强大的表示能力,但是在实际应用中并不太流行。一个主要原因是,递归神经网络的输入是树/图结构,而这种结构需要花费很多人工去标注。

    适用于递归神经网络的训练算法:BPTS算法。

    • Syntactically-Untied RvNN:不同的句法成分类别对应不同的聚合函数

    • Matrix-Vector Recursive Neural Network (Richard Socher et al, 2012):每个节点由一个向量和一个矩阵来共同表示

    • Recursive Neural Tensor Network (Richard Socher et al, 2013):聚合时引入张量运算

  • Attentions

    • 软性注意力机制(soft attention mechanism)

      两个步骤是?

    • 常见注意力模型:

      • 句子分类
      • 文档分类(Hierarchical Attention Network)
      • 机器翻译

RNN的应用

  • 序列标注任务

    • 中文分词 CWS

      S:single

      B / M / E:begin / middle / end

    • 词性标注POS Tagging

    • 命名实体识别NER

      B / I:begin / inside

      包括实体检测、实体分类

      给了一个双向LSTM的例子

      F1要会算,记住是逐实体统计TP、FP、FN,调和平均别算错

  • 机器阅读理解

    了解数据集 SQuAD(Stanford Q A Dataset 2016)

    10w个(问题,原文,答案)三元组,答案出现在原文中,每个问题含有3个Ground-Truth答案

    指标:EM(exact match)、F1要会算,记住是分别和3个Ground-Truth匹配算F1,取最好结果。

    2.0版不是所有问题都能在原文找到答案,模型回答no answer才算对(即EM、F1=1)。

    解决该问题的模型:

    • Match-LSTM 运用attention和ptr

    • BiDAF

    • R-Net

    了解Open-Domain Question Answering(2017)

  • 自然语言推断

    Natural Language Inference

    输出前提P、假设H两个句子,输出三个关系之一:蕴含E、对立C、中立N

    解决该问题的典型模型:BiLSTM、ESIM

  • 文本生成:作诗、机器翻译、看图说话(Image Captioning)

    Visual Question Answering (VQA)

8 Transformer

自注意力机制(略)

Transformer架构(略)

回顾神经语言模型的缺陷(不能处理一词多义)

Embeddings from Language Model (ELMo,2018)

  • 采用多层BiLSTM

词向量会被输入到一个多层的双向LSTM中。每一层的输出都是整个句子的一个表示。对于每个词,ELMo将该词对应的所有LSTM层的输出(包括原始词嵌入、前向LSTM的最后一层输出和后向LSTM的最后一层输出)进行加权求和,权重是在实际任务中学习得到的,以适应不同的下游任务需求。

预训练任务,采用了独特的双向训练方法:给定一个词序列,模型尝试预测序列中每个位置的下一个词。与传统的单向语言模型不同,它会同时训练两个方向的LSTM,一个是正向(从前往后)预测,另一个是反向(从后往前)预测。

GLUE(略)

BERT(略)

BART(略)

T5(略)

基于Transformer的文本-视觉预训练模型

  • Masked Language Modeling (MLM)
  • Masked Region Modeling (MRM)
  • Image-Text Matching (ITM)
  • CLIP(略)

9 信息抽取

定义(Grishman, 1997)

从自然语言文本中抽取指定类型的实体、关系、事件等事实信息,并形成结构化数据输出的文本处理技术

目标:从非结构化的文本内容中提取特定的信息。

总之要点是结构化的数据

主要任务:

– 命名实体识别(Named Entity Recognition,NER)
– 实体链接(Entity Linking, EL)
– 关系抽取(Relation Extraction,RE)
– 事件抽取(Event Extraction)
– 时间表达式识别(Temporal Expression)
– 模板填充(Template Filling)
– 话题检测于跟踪(Topic Detection and Tracking,TDT )

命名实体识别

  • 基于规则的

  • 基于有监督机器学习的

    • 基于HMM的

      给定一个待标注的句子\(𝑋 = 𝑥_0⋯𝑥_T\)(称为观测值),序列标注模型
      希望搜索一个标签序列\(𝑌 = 𝑦_0⋯𝑦_T\)(称作状态值),使得后验概率
      𝑃(𝑌|𝑋)最大。

      建模过程:频率替代概率

      利用维特比算法解码最可能的隐状态

    • 基于CRF的

    • 基于深度神经网络的:CNN、BiLSTM、BERT、BART、LLM

实体消歧

分为共指消解(Coreference Resolution)、实体链接(Entity Linking)

个人区分方法:哪些(待处理文本)指你?你是(先验知识中的)哪个?

共指消解的目标就是将文档中所有指称进行聚类,将指向同一实体的所有指称归为一类

实体链接的目标是学习一个映射函数,把文档中每一个实体指称$𝑀 = {𝑚_1, 𝑚_2, ⋯ , 𝑚_𝑁} \(准确链接到实体概念集合\)𝐸 = {𝑒_1, 𝑒_2, ⋯ , 𝑒_𝑇 }$中的某个实体

实体链接步骤

  • 确定候选实体概念集合

    方法:构造“指称、实体概念”词典

  • 候选实体概念排序,可分为基于局部的实体排序和基于全局的实体排序(基于全局的就是几个指称同时进行实体链接)

    • 基于局部的:

      上下文+指称词语送入模型作为特征,实体类别+实体词语送入另一个模型作为特征,求余弦相似度。

    • 基于全局的:

      包含两个步骤

      1. 为文档中的指称及其对应的候选实体概念集合构建语义相关图
        (Referent Graph,RG)

        加权无向图𝐺 =
        (𝑉, 𝐸),其中𝑉包含所有指称与候选实体,𝐸中包括两类边,“指称-实体”,“实体-实体”边

      2. 在相关图RG上进行实体链接的全局推断

实体链接评价

要会算F1!先算指称集合M的交集,在这个交集的基础上,再计算实体链接结果E的交集,此时剩下的个数就是TP。P和R的分母则分别是|E’|和|E|

  • 系统结果(M, E):

  • 实体1 -> ID1

  • 实体2 -> ID2

  • 实体3 -> ID3

  • 实体4 -> ID4

  • 人工标注结果(M', E'):

  • 实体1 -> ID1

  • 实体2 -> ID2

  • 实体5 -> ID5

  • Precision = |E*| / |E'|

= 2 / 4 = 0.5 (正确匹配的实体ID数 / 系统给出的所有实体ID数)

  • Recall = |E*| / |E|

= 2 / 3 = 0.67 (正确匹配的实体ID数 / 人工标注的所有实体ID数)

关系抽取

定义:识别文本中的实体并判别实体间关系

𝒏-元关系

  • 关系抽取形式化

    关系类别繁多,故探讨限定领域给定关系类别集合下的关系识别任务。

  • 基于深度神经网络的关系分类方法

    • 基于分布式表示的关系分类

      早期分布式方法的核心思想:

      1. 所有特征采用分布式表示,以克服数据稀疏与语义鸿沟问题
      2. 采用局部表示捕捉实体对周围的上下文词汇化特征;
      3. 采用卷积神经网络捕捉实体对所在句子全局信息。

      词汇化分布式表示考虑三类特征:

      1. 实体对(𝑒_1, 𝑒_2)自身;
      2. 两个实体的上下文词汇;
      3. 实体对在语义知识库(例如英文的WordNet、中文的HowNet等)中的上位词。(如姚明->男人)

      具体模型如基于CNN的、基于RvNN的、基于BiLSTM的、基于BERT的、基于LLM的

自动评价

会算F1!

事件抽取

定义:针对特定领域的事件进行事件元素的抽取

事件抽取旨在抽取表明事件类型的触发词及其对应的事件元素(或者说是事件参与者和事件属性)

ACE中定义了8大类33子类的事件类型。

ACE是Automatic Content Extraction(自动内容抽取)的缩写,它是一个旨在开发和标准化信息抽取技术的项目,特别是针对事件、关系和实体的自动识别与分类。ACE项目由美国国家标准与技术研究院(NIST)发起并维护。

每种类型的事件可以通过一个模板表示,该模板可以是通用模板,也可以是事件类型相关的特定模板。通用模板包含36个槽位,其中一个槽位需要填充触发词,其余槽位对应35个角色(事件属性)

  • 基于联合模型的事件抽取

  • 基于分布式模型的事件抽取方法

    具体模型包括基于CNN的、基于BiGRU的、基于Seq2Seq的、基于LLM的

自动评价

几乎所有模型都将事件抽取任务分解为:触发词识别、事件角色分类

其中,触发词识别又分为触发词定位、事件类型分类

事件角色分类又分为事件元素识别、角色分类

客观评测一般对四个子任务分别进行测试。

押题

1. 概念

一些定性的解答

2. 基于规则的方法

分词算法、一些定性的解答

3. 文本分类

特征选择相关计算、多项式贝叶斯分类、F1等计算

4. 语言模型

n-gram相关计算

FNN伪代码/计算

5. 文本表示

几个模型的细节,loss计算等

小概率考短语和句子的模型

6.CNN

一维卷积计算

7. RNN

各种模型的公式、RNN的反向传播

8. Transformer

Transformer相比CNN、RNN的优势?

自注意力机制计算

transformer结构

一些关于transformer的经典问题

ELMo的结构

9. 信息抽取

可能会考信息抽取、实体消歧、关系抽取、事件抽取的基本概念。

实体链接的基本方法描述。

关系抽取的方法特点。

事件抽取的步骤。

F1的计算。

很小概率考维特比算法。

其他

  1. 用反向传播公式推导解释RNN解决不了长程依赖的原因?

    (略)

  2. 目前中文分词的难点?

    分词歧义消解、错别字谐音字规范化、分词问题。

    不包括未登录词的识别?

    (答案可能有误)

  3. Bert输入为什么要进行位置标注?

    词在语句中的位置非常重要。使用同样的词语,排列位置不同,语义可能不同。Bert使用堆叠的双向Transformer Encoder,Transformer主要核心是attention注意力机制,attention机制无法捕捉词顺序,类似一个升级版的“词袋”模型。故需要进行位置标注添加位置信息。

  4. 隐马尔可夫研究的三大问题:评估问题,解码问题,学习问题

    解决隐马尔可夫评估问题的方法:前向算法,后向算法

    解决隐马尔可夫解码问题的方法:维特比算法

    解决隐马尔可夫无法利用上下文信息的方法:最大熵模型

    解决隐马尔可夫输出之间独立问题的方法:条件随机场CRF

  5. Transformer的根号d

    点积结果除以根号d的原因是为了防止内积结果过大导致梯度消失或爆炸。具体来说:当输入向量维度d较大时,点积结果的模长可能变得非常大;过大的值经过softmax函数会导致梯度趋近于0(因为softmax在极端值处导数小);除以√d可以使得输入到softmax的值方差保持稳定,缓解上述问题。

维特比算法

维特比算法(Viterbi Algorithm)是用于隐马尔可夫模型(HMM)中解码问题的一种动态规划算法。它的目标是:给定一个观察序列和HMM参数,找出最有可能生成这个观察序列的隐藏状态序列。

给定一个观测序列 O = {o₁, o₂, ..., oₜ},我们要找出对应的最优状态序列 Q = {q₁, q₂, ..., qₜ},使得该状态序列在所有可能的状态序列中,产生这个观测序列的概率最大。

定义 δ(t, i) 表示在时间 t 处于状态 i 时,前 t 个观测序列为 o₁~oₜ 的最大概率路径的概率值。

递推公式如下:

\[\delta(t, i) = \max_{1 \leq j \leq N} [\delta(t-1, j) \cdot A[j][i]] \cdot B[i][o_t] \]

假设我们有两个天气状态(晴天 sunny 和 雨天 rainy),以及三种活动(walk, shop, clean)。根据天气决定活动。

初始概率 π:

π[Sunny] = 0.6
π[Rainy]  = 0.4

状态转移矩阵 A:

          Sunny   Rainy
Sunny     0.7      0.3
Rainy     0.4      0.6

观测概率矩阵 B:

           Walk   Shop   Clean
Sunny      0.5     0.4     0.1
Rainy      0.1     0.3     0.6

给定观测序列 O:

O = [Walk, Shop, Clean]

我们要求出最有可能的状态序列 Q。

对于第一个观测 Walk:

\[\delta(1, Sunny) = \pi(Sunny) \cdot B(Sunny, Walk) = 0.6 \cdot 0.5 = 0.3 \\ \delta(1, Rainy) = \pi(Rainy) \cdot B(Rainy, Walk) = 0.4 \cdot 0.1 = 0.04 \]

ψ(1, Sunny) = None
ψ(1, Rainy) = None

步骤 2:递推(t=2)

当前观测为 Shop。

对于 Sunny 状态:

\[\begin{align*} \text{From Sunny: } & \delta(1, Sunny) \cdot A(Sunny→Sunny) \cdot B(Sunny, Shop) = 0.3 \cdot 0.7 \cdot 0.4 = 0.084 \\ \text{From Rainy: } & \delta(1, Rainy) \cdot A(Rainy→Sunny) \cdot B(Sunny, Shop) = 0.04 \cdot 0.4 \cdot 0.4 = 0.0064 \\ \Rightarrow \delta(2, Sunny) &= \max(0.084, 0.0064) = 0.084 \\ \psi(2, Sunny) &= \text{Sunny} \end{align*} \]

对于 Rainy 状态:

\[\begin{align*} \text{From Sunny: } & \delta(1, Sunny) \cdot A(Sunny→Rainy) \cdot B(Rainy, Shop) = 0.3 \cdot 0.3 \cdot 0.3 = 0.027 \\ \text{From Rainy: } & \delta(1, Rainy) \cdot A(Rainy→Rainy) \cdot B(Rainy, Shop) = 0.04 \cdot 0.6 \cdot 0.3 = 0.0072 \\ \Rightarrow \delta(2, Rainy) &= \max(0.027, 0.0072) = 0.027 \\ \psi(2, Rainy) &= \text{Sunny} \end{align*} \]

步骤 3:递推(t=3)

当前观测为 Clean。

对于 Sunny 状态:

\[\begin{align*} \text{From Sunny: } & \delta(2, Sunny) \cdot A(Sunny→Sunny) \cdot B(Sunny, Clean) = 0.084 \cdot 0.7 \cdot 0.1 = 0.00588 \\ \text{From Rainy: } & \delta(2, Rainy) \cdot A(Rainy→Sunny) \cdot B(Sunny, Clean) = 0.027 \cdot 0.4 \cdot 0.1 = 0.00108 \\ \Rightarrow \delta(3, Sunny) &= \max(0.00588, 0.00108) = 0.00588 \\ \psi(3, Sunny) &= \text{Sunny} \end{align*} \]

对于 Rainy 状态:

\[\begin{align*} \text{From Sunny: } & \delta(2, Sunny) \cdot A(Sunny→Rainy) \cdot B(Rainy, Clean) = 0.084 \cdot 0.3 \cdot 0.6 = 0.01512 \\ \text{From Rainy: } & \delta(2, Rainy) \cdot A(Rainy→Rainy) \cdot B(Rainy, Clean) = 0.027 \cdot 0.6 \cdot 0.6 = 0.00972 \\ \Rightarrow \delta(3, Rainy) &= \max(0.01512, 0.00972) = 0.01512 \\ \psi(3, Rainy) &= \text{Sunny} \end{align*} \]

找到最终时刻(t=3)的最大概率状态:

\[\max(\delta(3, Sunny), \delta(3, Rainy)) = \max(0.00588, 0.01512) = 0.01512 \]

所以最后状态是 Rainy。

然后根据 ψ 指针回溯:

  • ψ(3, Rainy) = Sunny
  • ψ(2, Sunny) = Sunny
  • ψ(1, Sunny) = None

所以最优状态序列是:

Q = [Sunny, Sunny, Rainy]
posted @ 2025-07-01 17:42  藤君  阅读(291)  评论(0)    收藏  举报