工业级命名体识别经验+代码总结

2020 年 10 月 2 日 AINLP

背景介绍

之前做过一段时间的命名体识别,本文会从我自己的实际工作经验出发,希望可以给大家一些带来一点帮助

建了仓库,地址在这里:

https://github.com/DA-southampton/ner

点star 不迷路,相关文章在github上更新的会更频繁一点QAQ,在仓库会把之后看过的文章更新在上面

微信公众号: NLP从入门到放弃

(我果然是个渣渣,公众号名字都这么渣....欢迎关注)

项目背景其实也很简单,就是我要做一个关键词匹配的功能,第一步我需要挖掘关键词。关键词的挖掘方法很多,基线一般就是TF-IDF,然后你再根据效果和自己的数据做相关优化就可以。亲测TF-IDF效果已经很不错了。不过,我这里比较特殊,我在使用TF-IDF之后,又对数据做了补充,我在数据调研之后发现对于一部分领域文本,比如说娱乐领域,明星领域,财经领域等等吧,这些领域的文本很有特色,一般人名/地名/公司名称/书名/电影名称都可以很好的表示文本关键信息。

这里小声插一句,对于关键词匹配这种东西,大家千万不要瞧不上,有些时候一个关键词匹配就在文本分类这样的简单任务就可以做到比较不错的效果。而且一般工业上,关键词匹配也有很多细节可以挖,比如如何扩充关键词词典,不同领域关键词有何区别,匹配算法如何高效执行(一般都是用树相关算法来做匹配)等等。

在这种项目背景之下,很自然的就会想到使用命名体识别。我把在做这个项目的过程中,积累的一些资料总结了一下,希望对大家有所帮助。

关于命名体识别,这是个很大的领域,要是做好,有很多工作要做。标题完全是为了能增加曝光,自己还是知道只是一个小学生,我会把自己看过的有用的东西都列出来,给大家提供一些先验信息。

之后看到的关于nert的文章会在此基础继续更新(最近存了好多新文章还没看/苦逼码农/QAQ),不过建议大家star一下Github,地址在开头,不迷路,我给自己的计划是实时更新这个仓库,精读一些论文和博客,做一些思维导图,复现一些代码。


经验介绍

对于命名体识别的代码这一块,我大概的经验就是,工作中很少直接就上复杂模型,一般都是先来简单模型,然后在优化迭代。我给个大概的方向(大家视情况而定):

词典匹配-->HMM/CRF-->BiLSTM-CRF-->Bert系列

一般来说词典匹配是最简单的,也是最快的。不过很依赖于你的词典情况。一般来说,词典的补充需要你自己搞定。

我简单给几种我自己用过的方法:

  1. 比如找相关的运营人员/产品人员,因为他们比较靠近一线工作,手上会积累一些相关的词典。

  2. 使用合法爬虫手段(至于如何合法就自己考虑吧)去专业的垂直领域网站获取数据补充词典。

  3. 比如你可以获取已经有的关键词的同义词来扩充

这里我大概说一下第三条,这个涉及到了如何获取同义词(nlp好复杂啊,退NLP保平安)。

我自己的经验就是,一般来说同义词获取你可以在自己平时维护一个同义词库,功夫下在平时,这个同义词库也有很多功能,简单说比如你可以用来看你自己训练的微博词向量的效果如何,自己定个阈值,看看词向量有没有做到相近词的向量相近,当然也有的大佬怀疑相近词的词向量相近这个方法不能作为判定词向量好坏的方法)

同义词还可以用来做任务的数据增强,比如你做个文本分类,数据有点少,处理调换顺序之类的方法,也可以试试同义词做数据增强。

好!言归正传,再说下去,ner就没地方写了,各位大大估计也没耐心了。大家关注我的公众号,相关文文章我会在后面排期写出来的(感觉挖了好多坑,哭了)

下面我大概分为两个个模块,第一个是各种模型的代码实现相关资源,第二个就是关于命名体识别基础知识之类的相关资源

代码实现

代码不再多,把一个反复看,看懂了,自己能写出来做二次开发就可以,不要今天看一个代码明天换一个代码看(小声嘟囔)

Bert系列 (Bert/Albert-softmax/CRF/Span/Span+focal_loss/Span+label_smoothing)做命名体识别

https://github.com/lonePatient/BERT-NER-Pytorch

简单介绍:仓库下面有Bert系列完成命名体识别的效果对比(一般来说看F1就可以)以及训练时间之类的比较,很推荐大家去看一看

BiLSTM-CRF实现命名体识别(Pytorch版本)

https://github.com/yanwii/ChinsesNER-pytorch?files=1

简单介绍:BiLSTM-CRF我就推荐这一个吧,其他的都是大同小异,大家可以一步步去调试,做二次开发就可以,比如换个损失函数之类的。

NLP实战-中文命名实体识别-HMM/CRF 代码的实现

https://zhuanlan.zhihu.com/p/61227299

简单介绍:(引用原文)本文章将通过pytorch作为主要工具实现不同的模型(包括HMM,CRF,Bi-LSTM,Bi-LSTM+CRF)来解决中文命名实体识别问题,文章不会涉及过多的数学推导,但会从直观上简单解释模型的原理,主要的内容会集中在代码部分。

隐马尔可夫模型命名实体识别NER-HMM-1

https://www.bilibili.com/video/BV1MJ411w7xR?from=search&seid=10101366636483430700

隐马尔可夫模型命名实体识别NER-HMM-2

https://www.bilibili.com/video/BV1uJ411u7Ut

简单介绍:不愿意看书想看视频的同学可以看一下这个,B站首页偶然推荐给我的(推荐算法精准石锤了),讲的确实好

