论文名称:N-LTP: A Open-source Neural Chinese Language Technology Platform with Pretrained Models

论文作者:车万翔,冯云龙,覃立波,刘挺

原创作者:冯云龙

论文链接:https://arxiv.org/abs/2009.11616

转载须标注出处:哈工大SCIR

背景

现有种类繁多的自然语言处理(NLP)工具包,例如CoreNLP [1],UDPipe [2],FLAIR [3],spaCy 和Stanza [4]的英文版,这使用户可以更轻松地构建具有复杂语言处理能力的工具。最近,在许多下游应用中对中文NLP的需求急剧增加。中文NLP平台通常包括词法分析(中文分词(CWS),词性(POS)标记和命名实体识别(NER)),语法分析(依赖项解析(DEP))和语义分析(语义依赖解析(SDP)和语义角色标记(SRL))。不过用于中文NLP任务的高性能和高效率工具包相对较少。

介绍

基于以上背景,我们搭建了N-LTP,这是一个基于PyTorch的中文自然语言处理的神经自然语言处理工具包,它是基于SOTA预训练模型构建的。

如图1所示,在输入中文语料库的情况下,N-LTP产生了相对丰富和快速的分析结果,包括词法分析,句法分析和语义分析等。此外,N-LTP还提供了易于使用的API和可视化工具。

图1  N-LTP模型概览

与现有的广泛使用的NLP工具包相比,N-LTP具有以下优点:

  • 丰富的中文基础NLP任务:N-LTP支持丰富的中文基础NLP任务,包括词法分析(分词,词性标记,命名实体识别和语义角色标记),语法解析和语义解析(语义依赖解析)。

  • 多任务学习:现有的中文NLP工具包均针对每个任务采用独立的模型,从而忽略了各个任务之间的共享知识。为了缓解这个问题,我们建议使用多任务框架 [8] 来利用所有任务之间的共享知识。同时,针对所有六个任务使用共享编码器进行的多任务学习可以大大减少占用的内存并提高速度,从而使N-LTP更加高效,从而减少了对硬件的需求。

  • 可扩展性:N-LTP与用户的自定义模块一起使用。用户可以轻松地通过配置文件添加新的预训练模型,通过更改配置,用户可以轻松地将预训练模型更改为变压器支持的任何类似BERT的模型 [9]。我们已经使所有任务训练配置文件开源。

  • 易于使用的API和可视化工具:N-LTP提供了基本API的集合,这使用户无需任何知识即可方便地使用该工具包。我们还提供了可视化工具,使用户可以直接查看处理结果。此外,N-LTP具有许多编程语言可用的绑定,比如C++,Python,Java和Rust等。

  • 最先进的性能:我们对一共六项中文NLP任务进行了评估,发现它在每项任务上均达到了最先进的水平或具有竞争力的表现。

使用方法

安装方法

$ pip install ltp

快速使用

Python

from ltp import LTPltp = LTP()  # 默认加载 Small 模型
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
pos = ltp.pos(hidden)
ner = ltp.ner(hidden)
srl = ltp.srl(hidden)
dep = ltp.dep(hidden)
sdp = ltp.sdp(hidden)

其他语言绑定等

// RUST 语言
use ltp_rs::{LTPError, LTP};fn main() -> Result<(), LTPError> {let mut ltp = LTP::new("path/to/model", 16)?;let sentences = vec![String::from("他叫汤姆去拿外衣。")];let result = ltp.pipeline_batch(&sentences)?;println!("{:?}", result);Ok(())
}

多任务模型

共享编码器

为了提取所有中文相关任务的共享知识,我们采用了多任务框架,其中六个中文任务共享一个编码器。在我们的框架中,我们采用SOTA预训练模型(ELECTRA [5])作为编码器。

给定输入序列 = (),我们首先通过添加特定标记 = ()构造输入序列),其中是表示整个序列的特殊符号,是用于分隔非连续令牌序列的特殊符号(Devlin et al。,2019)。ELECTRA接受构造的输入,并输出序列 = (, , )的相应隐藏表示。

