网易首页 > 网易号 > 正文 申请入驻

轻松上手,通过微调Transformers完成命名实体识别任务

0
分享至

大数据文摘授权转载自THU数据派

作者:Lars Kjeldgaard

翻译:王闯(Chuck)

校对:和中华

在本文中,我们将介绍如何通过简单微调(fine-tune)任意预训练的(pretrained)自然语言处理transformer,来完成任意语言中的命名实体识别(Named-Entity Recognition, NER)任务。

为什么这个话题值得你关注?因为NER是一项强大的自然语言处理任务,在诸多领域都有实际应用,在Towards Data Science之前的帖子中已有详细介绍。然而要想得到不错的NER模型效果,通常需要基于预训练的transformer对NER模型进行特定语言或领域的微调,这在计算资源有限的情况下,是比较可行的办法,而且能看到实际效果。

为了展示如何做到,我们使用python的NERDA包调用BERT transformer对NER模型进行微调。

NERDA是一套通用的NER系统,可用于以最少的代码量对任意语言的NER任务和任意transformer进行微调。


命名实体识别简介

如果你还不熟悉NER,请查看维基百科上的定义:

命名实体识别(也称(命名)实体标识,实体片取或实体提取)是用于信息提取的自然语言处理子任务,旨在将非结构化文本中提到的命名实体定位并分到预定义的类别,例如人名,组织机构名,地名,医疗代码,时间,数量,货币值,百分比等。

我们可以通过一个NER任务的例子来作进一步解释。

任务:在文本中标识人名和组织机构名:

Jim bought 300 shares of Acme Corp.

解答:人名:'Jim',组织机构名:'Acme Corp.'

若你想获得本文中提到的其他概念和技术的介绍,请移步文末“参考资料”部分,那里我们列了许多Towards Data Science先前的帖子。


工具箱

现在,我们要实际上手为NER微调transformer了。

无论你选择哪一种transformer和目标语言,我们这里介绍的步骤都是通用的。

我们将利用python的NERDA包来完成这项工作。

“NERDA” Python包的官方徽标,由Ekstra Bladet新闻提供

NERDA拥有为NER任务进行transformers微调的易用接口。它基于流行的机器学习框架PyTorch和Hugging Face transformers。

NERDA是开源的,可在Python Package Index(PyPI)上获得。它可通过如下方式安装:

pip install NERDA

数据集

我们将使用带有NER标注的CoNLL-2003英文数据集来训练和验证我们的模型。

首先,我们下载数据集并加载预定义且拆分过的训练数据和验证数据。

from NERDA.datasets import get_conll_data, download_conll_data download_conll_data()training = get_conll_data('train')validation = get_conll_data('valid')

CoNLL-2003使用以下类型的命名实体(相当标准的类别)进行操作:

1. 人名(PER)

2. 组织机构名(ORG)

3. 地名(LOC)

4. 其他(MISC)

5. 未命名实体(O)

CoNLL-2003数据集中的每一条观测值都是一个经过分词的句子,每个分词都带有一个命名实体标签。

下面,你将看到CoNLL数据集中随机取出的一个句子示例,同时列出了其分词与对应的命名实体标签([标签])。

Germany [B-LOC]'s [O]representative [O]to [O]the [O]European [B-ORG]Union [I-ORG]'s [O]veterinary [O]committee [O]Werner [B-PER]Zwingmann [I-PER]said [O]on [O]Wednesday [O]...

数据集采用了IOB标注方式。

IOB标注法的意思是,以'B-'标记命名实体开头的单词,以'I-'标记命名实体中间的单词。

在上面的示例中,“Germany”标记为地名(LOC),“European Union”标记为组织机构名(ORG),“ Werner Zwingmann”标识为人名(PER)。


建模

第一步,我们为任务指定可用的NER标签(不包括特殊的O(Outside,表示不在短语中)标签)。

tag_scheme = ['B-PER','I-PER','B-ORG','I-ORG','B-LOC','I-LOC','B-MISC','I-MISC']

接下来,我们必须做出选择,要微调Hugging Face上众多transformers中的哪一个。这里我们以uncased multilingual BERT transformer为例(常见选择之一)。

transformer = 'bert-base-multilingual-uncased'

同时,我们为网络层及模型训练本身提供一套基本的超参数配置。

# hyperparameters for networkdropout = 0.1# hyperparameters for trainingtraininghyperparameters = {'epochs' : 4,'warmup_steps' : 500,'train_batch_size': 13,'learning_rate': 0.0001}

整合

现在,使用NERDA模型接口将各个部分整合到一个完整的模型配置中。

from NERDA.models import NERDAmodel = NERDA(dataset_training = training,dataset_validation = validation,tag_scheme = tag_scheme,tag_outside = 'O',transformer = transformer,dropout = dropout,hyperparameters = training_hyperparameters)

在底层NERDA实现了一个torch神经网络,该神经网络建立在所选的transformer(在本例中为BERT)上。默认情况下,网络架构将类似于Hvingelby等人2020年发表的论文中提出的模型之一。(如果你愿意,也可以提出自己的网络架构)。