双向最大匹配和实体标注:你以为我只能分词?------这个是词典方法命名体识别

https://zhuanlan.zhihu.com/p/133532494

简单介绍:这个作者总结了自己实体词典+jieba词性标注进行实体自动打标,有Python代码实现,大家可以关注一下这个博主,名字叫“叫我NLPer”,行文很有意思

基本上代码,我觉的看上面几个就够了吧,反复咂摸一下。


博客讲解

有些时候看到有人说,要想对某个概念真正有所了解,一定要看原论文。这句话肯定没错,但是不是有些时候没时间看论文吗(哭了苦逼码农)。而且有些博客讲的是真的好啊。我大概罗列一些我局的真心不错的文章,主要就是HMM/CRF/Bilstm-CRF

概率图模型体系:HMM、MEMM、CRF

https://zhuanlan.zhihu.com/p/33397147

这个文章传播的比较广,讲的确实比较详细,不过大佬写的有些地方还是有些小问题,大家自己去挖掘吧。。。

最通俗易懂的BiLSTM-CRF模型中的CRF层介绍-孙孙的文章

https://zhuanlan.zhihu.com/p/44042528

这个文章讲的是对CRF模型的讲解,翻译的外文,原文很精彩,看译文也可以。大概讲一下,在看的过程中,要多琢磨。比如CRF有个特点全局归一化,这是区别于MEMM模型的;比如在代码实现的时候,我们一般都是使用log,所以乘法会对应加法,这样你在看源代码时候就不会懵逼;比如CRF损失函数有两个部分组成,分别有啥作用。

ner自动化打标方法

https://zhuanlan.zhihu.com/p/133532494

叉烧大佬讲了一下如何用词典+最大逆向匹配做命名体识别整体思路,代码的实现可以参考第一部分那个Python代码

中文NER任务实验小结报告——深入模型实现细节

https://zhuanlan.zhihu.com/p/103779616

作者写了一下自己在做命名体识别的时候针对Bert的优化:BERT+CE_loss;BERT+lstmcrf;尝试用更少的标签列表;对损失函数进行了优化尝试(解决类别不平衡,因为O类别太多了);BERT+MRC;(改天我可能要精读一下,大佬写了很多内容,感觉有很多细节可以挖)

如何通俗地讲解 viterbi 算法?

https://www.zhihu.com/question/20136144/answer/763021768

讲解了维特比算法,维特比一般是用于解码

小标注数据量下自然语言处理实战经验

https://www.jiqizhixin.com/articles/2019-08-16-6

简单介绍:小标注数据如何处理                                          


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

(1)点击页面最上方"AINLP",进入公众号主页。

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

感谢支持,比心

欢迎加入NER技术交流群
进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注NER

推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

登录查看更多
2

相关内容

TF-IDF(英语:term frequency–inverse document frequency)是一种用于信息检索与文本挖掘的常用加权技术。tf-idf是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。tf-idf加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了tf-idf以外,互联网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜索结果中出现的顺序。
【2020新书】C++20快速语法参考,第4版,209页pdf
专知会员服务
71+阅读 · 2020年8月5日
【经典书】Python金融大数据分析,566页pdf
专知会员服务
119+阅读 · 2020年8月1日
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
160+阅读 · 2020年5月14日
《深度学习》圣经花书的数学推导、原理与Python代码实现
《代码整洁之道》:5大基本要点
专知会员服务
49+阅读 · 2020年3月3日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
160+阅读 · 2019年10月28日
深度学习自然语言处理综述,266篇参考文献
专知会员服务
225+阅读 · 2019年10月12日
Google代码Code Review实践指南发布
Python程序员
3+阅读 · 2019年9月7日
斗鱼大佬分享!基于图的团伙挖掘算法实践
大数据技术
32+阅读 · 2019年9月6日
一文详解循环神经网络的基本概念(代码版)
人工智能头条
5+阅读 · 2018年4月28日
深度学习的GPU:深度学习中使用GPU的经验和建议
数据挖掘入门与实战
11+阅读 · 2018年1月3日
[深度学习] 我理解的循环神经网络RNN
机器学习和数学
16+阅读 · 2017年12月2日
Arxiv
0+阅读 · 2020年12月1日
Arxiv
0+阅读 · 2020年11月30日
Arxiv
8+阅读 · 2019年3月28日
CoCoNet: A Collaborative Convolutional Network
Arxiv
6+阅读 · 2019年1月28日
Arxiv
22+阅读 · 2018年8月30日
VIP会员
相关VIP内容
【2020新书】C++20快速语法参考,第4版,209页pdf
专知会员服务
71+阅读 · 2020年8月5日
【经典书】Python金融大数据分析,566页pdf
专知会员服务
119+阅读 · 2020年8月1日
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
160+阅读 · 2020年5月14日
《深度学习》圣经花书的数学推导、原理与Python代码实现
《代码整洁之道》:5大基本要点
专知会员服务
49+阅读 · 2020年3月3日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
160+阅读 · 2019年10月28日
深度学习自然语言处理综述,266篇参考文献
专知会员服务
225+阅读 · 2019年10月12日
相关资讯
Google代码Code Review实践指南发布
Python程序员
3+阅读 · 2019年9月7日
斗鱼大佬分享!基于图的团伙挖掘算法实践
大数据技术
32+阅读 · 2019年9月6日
一文详解循环神经网络的基本概念(代码版)
人工智能头条
5+阅读 · 2018年4月28日
深度学习的GPU:深度学习中使用GPU的经验和建议
数据挖掘入门与实战
11+阅读 · 2018年1月3日
[深度学习] 我理解的循环神经网络RNN
机器学习和数学
16+阅读 · 2017年12月2日
Top
微信扫码咨询专知VIP会员