点击上方,选择星标置顶,每天给你送干货

阅读大概需要8分钟

跟随小博主,每天进步一丢丢
导读
这篇文章提出了一个简单有效的联合模型,联合学习中文分词词性标注,并且在五个数据集上面进行验证。作者是张梅山。 代码开源 --- c++版本pytorch版本
张梅山导师主页
https://zhangmeishan.github.io/
C++版本
https://github.com/zhangmeishan/NNTranJSTagger
Pytorch版本
https://github.com/bamtercelboo/pytorch_Joint-Word-Segmentation-and-POS-Tagging
引言
中文分词和词性标注是中文自然语言处理领域的基本问题,目前存在的方法把这两个任务看成结构化学习问题,采用序列标注模型或者是transition-based系统进行处理。我们知道,中文分词和词性标注两个任务之间存在很高的关联性,而且采用两个任务的Pipline模型存在一定的错误传播,然而,联合模型能够考虑两个任务之间的内在关系并且减少Pipline模型的错误传播,所以联合模型能够达到比Pipline更好的性能。
      在这项工作中,提出了一个基于Seq2Seq的联合模型,这个工作主要受张岳在2010年ACL中transition工作的影响,转换解码过程为动作预测过程。另外采用字符级别的unigramsbigrams特征作为神经网络模型输入。除此之外,还采用多种外部预训练词向量。
神经网络模型
Transition System
Transition-based 框架大多数应用于结构化学习问题,通过预先定义好的transition系统,在解码过程中一步步的进行解码。具体来说,包含两个主要的部分,一个是用于存储部分结果的当前状态(states),另一个则是预测的动作行为(actions)
本文预先定义好的transition系统同样也包含stateaction两个关键部分。其中,状态(state)包含stackqueue两个部分,stack用于存储当前的分词和词性标注的结果,queue用于保存未处理的中文字符。进一步,定义了SEP(t)APP两种不同的动作行为(action)SEP(t)代表的是一个新词的开始,并且标注好这个词的词性,APP代表紧接着上一个汉字,与前面的多个汉字组成一个词。
本文给出了一个transition系统的案例,给定一个句子:“奥运会正式开幕”,能够得到最终的解码结果:“奥运会|NR 正式|AD 开幕|VV”,动作序列为“SEP(NR) APP APP SEP(AD) APP SEP(VV) APP”。

Seq2Seq Model --- Encoder(编码)

 模型整体结构图如下图所示。
Encoder部分是对句子序列的编码,在这一部分,用到了单字和双字特征,并且采用了static(神经网络训练过程中不更新参数,采用外部预训练词向量)和non-static(神经网络模型训练过程中更新参数,采用随机初始化的方式),图中采用了不同的颜色表示,并且利用非线性层结合这四种特征,然后采用BiLSTM对句子进行编码。
在外部预训练词向量的工作中,采用了两种不同的方式进行训练单字和双字的外部词向量,得到的两种预训练词向量分别称之为Basic Embeddings 和 Word-Context Embeddings,Basic Embeddings仅仅采用语言模型的方式预训练词向量(word2vec),Word-Context Embeddings不仅仅采用语言模型训练词向量,还考虑了词的边界信息以及词性信息等来丰富外部预训练的信息,使其更能够辅助联合模型达到更好的效果。
Seq2Seq Model --- Decoder(解码)
Decoder部分一步对中文分词和词性标注进行解码,如模型结构图Decoder部分所示。首先结合词性信息和词的字符序列表示获取解码端词的表示(Word Representation),然后利用非线性层进行特征学习,进而获取到解码端LSTM的输入, 通过结合解码端LSTM的隐层输出和编码端向量表示进行预测。
与典型的Seq2Seq模型的不同之处一共有两点。第一点是典型的Seq2Seq模型需要采用Attention机制,而本文提出的模型不需要采用Attention机制,采用编码端的向量表示。第二,在分词和词性标注的任务中,词级别的特征异常重要,解码端LSTM是构建在输出的词之上,而不是构建在属于字符级的预测动作序列之上。由于transition的状态标识(state),能够在解码过程中获得词的整个序列,以及它们的词性,可以用来增强词的表示。
实验设置及实验结果
数据
 本文在五个数据集上面进行了实验验证,五个数据集分别为CTB5.0,CTB6.0,CTB7.0,PKU,NCC,其中CTB5.0在中文分词和词性标注任务中广泛使用,但是由于测试集规模较小,所以增加了另外的四组数据集进行评测,数据统计分布如下。
实验结果
实验结果如下图,从实验结果图中可以看出,本文提出的Seq2Seq联合模型在五个数据集上面都达到了最好的性能。
代码开源
本文代码开源,有C++版本和pytorch重现版本,两个版本都有详细的代码说明

C++版本地址
https://github.com/zhangmeishan/NNTranJSTagger
Pytorch版本
https://github.com/bamtercelboo/pytorch_Joint-Word-Segmentation-and-POS-Tagging
总结
本文提出了一种Seq2Seq联合模型联合学习中文分词和词性标注,并且在CTB5.0,CTB6.0,CTB7.0,PKU,NCC五个数据集上面进行实验评测,实验结果表明,本文提出的模型在五个数据集上面都达到了最优的性能
References
A Simple and Effective Neural Model for Joint Word Segmentation and POS Tagging
https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8351918&tag=1
bamtercelboo/pytorch_Joint-Word-Segmentation-and-POS-Tagging
https://github.com/bamtercelboo/pytorch_Joint-Word-Segmentation-and-POS-Tagging
zhangmeishan/NNTranJSTagger
https://github.com/zhangmeishan/NNTranJSTagger
bamtercelboo/NNTranJSTagger
https://github.com/bamtercelboo/NNTranJSTagger
A Fast Decoder for Joint Word Segmentation and POS-Tagging Using a Single Discriminative Model
http://aclweb.org/anthology/D10-1082
往期推荐:
有偿征稿!

好文!必须点赞
继续阅读
阅读原文