转自大神:https://createmomo.github.io/
自己????记录下,方便后面复习一波:
自己的理解:其实CRF 就是 HMM 的变体,本质上是一样的,但是CRF经过变换后可以减小未出现pair的几率,这个HMM做不到
这个模型用来找到,一串文本正确的tag序列。
1)了解BiLSTM-CRF 模型
常识了解下
模型样子:
为什么我们需要CRF这层,直接挑出最大的概率的那个不行吗?还真不行,CRF会学习到合适的表达
举反例:
原因总结: 比如某些tag不能出现在开头,比如 一个词语由几个词组成,这几个词的标签种类应该一样
2)介绍一波CRF 的 的两个分数
了解一下CRF层的两个score,
发射概率 emission score 来自 BiLSTM层吐出的结果: 某个text 被标记为不同tag的几率
转移概率 transition score 来自BiLSTM训练过程中,自动获得的矩阵(需要啊初始化):某个tag 下一个tag是什么的几率
注意这里 其实 转移概率矩阵就告诉了我们,哪些tag大几率出现在开头,某个tag后面正常应该接什么tag。
3)了解一波CRF 的loss function
目标其实很明确:找到正确路径的几率 = 需要正确路径概率/所有路径概率
如何定义路径的概率
如何计算所有路径的概率
难道需要穷举所有路径?很明显不用
4)real path score
注意其实新增了 start end 2个词
计算正确的概率,我们就是要算出这两个概率,发射概率,转移概率
金标准,正确的路径好算: 训练的时候,其实我们是知道正确答案的
5)问题的计算所有路径的概率:
回忆一下,
注意因为我们目标是最大化某个概率,但是实际训练中,我们一般是最小化loss,所以数学变化一下,加负号,顺便再来个log操作,骚气!
再来,假设我们现在训练模型,送一个短句子,假设个短的句子 [w0, w1, w2], tag=[ l1, l2] 两种,我们已经有了两种scores
好了,开始 回忆下我们的目标:
前面算好的,可以用上,如果w0的total score算好了,我们可以用它来算接下来的w0 -> w1的total scores
以此类推,我们有两个变量,之前的previous ,和现在的 obs 观察到的 emission scores,
刚开始 total scores 就是只有发射概率,就一个字,就是某个子被标记为不同tag的概率 x01, x02
ok,接下来 两个text,两个词语, 我们已经有了obs(上一步的结果), previous(转移概率查表)
第二步,现在观察到的obs 中的 w2的发射概率是 x11, x12, 之前看到的发射概率存在 previous中
数学变化一波,先别管为啥,后面有用,--》 感觉就是这个操作,可以正好弄出所有的路径,在矩阵中表示出来
这个时候,注意 sum 之前的 previous,现在的obs,以及现在有了转移概率,相加一波
注意,previous不是只存 发射概率,就是存 上一步的total scores,这里变换形式,存下previous
开始计算 w0 -> w1 的total scores:
同理,到第三个词语了,继续,截图太累,就放链接了,原理同上,。。。
直接放结果:
6) 如果训练ok了,那么来一个推理呗
上面 维特比算法
开始推断
举例: