NCRF ++:开源神经序列标记工具包
序列标记模型在许多NLP任务中非常流行,例如命名实体识别(NER),词性(POS)标记和分词。最先进的序列标记模型主要利用具有输入字特征的CRF结构。LSTM(或双向LSTM)是序列标记任务中流行的基于深度学习的特征提取器。并且由于更快的计算,也可以使用CNN。此外,单词内的特征对于表示单词也是有用的,可以通过字符LSTM或字符CNN结构或人类定义的神经特征来捕获单词。
NCRF ++是一个基于PyTorch的框架,可灵活选择输入功能和输出结构。使用NCRF ++的神经序列标记模型的设计可通过配置文件完全配置,该配置文件不需要任何代码工作。NCRF ++是一个神经版CRF ++,这是著名的统计CRF框架。使用NCRF ++的详细实验报告已在COLING 2018中被接受。
NCRF ++支持三个级别的不同结构组合:字符序列表示,字序列表示和推理层。
欢迎来到这个存储库!
需求:
Python: 2.7
PyTorch: 0.3 (currently not support 0.4, will update soon)
好处
1.完全可配置:所有神经模型结构都可以使用配置文件进行设置。
2.最先进的系统性能:与最先进的模型相比,基于NCRF ++的模型可以提供相当或更好的结果。
3.灵活的功能:用户可以定义自己的功能和预训练的功能嵌入。
4.快速运行:NCRF ++利用完全批量操作,在GPU的帮助下使系统高效(> 1000sent / s用于训练,> 2000sent / s用于解码)。
5.N最佳输出:NCRF ++支持nbest
解码(具有其概率)。
1.用途
NCRF ++支持通过配置文件设计神经网络结构。该程序可以运行两种状态; 训练和解码。(示例配置和数据已包含在此存储库中)
在培训状态: python main.py --config demo.train.config
在解码状态: python main.py --config demo.decode.config
配置文件控制网络结构,I / O,培训设置和超参数。详细配置在此处列出。
NCRF ++分为三层设计(如下所示):字符序列层; 单词序列层和推理层。通过使用配置文件,可以轻松复制大多数最先进的模型而无需编码。另一方面,用户可以通过设计自己的模块来扩展每一层(例如,他们可能想要设计除CNN / LSTM / GRU之外的其他神经结构)。我们的层设计使模块扩展方便,模块扩展的指令可以在这里找到。
2.性能
CONLL 2003英语NER任务的结果与具有相同结构的SOTA结果更好或相当。
CharLSTM + WordLSTM + CRF:91.20 vs。90%Lample .etc,NAACL16 ;
CharCNN + WordLSTM + CRF:91.35 vs Ma .etc,ACL16的 91.21 。
默认情况下,LSTM
是双向LSTM。
| ID | 型号| Nochar | CharLSTM | CharCNN
| --- | --------- | --- | --- | ------
| 1 | WordLSTM | 88.57 | 90.84 | 90.73
| 2 | WordLSTM + CRF | 89.45 | 91.20 | 91.35 | 3 | WordCNN | 88.56 | 90.46 | 90.30
| 4 | WordCNN + CRF | 88.90 | 90.70 | 90.43
3.外部特征定义
NCRF ++集成了几种SOTA神经特征序列特征提取器:CNN(Ma .etc,ACL16),LSTM(Lample .etc,NAACL16)和GRU(Yang .etc,ICLR17)。此外,手工制作的功能已被证明在序列标记任务中很重要。NCRF ++允许用户设计自己的功能,如大写,POS标签或任何其他功能(上图中的灰色圆圈)。用户可以通过配置文件(特征嵌入大小,预训练特征嵌入.etc)配置自定义特征。样本输入数据格式在train.cappos.bmes中给出,其中包括两个人为定义的特征[POS]
和[Cap]
。用户可以使用配置文件中的每个功能
feature=[POS] emb_size=20 emb_dir=%your_pretrained_POS_embeddingfeature=[Cap] emb_size=20 emb_dir=%your_pretrained_Cap_embedding
没有预训练嵌入的特征将被随机初始化。
4.Speed
NCRF ++使用完全批量计算实现,使其在模型训练和解码方面都非常有效。在GPU(Nvidia GTX 1080)和大批量大小的帮助下,使用NCRF ++构建的LSTMCRF模型可分别在训练和解码状态下达到1000 sents / s和2000sents / s。
5.N最佳解码性能:
传统的CRF结构仅解码具有最大可能性的一个标签序列(即1个最佳输出)。虽然NCRF ++可以提供很多选择,但它可以解码n
具有最高n
概率的标签序列(即n-最佳输出)。最流行的解码已得到几个流行的统计 CRF框架的支持。然而据我们所知,NCRF ++是唯一且第一个支持神经 CRF模型中的nbest解码的工具包。
在我们的实现中,当nbest = 10时,在NCRF ++中构建的CharCNN + WordLSTM + CRF模型在CoNLL 2003 NER任务上可以给出97.47%oracle F1值(当nbest = 1时F1 = 91.35%)。
引用:
如果您使用NCRF ++的实验结果,请引用我们的COLING论文:
@article{yang2018design,
title={Design Challenges and Misconceptions in Neural Sequence Labeling},
author={Jie Yang, Shuailong Liang and Yue Zhang},
booktitle={Proceedings of the 27th International Conference on Computational Linguistics (CONLING)},
year={2018}
}
更新中...