美文网首页
NLP实战:使用Bert4Keras工具包+Colab实现命名实

NLP实战:使用Bert4Keras工具包+Colab实现命名实

作者: dengxc | 来源:发表于2020-02-16 21:59 被阅读0次

    背景:

    目标:快速上手实现一个基于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中 。

    相关文章

      网友评论

          本文标题:NLP实战:使用Bert4Keras工具包+Colab实现命名实

          本文链接:https://www.haomeiwen.com/subject/endmfhtx.html