RNN原理

  • Recurrent Neural Network,循环神经网络

SimpleRNN

  • SimpleRNN其结构如下图所示:
    • 输入为一个向量序列\(\{x_0,x_1,x_2...x_n\}\)
    • 在时间步 \(t\),序列的元素 \(x_t\) 和上一时间步的输出 $h_{t-1} $一起,经过RNN单元处理,产生输出 \(h_t\); \[h_t=ϕ(Wx_t+Uh_{t−1})\] \[y_t=Vh_t\]
    • \(h_t\) 为隐藏层状态,携带了序列截止时间步 \(t\) 的信息;\(y_t\) 为时间步 \(t\) 的输出;\(h_t\) 继续作为下一时间步的输入
    • 整个序列被处理完,最终的输出 \(y_n\) 即为RNN的输出;根据情况,也可返回所有的输出序列 \(\{y_0,y_1,y_2...y_n\}\)
    • 序列的每个元素是经过同一个RNN处理,因此待学习的参数只有一组:\(W,U,V\)

基于HMM和Viterbi算法的序列标注

HMM生成模型

给定句子 \(S\),对应的输出词性序列 \(T\)HMM模型的联合概率: \[ \begin{align} P(T|S) &= \frac{P(S|T)\cdot P(T)}{P(S)}\\ P(S,T) &= P(S|T)\cdot P(T)\\ &= \prod_{i=1}^{n}P(w_i|T)\cdot P(T)\\ &= \prod_{i=1}^{n}P(w_i|t_i)\cdot P(T)\\ &= \prod_{i=1}^{n}P(w_i|t_i)\cdot P(t_i|t_{i-1})\\ \end{align} \]


Transformer模型及源代码

1
2
3
4
5
6
7
8
9
10
import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
import math, copy, time
from torch.autograd import Variable
import matplotlib.pyplot as plt
import seaborn
seaborn.set_context(context='talk')
%matplotlib inline

BiLSTM和CRF算法的序列标注原理

CRF原理

条件随机场(conditional_random_field),是一类判别型算法,特别适合于预测任务,任务中的 上下文信息或临近状态会影响当前状态 。如序列标注任务: >判别式模型(discriminative model)计算条件概率,而生成式模型(generative model)计算联合概率分布