分词

中文分词(CWS)是中文自然语言处理(NLP)的首要任务。在N-LTP中,CWS被视为基于字符的序列标记问题。具体来说,给定隐层的表示形式 = (, , ),我们采用线性解码器对每个字符进行分类:

其中,表示标签概率分布每个字符;和是可训练的参数。

词性标注

词性(POS)标记是另一个基本的NLP任务,它可以简化诸如语法分析之类的下游任务。和分词任务一样,我们这里也是使用一个简单地MLP来对每个词语进行分类。

命名实体识别

命名实体识别(NER)是一项常见的自然语言处理任务,目的是在一个句子中查找一个实体(人员,位置,组织等)的起点和终点,并为此实体分配一个类别。

这里我们使用了 Adapted-Transformer[6] 来获取方向和距离敏感的词语表示,然后使用线性分类器对其进行分类:

其中 表示每个字符的NER标签概率分布。

依存句法分析

依存关系分析是分析句子的语义结构的任务。在N-LTP中,我们使用 deep biaffine parser [10](Dozat and Manning,2017)和einser算法 [7](Eisner,1996)以获取解析结果,其公式为:

上面的过程通过将1维向量 扩展为 维来对 进行评分,其中 为标签的总数。

语义依存分析

与依存关系分析相似,语义依存分析[11]是捕获句子语义结构的任务。具体来说,给定一个输入语句,SDP的目的是确定所有彼此语义相关的词对,并分配特定的预定义语义关系。

这里我们仍然使用 Biaffine 模型来对结果进行预测,不过之后我们使用

如果 我们则认为从 到 存在一个边。

语义角色标注

语义角色标记(SRL)是确定句子的潜在谓语-参数结构的任务,它可以提供表示形式来回答有关句子含义的基本问题,包括谁对谁做了什么等。

这里我们使用 Biaffine 和 CRF 的解码器相结合的方法构建了一个端到端的 SRL 模型。

其中 表示谓词为 时的任意标签序列,而 表示从 到 对于 的分数。

实验结果

主实验

表1展示了LTP和Stanza模型在LTP数据集上的结果。

表1  LTP 和 Stanza 在 LTP 数据集上的结果。

表2展示了LTP 和 Stanza 在 UD 和 Ontonotes 上的结果,这里报的是Stanza的官方结果,指标采用Stanza提供的评测脚本计算得出。

表2  LTP 和 Stanza 在 UD 和 Ontonotes 上的结果

由于Stanza并没有使用BERT等预训练模型,因此我们另外查找了一些使用预训练模型的SOTA模型进行比较,基本上都取得了相对不错的结果。

表3  LTP模型与不同任务上的SOTA预训练模型进行比较

速度

另外,我们也对模型的速度进行了比较,从表4可以看到LTP在与Stanza同样的任务量下 LTP/LTP速度是Stanza的4~6倍。另外,我们也制作了其他语言的 Binding。从表4可以看到,Rust版本相比较于Python版本快了大约两倍左右。

表4  模型速度的比较

总结

我们介绍了N-LTP,一个面向中文自然语言处理的工具包。我们在6个基本的中文NLP任务对N-LTP进行了评估,并获得了最先进的或具有竞争力的性能,希望它能够促进中文NLP的研究和应用。将来,我们将通过添加新的模型或者任务来继续扩展N-LTP。

参考文献

[1]. Christopher Manning, Mihai Surdeanu, John Bauer, Jenny Finkel, Steven Bethard, and David McClosky. 2014. The Stanford CoreNLP natural language pro- cessing toolkit. In Proceedings of 52nd Annual Meeting of the Association for Computational Lin- guistics: System Demonstrations, pages 55–60, Bal- timore, Maryland. Association for Computational Linguistics.

[2]. Straka, Milan, and Jana Straková. 2017. Tokenizing, POS tagging, lemmatizing and parsing UD 2.0 with UDPipe. In Proceedings of the CoNLL 2017 Shared Task: Multilingual Parsing from Raw Text to Univer- sal Dependencies, pages 88–99, Vancouver, Canada. Association for Computational Linguistics.

