BiLSTM+CRF 是命名实体识别中最为流行的模型,但是 LSTM 需要按顺序处理输入的序列,速度比较慢。而采用 CNN 可以更高效的处理输入序列,本文介绍一种使用膨胀卷积进行命名实体识别的方法 IDCNN,通过膨胀卷积可以使模型接收更长的上下文信息。

1.膨胀卷积

膨胀卷积 (Dilated Convolution) 是指卷积核中存在空洞,下图展示了膨胀卷积和传统卷积的区别。之前的文章《膨胀卷积 dilated convolution》 有关于膨胀卷积的介绍,不熟悉的童鞋可以参考一下。

膨胀卷积和传统卷积的区别

膨胀卷积通过在卷积核中增加空洞,可以扩大模型的感受野 (即句子中的上下文),从下图可以看到,同样是尺寸为 3 的卷积核,同样是两层卷积层,膨胀卷积的上下文大小为 7,而传统卷积上下文大小为 5。

膨胀卷积和传统卷积上下文大小

卷积核的膨胀系数 (即空洞的大小) 每一层是不同的,一般可以取 (1, 2, 4, 8, ...),即前一层的两倍。

对于尺寸为 3 的传统卷积核,第 L 层的上下文大小为 2L+1;而对于尺寸为 3 的膨胀卷积核,第 L 层上下文的大小是 2^(L+1) -1。因此膨胀卷积的上下文大小和层数是指数相关的,可以通过比较少的卷积层得到更大的上下文。

2.用膨胀卷积进行命名实体识别

论文《Fast and Accurate Entity Recognition with Iterated Dilated Convolutions》中提出了一种使用膨胀卷积的方法进行命名实体识别,IDCNN (Iterated Dilated Convolutions)

作者认为直接堆叠膨胀卷积层,可以获得很长距离的上下文信息,例如有 9 层膨胀卷积层,则上下文的宽度超过 1000。但是简单的堆叠多层膨胀卷积,容易导致过拟合。

为了避免过拟合,作者先构造一个层数不多的膨胀 block,block 包含几个膨胀卷积层,例如 4 个。然后把数据重复传到同一个 block 中,即 block 输出的结果又重复传入 block 中,作者称为 Iterated Dilated Convolutions,IDCNN。通过重复使用相同的 block,可以让模型接收更宽的上下文信息,同时有比较好的泛化能力。

IDCNN 的膨胀卷积 block 包含多个膨胀卷积层,用 D 表示膨胀卷积层,如下面公式所示:

膨胀卷积层表示

IDCNN 网络的第一层对输入数据进行转换,使用标准的卷积:

IDCNN 第一层对输入进行转换

后 IDCNN 会使用 Lc 个膨胀卷积层构造出 block,block 用 B() 表示,block 包含的膨胀卷积如下:

block 中包含 Lc 个膨胀卷积

IDCNN 会重复使用 Lb 次相同的 block,对数据进行处理,如下:

IDCNN 重复使用 Lb 次 block

最后一层的输出再经过线性变换,可以得到序列每一个时刻 t 属于不同类别的分数:

最后一层输出线性变换

3.IDCNN 训练

IDCNN 可以使用两种训练方式,第一种是利用最后一次 block 的输出,预测每一时刻的类别,如下:

IDCNN 用最后一层 block 输出进行预测

这种方法可以结合 CRF 进行训练,类似 BiLSTM+CRF,因为 IDCNN 也可以输出每一时刻属于不同类别的概率。

第二种训练方法是对于每一次 block 的输出都预测序列的类标,作者认为这种方式可以起到类似 CRF 的效果,能够把输出结果之间的关系编码到 IDCNN 中。例如假设执行两次 block,则第一次 block 可以预测每一时刻对应不同类别的概率。而第二次 block 接收第一次 block 的输出,可以预测每一时刻输出之间的关系,类似 CRF。公式如下:

IDCNN 使用每一层 block 输出进行预测

4.参考文献

Fast and Accurate Entity Recognition with Iterated Dilated Convolutions

