NLP实战:使用Bert4Keras工具包+Colab实现命名实体识别NER任务

背景:

目标:快速上手实现一个基于BERT和CRF的命名实体识别(NER)任务。

适宜人群:希望使用Bert来进行NER任务的NLP初学者。同时大概知道如何使用keras和Colab使用免费GPU的伙伴们。


问题:

1,为什么要用BERT,什么是bert4keras工具包?

    BERT最近几年大火,因为提供了高效的预训练方法。许多NLP任务上取得了非常好的效果。

    但是现在的BERT并不是很好使用,就算是想要做一个小的demo,入门也不是特别简单。

    所以所以我们使用苏剑林大佬的bert4keras。苏老师的基本思想是,比起其他的神经网络框架,keras相对来说要更加容易使用一些。所以他将bert和keras结合了起来便于大家上手做相关任务。

2,为什么要用CRF?

    之前看到知乎,有人完全扎进了高大上的各种模型,当别人提到CRF模型的时候不屑一顾,称之为“啥年代了还看着几十年前的玩意儿”。但是在序列标注领域,CRF的使用频率十分高。

    宗成庆老师在《统计自然语言处理》一书说到:“由于该方法(CRF)简便易行,而且可以获得较好的性能,因此受到很多学者的青睐,已被广泛地应用于人名、地名和组织机构等各种类型命名实体的识别,并在具体应用中不断得到改进,可以说是命名实体识别中最成功的方法。”

    想要学习CRF大概原理的伙伴可以从bert4keras的创造者苏剑林大佬博看一下他所写的系列文章~:https://kexue.fm/archives/4695

    具体的推导可以从李航老师HMM章节开始看起可能帮助更大。

3,NER任务是什么?常见数据集标注格式?

    命名实体识别(NER)可以看做是序列标注的一种。其他的序列标注包括像:词性标注、自动分词等。NER(named entity recognition)的本质其实就是从文本识别某些特定实体指称的边界和类别。这些特定的实体可以是:人名、地名、组织机构名、时间和数字表达(包括时间、日期、货币量和百分数等)。

    同时NER的常见的数据集标注格式也同其他的机器学习任务不大一样。一般以字为单位。

    以下图的人民日报的NER标注数据为例:对于“海南公司飞行部”,我们认为是一个组织实体名。所以在开始的字符进行“B-ORG”的标注,“B”表示begin,标注的开始。“I-ORG”表示实体名后续字符。文本中其余无关字符都标记为“O”。

人民日报的NER标注数据

4,为何使用Colab?

    因为可以薅羊毛使用免费GPU~哈哈!

    如果不清楚如何使用Colab的小伙伴可以自行查找一下。


步骤:

1,在colab下载必要的第三方包以及Bert模型

要点1:使用colab的`./content`空间的技巧。

    我们可以直接较占空间的bert模型(300mb)下载到正运行的`./content`空间内。笔者体验在colab下载是十分快的,往往可以达到几十mb每秒的下载速度。下载好的文件可以在左侧的文件栏看到下载的文件。大家可以把bert模型和自己的数据集都放上去便于使用。

colab的文件栏查看文件

要点2:使用 pip 来下载bert4keras。

要点3:下载 BERT 模型。

很简单,按照下述的代码块就可以把数据集合bert模型都下载到运行空间了。需要注意的是,这里下载的BERT模型是专门用于中文的BERT模型。用于处理中文相关任务。

使用wget等命令下载和解压bert模型

2,整理数据集并调整格式

要点1:每个文本之间的分割为`\n`,图示如下。

每个文本之间的分割为`\n`

要点2:注意标注方法。

    后续代码是根据人民日报的数据集来处理的。由于人民日报中的NER标注是BIO的。大伙在使用其他规则的命名实体的数据集的时候可能需要注意。例如像是下图的数据集,就是BIOES的标注方法。处理方式也简单,确保标注的开头只有B、I、O三个字母就行了。

非人民日报NER数据集示例

要点3:将数据集上载到colab上

4, 搭配代码

    代码来源:其实就是bert4keras,使用bert+CRF

    代码地址:https://github.com/bojone/bert4keras/blob/master/examples/task_sequence_labeling_ner_crf.py 

5, 载入数据集并配置模型;

代码块:载入数据
代码块:bert配置文件

6,训练模型以及模型预测

训练要点:

    使用人民日报数据集时候batch_size为32可能会崩,笔者后来调成了10。大伙可以基于自己的数据集多尝试。

模型预测:

    使用代码中的`named_entity_recognize`方法,传入文本就可以得到标注效果了!

    笔者使用了其他的数据集实验了一下,最后的f1可以达到近90。下图为其他文本的标注效果。可以看到预测结果还是不错的

文本的标注效果

代码:

https://github.com/dengxc1220/bert4keras_ner_demo 

欢迎大家多捧场,来star

同时大家注意,Google Colab可直接从github打开Jupyter notebooks,

只需将“http:// github.com/”替换为“https:// colab.research.google.com/github/”,就会直接加载到Colab中 。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容