点击下面卡片关注我呀,每天给你送来AI技术干货!


来自:知乎

作者:三七

地址:https://www.zhihu.com/question/358892919/answer/1800698684

编辑:机器学习算法与自然语言处理

仅作学术分享,侵权

不是必备。深度学习中一切玄学问题都能从数学和数据中得到解释。个人水平有限,确实未能给出满意的数学证明,感谢大佬们指正。

  • Q1: 为什么LSTM加上CRF后,序列标注效果会有稳定提升?

  • Q2: BERT后面到底要不要接上CRF?甚至要不要接上BiLSTM?

  • Q3: BERT+CRF的搭配中,有必要单独给CRF设置一个较大的学习率吗?

Q1: 为什么LSTM加上CRF后,序列标注效果会有稳定提升?

序列标注中CRF存在的意义究竟是什么?其实从模型的损失函数可以很直接的看出添加CRF前后的差异。

单纯使用神经网络做序列标注时,使用的损失函数通常为对每一个时间步的交叉熵损失取平均, 此时模型对应的学习目标为

而加入CRF后,模型的学习目标变成了

其中, 分别为训练集的输入文本序列和标签序列, 表示LSTM的模型结构和参数,也就是模型拟合能力的体现。 是从训练集所有标签序列统计得到的转移概率(尽管是训练过程中通过梯度下降学习到的转移矩阵,但这个矩阵本质上就是训练集的标签转移概率乘以一个特征权重,具体原理参考log linear model)。从上面两个公式,我们就能轻易的理解,为什么LSTM后面加上CRF,模型效果就能好很多。

Q2: 如果把LSTM换成BERT呢?BERT后面到底要不要接上CRF?甚至要不要接上BiLSTM?

先说答案:1). BERT后面要不要加CRF,完全取决于数据集。2) CRF大概率能带来提升,但也完全有可能带来负面影响。3) BERT后面不要加LSTM!CRF能提供额外的标签转移特征,而LSTM除了拖后腿什么也干不了。

为什么把Q1两个公式中的 换成 之后,效果就能大大提升?一方面是BERT的预训练学习到了大量的文本表示,加上BERT自身优异的模型结构,使得在NER的数据集上能有非常好的泛化性。在这样的条件下,标签转移概率这个特征,比起输入文本中的语义特征就很微不足道了,即使不用标签之间的转移概率也能轻易的识别出正确的实体。毕竟BERT在特定任务下的语义理解能力已经十分接近人类水平了。

那么什么样的数据适合加CRF,什么样的不适合呢?先明确一点,由于CRF多了一个特征,而且两个特征会通过梯度下降自动学习各自权重,因此加上CRF一定能实现对训练集更好的拟合。但训练集拟合得好未必测试集有提升,有可能是过拟合。这取决于输入文本的语义特征、训练集标签序列分布、测试集标签序列分布,这就只能通过实验来确定了。训练集和测试集的标签序列分布一致性越高,那么CRF的帮助就越大。反之也完全有可能造成负面影响。

在我和同学实验中也多次遇到BERT加上CRF后效果变差的经历。

Q3: BERT+CRF的搭配中,有必要单独给CRF转移矩阵参数设置一个较大的学习率吗?

这仍然是一个关于数据特征分布的问题。由于几乎不存在完美标注的数据集,因此几乎所有数据集都多多少少会有噪声或偏差。就看输入 带来的影响和 带来的影响谁打得过谁了。如果自然状态下训练得到的模型中CRF的参数很小或者不理想,只能说明标签转移特征对训练集的拟合本身就没有什么帮助。

给CRF转移矩阵设置单独的学习率,本质上就是手动调节这两个特征的权重,限制模型的学习能力,是一种正则化手段。一般来说,由于 的数据远比 简单,噪声出现的概率也会更小,训练集和测试集分布的一致性会更高,所以使用CRF并设置一个较大的学习率也大概率会有用,但这毕竟是一个无法量化的超参数,不同数据集上不具有普适性。

说个正事哈

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

点击上面卡片,关注我呀,每天推送AI技术干货~

整理不易,还望给个在看!

