©PaperWeekly 原创 · 作者 | 苏剑林

单位 | 追一科技

研究方向 | NLP、神经网络

在《GlobalPointer:用统一的方式处理嵌套和非嵌套 NER》中,我们提出了名为“GlobalPointer”的 token-pair 识别模块,当它用于 NER 时,能统一处理嵌套和非嵌套任务,并在非嵌套场景有着比 CRF 更快的速度和不逊色于 CRF 的效果。换言之,就目前的实验结果来看,至少在 NER 场景,我们可以放心地将 CRF 替换为 GlobalPointer,而不用担心效果和速度上的损失。

在这篇文章中,我们提出 GlobalPointer 的一个改进版——Efficient GlobalPointer,它主要针对原 GlobalPointer 参数利用率不高的问题进行改进,明显降低了 GlobalPointer 的参数量。更有趣的是,多个任务的实验结果显示,参数量更少的 Efficient GlobalPointer 反而还取得更好的效果。

大量的参数

这里简单回顾一下 GlobalPointer,详细介绍则请读者阅读《GlobalPointer:用统一的方式处理嵌套和非嵌套 NER》。简单来说,GlobalPointer 是基于内积的 token-pair 识别模块,它可以用于 NER 场景,因为对于 NER 来说我们只需要把每一类实体的“(首, 尾)”这样的 token-pair 识别出来就行了。

设长度为 的输入 经过编码后得到向量序列 ,原始 GlobalPointer 通过变换 和 我们得到序列向量序列 和 ,然后定义

作为从 到 的连续片段是一个类型为 的实体的打分。这里我们暂时省略了偏置项,如果觉得有必要,自行加上就好。

这样一来,有多少种类型的实体,就有多少个 和 。不妨设 ,那么每新增一种实体类型,我们就要新增 个参数;而如果用 CRF+BIO 标注的话,每新增一种实体类型,我们只需要增加 的参数(转移矩阵参数较少,忽略不计)。对于 BERT base 来说,常见的选择是 ,可见 GlobalPointer 的参数量远远大于 CRF。

识别与分类

事实上,不难想象对于任意类型 ,其打分矩阵 必然有很多相似之处,因为对于大多数 token-pair 而言,它们代表的都是“非实体”,这些非实体的正确打分都是负的。这也就意味着,我们没必要为每种实体类型都设计独立的 ,它们应当包含更多的共性。

怎么突出 的共性呢?以 NER 为例,我们知道 NER 实际上可以分解为“抽取”和“分类”两个步骤,“抽取”就是抽取出为实体的片段,“分类”则是确定每个实体的类型。这样一来,“抽取”这一步相当于只有一种实体类型的 NER,我们可以用一个打分矩阵就可以完成,即 ,而“分类”这一步,我们则可以用“特征拼接+ Dense 层”来完成,即 。于是我们可以将两项组合起来,作为新的打分函数:

这样一来,“抽取”这部分的参数对所有实体类型都是共享的,因此每新增一种实体类型,我们只需要新增对应的 就行了,即新增一种实体类型增加的参数量也只是 。进一步地,我们记 ,然后为了进一步地减少参数量,我们可以用 来代替 ,此时

此时 ,因此每新增一种实体类型所增加的参数量为 ,由于通常 ,所以式(3)的参数量往往少于式(2),它就是 Efficient GlobalPointer 最终所用的打分函数。

惊喜的实验

Efficient GlobalPointer 已经内置在 bert4keras>=0.10.9 中,读者只需要更改一行代码,就可以切换 Efficient GlobalPointer 了。

1# from bert4keras.layers import GlobalPointer
2from bert4keras.layers import EfficientGlobalPointer as GlobalPointer

下面我们来对比一下 GlobalPointer 和 Efficient GlobalPointer 的结果:

可以看到,Efficient GlobalPointer 的实验结果还是很不错的,除了在人民日报任务上有轻微下降外,其他两个任务都获得了一定提升,并且整体而言提升的幅度大于下降的幅度,所以 Efficient GlobalPointer 不单单是节省了参数量,还提升了效果。而在速度上,Efficient GlobalPointer 与原始的 GlobalPointer 几乎没有差别。

分析与评述

考虑到人民日报 NER 只有 3 种实体类型,CLUENER 和 CMeEE 分别有 10 种和 9 种实体类型,从分数来看也是人民日报比其他两种要高,这说明 CLUENER 和 CMeEE 的难度更大。另一方面,在 CLUENER 和 CMeEE 上 Efficient GlobalPointer 都取得了提升,所以我们可以初步推断:实体类别越多、任务越难时,Efficient GlobalPointer 越有效。

这也不难理解,原版 GlobalPointer 参数过大,那么平均起来每个参数更新越稀疏,相对来说也越容易过拟合;而 Efficient GlobalPointer 共享了“抽取”这一部分参数,仅通过“分类”参数区分不同的实体类型,那么实体抽取这一步的学习就会比较充分,而实体分类这一步由于参数比较少,学起来也比较容易。反过来,Efficient GlobalPointer 的实验效果好也间接证明了式(3)的分解是合理的。

