专栏首页机器学习AI算法工程fastNLP工具包, 快速实现序列标注模型

fastNLP工具包, 快速实现序列标注模型

fastNLP是一款轻量级的自然语言处理(NLP)工具包,目标是快速实现NLP任务以及构建复杂模型。

fastNLP具有如下的特性:

  • 统一的Tabular式数据容器,简化数据预处理过程;
  • 内置多种数据集的Loader和Pipe,省去预处理代码;
  • 各种方便的NLP工具,例如Embedding加载(包括ELMo和BERT)、中间数据cache等;
  • 部分数据集与预训练模型的自动下载;
  • 提供多种神经网络组件以及复现模型(涵盖中文分词、命名实体识别、句法分析、文本分类、文本匹配、指代消解、摘要等任务);
  • Trainer提供多种内置Callback函数,方便实验记录、异常捕获等。

安装指南

fastNLP 依赖以下包:

  • numpy>=1.14.2
  • torch>=1.0.0
  • tqdm>=4.28.1
  • nltk>=3.4.1
  • requests
  • spacy
  • prettytable>=0.7.2

其中torch的安装可能与操作系统及 CUDA 的版本相关,请参见 PyTorch 官网 。在依赖包安装完成后,您可以在命令行执行如下指令完成安装

pip install fastNLP
python -m spacy download en

fastNLP教程

中文文档、教程

快速入门

  • 0. 快速入门

详细使用教程

  • 1. 使用DataSet预处理文本
  • 2. 使用Vocabulary转换文本与index
  • 3. 使用Embedding模块将文本转成向量
  • 4. 使用Loader和Pipe加载并处理数据集
  • 5. 动手实现一个文本分类器I-使用Trainer和Tester快速训练和测试
  • 6. 动手实现一个文本分类器II-使用DataSetIter实现自定义训练过程
  • 7. 使用Metric快速评测你的模型
  • 8. 使用Modules和Models快速搭建自定义模型
  • 9. 快速实现序列标注模型
  • 10. 使用Callback自定义你的训练过程

扩展教程

  • Extend-1. BertEmbedding的各种用法
  • Extend-2. 分布式训练简介
  • Extend-3. 使用fitlog 辅助 fastNLP 进行科研

内置组件

大部分用于的 NLP 任务神经网络都可以看做由词嵌入(embeddings)和两种模块:编码器(encoder)、解码器(decoder)组成。

以文本分类任务为例,下图展示了一个BiLSTM+Attention实现文本分类器的模型流程图:

fastNLP 在 embeddings 模块中内置了几种不同的embedding:静态embedding(GloVe、word2vec)、上下文相关embedding (ELMo、BERT)、字符embedding(基于CNN或者LSTM的CharEmbedding)

与此同时,fastNLP 在 modules 模块中内置了两种模块的诸多组件,可以帮助用户快速搭建自己所需的网络。两种模块的功能和常见组件如下:

fastNLP的大致工作流程如上图所示,而项目结构如下:

序列标注

这一部分的内容主要展示如何使用fastNLP实现序列标注(Sequence labeling)任务。您可以使用fastNLP的各个组件快捷,方便地完成序列标注任务,达到出色的效果。在阅读这篇教程前,希望您已经熟悉了fastNLP的基础使用,尤其是数据的载入以及模型的构建。通过这个小任务,能让您进一步熟悉fastNLP的使用。

命名实体识别(name entity recognition, NER)

命名实体识别任务是从文本中抽取出具有特殊意义或者指代性非常强的实体,通常包括人名、地名、机构名和时间等。如下面的例子中

我来自复旦大学。

其中“复旦大学”就是一个机构名,命名实体识别就是要从中识别出“复旦大学”这四个字是一个整体,且属于机构名这个类别。这个问题在实际做的时候会被 转换为序列标注问题

针对"我来自复旦大学"这句话,我们的预测目标将是[O, O, O, B-ORG, I-ORG, I-ORG, I-ORG],其中O表示out,即不是一个实体,B-ORG是ORG( organization的缩写)这个类别的开头(Begin),I-ORG是ORG类别的中间(Inside)。

在本tutorial中我们将通过fastNLP尝试写出一个能够执行以上任务的模型。

载入数据

fastNLP的数据载入主要是由Loader与Pipe两个基类衔接完成的,您可以通过 使用Loader和Pipe处理数据 了解如何使用fastNLP提供的数据加载函数。下面我们以微博命名实体任务来演示一下在fastNLP进行序列标注任务。

模型构建

首先选择需要使用的Embedding类型。关于Embedding的相关说明可以参见 使用Embedding模块将文本转成向量 。在这里我们使用通过word2vec预训练的中文汉字embedding。

进行训练

下面我们选择用来评估模型的metric,以及优化用到的优化函数。

进行测试

