0
点赞
收藏
分享

微信扫一扫

论文阅读_中文NLP_LTP


英文题目:N-LTP: An Open-source Neural Language Technology Platform for Chinese
中文题目:开源中文神经网络语言技术平台N-LTP
论文地址:https://arxiv.org/pdf/2009.11616v4.pdf
领域:自然语言处理
发表时间:2021
作者:Wanxiang Che等,哈工大
出处:EMNLP
被引量:18+
代码和数据:https://github.com/HIT-SCIR/ltp
阅读时间:22.06.20

读后感

它是一个基于Pytorch的针对中文离线工具,带训练好的模型,最小模型仅164M。直接支持分词,命名实体识别等六种任务,六种任务基本都围绕分词、确定词的成份、关系。
实测:比想象中好用,如果用于识别人名,效果还可以,直接用于垂直领域,效果一般,可能还需要进一步精调。

论文阅读_中文NLP_LTP_多语言

文章贡献

  • 支持六项中文自然语言任务。
  • 基于多任务框架,共享知识,减少内存用量,加快速度。
  • 高扩展性:支持用户引入的BERT类模型
  • 容易使用:支持多语言接口 C++, Python, Java, Rust
  • 达到比之前模型更好的效果

设计和架构

论文阅读_中文NLP_LTP_多任务_02

图-2展示了软件架构,由一个多任务共享的编码层和各任务别实现的解码层组成。

共享编码层

使用预训练的模型 ELECTRA,输入序列是s=(s1,s2,…,sn),加入符号将其变成 s = ([CLS], s1, s2, . . . , sn, [SEP]),请见BERT原理,输出为对应的隐藏层编码
H = (h[CLS],h1, h2, . . . , hn, h[SEP])。

中文分词 CWS

将编码后的H代入线性解码器,对每个字符分类:

论文阅读_中文NLP_LTP_人工智能_03

y是每个字符类别为各标签的概率。

位置标注 POS

位置标注也是NLP中的一个重要任务,用于进一步的语法解析。目前的主流方法是将其视为序列标注问题。也是将编码后的H作为输入,输出位置的标签:

论文阅读_中文NLP_LTP_多语言_04

y是该位置字符属于某一标签的概率,其中i是位置信息。

命名实体识别 NER

命名实体识别的目标是寻找实体的开始位置和结束位置,以及该实体的类别。工具中使用Adapted-Transformer方法,加入方向和距离特征:

论文阅读_中文NLP_LTP_多语言_05

最后一步也使用线性分类器计算每个词的类别:

论文阅读_中文NLP_LTP_神经网络_06

其中y是NER属于某一标签的概率。

依赖性解析 DEP

依赖性解析主要是分析句子的语义结构(详见网上示例),寻找词与词之间的关系。软件中具体使用了双仿射神经网络和einser算法。

论文阅读_中文NLP_LTP_多任务_07

语义依解析 SDP

与依赖性分析相似,语义依赖分析也是捕捉句子的语义结构。它将句子分析成一棵依存句法树,描述出各个词语之间的依存关系。也即指出了词语之间在句法上的搭配关系,这种搭配关系是和语义相关联的。具体包括:主谓关系SBV,动宾关系VOB,定中关系ATT等,详见:
​​​从0到1,手把手教你如何使用哈工大NLP工具——PyLTP​​ 具方法是查找语义上相互关联的词对,并找到预定义的语义关系。实现也使用了双仿射模型。

论文阅读_中文NLP_LTP_神经网络_08

当p>0.5时,则认为词 i 与 j 之间存在关联。

语义角色标注 SRL

语义角色标注主要目标是识别句子以谓语为中心的结构,具体方法是使用端到端的SRL模型,它结合了双仿射神经网络和条件随机场作为编码器,条件随机场公式如下:

论文阅读_中文NLP_LTP_神经网络_09

其中f用于计算从yi,j-1到yi,j的转移概率。

知识蒸馏

为了比较单独训练任务和多任务训练,引入了BAM方法:

论文阅读_中文NLP_LTP_多语言_10

用法

安装

$ pip install ltp

在线demo

​​http://ltp.ai/demo.html​​

示例代码

from ltp import LTP

ltp = LTP()
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
pos = ltp.pos(hidden)
ner = ltp.ner(hidden)
srl = ltp.srl(hidden)
dep = ltp.dep(hidden)
sdp = ltp.sdp(hidden)

其中seg函数实现了分词,并输出了切分结果,及各词的向量表示。

精调模型

下载源码

$ git clone https://github.com/HIT-SCIR/ltp

在其 ltp 目录中有 task_xx.py,可训练及调优模型,用法详见py内部的示例。形如:

python ltp/task_segmention.py --data_dir=data/seg --num_labels=2 --max_epochs=10 --batch_size=16 --gpus=1 --precision=16 --auto_lr_find=lr

实验

Stanza是支持一个多语言的NLP工具,中文建模效果比较如下:

论文阅读_中文NLP_LTP_多语言_11

另外,实验也证明,使用联合模型速度更快,占用内存更少。

参考

​​用法示例:LTP–提取时间人物地点​​


举报

相关推荐

0 条评论