ncrf++:一个开源的神经序列标记工具包

1.介绍

序列标记模型在许多NLP任务中非常流行,如命名实体识别(Named Entity Recognition, NER)、词性标记(part-of-speech, POS)和分词。目前最先进的序列标记模型大多采用具有输入字特征的CRF结构。LSTM(或双向LSTM)是一种常用的基于深度学习的序列标记特征提取方法。CNN也可以使用,因为它的计算速度更快。此外,词内的特征也可以用来表示词,这些特征可以通过字符LSTM或字符CNN结构或人定义的神经特征来捕获。
ncrf++ 是一个基于PyTorch的框架,具有输入特性和输出结构的灵活选择。使用ncrf++的神经序列标记模型的设计完全可以通过配置文件进行配置,不需要任何代码工作。ncrf++可以看作是著名的统计CRF框架crf++的神经网络版本。
该框架已被ACL 2018作为演示文件。使用ncrf++的详细实验报告和分析被COLING 2018评为最佳论文。
ncrf++支持三个层次的不同结构组合:字符序列表示、字序列表示和推理层。

  1. 字符序列表示:字符LSTM、字符GRU、字符CNN和手工制作的单词特征。
  2. 词序列表示:词LSTM,词GRU,词CNN。
  3. 推理层:Softmax, CRF。

2. 要求

python:2或3
pytorch:1.0

3. 优点

  1. 完全可配置:所有的神经模型结构可以设置一个配置文件。
  2. 最先进的系统性能:与最先进的模型相比,基于ncrf++构建的模型可以提供相当或更好的结果。
  3. 灵活的功能:用户可以定义自己的功能和预先训练的功能嵌入。
  4. 运行速度快:ncrf++充分利用了批处理操作,使系统在GPU的帮助下变得高效(训练时>1000sent/s,解码时>2000sent /s)。
  5. N最佳输出:ncrf++支持nbest解码(及其概率)。

3.用法

ncrf++支持通过配置文件设计神经网络结构。程序可以在两种状态下运行;训练和解码。(此存储库中包含了示例配置和数据)
在训练中状态:

python main.py --config demo.train.config

在解码状态:

python main.py --config demo.decode.config

配置文件控制网络结构、I/O、训练设置和超参数。
这里列出了详细的配置和解释。
ncrf++分为三层(如下所示):字符序列层;字序列层和推理层。通过使用配置文件,可以很容易地复制大多数最先进的模型,而无需编码。另一方面,用户可以通过设计自己的模块来扩展每一层(例如,他们可能希望设计自己的神经结构,而不是CNN/LSTM/GRU)。我们的分层设计使得模块扩展更加方便,模块扩展指令可以在这里找到。

4. 数据格式

  1. 可以在sample_data中引用该数据格式。
  2. ncrf++同时支持BIO和BIOES(BMES)标签方案。
  3. 注意,IOB格式(不同于BIO)目前是不支持的,因为这个标签方案是旧的,工作比其他方案更差。
  4. 本文解释了这三种标签方案之间的区别论文地址点此位置
  5. 有一个脚本,它在IOB/BIO/BIOES之间转换标签方案。欢迎试用。

5.性能

  1. 在相同结构下,CONLL 2003英语NER任务的结果优于SOTA。
  2. CharLSTM+WordLSTM+CRF: 91.20 vs 90.94 of Lample .etc, NAACL16;
  3. CharCNN+WordLSTM+CRF: 91.35 vs 91.21 of Ma .etc, ACL16.
    By default 情况下,LSTM为双向LSTM。
IDModelNocharCharLSTMCharCNN
1WordLSTM88.5790.8490.73
2WordLSTM+CRF89.4591.2091.35
3WordCNN88.5690.4690.30
4WordCNN+CRF88.9090.7090.43

在统计实验下比较了12个神经序列标记模型({charLSTM, charCNN, None} x {wordLSTM, wordCNN} x {softmax, CRF})在三个基准(POS, Chunking, NER)上,详细的结果和比较在COLING 2018论文 Design Challenges and Misconceptions in Neural Sequence Labeling.

6. 添加手工制作的特性

ncrf++集成了几种SOTA神经序列特征提取器:CNN (Ma .等,ACL16)、LSTM (Lample .等,NAACL16)和GRU (Yang .等,ICLR17)。此外,手工制作的功能已经被证明在序列标记任务中很重要。ncrf++允许用户设计自己的功能,比如大写、POS标签或其他功能。用户可以通过配置文件(特征嵌入大小、预训练特征嵌入等)来配置自定义的特征。
示例输入数据格式见train.cappos。bmes,它包括两个人类定义的特性[POS]和[Cap]。([POS]和[Cap]是两个例子,你可以给你的特性任何你想要的名称,只要遵循格式[xx]并在配置文件中用相同的名称配置特性。
用户可以使用命令对配置文件中的各个特性进行配置:

feature=[POS] emb_size=20 emb_dir=%your_pretrained_POS_embedding
feature=[Cap] emb_size=20 emb_dir=%your_pretrained_Cap_embedding

未经过预训练的嵌入特征将被随机初始化。

7. 速度

ncrf++采用全批处理计算实现,使得它在模型训练和解码方面都非常高效。利用ncrf++构建的LSTMCRF模型,在Nvidia GTX 1080 GPU和大批量的帮助下,在训练和解码状态下,LSTMCRF模型分别可以达到1000发送/s和2000发送/s

8.最好的解码

传统的CRF结构只解码一个具有最大概率的标签序列(即1-best输出)。虽然ncrf++可以提供很大的选择,但它可以解码具有前n个概率的n个标签序列(即n-最佳输出)。nbest译码得到了几种流行的统计CRF框架的支持。然而,据我们所知,ncrf++是唯一也是第一个支持nbest解码的神经CRF模型工具包。
在实现中,当nbest=10时,在ncrf++中构建的CharCNN+WordLSTM+CRF模型在CoNLL 2003 NER任务上可以得到97.47%的oracle F1值(当nbest=1时F1 = 91.35%)。

9.复制论文结果和超参数调整

为了重现COLING 2018论文中的结果,只需要在配置文件demo.train.config中将迭代=1设置为迭代=100,并在该配置文件中配置自己的文件目录。默认的配置文件描述了Char CNN + Word LSTM + CRF模型,可以通过修改相应的配置来构建自己的模型。这个演示配置文件中的参数在论文中是相同的。(注意Word CNN相关模型需要稍微不同的参数,细节可以在COLING论文中找到。)
如果想在新的任务或数据集中使用这个框架,这里有一些由@Victor0118提供的调优技巧。

10.论文

如果在论文中使用ncrf++,引用我们的ACL演示论文:

@inproceedings{yang2018ncrf,  
 title={NCRF++: An Open-source Neural Sequence Labeling Toolkit},  
 author={Yang, Jie and Zhang, Yue},  
 booktitle={Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics},
 Url = {http://aclweb.org/anthology/P18-4013},
 year={2018}  
}

如果使用ncrf++的实验结果和分析,引用我们的COLING论文:

@inproceedings{yang2018design,  
 title={Design Challenges and Misconceptions in Neural Sequence Labeling},  
 author={Yang, Jie and Liang, Shuailong and Zhang, Yue},  
 booktitle={Proceedings of the 27th International Conference on Computational Linguistics (COLING)},
 Url = {http://aclweb.org/anthology/C18-1327},
 year={2018}  
}

11.未来工作

文本分类工作
支持API的使用
上传分词/词性标签/NER训练模型
启用加载预训练的ELMo参数
添加BERT特征提取层

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值