赞
踩
第一次知道CRF是在参加DeeCamp2019的时候知道的,当时有人在强化学习中使用它,结合一般的强化学习(Q-learning,策略梯度,期望价值/动作回报函数),马尔可夫随机场,蒙特卡洛搜索树以及CRF进行的快手小游戏开发。后来,在百度的PaddlePaddleNLP的课程中知道,它在NLP领域也使用非常多,尤其是在注意力机制模型中,比如:bert等transformer模型。
介绍——在命名实体识别任务中,BiLSTM模型中CRF层的通用思想
详细的实例——通过实例来一步步展示CRF的工作原理
实现——CRF层的一步步实现过程
谁可以读本文——本文适用与NLP初级入门者或者AI其他相关领域
需要有的基础知识:你只需要知道什么是命名实体识别,如果你不懂神经网络,条件随机场(CRF)或者其它相关知识,不必担心,本文将向你展示CRF层是如何工作的。本文将尽可能的讲的通俗易懂。
基于神经网络的方法,在命名实体识别任务中非常流行和普遍。在文献【1】中,作者提出了Bi-LSTM模型用于实体识别任务中,在模型中用到了字嵌入和词嵌入。本文将向你展示CRF层是如何工作的。
如果你不知道Bi-LSTM和CRF是什么,你只需要记住他们分别是命名实体识别模型中的两个层。
我们假设我们的数据集中有两类实体——人名和地名,与之相对应在我们的训练数据集中,有五类标签:
B-Person, I- Person,B-Organization,I-Organization, O
假设句子x由五个字符w1,w2,w3,w4,w5组成,其中【w1,w2】为人名类实体,【w3】为地名类实体,其他字符标签为“O”。
以下将给出模型的结构:
第一,句子x中的每一个单元都代表着由字嵌入或词嵌入构成的向量。其中,字嵌入是随机初始化的,词嵌入是通过数据训练得到的。所有的嵌入在训练过程中都会调整到最优。
第二,这些字或词嵌入为BiLSTM-CRF模型的输入,输出的是句子x中每个单元的标签。
图1. Bi-LSTM结构图
尽管一般不需要详细了解BiLSTM层的原理,但是为了更容易知道CRF层的运行原理,我们需要知道BiLSTM的输出层。
图2.Bi-LSTM标签预测原理图
如上图所示,BiLSTM层的输出为每一个标签的预测分值,例如,对于单元w0,BiLSTM层输出的是1.5 (B-Person), 0.9 (I-Person), 0.1 (B-Organization), 0.08 (I-Organization) and 0.05 (O). 这些分值将作为CRF的输入。
你也许已经发现了,即使没有CRF层,我们也可以训练一个BiLSTM命名实体识别模型,如图3.所示:
图3.去除CRF的BiLSTM命名实体识别模型
由于BiLSTM的输出为单元的每一个标签分值,我们可以挑选分值最高的一个作为该单元的标签。例如,对于单元w0,“B-Person”有最高分值—— 1.5,因此我们可以挑选“B-Person”作为w0的预测标签。同理,我们可以得到w1——“I-Person”,w2—— “O” ,w3——“B-Organization”,w4——“O”。
虽然我们可以得到句子x中每个单元的正确标签,但是我们不能保证标签每次都是预测正确的。例如,图4.中的例子,标签序列是“I-Organization I-Person” and “B-Organization I-Person”,很显然这是错误的。
图4. 去除CRF层的BiLSTM模型
CRF层可以为最后预测的标签添加一些约束来保证预测的标签是合法的。在训练数据训练过程中,这些约束可以通过CRF层自动学习到。
这些约束可以是:
有了这些约束,标签序列预测中非法序列出现的概率将会大大降低。
【飞桨晚报】序列标注如何使用条件随机场实现
序列标注问题是自然语言中最常见的问题,在机器学习时代,常见的序列标注问题的解决方案都是借助于HMM模型,最大熵模型,CRF模型。深度学习火起来之后,一般 RNN 模型输出标注序列的办法就是简单的贪心算法,在每个词上做 argmax,忽略了类别之间的时序依存关系。因为单独RNN、LSTM预测出来的标注可能会出现(I-Organization->I-Person,B-Organization ->I-Person)这样的问题序列。但这种错误在CRF中是不存在的,因为CRF的特征函数的存在就是为了对输入序列观察、学习各种特征,这些特征就是在限定窗口size下的各种词之间的关系。
线性链条件随机场(Linear Chain Conditional Random Field),是基于马尔科夫性建模时序序列的有效方法。算法上可以利用损失的函数特点做前向计算;用维特比算法(实际上是动态规划,因此比贪心算法肯定好)做逆向解码。形式上,给定发射特征(由 RNN 编码器获得)矩阵和转移(CRF 参数矩阵,需要在计算图中被损失函数反向优化)矩阵T,可计算给定输入输出的匹配得分。
飞桨提供了CRF 的接口,同时支持损失函数计算和反向解码等功能。只需调用fluid.layers.linear_chain_crf 内置 CRF 函数即可进行CRF状态转换解码。
【相关阅读】《用飞桨做命名实体识别,手把手教你实现经典模型 BiGRU + CRF 》:https://mp.weixin.qq.com/s/5clEhdiFxG3CVn8TPEb2Kw
更多内容可以去百度的AIStudio,百度Brain,百度PaddlePaddle官网上了解更多。
https://www.jianshu.com/p/97cb3b6db573
https://arxiv.org/abs/1603.01360
https://mp.weixin.qq.com/s/ij9VX7-xaQzfHUDwUlBbwA
https://mp.weixin.qq.com/s/aq5Yfa9FV1OEizD-pNqHWg
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。