BERT中进行NER为什么没有使用CRF,我们使用DL进行序列标注问题的时候CRF是必备么?...相关推荐

  1. 【机器学习基础】一文读懂用于序列标注的条件随机场(CRF)模型

    模型前的铺垫 我们先引入一个假设,假设一个句子的产生只需要两步: 第一步:基于语法产生一个合乎文法的词性序列 第二步:对第一步产生的序列中的每个词性找到符合这个词性的一个词汇,从而产生一个词汇序列,便 ...

  2. 深度学习baseline模型_深度学习模型在序列标注任务中的应用

    作者 丨e成科技NLP部门自然语言理解小组 王奕磊 背景 序列标注任务是中文自然语言处理(NLP)领域在句子层面中的主要任务,在给定的文本序列上预测序列中需要作出标注的标签.常见的子任务有命名实体识别 ...

  3. BERT中的黑暗秘密

    2020-01-30 17:00:34 作者:Anna Rogers 编译:ronghuaiyang 导读 在finetune BERT的时候发生了什么? 这篇博客文章总结了我们EMNLP 2019年 ...

  4. BERT中的词向量指南

    2019-11-19 20:50:57 作者:Chris McCormick 编译:ronghuaiyang 导读 在本文中,我将深入研究谷歌的BERT生成的word embeddings,并向你展示 ...

  5. BERT中的Tokenizer说明

    BERT中的Tokenizer说明 预训练BERT的Tokenizer有着强大的embedding的表征能力,基于BERT的Tokenizer的特征矩阵可以进行下游任务,包括文本分类,命名实体识别,关 ...

  6. bert pytorch 序列标注_序列标注:Bi-LSTM + CRF

    最近在做序列标注的相关任务,为了理解bi-lstm + crf的原理及细节,找了很多相关资料,以及代码实现,这里分享给大家并附上一些自己的理解. CRF 相关资料推荐 关于crf,我看了很多资料,这里 ...

  7. 【NLP】用于序列标注问题的条件随机场(Conditional Random Field, CRF)

    上一篇介绍了隐马尔科夫模型,隐马尔科夫模型引入了马尔科夫假设,即当前时刻的状态只与其前一时刻的状态有关.但是,在序列标注任务中,当前时刻的状态,应该同该时刻的前后的状态均相关.于是,在很多序列标注任务 ...

  8. ner 评估指标_序列标注算法评估模块 seqeval 的使用

    在NLP中,序列标注算法是常见的深度学习模型,但是,对于序列标注算法的评估,我们真的熟悉吗? 在本文中,笔者将会序列标注算法的模型效果评估方法和seqeval的使用. 序列标注算法的模型效果评估 在序 ...

  9. 使用RNN解决NLP中序列标注问题的通用优化思路

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 (想更系统地学习深度学习知识?请参考:深度学习枕边书) 序列标注问题应该说是自然语言处理中最常见的问题 ...

  10. Python深度学习-NLP实战:命名实体识别(NER)之分词与序列标注、实体识别任务简介

    系列文章目录 Python深度学习-NLP实战:深度学习系列培训教程 Linux服务器软件的简单使用 Linux命令的简单使用 训练集.测试集.验证集的介绍及制作 字向量的训练与生成 文本分类之SVM ...

最新文章

  1. websocket心跳链接代码_WebSocket原理与实践(五)--心跳及重连机制
  2. bash shell实现二进制与十进制数的互转
  3. 青蛙跳台阶问题(思路与蜂窝问题一致)
  4. zimbra邮件系统详细配置教程
  5. SQL Server2000数据库文件损坏时如何恢复
  6. kettle 先删除后插入_Kettle:使用触发器和快照表进行增量数据同步
  7. 用DOS命令快把系统看透
  8. 127.0.0.1 myz.php,附录 – 1.0升级到2.0注意事项 - GatewayWorker 2.x 3.x 手册
  9. sentinel接入网关应用_阿里sentinel配合gateway 网关限流
  10. 大数据_Flink_流式处理_简介_Flink的特点---Flink工作笔记0006
  11. 基于 Keras 用 LSTM 网络做时间序列预测
  12. 22. 栈的压入、弹出队列(C++版本)
  13. 中国工业企业数据库(2015年)
  14. 【十次方】Springboot中使用Redis做缓存
  15. CCNA交换技术综合实验步骤详解
  16. TortoiseGit乌龟git添加公钥密钥和私钥认证,实现乌龟git同步免密码输入
  17. 怎么在CAD图纸中标注文字
  18. WM安装windows7超详细教程
  19. android 向上飘的字符,Android如何自定义View实现抖音飘动红心效果
  20. Eclipse新建Android项目报错解决方案详细汇总

热门文章

  1. ASP.NET Core Web多语言项目
  2. python_列表——元组——字典——集合
  3. [SHOI2008]堵塞的交通traffic
  4. java:通过Calendar类正确计算两日期之间的间隔
  5. maven私服的创建和使用
  6. 证券期货信息安全等级保护测评
  7. Android中Activity、Service和线程之间的通信
  8. 我的编程学习日志(9)--交换A,B值得方法(相加,异或,swap函数)
  9. 在InstallShield中发布单一的Setup.exe文件
  10. Android4开发入门经典 之 第四部分:用户界面