[3]. Alan Akbik, Tanja Bergmann, Duncan Blythe, Kashif Rasul, Stefan Schweter, and Roland Vollgraf. 2019. FLAIR: An easy-to-use framework for state-of-the- art NLP. In Proceedings of the 2019 Confer- ence of the North American Chapter of the Asso- ciation for Computational Linguistics (Demonstra- tions), pages 54–59, Minneapolis, Minnesota. Asso- ciation for Computational Linguistics.

[4]. Peng Qi, Yuhao Zhang, Yuhui Zhang, Jason Bolton, and Christopher D. Manning. 2020. Stanza: A python natural language processing toolkit for many human languages. In Proceedings of the 58th An- nual Meeting of the Association for Computational Linguistics: System Demonstrations, pages 101– 108, Online. Association for Computational Linguistics.

[5]. Kevin Clark, Minh-Thang Luong, Quoc V. Le, and Christopher D. Manning. 2020. ELECTRA: pre-training text encoders as discriminators rather than generators. In 8th International Confer- ence on Learning Representations, ICLR 2020, Ad- dis Ababa, Ethiopia, April 26-30, 2020. OpenRe- view.net.

[6]. Hang Yan, Bocao Deng, Xiaonan Li, and Xipeng Qiu. 2019a. Tener: Adapting transformer encoder for named entity recognition.

[7]. Jason M. Eisner. 1996. Three new probabilistic models for dependency parsing: An exploration. In COL- ING 1996 Volume 1: The 16th International Confer- ence on Computational Linguistics.

[8]. Kevin Clark, Minh-Thang Luong, Urvashi Khandel- wal, Christopher D. Manning, and Quoc V. Le. 2019. BAM! born-again multi-task networks for natural language understanding. In Proceedings of the 57th Annual Meeting of the Association for Computa- tional Linguistics, pages 5931–5937, Florence, Italy. Association for Computational Linguistics.

[9]. Thomas Wolf, Lysandre Debut, Victor Sanh, Julien Chaumond, Clement Delangue, Anthony Moi, Pier- ric Cistac, Tim Rault, Re ́mi Louf, Morgan Funtow- icz, Joe Davison, Sam Shleifer, Patrick von Platen, Clara Ma, Yacine Jernite, Julien Plu, Canwen Xu, Teven Le Scao, Sylvain Gugger, Mariama Drame, Quentin Lhoest, and Alexander M. Rush. 2019. Huggingface’s transformers: State-of-the-art natural language processing. ArXiv, abs/1910.03771.

[10]. Timothy Dozat and Christopher D. Manning. 2017. Deep biaffine attention for neural dependency pars- ing. In 5th International Conference on Learning Representations, ICLR 2017, Toulon, France, April 24-26, 2017, Conference Track Proceedings. Open- Review.net.

[11]. Wanxiang Che, Meishan Zhang, Yanqiu Shao, and Ting Liu. 2012. SemEval-2012 task 5: Chinese semantic dependency parsing. In **SEM 2012: The First Joint Conference on Lexical and Computational Seman- tics – Volume 1: Proceedings of the main conference and the shared task, and Volume 2: Proceedings of the Sixth International Workshop on Semantic Eval- uation (SemEval 2012)*, pages 378–384, Montre ́al, Canada. Association for Computational Linguistics.

本期责任编辑:冯骁骋

本期编辑:钟蔚弘


往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑温州大学《机器学习课程》视频
本站qq群851320808,加入微信群请扫码:

