ALBERT+BiLSTM+CRF实现序列标注
一、模型框架图

二、分层介绍
1)ALBERT层
albert是以单个汉字作为输入的(本次配置最大为128个,短句做padding),两边分别加上开始标识CLS和结束标识SEP,输出的是每个输入word的embedding。在该框架中其实主要就是利用了预训练模型albert的词嵌入功能,在此基础上fine-tuning其后面的连接参数,也就是albert内部的训练参数不参与训练。
2)BiLSTM层
该层的输入是albert的embedding输出,一般中间会加个project_layer,保证其输出是[batch_szie,num_steps, num_tags]。batch_size为模型当中batch的大小,num_steps为输入句子的长度,本次配置为最大128,num_tags为序列标注的个数,如图中的序列标注一共是5个,也就是会输出每个词在5个tag上的分数,由于没有做softmax归一化,所以不能称之为概率值。
3)CRF层
如果没有CRF层,直接按BiLSTM每个词在5个tag的最大分数作为输出的话,可能会出现【B-Person,O,I-Person,O,I-Location】这种序列,显然不符合实际情况。CRF层可以加入一些约束条件,从而保证最终预测结果是有效的。
例如:
句子的开头应该是“B-”或“O”,而不是“I-”。
“B-label1 I-label2 I-label3…”,在该模式中,类别1,2,3应该是同一种实体类别。比如,“B-Person I-Person” 是正确的,而“B-Person I-Location”则是错误的。
“O I-label”是错误的,命名实体的开头应该是“B-”而不是“I-”。
这些约束可以在训练数据时被CRF层自动学习得到,这种异常的序列出现概率就会大大降低。
三、如何训练?
在从BiLSTM层进入到CRF层时,会有多种路径选择,像上图中会有5x5x5x5x5种路径可能,假设s是我们要寻找的正确路径,其出现的概率如下:

es是当前序列的分数,分母是所有序列分数的和,这也是我们的求解loss function。
传统CRF主要由特征函数组成,一个是状态特征函数,一个是转移特征函数,函数的值要么为1,要么为0,通过训练其权重λ来改变特征函数的贡献。而这里对路径s的训练没有权重,但也是由两部分组成:
1)EmissionScore(发射分数):由BiLSTM层训练输出的每个位置对各个tag的分数,就是上图中输出的红色字体分数。
2)TransitionScore (转移分数): 这部分主要由CRF层训练得到,如下图

