一文详解中文实体识别模型 Lattice LSTM
每天给你送来NLP技术干货!
来自:AI算法小喵
写在前面
今天要跟大家分享的是西湖大学张岳老师2018年发表在顶会ACL上的一篇中文实体识别论文 Lattice LSTM。
论文名称:《Chinese NER Using Lattice LSTM》
论文链接:https://arxiv.org/pdf/1805.02023.pdf
代码地址:https:// github.com/jiesutd/LatticeLSTM
分享这个工作主要原因是:这个工作本身质量比较高,可以说是利用词汇增强中文NER的开篇之作,并且思路清晰,创新有理有据。
本篇文章主要内容将围绕下图中的两点展开:
1. 基于序列标注的实体识别所存在的问题
如下图,这部分主要包含两个内容,即:经典的 LSTM-CRF 实体识别模型及该类模型所存在的问题。
1.1 经典LSTM-CRF模型
实体识别通常被当作序列标注任务来做,序列标注模型需要对实体边界和实体类别进行预测,从而识别和提取出相应的命名实体。在BERT出现以前,实体识别的SOTA模型是LSTM+CRF,模型本身很简单:
首先利用嵌入方法将句子中的每个token转化为向量再输入LSTM(或BiLSTM);
然后使用LSTM对输入的信息进行编码;
最后利用CRF对LSTM的输出结果进行序列标注。
LSTM+CRF 用在中文NER上,又可进一步分为两种:若token是词,那么模型就属于Word-based model;若token是字,那么模型就属于Character-based Model。
( 注:BERT+LSTM+CRF主要是将嵌入方法从Word2vec换成了BERT。)
1.2 误差传播与歧义问题
Word-based model存在误差传递问题
Word-based model 做实体识别需要先分词,然后再对词序列进行实体识别即词序列标注。词汇的边界决定了实体的边界,因此一旦出现分词错误就会影响实体边界的判定。比如上图中,利用分词工具,“东莞台协” 和 ”会长“ 被拆分成了“东莞”、“台”、”协会长“,最终导致 ”东莞台“ 被识别为了GPE。换句话说,Word-based model 具有和其他两阶段模型同样的误差传递问题。
Character-based model存在歧义问题
既然分词会有问题,那就不分词。Character-based model 直接在字的粒度上进行实体识别即字序列标注。许多研究工作表明,在中文NER上基于字的方法优于基于词的方法。但是,相比词单字不具备完整语义。没有利用句子里的词的信息,难以应对歧义问题,识别结果可能差强人意。如上图,“会” 字本来应该和 “长” 一起组成 “会长” ,但是最终模型却将 “会” 与 “东莞台协” 视为一个语块儿,并将 “东莞台协会” 预测为ORG。
1.3 思考
既然 Character-based model、Word-based model 各有优缺点,那是否可以结合二者进行互补呢?换句话说,我们在Character-based model里加入词信息,这样是不是就可以既利用了词信息,又不会因为分词错误影响识别结果呢?实际上,Lattice LSTM正是这样做的。接下来我们一起跟随文章的后续内容来学习Lattice LSTM。
2. 模型细节
这一节我们首先会介绍最简单的词信息利用方方法,然后再对Lattice LSTM进行详细介绍。
2.1 简单直接的拼接法
如上图所示,最容易想到同时也是最简单的词信息利用方法就是直接拼接词表征与字向量或者直接拼接词表征与LSTM的输出。16年的论文《A Convolution BiLSTM Neural Network Model for Chinese Event Extraction》[1]就采用了这样的方法构建了中文事件抽取模型,其模型结构如下图所示:
当然这里词表征可通过Word2Vec、Glove等词向量模型获得。也可以如16年的那篇事件抽取论文一样利用CNN进一步卷积获得更上层的 Local Context features,再将其拼接到模型中:
当然这不是本文的重点,我们关注的是 Lattice LSTM是如何引入词信息的。
2.2 Lattice 与潜在词
Lattice LSTM 模型结构如上图右侧所示。在正式开始介绍 Lattice LSTM 前,我们先来看看上图左半部分。
(1) Lattice LSTM 名字来由
我们可以发现在上图左侧所示网络中,除主干部分 基于字的LSTM 外,还连接了许多「格子」,每个「格子」里各含有一个潜在的词,这些潜在词所含有的信息将会与主干LSTM中相应的 Cell 融合,看起来像一个「网格(Lattice)」。所以论文模型的名字就叫做 Lattice LSTM,也就是有网格结构的LSTM模型。
(2) 词典匹配获得潜在词
网格中的这些潜在词是通过匹配输入文本与词典获得的。比如通过匹配词典, “南京市长江大桥”一句中就有“南京”、“市长”,“南京市”,“长江”,“大桥“,“长江大桥”等词。
(3) 潜在词的影响
首先,“南京市长江大桥” 一句的正确结果应当是 “南京市-地点”、“长江大桥-地点”。如果我们直接利用 Character-based model 来进行实体识别,可能获得的结果是:“南京-地点”、“市长-职务”、“江大桥-人名”。现在利用词典信息获得了文本句的潜在词:“南京”、“市长”,“南京市”,“长江”,“大桥“,“长江大桥” 等潜在词。其中,“长江”、“大桥” 与 “长江大桥” 等词信息的引入有利于模型,可以帮助模型避免犯 “江大桥-人名” 这样的错误;而 “市长” 这个词的引入却可能会带来歧义从而误导模型,导致 “南京-地点”,“市长-职务” 这样的错误。
换句话说,通过词典引入的词信息有的具有正向作用,有的则不然。当然,人为去筛除对模型不利的词是不可能的,所以我们希望把潜在词通通都丢给模型,让模型自己去选择有正向作用的词,从而避免歧义。Lattice LSTM 正是这么做的:它在Character-based LSTM+CRF的基础上,将潜在词汇信息融合进去,从而使得模型在获得字信息的同时,也可以有效地利用词的先验信息。
2.3 Lattice LSTM 模型细节
如上图所示,Lattice LSTM模型的主干部分是基于字的LSTM-CRF(Character-based LSTM+CRF):
若当前输入的字在词典中不存在任何以它结尾的词时:主干上Cell之间的传递就和正常的LSTM一样。也就是说,这个时候Lattice LSTM退化成了基本LSTM。
若当前输入的字在词典中存在以它结尾的词时:需要通过红色Cell (见2.2节图右侧)引入相关的潜在词信息,然后与主干上基于字的LSTM中相应的Cell进行融合。
接下来,我们先简单展示下 LSTM的基本单元,再介绍 红色Cell,最后再介绍信息融合部分。
2.3.1 LSTM 单元
上图左侧展示了一个LSTM 单元(Cell)的内部结构,右侧展示了Cell的计算过程。在每个Cell 中都有三个门控,即输入门、遗忘门和输出门。如上图右侧计算公式所示,这三个门实际上是0~1的小数,其值是根据当前时刻输入 和前一时刻 Cell 的输出的hidden state 计算得到的:
输入门:决定当前输入有多少可以加入 Cell State ,即 ;
遗忘门:决定 Cell State要保留多少信息,即 。
输出门:决定更新后的 Cell State有多少可以被输出,即 。
纯粹的基于字的LSTM可以完全基于上述计算过程去计算,而Lattice LSTM则有所不同。
2.3.2 红色Cell
前面我们提过「如果当前字在词典中存在以它结尾的词时,需要通过红色Cell引入相关潜在词信息,与主干上基于字的LSTM中相应Cell进行融合」。以下图中 "市" 字为例,句子中潜在的以它结尾的词有:"南京市"。所以,对于"市"字对应的Cell 而言,还需要考虑 “南京市” 这个词的信息。
红色Cell的内部结构与主干上LSTM的Cell很类似。接下来,我们具体来看下 红色Cell 内部计算过程。
(1) 红色Cell 的输入
与上图左侧LSTM的Cell对比,上图右侧 红色Cell 有两种类型的输入:
潜在词的首字对应的LSTM单元输出的Hidden State 以及Cell State
潜在词的词向量 。
(2) 红色Cell 的输出
可以发现,因为序列标记是在字级别,所以与左侧 LSTM 的 Cell 相比,红色Cell 没有输出门,即它不输出hidden state。
以“市”字为例,其潜在词为“南京市“,所以 、 来自于"南”字, 代表“南京市”的词向量,红色Cell 内部具体计算过程如下图右侧所示:
依托 “南” 字的 hidden state 与 “南京市” 的词向量 计算输入门 、遗忘门 以及状态更新量 :
依托 “南” 字的 Cell state 、与 “南京市” 相关的状态更新量 计算 “南京市“ 的 Cell State :
最终 红色Cell 只会向 "市" 字传递 Cell State 。
2.3.3 信息融合
(1)潜在词的输入门
现在对于主干上的 Cell 来说,除状态更新量 外,还多了一个来自潜在词的 Cell State 。潜在词的信息不会全部融入当前字的 Cell,需要进行取舍,所以 Lattice LSTM 设计了额外的输入门 ,其计算如下:
402 Payment Required
(2) 加权融合
前面我们举的例子中都只有一个潜在词。但实际上,对部分字来说可能会在词典中匹配上很多词,例如 “桥” 这个字就可以在词典中匹配出 “大桥” 和 “长江大桥” 。为了将这些潜在词与字信息融合,Lattice LSTM做了一个类似Attention的操作:
简单地说,就是当前字相应的输入门和所有以当前字为尾字的候选词的输入门做归一计算出权重,然后利用计算出的权重进行向量加权融合。
以 “桥” 字为例,它有两个潜在词,即 “长江大桥” 与 “大桥” 。那么对 “桥” 字而言,它会收到三对值,分别是:“桥” 字的输入门 与 状态 ;潜在词 "长江大桥" 相关的输入门 与 Cell State ;潜在词 "大桥" 相关的输入门 与 Cell State ,为了获得最终 “桥” 的 hidden State,需要经过如下计算:
"长江大桥" 的权重:
402 Payment Required
“大桥” 的权重:
“桥“ 的权重:
402 Payment Required
加权融合获得“ 桥“ 的 Cell state:
402 Payment Required
“桥“ 的 hidden state:
3. 实验
论文在Onto Notes、MSRA、微博NER、简历这4个数据集上进行了实验。从实验结果可以看出 Lattice LSTM 比其他对比方法有一定的提升。本文不深入探讨实验部分,感兴趣的读者可下载论文原文进行阅读。
总结
今天我们分享了中文实体识别模型 Lattice LSTM,这是中文NLP领域非常重要的人物~张岳老师他们的工作。没记错的话,18年跟随导师参加NLPCC会议时,第一次见到张岳老师,深刻感觉张岳老师除了学术能力强以外,为人也非常真诚,很nice。
对NLP感兴趣的读者可以关注下张岳教授他们的其他工作。当然还有国内NLP领域的其他大师的工作,比如刘知远老师、车万翔老师、刘挺老师、孙茂松老师、邱锡鹏老师等等。想要往科研方向深入的,也可以申请去他们那里读博。当然每个老师研究方向各有侧重点,我记得当年关注到刘知远老师是因为他们的知识图谱表示学习工作(TransE等)。
关注公众号的读者里可能有些不是NLP方向的也建议可以关注关注以上老师的工作。其实当年我们参加这些会议的时候也不是做NLP方向的,但是交叉学科的工作多听听多看看总是有益处的。譬如我和我的同学们,现在多数都转到了NLP方向,在各个公司里从事NLP算法研究员、NLP算法工程师等工作。
好了,本文就到这里,今天比较啰嗦,哈哈哈。还是一样,如果本文对你有帮助的话,欢迎点赞&在看&分享,这对我继续分享&创作优质文章非常重要。感谢
一文详解中文实体识别模型 Lattice LSTM相关推荐
- nlp 命名实体识别 算法_中文命名实体识别算法 Lattice LSTM
中文命名实体识别 (NER) 算法按照输入的类型,可以大致分为 Character-based (字符) 和 Word-based (单词) 两种.这两种方法都存在一些缺陷,Character-bas ...
- 一文详解Google最新NLP模型XLNet
本文介绍 XLNet 的基本原理,读者阅读前需要了解 BERT 等相关模型,不熟悉的读者建议学习 BERT 课程 [1]. 语言模型和BERT各自的优缺点 排列(Permutation)语言模型 Tw ...
- 一文详解决策树算法模型
AI有道 一个有情怀的公众号 上文我们主要介绍了Adaptive Boosting.AdaBoost演算法通过调整每笔资料的权重,得到不同的hypotheses,然后将不同的hypothesis乘以不 ...
- 一文详解自动驾驶的运行设计域(ODD)| 自动驾驶系列 1
一文详解自动驾驶的运行设计域(ODD)| \n 自动驾驶系列 2021年4月30日,SAE发布了第四版J3016<驾驶自动化分级>,这是即2014年1月16日.2016年9月30日.201 ...
- 【卷积神经网络结构专题】一文详解AlexNet(附代码实现)
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]本文是卷积神经网络结构系列专题第二篇文章,前面我们已经介绍了第一个真正意义 ...
- 初学者 | 一文读懂命名实体识别
本文对自然语言基础技术之命名实体识别进行了相对全面的简绍,包括定义.发展历史.常见方法.以及相关数据集,最后推荐一大波python实战利器,并且包括工具的用法. 定义 先来看看维基百科上的定义:Nam ...
- 一文详解 YOLO 2 与 YOLO 9000 目标检测系统
一文详解 YOLO 2 与 YOLO 9000 目标检测系统 from 雷锋网 雷锋网 AI 科技评论按:YOLO 是 Joseph Redmon 和 Ali Farhadi 等人于 2015 年提出 ...
- 自然语言识别python_自然语言处理工具python调用hanlp中文实体识别
Hanlp作为一款重要的中文分词工具,在GitHub的用户量已经非常之高,应该可以看得出来大家对于hanlp这款分词工具还是很认可的.本篇继续分享一篇关于hanlp的使用实例即Python调用hanl ...
- 一文读懂命名实体识别
本文对自然语言基础技术之命名实体识别进行了相对全面的介绍,包括定义.发展历史.常见方法.以及相关数据集,最后推荐一大波 Python 实战利器,并且包括工具的用法. 01 定义 先来看看维基百科上的定 ...
最新文章
- 【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )
- 模拟电路技术之基础知识(十)
- c++语句和流程控制
- 重磅开源!《30天吃掉那只 TensorFlow2.0 》(附下载)
- Win10 Edge浏览器续航碾压火狐/Chrome
- A加载B,B发生的变化
- 模糊测试——强制发掘安全漏洞的利器(Jolt 大奖精选丛书)
- 2021年ARINC818数字视频传输重磅新品–Helios
- 使用axis生成WebService调用客户端
- 利用Xming X Server使用服务器上使用kettle
- SQLite解决插入大量数据速度慢的问题
- c++虚函数实现原理
- 英语六级口语 计算机,2020年5月英语六级口语惯用口语:计算机
- Zabbix poller processes more than 75% busy报错解决方案
- Spine动画显示错乱问题
- cdma2000解析_LTE和CDMA2000互操作方案分析
- 【Python百炼成魔】魂圣初入Python之Python最佳入门实践
- vscode php 语法检查,vscode如何关闭eslint的语法检查
- fzyzojP3618 -- [校内训练-互测20180412]士兵的游戏
- 十一个顶级的Git 客户端,绝对很实用!
热门文章
- 新疆语 维吾尔语字母表与发音
- LeetCode 807. 保持城市天际线 / 630. 课程表 III(贪心+优先队列)/ 851. 喧闹和富有(拓扑排序)
- 宣化上人: “肉字里边两个人, 里边罩着外边人; 众生还吃众生肉, 仔细思量人吃人。”
- 老王python培训全套教程
- 焦耳小偷工作原理分析
- Python之Pyperclip模块 —— 复制粘贴神器
- 台达变频器vfb—d参数表_台达变频器参数设置一览表
- Android 手写字体识别
- centos镜像安装
- EPIC 创建DMEEX付款结构