为了训练模型并微调BERT transformer,接下来唯一要做的就是调用train方法。

model.train()

注意:这将花上一些时间,具体取决于特征的维度(如果你想略过模型训练,则可以直接使用NERDA中提供的预训练模型)。

到这就大功告成了。现在,我们已经为NER微调了属于自己的一个基于BERT的最优效果 (state-of-the-art)模型。

让我们看看该模型在独立测试集上的表现(通过F1得分评估)。

>>> test = get_conll_data('test')>>> model.evaluate_performance(test)级别F1-分数B-PER 0.963I-PER 0.987B-ORG 0.887I-ORG 0.866B-LOC 0.922I-LOC 0.817B- MISC 0.823I-MISC 0.680AVG_MICRO 0.907

“ AVG_MICRO”:跨实体标签的F1分数的微平均值(micro-averaged F1-score)。

如你所见,模型表现看起来很棒。

现在,我们可以使用该模型来识别新文本中的命名实体,例如:

>>> model.predict_text('Cristiano Ronaldo plays for Juventus FC')([['Cristian', 'Ronaldo', 'plays', 'for', 'Juventus', 'FC']],[['B-PER', 'I-PER', 'O', 'O', 'B-ORG', 'I-ORG']])

该模型(正确地)将“ Cristiano Ronaldo”(足球运动员)标识为人名,并将“ Juventus FC”(足球俱乐部)标识为组织机构名。


微调任意Transformer

Hugging Face上目前已提供了超过5000种transformer模型。那么你应该微调哪一个呢?我们不想让你失望,但答案是:这要视情况而定。天下没有免费的午餐。Transformer模型都有各自的优缺点。此外,当你挑选transformer的时候,也要相应照顾到到计算资源的预算,和节能环保的意识。

如前所述,BERT通常是一个不错的选择。但是,与BERT相比,后起之秀ELECTRA则轻巧许多,计算效率更高,并且在NER任务上仍然表现出色。

无论你选择哪种transformer,NERDA都提供支持。在上面的代码示例中,如果想要把transformer从BERT改成ELECTRA,只需要更改transformer参数,即:

model = NERDA(...,transformer = 'google/electra-small-discriminator',...)

微调任意语言

NERDA可以用于微调任意语言的transformer,比如使用你自己的数据集。为了微调NER中丹麦语的transformer,我们可以利用DaNE数据集,该数据集由带有NER注释的丹麦语句子组成。

为实现此目的,你只需要在前一个代码示例中做出非常简单的改变:

from NERDA.datasets import get_dane_datamodel = NERDA(...,dataset_training = get_dane_data('train'),dataset_validation = get_dane_data('dev'),...)

如果你没有任何(或是还不够)所需语言的经过NER标注的训练数据,那么你可以利用doccano之类的工具来批量标注新文本。

出乎意料的是,NERDA对特定语言的微调并不需要你想像那么多的带标注的数据,因为NERDA可以利用transformer中已经存在的知识。例如,丹麦NER数据集DaNE包含的句子虽不超过5500个,却足以训练NERDA模型,性能还不错。


关于NERDA

NERDA是丹麦小报Ekstra Bladet在“新闻智能平台(PIN)”开发活动中的一部分成果。PIN是一个业界研究项目,合作方包括丹麦技术大学,哥本哈根大学和哥本哈根商学院,获得了丹麦创新基金的资助。该项目的起止时间为2020年至2023年,用于研发新闻发布的推荐系统和自然语言处理系统,其部分研究成果已开源,如NERDA。

原文标题:

Easy Fine-Tuning of Transformers for Named-Entity Recognition

原文链接:

https://towardsdatascience.com/easy-fine-tuning-of-transformers-for-named-entity-recognition-d72f2b5340e3

参考资料:

https://github.com/ebanalyse/NERDA

https://huggingface.co/

https://pytorch.org/

https://github.com/google-research/bert

“DaNE: A Named Entity Ressource for Danish”, Hvingelby et. al (2020):http://www.lrec-conf.org/proceedings/lrec2020/pdf/2020.lrec-1.565.pdf

https://github.com/google-research/electra

https://towardsdatascience.com/what-are-transformers-and-how-can-you-use-them-f7ccd546071a

https://towardsdatascience.com/bert-explained-state-of-the-art-language-model-for-nlp-f8b21a9b6270

https://towardsdatascience.com/understanding-electra-and-training-an-electra-language-model-3d33e3a9660d

编辑:于腾凯

校对:林亦霖

点「在看」的人都变好看了哦!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
女人G潮时,“喷”出的是水吗?

女人G潮时,“喷”出的是水吗?

水白头
2024-06-16 14:23:11
央视解说:埃里克森用心脏停下了球破门,用进球回报他的丹麦队友

央视解说:埃里克森用心脏停下了球破门,用进球回报他的丹麦队友

直播吧
2024-06-17 00:40:15
甘肃天水烟草局“夜袭”造假,监控曝光“起早贪黑”式伪造证据

甘肃天水烟草局“夜袭”造假,监控曝光“起早贪黑”式伪造证据

新动察
2024-06-16 11:36:42
39岁中国跑酷元老因心脏病去世,曾是甄子丹御用替身