当然,不排除在训练数据足够多的时候,原版 GlobalPointer 会取得更好的效果。但即便如此,在类别数目较多时,原版 GlobalPointer 可能会占用较多显存以至于难以使用,还是以 base 版 为例,如果类别数有 100 个,那么原版 GlobalPointer 的参数量为 ,接近千万,不得不说确实是不够友好了。

最后的总结

本文指出了原版 GlobalPointer 的参数利用率不高问题,并提出了相应的改进版 Efficient GlobalPointer。实验结果显示,Efficient GlobalPointer 在降低参数量的同时,基本不会损失性能,甚至还可能获得提升。

特别鸣谢

感谢 TCCI 天桥脑科学研究院对于 PaperWeekly 的支持。TCCI 关注大脑探知、大脑功能和大脑健康。

更多阅读

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

​Efficient GlobalPointer:少点参数,多点效果相关推荐

  1. YOLOv5-Lite 树莓派实时 | 更少的参数、更高的精度、更快的检测速度(C++部署分享)...

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 作者丨ChaucerG 来源丨集智书童 1YOLOv5-Lite 1.Backbone与Head Y ...

  2. ImageNet预训练参数和随机初始化参数训练效果对比

    何恺明,RBG,Piotr Dollár. 三位从Mask R-CNN就开始合作的大神搭档,刚刚再次联手,一文"终结"了ImageNet预训练时代. 他们所针对的是当前计算机视觉研 ...

  3. ffmpeg frei0r filter 参数及效果

    ffmpeg中frei0r滤镜基本使用方法 ffplay -vf frei0r=filter_name=filter_params:filter_params:... 在Windows系统ffmpeg ...

  4. 如何用java语言实现C#中的ref关键字(按引用传递参数)的效果

    https://www.cnblogs.com/nnngu/p/8300164.html 转载于:https://www.cnblogs.com/cnki/p/10409684.html

  5. MySQL函数少传参数_Mysql中的少用函数

    1.查询时需要转换类型,大多发生在数字和字符串.时间和字符串之间 Mysql提供了两个个类型转换函数:CAST和CONVERT CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另 ...

  6. MySQL函数少传参数,MySQl函数(1)

    数学函数 select abs(-5) ;绝对值 select abs(5.8); ceiling 比这个大点的 floor 比这个小的 greatest(1,2,3,2)最大值 3 least(1, ...

  7. ​GPLinker:基于GlobalPointer的实体关系联合抽取

    ©PaperWeekly 原创 · 作者 | 苏剑林 单位 | 追一科技 研究方向 | NLP.神经网络 两年前,在百度的"2019 语言与智能技术竞赛"(下称 LIC2019)中 ...

  8. 最强通道注意力来啦!金字塔分割注意力模块,即插即用,效果显著,已开源!...

    导读 本文是通道注意力机制的又一重大改进,主要是在通道注意力的基础上,引入多尺度思想,本文主要提出了金字塔分割注意力模块,即PSA module.进一步,基于PSA ,我们将PSA注意力模块替换Res ...

  9. 积神经网络的参数优化方法——调整网络结构是关键!!!你只需不停增加层,直到测试误差不再减少....

    积神经网络(CNN)的参数优化方法 from:http://blog.csdn.net/u010900574/article/details/51992156 著名: 本文是从 Michael Nie ...

最新文章

  1. mysql超详细教程_MySQL8.0.23安装超详细教程
  2. 【模板】最小割树(Gomory-Hu Tree)
  3. Android Crash分析工具arm-eabi-addr2line
  4. 【C语言简单说】十二:逻辑运算符
  5. 通过shell访问hive_【HIVE】SHELL调用Hive查询
  6. 洗车房,无人车的噩梦
  7. eigrp与ospf的综合实验(还是要想想办法才做得出来哦)
  8. 当攻击者采用新型逃避技术——“域遮蔽” 企业该如何应对?
  9. 原创 | 职场风云 (五)成长的烦恼
  10. 天堂2服务器自动停止,为什么我一进天堂2就与服务器连接中断??/
  11. YOLOv3 网络搭建Darknet53 训练自己的数据集
  12. 神经机器翻译中有用的技巧
  13. emacs terminal
  14. 史上最全的自动驾驶研究报告(下)
  15. 阿联酋选出首位 AI 国务部长(附Youtube视频)
  16. ios王者荣耀服务器维护31号,王者荣耀iOS版3月31日无法更新怎么办 王者荣耀iOS玄雍危机版本无法更新解决方法...
  17. JS 城市选择实现——按级选中省市县/区
  18. Redis 主从复制、哨兵和集群区别
  19. 图像形态学处理——灰度梯度(Matlab)
  20. ASP.NET Web API与Owin OAuth:使用Access Toke调用受保护的API

热门文章

  1. axure怎么转换成php,墨刀和axure的区别是什么?
  2. android http pos 请求和gson解析处理head头信息
  3. LeetCode 202 -- python 计算 happy number
  4. ios ionic3 跳转第三方地图 xcode加入白名单
  5. js 一/二维数组排序
  6. 项目总结(3.DIBR技术项目总结(1.TOF相机及标定相关))
  7. TensorFlow安装-windows系统
  8. awk多分隔符功能及wc命令案列及企业级应用
  9. iOS高级-RunLooper
  10. 文件包含漏洞不能包含php,ThinkPHP5漏洞分析之文件包含