所以,S=EmissionScore+TransitionScore
举例:
对于序列来说,比如有一个序列是“START B-Person I-Person O B-Location O END”,则
EmissionScore=x0,START+x1,B-Person+x2,I-Person+x3,O+x4,B-Location+x5,O+x6,END
TransitionScore=tSTART−>B-Person+tB−Person−>I-Person+tI-Person−>O+t0−>B-Location+tB-Location−>O+tO−>END
es=eEmissionScore+TransitionScore
训练过程:
在训练的时候,BiLSTM层和CRF层的所有参数都会统一求导纳入到训练步骤中,BiLSTM层主要训练其神经网络的参数,而CRF层的参数就是上述转移矩阵,会首先初始化一个转移矩阵参数,然后通过求导不断改变其转移矩阵参数,其训练的目标就是使得正确的路径是所有路径中出现的概率最大,也就是上文的P(y|x)最大。
#初始化转移矩阵
trans = tf.get_variable("transitions",shape=[self.num_tags + 1, self.num_tags + 1],initializer=self.initializer) #CRF层的返回结果就是最新的转移矩阵参数,每一次更新后,再把新的参数传进去,继续更新
log_likelihood, trans = crf_log_likelihood(
inputs=logits,
tag_indices=targets,
transition_params=trans,
sequence_lengths=lengths+1)
损失函数通常会变为-log(p(y|x)),这样就转换成了求解最小值,利用梯度下降法求解即可。
总结:其实BiLSTM+CRF与传统CRF类似,都是有两部分组成,只不过BiLSTM层负责了发射分数的训练,而CRF层负责转移分数的训练。
ALBERT+BiLSTM+CRF实现序列标注的更多相关文章
- TensorFlow教程——Bi-LSTM+CRF进行序列标注(代码浅析)
https://blog.csdn.net/guolindonggld/article/details/79044574 Bi-LSTM 使用TensorFlow构建Bi-LSTM时经常是下面的代码: ...
- NLP(二十五)实现ALBERT+Bi-LSTM+CRF模型
在文章NLP(二十四)利用ALBERT实现命名实体识别中,笔者介绍了ALBERT+Bi-LSTM模型在命名实体识别方面的应用. 在本文中,笔者将介绍如何实现ALBERT+Bi-LSTM+CRF ...
- LSTM+CRF进行序列标注
为什么使用LSTM+CRF进行序列标注 直接使用LSTM进行序列标注时只考虑了输入序列的信息,即单词信息,没有考虑输出信息,即标签信息,这样无法对标签信息进行建模,所以在LSTM的基础上引入一个标签转 ...
- TensorFlow (RNN)深度学习 双向LSTM(BiLSTM)+CRF 实现 sequence labeling 序列标注问题 源码下载
http://blog.csdn.net/scotfield_msn/article/details/60339415 在TensorFlow (RNN)深度学习下 双向LSTM(BiLSTM)+CR ...
- 基于CRF序列标注的中文依存句法分析器的Java实现
这是一个基于CRF的中文依存句法分析器,内部CRF模型的特征函数采用 双数组Trie树(DoubleArrayTrie)储存,解码采用特化的维特比后向算法.相较于<最大熵依存句法分析器的实现&g ...
- 用CRF++开源工具做文本序列标注教程
本文只介绍如何快速的使用CRF++做序列标注,对其中的原理和训练测试参数不做介绍. 官网地址:CRF++: Yet Another CRF toolkit 主要完成如下功能: 输入 -> &qu ...
- Bi-LSTM+CRF在文本序列标注中的应用
传统 CRF 中的输入 X 向量一般是 word 的 one-hot 形式,前面提到这种形式的输入损失了很多词语的语义信息.有了词嵌入方法之后,词向量形式的词表征一般效果比 one-hot 表示的特征 ...
- 序列标注(HMM/CRF)
目录 简介 隐马尔可夫模型(HMM) 条件随机场(CRF) 马尔可夫随机场 条件随机场 条件随机场的特征函数 CRF与HMM的对比 维特比算法(Viterbi) 简介 序列标注(Sequence Ta ...
- NLP之CRF应用篇(序列标注任务)
1.CRF++的详细解析 完成的是学习和解码的过程:训练即为学习的过程,预测即为解码的过程. 模板的解析: 具体参考hanlp提供的: http://www.hankcs.com/nlp/the-cr ...
随机推荐
- CentOs 7.*中配置安装phpMyAdmin的完整步骤记录
phpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的资料库管理工具.下面这篇文章主要给大家介绍了关于CentOs 7.*中配置安装phpMyAdmin的相关资 ...
- 201871010128-杨丽霞《面向对象程序设计(java)》第十五周学习总结
201871010128-杨丽霞<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- C#基础表达式语句详解(上)
本节内容: 1.表达式的定义: 2.各类表达式概览: 3.语句的定义: 4.语句详解: 1.表达式的定义: 1.1什么是表达式: (定义见下图)各类编程语言对表达式的实现不尽相同,但大体上都符合这个定 ...
- JDOJ 1929: 求最长不下降序列长度
JDOJ 1929: 求最长不下降序列长度 JDOJ传送门 Description 设有一个正整数的序列:b1,b2,-,bn,对于下标i1<i2<-<im,若有bi1≤bi2≤-≤ ...
- ESP8266 LUA脚本语言开发: 准备工作-LUA开发是怎么来的
前言 当前8266有各种开发 1.在官方已经封装好的C库上开发(SDK开发) 2.官方在SDK的基础上封装的AT指令程序(AT指令开发) 3.在SDK的基础上嵌入脚本语言(Lua,Python等开发方 ...
- 原生js拖拽、jQuery拖拽、vue自定义指令拖拽
原生js拖拽: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- 【Comet OJ - Contest #0 A】解方程(数学水题)
点此看题面 大致题意: 给定自然数\(n\),让你求出方程\(\sqrt{x-\sqrt n}+\sqrt y-\sqrt z=0\)的自然数解\(x,y,z\)的数量以及所有解\(xyz\)之和. ...
- Web协议详解与抓包实战:HTTP1协议-详解请求行(2)
一.请求行一 二.请求行二 三.请求行三 四.常见方法(RFC7231) 实际测试截图 五.用于文档管理的 WEBDAV 方法(RFC2518) 六.WEBDAV 验证环境 1.登录 2.Wire ...
- 如何让position fixed不再基于浏览器窗口定位
position:fixed默认是相对浏览器定位的. 就是将某个元素固定在浏览器的某个确定的位置,不随滚动条的移动而变化: MDN对position: fixed有一个注释: 当元素祖先的 trans ...
- SpringBoot集成Spring Security(1)——入门程序
因为项目需要,第一次接触 Spring Security,早就听闻 Spring Security 功能强大但上手困难,学习了几天出入门道,特整理这篇文章希望能让后来者少踩一点坑(本文附带实例程序,请 ...