命名实体识别_用膨胀卷积进行命名实体识别 NER相关推荐

  1. python读取视频流做人脸识别_基于OpenCV和Keras实现人脸识别系列——二、使用OpenCV通过摄像头捕获实时视频并探测人脸、准备人脸数据...

    基于OpenCV和Keras实现人脸识别系列手记: 项目完整代码参见Github仓库. 本篇是上面这一系列手记的第二篇. 在Opencv初接触,图片的基本操作这篇手记中,我介绍了一些图片的基本操作,而 ...

  2. 深度学习数字仪表盘识别_深度学习之手写数字识别项目(Sequential方法amp;Class方法进阶版)...

    此项目使用LeNet模型针对手写数字进行分类.项目中我们分别采用了顺序式API和子类方法两种方式构建了LeNet模型训练mnist数据集,并编写了给图识物应用程序用于手写数字识别. 一.LeNet模型 ...

  3. 楚留香ai人脸识别_戴口罩居然也能人脸识别?这些AI黑科技真的藏不住了.........

    当人工智能遇见影像技术,将会释放出多少意想不到的巨大能量? 「喔图·知图实验室」瞄准当下的影像痛点,持续发力升级AI黑科技,带来两大必杀技--人脸识别再度升级.AI智能旋转校正. 戴口罩也能识别--人 ...

  4. python名片识别_百度AI攻略:名片识别

    1.功能描述: 支持对各类名片的9个关键字段进行结构化识别,包括姓名.公司.职位.邮编.邮箱.电话.网址.地址.手机号.使用名片识别技术,实现对用户名片关键信息的结构化识别和录入,可应用于线下会议.论 ...

  5. 如何使用python人脸识别_如何利用python进行精准人脸识别

    2017-10-21 回答 1.1.介绍introduction 从opencv2.4开始,加入了新的类facerecognizer,我们可以使用它便捷地进行人脸识别实验.本文既介绍代码使用,又介绍算 ...

  6. python场景文字识别_针对复杂场景的 OCR 文本识别,推荐一个Python 库!

    大家好,我是 zeroing~ 1,前言 之前谈到图片文本 OCR 识别时,写过一篇文章介绍了一个 Python 包 pytesseract ,具体内容可参考 介绍一个Python 包 ,几行代码可实 ...

  7. python制作文字识别_用Python轻松进行图像文本识别

    用Python轻松进行图像文本识别 作者:梅朵 微信公众号:实用办公编程技能 微信号:Excel-Python 最近,办公室的同事小李在整理一份报告,很多材料的电子版找不到了,都是纸质版的,纸质版上的 ...

  8. vue 拍照人脸识别_安排上了!PC人脸识别登录,出乎意料的简单

    推荐阅读: 微服务实战文档分享,阿里内部的Spring cloud微服务精髓都在里面 去面试3W月薪的Java岗位,被虐哭了,原来是我这些技术点还有欠缺 春招失厉,狂刷200+面试文档,终斩获头条,阿 ...

  9. 深度学习 场景识别_使用深度学习进行自然场景识别

    深度学习 场景识别 Recognizing the environment in one glance is one of the human brain's most accomplished de ...

最新文章

  1. Java学习总结:54(集合输出)
  2. Git submodule子模块
  3. 机器学习中激活函数和模型_探索机器学习中的激活和丢失功能
  4. Spring Boot 2.2版本变化[翻译]
  5. Debian11镜像更新为阿里巴巴开源镜像站镜像,切换root用户,解决用户名不在sudoers文件中此事将被报告,Debian11 文件夹对话框、火狐浏览器、命令终端等没有最大化和最小化
  6. 使用C++模板判断两个类型是否一样
  7. C/C++编程工具及实用小软件推荐
  8. 选频滤波器 matlab,MATLAB低通滤波器选频实现
  9. JAVA计算机毕业设计幼儿园管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  10. Java打印正反等边三角形
  11. linux steam安装目录,如何在Linux系统的服务器中安装steamCMD,常用steam游戏安装指令有哪些...
  12. Linux欧姆单位怎么打,电阻常识-younger0-ChinaUnix博客
  13. Android开发-窗口跳转
  14. 外汇天眼:Apple与MetaQuotes之争!谁是下一个Apple?谁会成下一个MT4/5?
  15. 修改Firefox收藏夹位置
  16. 【LINUX】libgd-GD库安装
  17. django 快速实现文件上传(django2.0)
  18. 数字三角形 (15 分)
  19. bat获取系统时间戳
  20. postman Error: connect ECONNREFUSED 127.0.0.1:9001

热门文章

  1. centos6.8无法安装锐速的解决方法
  2. golang 并发与并行学习笔记(一)
  3. error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
  4. FSD HOOK与SSDT HOOK恢复简单思路
  5. vs2010下release版本调试设置
  6. 键盘的扫描码虚拟码概念 常见Windows键盘按键虚拟码
  7. Linux System Programming --Chapter Three
  8. Android JUnit测试说明和实例演示
  9. android邮件系统开发的基础知识
  10. 深度优先搜索找迷宫的出路