训练结束之后过,可以通过 Tester 测试其在测试集上的性能

使用更强的Bert做序列标注

在fastNLP使用Bert进行任务,您只需要把 fastNLP.embeddings.StaticEmbedding 切换为 fastNLP.embeddings.BertEmbedding (可修改 device 选择显卡)。

输出为:

可以看出通过使用Bert,效果有明显的提升,从48.2提升到了64.1。

本文分享自微信公众号 - 机器学习AI算法工程(datayx)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-03-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • BertEmbedding的各种用法

    bert自从在 BERT: Pre-training of Deep Bidirectional Transformers for Language Under...

    机器学习AI算法工程
  • 复旦邱锡鹏团队最新成果fastHan:基于BERT的中文NLP集成工具

    fastHan 是基于 fastNLP 与 PyTorch 实现的中文自然语言处理工具,像 spacy 一样调用方便。其内核为基于 BERT 的联合模型,其在 ...

    代码医生工作室
  • 为Deeplearning提速----复旦fastNLP团队的内部调参利器fitlog

    「有没有什么可以节省大量时间的 Deep Learning 效率神器?」有人在知乎上问出了这样一个问题。在回答区,复旦大学计算机科学技术学院副教授邱锡鹏介绍了他...

    机器之心
  • 开放下载!复旦大学邱锡鹏教授发布教科书《神经网络与深度学习》

    邱老师昨天就在知乎发布了这本书:「整本书终于写完了,虽然还有很多不足。但先告一段落,不然就得无限期拖延下去。感谢众多热心网友的意见和建议。全书的内容可以从这里(...

    机器之心
  • 开放下载!复旦大学邱锡鹏教授发布教科书《神经网络与深度学习》

    邱老师昨天就在知乎发布了这本书:「整本书终于写完了,虽然还有很多不足。但先告一段落,不然就得无限期拖延下去。感谢众多热心网友的意见和建议。全书的内容可以从这里(...

    小小詹同学
  • BiANet:用于快速高效实现RGB-D数据显著性目标检测的双边注意力模型

    论文、代码地址:在公众号「计算机视觉工坊」,后台回复「BiANet」,即可直接下载。

    计算机视觉
  • 邱锡鹏:从Transformer到BERT --自然语言处理中的表示学习进展

    本次报告主要涉及深度学习在自然语言处理(Natural Language Processing,NLP)领域的进展,首先讲解了语言的表示学习、词嵌入等基础概念和...

    马上科普尚尚
  • 精选 Github 近期13款开源工具包!(附数据集、链接)

    本文共1700字,建议阅读6分钟。 本文为你精选近期Github上的13款深度学习开源工具包和数据集,一起Star和Fork吧~

    数据派THU
  • 本周 Github 精选:13 款炼丹利器,有开源工具包也有超大数据集

    朱晓霞
  • ### 0x01 C++ 资源大全

    关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。

    上善若水.夏
  • Java资源大全中文版(Awesome最新版)

    Awesome系列的Java资源整理。awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具、数据库、框架、模板、安全、代码...

    张果
  • 给你灵感的23个优秀线框原型图示例

    如何在产品初始阶段以最快的方式展示设计思路?我想大多数的UX/UI设计人员都会倾向于快速构建一个线框原型图。这的确是一个非常明智的选择。那么问题来了,设计师如何...

    奔跑的小鹿
  • 【GitHub热门开源】构建NLP深度学习模型其实就是搭积木

    在构建自然语言理解深度学习模型过程中,研究人员或者工程师们经常需要在编程细节和代码调试上花费大量精力,而不是专注于模型架构设计与参数调整。

    新智元
  • 从BERT、XLNet到MPNet,细看NLP预训练模型发展变迁史

    来自 | 知乎 地址 | https://zhuanlan.zhihu.com/p/146325984

    朴素人工智能
  • Facebook开源NLP建模框架PyText,从论文到产品部署只需数天

    Yann LeCun 对此介绍道,「PyText 是一个工业级的开源 NLP 工具包,可用于在 PyTorch 中开发 NLP 模型,并通过 ONNX 部署。其...

    机器之心
  • 强力推荐!飞桨产业级PaddleCV最新全景图

    导读:PaddleCV是飞桨开源的产业级CV工具与预训练模型集,提供了依托于百度实际产品打磨,能够极大地方便 CV 研究者和工程师快速应用。使用者可以使用Pad...

    用户1386409
  • 值得推荐的C/C++框架和库 (真的很强大)

    Webbench是一个在Linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以...

    诸葛青云
  • 资源分享| 1000+ Python 第三方工具包大全

    awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、...

    朱小五
  • 值得推荐的C/C++框架和库(真的很强大)

    Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以...

    C语言与CPP编程

扫码关注云+社区

领取腾讯云代金券