39岁中国跑酷元老因心脏病去世,曾是甄子丹御用替身

都市快报橙柿互动
2024-06-17 07:59:52
美国媒体公布兴奋剂名单!覃海洋和汪顺在列,网友:巴黎怎么办

美国媒体公布兴奋剂名单!覃海洋和汪顺在列,网友:巴黎怎么办

体坛知识分子
2024-06-17 06:20:02
黄埔军校百年校庆,台湾政治人物均表态各一,赖清德又要搞事情…

黄埔军校百年校庆,台湾政治人物均表态各一,赖清德又要搞事情…

侦姐有料
2024-06-17 02:20:41
网友:青岛一售楼处被业主围堵!每平15000多元跌至毛坯7000多…

网友:青岛一售楼处被业主围堵!每平15000多元跌至毛坯7000多…

火山诗话
2024-06-17 06:08:53
“14国拒绝签署联合公报,无一国愿‘接盘’下次和会”

“14国拒绝签署联合公报,无一国愿‘接盘’下次和会”

观察者网
2024-06-17 09:32:09
打虎不停歇:今年已有唐一军、唐仁健、苟仲文、吴英杰4名正部级被查

打虎不停歇:今年已有唐一军、唐仁健、苟仲文、吴英杰4名正部级被查

澎湃新闻
2024-06-16 15:26:26
烧光百亿,离奇破产!顶级天才,让广东损失惨重

烧光百亿,离奇破产!顶级天才,让广东损失惨重

金错刀
2024-06-16 15:47:42
高温下的印度光伏,是教科书一般的“我之蜜糖,彼之砒霜”!

高温下的印度光伏,是教科书一般的“我之蜜糖,彼之砒霜”!

醉井观商
2024-06-16 17:44:55
这居然哑火了英超MVP+德甲金靴+阿森纳射手王!一个赛季91球

这居然哑火了英超MVP+德甲金靴+阿森纳射手王!一个赛季91球

直播吧
2024-06-17 09:01:13
2013年男子找干妈通奸时,遇干妈和情人缠绵,他将干妈的情人杀死

2013年男子找干妈通奸时,遇干妈和情人缠绵,他将干妈的情人杀死

汉史趣闻
2024-06-12 07:37:54
上海电影节众男星状态:45岁邓超显沧桑,李治廷寸头造型阳刚帅气

上海电影节众男星状态:45岁邓超显沧桑,李治廷寸头造型阳刚帅气

扒虾侃娱
2024-06-15 21:23:43
汪小菲飞台北和孩子过父亲节,一家四口到河边抓鱼,评论区笑喷了

汪小菲飞台北和孩子过父亲节,一家四口到河边抓鱼,评论区笑喷了

娱记掌门
2024-06-16 19:54:25
针锋相对?泽连斯基也提谈判条件:若俄从“乌合法领土上撤军”,明天就能开始谈

针锋相对?泽连斯基也提谈判条件:若俄从“乌合法领土上撤军”,明天就能开始谈

环球网资讯
2024-06-17 09:12:17
姆巴佩:我不会参加巴黎奥运会,我理解我的俱乐部的决定

姆巴佩:我不会参加巴黎奥运会,我理解我的俱乐部的决定

直播吧
2024-06-16 23:25:09
俄罗斯加快从克里米亚撤离,军人家庭和博物馆展品下架撤离

俄罗斯加快从克里米亚撤离,军人家庭和博物馆展品下架撤离

亡海中的彼岸花
2024-06-16 16:28:59
新加坡前总理李光耀:过早翘起尾巴与美国对抗,是中国颠覆性错误

新加坡前总理李光耀:过早翘起尾巴与美国对抗,是中国颠覆性错误

黑天鹅洞察
2024-06-16 22:33:10
身高191体重180火遍全网的马丁-亚当:上届欧洲杯我在家喝酒

身高191体重180火遍全网的马丁-亚当:上届欧洲杯我在家喝酒

直播吧
2024-06-16 17:34:10
2024-06-17 11:22:44
大数据文摘
大数据文摘
专注大数据,每日有分享!
6274文章数 94271关注度
往期回顾 全部

科技要闻

OpenAI可能会迎来重大变化

头条要闻

牛弹琴:乌和平峰会结束后 泽连斯基谈及中国改口了

头条要闻

牛弹琴:乌和平峰会结束后 泽连斯基谈及中国改口了

体育要闻

欧洲杯15亿豪阵险翻车:半场梦游 王牌打废

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

枝江酒业的补税单,张道红的下马威

汽车要闻

传奇新篇章 全新一代大众迈腾来了

态度原创

健康
家居
时尚
数码
亲子

晚餐不吃or吃七分饱,哪种更减肥?

家居要闻

空谷来音 朴素留白的侘寂之美

夏季流行浅色系穿搭,这些技巧你要学会

数码要闻

Mini Maker 推出 1.4L 桌面 U 迷你主机,搭载专用显卡坞外接口

亲子要闻

看了清华附中幼儿园的毕业典礼后,网友:大学典礼都没这隆重!

无障碍浏览 进入关怀版