赞
踩
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注go)
为更好地展示关键内容,本文以QA形式探讨了以下问题:
相关代码后续会在(https://github.com/loujie0822/DeepIE)开源,尽情关注~
谈到标注框架,NLPer首先想到的就是序列标注,而如今我们面临早已不是一个简单抽取问题,序列标注已经无法“胜任”了:例如,在医疗抽取任务中,我们常常会遇到嵌套、非连续、类型混淆、信息块重叠、关系重叠等复杂抽取问题。
因此,掌握标注框架(解码方式)是解决信息抽取问题的第一步,也是构建强大baseline的关键一步:试想一下,如果你的标注框架都不能完备解码(gold输入,输出指标也应该达到或接近100%),不能cover绝大部分case情况,又何谈下一步优化提升呢?
JayJay这里归纳了4种“易于上手”的标注框架:
序列标注:每个序列位置都被标注为一个标签,比如按照BILOU标注,我们常用MLP或CRF解码。
指针标注:对每个span的start和end进行标记,对于多片段抽取问题转化为N个2分类(N为序列长度),如果涉及多类别可以转化为层叠式指针标注(C个指针网络,C为类别总数)。事实上,指针标注已经成为统一实体、关系、事件抽取的一个“大杀器”。
多头标注:对每个token pair进行标记,其实就是构建一个
的分类矩阵,可以用于实体或关系抽取。其重点就是如何强有力的表征构建分类矩阵。事实上,多头标注成为了众多实体和关系抽取SOTA的首选利器!(PS:多头标注是JayJay自己叫的,单纯是为了纪念多头选择机制的关系抽取论文[1])
片段排列:源于Span-level NER[2]的思想,枚举所有可能的span进行分类,同序列长度进行解耦,可以更加灵活地处理复杂抽取和低资源问题。事实上,片段排列的思想已经被Google推崇[3]并统一了信息抽取各个子任务。
掌握上述4种标注框架后,我们就可以根据具体抽取任务、灵活地应用于实体、关系、事件抽取等场景中了(PS:对于一些生成式的标注框架,JayJay感觉不够稳定,就不再单独介绍了)。
在实际业务场景中的NER问题可能与你想的不太一样,比如下图中的复杂NER问题你遇到过吗?
本文这里给出了上述复杂NER问题的简单解决方案:
嵌套NER:例如在span「呼吸中枢受累」中,存在两个实体嵌套:「症状:呼吸中枢受累」和「部位:呼吸中枢」。我们在Q3中具体介绍解决方案。
非连续NER:例如在span「尿道、膀胱、肾绞痛」中存在三个非连续实体「尿道痛」、「膀胱痛」、「肾绞痛」。这里给出3种解决方案:
类型易混淆NER:例如对于部位实体「左肺上叶」,其归属于「病理」还是「影像」模块呢?对于「纵隔」部位,是属于「肿瘤」还是「淋巴结」部位呢?这里给出2种解决方案:
既然实际业务中的NER问题是复杂的,NER竞赛也不应该循规蹈矩了~这不,CHIP2020的中文医学实体抽取评测就是一个嵌套实体抽取问题,数据集包含504种常见的儿科疾病、7,085种身体部位、12,907种临床表现等九大类医学实体。
对于嵌套实体抽取这个任务,我们直接套用Q1中的4种万能标注框架就可以解决了:
序列标注:
指针标注:
多头标注
片段排列
在CHIP20嵌套实体评测中,我们对比了不同标注策略下的效果(如下图),可以发现:多头标注效果最佳!
标注资源少、如何降低标注量一直是真实工业场景中必须面对的问题,不同于分类任务,大规模的实体标注数据集的构建成本更高。BERT的出现本身就是一种降低标注量的方式,此外,文本增强等方式也可降低标注(PS:NER等序列标注任务的数据增强方式可能要独立适配会更好,采用常见的增强方式效果提升不明显~)。
那么,有没有一种仅仅通过积累的实体词典、来匹配标注数据的方式,这样可以不用大规模的进行人工标注了。这种方式,可以统称为「不完全标注NER问题」:这种方式最为突出一点就是漏标情况严重,而NER序列标注的方式对噪声(漏标)十分敏感。(事实上,人工标注中也会存在漏标等情况)
CHIP20的评测六-中药说明书实体识别挑战(http://cips-chip.org.cn/2020/eval6)就是对这一问题的评测。由于这个评测正在答辩环节中,JayJay也进入最后答辩了,具体方案等成绩揭晓后再与大家分享吧~下面,我们来看看学术界都有哪些解决方案:
需要特别介绍的是一篇来自ICLR2021投稿的《Empirical Analysis of Unlabeled Entity Problem in Named Entity Recognition》,就是采用我们上述提到的「片段排列」标注方式,摒弃传统的CRF序列标注、与序列长度解耦,转化为一个对span的分类问题,这样更适合对负样本实体的采样;这样模型建模不会像对序列标注中的漏标过于敏感,也更好控制。
2020年以来,关系抽取SOTA就换了好几个,JayJay常常感叹:关系抽取也太卷了吧~不过仔细阅读后,发现这些SOTA其实绝大多数还是围绕“标注框架”进行魔改,只要我们掌握Q1中提到的4种万能标注,登顶SOTA也不是不可能!
本文所提到的「关系抽取」就是实体关系抽取,不同于「关系分类」。
关系抽取范式主要有两大类:
JayJay也有一段时间痴迷于各种联合抽取的joint魔改模型,如果大家有兴趣可以在知乎上直接搜索阅读JayJay的这篇文章《nlp中的实体关系抽取方法总结》。由于篇幅限制,这里简单给出一个总结图:
结合上图,我们可以发现未来突破SOTA的方向可能是:
废话不说,下面直接来介绍CHIP20中的关系抽取评测。这个评测任务来源于中文医学信息抽取数据集CMeIE(http://cmekg.pcl.ac.cn/),是目前最大的中文医学关系数据集,共包含近7.5万三元组数据,2.8万疾病语句和53种定义好的schema,共44种关系,如下图所示(图片来自于腾讯天衍实验室):
这个关系评测任务是一个SPO抽取问题:
看到这个任务介绍后,如何快速构建强大的baseline呢?可以直接套用Q1给出的4种通用框架:
策略1:基于主语感知的层叠式指针网络(指针标注),抽取过程:先抽取主语subject,再抽取谓语predicate和宾语object,主要参考自ACL20的CasRel[8],JayJay做了以下几点改进(网络架构如下图所示):
策略2:多头选择机制(多头标注),是基于文献[9]的改进,最重要的就是关系分类器的构造,即是实体pair的一个线性分类器,每个实体pair只选取当前实体span的最后⼀个字符进⾏关系预测,如下图:
关系分类器通过构建
的矩阵得到(其中N为序列长度,C为关系类别总数),然后通过sigmoid进行loss计算,JayJay做了以下几点改进:
策略3:融合BERT与多头选择机制通过上述两个策略的探索后,可以发现多头标注的两个关键问题:
基于以上两点,我们尝试将BERT最后两层编码进⾏Biaffine计算,得到关系矩阵,同时引入「CLS」全局编码信息,如下图所示:
下图对比了上述三种不同策略的指标表现:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
3d.png)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-Ha7qoRcp-1713687356721)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。