【NLP】N-LTP:基于预训练模型的中文自然语言处理平台相关推荐

  1. N-LTP:基于预训练模型的中文自然语言处理平台

    2021-05-03 18:12:52 论文名称:N-LTP: A Open-source Neural Chinese Language Technology Platform with Pretr ...

  2. 赛尔原创 | N-LTP:基于预训练模型的中文自然语言处理平台

    论文名称:N-LTP: A Open-source Neural Chinese Language Technology Platform with Pretrained Models 论文作者:车万 ...

  3. 【自然语言处理(NLP)】基于预训练模型的机器阅读理解

    [自然语言处理(NLP)]基于预训练模型的机器阅读理解 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专 ...

  4. 使用google的bert结合哈工大预训练模型进行中文/英文文本二分类,基于pytorch和transformer

    使用bert的哈工大预训练模型进行中文/英文文本二分类,基于pytorch和transformer 前提 简要介绍 开始 导入必要的包和环境 准备并读取数据 导入模型的tokenizer 对数据进行t ...

  5. bert中文预训练模型_HFL中文预训练系列模型已接入Transformers平台

    哈工大讯飞联合实验室(HFL)在前期陆续发布了多个中文预训练模型,目前已成为最受欢迎的中文预训练资源之一.为了进一步方便广大用户的使用,借助Transformers平台可以更加便捷地调用已发布的中文预 ...

  6. Pytorch:NLP 迁移学习、NLP中的标准数据集、NLP中的常用预训练模型、加载和使用预训练模型、huggingface的transfomers微调脚本文件

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) run_glue.py微调脚本代码 python命令执行run ...

  7. 基于预训练模型 ERNIE 实现语义匹配

    基于预训练模型 ERNIE 实现语义匹配 本案例介绍 NLP 最基本的任务类型之一 -- 文本语义匹配,并且基于 PaddleNLP 使用百度开源的预训练模型 ERNIE1.0 为基础训练效果优异的语 ...

  8. 自然语言处理:基于预训练模型的方法(一)

    自然语言处理:基于预训练模型的方法 1.2 自然语言处理的难点 1.3 自然语言处理任务体系 1.2 自然语言处理的难点 1.2.1 抽象性 语言是由抽象符号构成的,每个符号背后都对应着现实世界或人们 ...

  9. CV之NS之VGG16:基于预训练模型VGG16训练COCO的train2014数据集实现训练《神奈川冲浪里》风格配置yml文件

    CV之NS之VGG16:基于预训练模型VGG16训练COCO的train2014数据集实现训练<神奈川冲浪里>风格配置yml文件 目录 一.训练 1.<神奈川冲浪里>风格 2. ...

最新文章

  1. python deque双端队列的神奇用法
  2. 不怕面试再问 Activity,一次彻底地梳理(原理+生命周期)
  3. spring cloud netflix
  4. HP Z840 工作站配sSAS Raid 安装 Ubuntu 16.04 系统
  5. 338. 比特位计数 golang
  6. PyQt5菜单添加+事件+状态栏-7
  7. IT要发掘有价值应用
  8. webpack-开发服务器-配置
  9. Linux网络编程之epoll模型
  10. AquaCrop_原理学习笔记06:土壤水分运动
  11. 扒开系统调用的三层皮(上)
  12. Linux vi/vim 中的一些技巧
  13. error C1041: 无法打开程序数据库“xxx\vc140.pdb”;如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用/FS
  14. 三角形的几何公式大全_高中数学公式、定理大全,你所需要的这里都有!
  15. 如何用手机快捷设计品牌宣传的海报图片和视频
  16. Spring mvc 中使用 kaptcha 验证码
  17. GNSS/IMU紧耦合学习笔记之卫星数据处理
  18. 驱动开发:运用VAD隐藏R3内存思路
  19. bugku:游戏过关
  20. 嵌入式分享合集115

热门文章

  1. 用DateTime.ToString(string format)输出不同格式的日期
  2. schema get_ddl
  3. 毕业设计今日总结(一)
  4. WPF 中如何使用第三方控件 ,可以使用WindowsFormsHost 类
  5. C++ 标准模板库(STL)
  6. 使用 MSBuild 和 Windows Installer XML 执行自动发布(转)
  7. GraphPad Prism 统计教程:简单线性回归原理
  8. JavaSE(十)——set和map集合、异常、File类
  9. 数据结构一:链表(循环链表)
  10. java string isempty,java – String.isEmpty()和String.equals(“”)之间的区别