序列模型
隐马尔可夫模型 Hidden Markov Model
HMM是最简单的序列模型,满足2条独立性假设:
- 马尔可夫性:每个隐藏状态仅取决于前一隐藏状态,即\(\text{Pr}[h_t \mid h_0, h_1, \dots h_{t-1}] = \text{Pr}[h_t \mid h_{t-1}]\)。
- 观测独立性:每个输出结果仅取决于当前隐藏状态,即\(\text{Pr}[y_t \mid h_0, h_1, \dots h_{t}, y_0, y_1, \dots, y_{t-1}] = \text{Pr}[y_t \mid h_t]\)。
HMM的构成部分有:
- 隐藏状态集\(Q = \{q_1, q_2 ,\dots, q_n \}\):任意隐藏状态\(h_i\)一定属于\(Q\)。
- 输出结果集\(V = \{v_1, v_2, \dots, v_m \}\):任意输出结果\(y_i\)一定属于\(V\)。
- 状态转移矩阵\(A_{(nn)}\):描述隐藏状态之间转换的概率,其中\(a_{ij}\)表示从\(q_i\)转移到\(q_j\)的概率,即\(\text{Pr}[h_{t+1} = q_j \mid h_{t} = q_i]\)。
- 发射概率矩阵\(B_{(nm)}\):描述某个隐藏状态下得到某个输出的概率,其中\(b_{ij}\)表示隐藏状态\(q_i\)下输出\(y_j\)的概率,即\(\text{Pr}[y_{t} = v_j \mid h_{t} = q_i]\)。
- 初始状态\(\pi_{(n)}\):初始状态是某个隐藏状态的概率,其中\(\pi_i = \text{Pr}[h_0 = q_i]\)。
HMM能解决的常见问题包括:
- 评估:对于一个HMM模型,判断某个输出结果\(\tilde{y}\)在该模型下的概率。
- 解码:对于一个HMM模型,给定一个输出结果\(\tilde{y}\),寻找其最有可能的对应隐藏序列\(\tilde{h}\)。
- 学习:给定若干输出结果\(\{\tilde{y}\}\),构建最有可能输出这些输出的HMM模型。
以下通过NER问题(Named Entity Recogniti)展示HMM在解码问题上的流程。
NER问题给定训练集和测试集,数据集中每一条数据是一个句子,句子中每个词语有对应的意义标注。需要通过训练集得出一个HMM,再用这个HMM对测试集的句子中每个词语进行标注,通过比较HMM的标注和真实标注衡量准确率。
我们可以将HMM中的\(Q\)视为标注集合,\(V\)视为词语集合。通过训练集得到HMM无需像CNN等进行迭代训练,而是直接统计频率并平滑化算出\(\pi, A, B\)。
具体地,\(\pi_{i}\)直接由每个标记出现在句首的次数除以总句子数得到,此外,为了保证不要出现某个值为0导致HMM永远不会选择这条路径,我们对所有的分子加1(保证非0)并分母加\(|Q|\)(保证\(\sum \pi = 1\)),得到平滑化的\(\{\pi\}\)。
类似的,\(A\)的计算也是通过频率统计和平滑化得到。计算\(a_{ij}\)为统计句子中\(q_{i}\)之后紧挨着\(q_{j}\)的次数除以\(q_{i}\)后有单词的次数(句末以外\(q_{i}\)出现次数),再分子加1分母加\(|Q|\)得到。\(B\)的计算也是通过频率统计和平滑化得到。计算\(b_{ij}\)为\(q_{i}\)输出\(v_{j}\)的次数除以\(q_{i}\)出现次数,再分子加1分母加\(|V|\)得到。
这样通过训练集直接计算出一个HMM:\(\lambda= \{\pi, A, B, Q, V\}\)。接下来使用\(\lambda\)在测试集上推断。
测试的时候通过Viterbi算法实现。目标是根据\(\lambda\)和给定的\(Y\),还原出最优可能的\(H\),即最大化\(\text{Pr}[H \mid Y]\)。由于\(\text{Pr}[H \mid Y] = \dfrac{\text{Pr}[H , Y]}{{\text{Pr}[Y]}}\),而\(Y\)是已知的,于是条件概率和积概率只差常数倍,于是目标转化为最大化\(\text{Pr}[H, Y]\)。而\(\text{Pr}[H, Y] = \text{Pr}[h_0] \cdot \text{Pr}[y_0 \mid h_0] \cdot \text{Pr}[h_1 \mid h_0, y_0] \cdot \text{Pr}[y_1 \mid h_0, y_0, h_1] \cdots \text{Pr}[y_{T-1} \mid h_0, y_0, h_1, y_1, \cdots, h_{T-1}] \\ = \text{Pr}[h_0] \cdot \text{Pr}[y_0 \mid h_0] \cdot \text{Pr}[h_1 \mid h_0] \cdot \text{Pr}[y_1 \mid h_1] \cdots \text{Pr}[y_{T-1} \mid h_{T-1}] \\ = \pi_{h_0} b_{h_0, y_0} \prod\limits_{t=1}^{T-1} (a_{h_{t-1},h_{t}} \cdot b_{h_{t},y_{t}})\)
由于只需要最大化,为了计算简便和精度要求,对等式两边同时取对数,得到\(\log \text{Pr}[H, Y] = \log \pi_{h_0} + \log b_{h_0, y_0} + \sum\limits_{t=1}^{T-1} (\log a_{h_{t-1}, h_{t}} + \log b_{h_t, y_t})\)。以下\(\pi, A, B\)默认指的是对数概率,即原值取对数后得到的值。
Viterbi算法使用动态规划,记录每一步的当前概率最大值和当前最大值由哪一状态更新而来,最后求得全局概率最大值后反向回溯更新路径得到所求\(\hat{H}\)。具体地,令\(\delta_t(q_j)\)表示\(t\)时刻,以\(q_j\)结尾的隐序列最大概率值,\(\psi_t(q_j)\)表示这个最大值是由\(t-1\)时刻的哪个序列更新而来。初始\(\delta_0(q_j) = \pi(q_j) + b_{q_j, y_0}\),更新\(\delta_t(q_j) = \max\limits_{q_i}\{\delta_{t-1}(q_i) + a_{q_i, q_j} \} + b_{q_j, y_t}\),而\(\psi_t(q_j) = \arg\max\limits_{q_i}\{\delta_{t-1}(q_i) + a_{q_i, q_j} \}\)。这样一直推理到最后,找到最大的一个\(\delta_{T-1}(q_j)\),沿着其\(\psi\)序列回溯即得到所求的标记序列。
条件随机场 Conditional Random Field
CRF是一种判别式序列模型,直接对\(\text{Pr}[Y \mid X]\)建模。满足假设:
- 马尔可夫性:每个输出状态仅取决于前后紧邻输出状态和整个观测序列,即\(\text{Pr}[y_t \mid X,Y] = \text{Pr}[y_t \mid X, y_{t-1}, y_{t+1}]\)。
- 实际使用时由于参数限制,\(y_t\)不依赖于整个观测序列,而是只取于\(x_t\)相近的几个,例如只取\(x_t\),此时\(\text{Pr}[y_t \mid X,Y] = \text{Pr}[y_t \mid x_{t}, y_{t-1}, y_{t+1}]\)。

解决自然语言处理问题的基础方法:基于时序的模型。如HMM, CRF, RNN, transformer等
浙公网安备 33010602011771号