Pytorch-NLU

Pytorch-NLU是一个只依赖pytorch、transformers、numpy、tensorboardX,专注于文本分类、序列标注的极简自然语言处理工具包。
支持BERT、ERNIE、ROBERTA、NEZHA、ALBERT、XLNET、ELECTRA、GPT-2、TinyBERT、XLM、T5等预训练模型;
支持BCE-Loss、Focal-Loss、Circle-Loss、Prior-Loss、Dice-Loss、LabelSmoothing等损失函数;
具有依赖轻量、代码简洁、注释详细、调试清晰、配置灵活、拓展方便、适配NLP等特性。

目录

  • 安装
  • 数据
  • 使用方式
  • paper
  • 参考

项目地址

  • Pytorch-NLU: https://github.com/yongzhuo/Pytorch-NLU

安装

pip install Pytorch-NLU# 清华镜像源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Pytorch-NLU

数据

数据来源

免责声明:以下数据集由公开渠道收集而成, 只做说明; 科学研究、商用请联系原作者; 如有侵权, 请及时联系删除。

文本分类

  • baidu_event_extract_2020, 项目以 2020语言与智能技术竞赛:事件抽取任务中的数据作为多分类标签的样例数据,借助多标签分类模型来解决, 共13456个样本, 65个类别;
  • AAPD-dataset, 数据集出现在论文-SGM: Sequence Generation Model for Multi-label Classification, 英文多标签分类语料, 共55840样本, 54个类别;
  • toutiao-news, 今日头条新闻标题, 多标签分类语料, 约300w-语料, 1000+类别;
  • unknow-data, 来源未知, 多标签分类语料, 约22339语料, 7个类别;
  • SMP2018中文人机对话技术评测(ECDT), SMP2018 中文人机对话技术评测(SMP2018-ECDT)比赛语料, 短文本意图识别语料, 多类分类, 共3069样本, 31个类别;
  • 文本分类语料库(复旦)语料, 复旦大学计算机信息与技术系国际数据库中心自然语言处理小组提供的新闻语料, 多类分类语料, 共9804篇文档,分为20个类别。
  • MiningZhiDaoQACorpus, 中国科学院软件研究所刘焕勇整理的问答语料, 百度知道问答语料, 可以把领域当作类别, 多类分类语料, 100w+样本, 共17个类别;
  • THUCNEWS, 清华大学自然语言处理实验室整理的语料, 新浪新闻RSS订阅频道2005-2011年间的历史数据筛选, 多类分类语料, 74w新闻文档, 14个类别;
  • IFLYTEK, 科大讯飞开源的长文本分类语料, APP应用描述的标注数据,包含和日常生活相关的各类应用主题, 链接为CLUE, 共17333样例, 119个类别;
  • TNEWS, 今日头条提供的中文新闻标题分类语料, 数据集来自今日头条的新闻版块, 链接为CLUE, 共73360样例, 15个类别;

序列标注

  • Corpus_China_People_Daily, 由北京大学计算语言学研究所发布的《人民日报》标注语料库PFR, 来源为《人民日报》1998上半年, 2014年, 2015上半年-2016.1-2017.1-2018.1(新时代人民日报分词语料库NEPD)等的内容, 包括中文分词cws、词性标注pos、命名实体识别ner…等标注数据;
  • Corpus_CTBX, 由宾夕法尼亚大学(UPenn)开发并通过语言数据联盟(LDC) 发布的中文句法树库(Chinese Treebank), 来源为新闻数据、新闻杂志、广播新闻、广播谈话节目、微博、论坛、聊天对话和电话数据等, 包括中文分词cws、词性标注pos、命名实体识别ner…等标注数据;
  • NER-Weibo, 中国社交媒体(微博)命名实体识别数据集(Weibo-NER-2015), 该语料库包含2013年11月至2014年12月期间从微博上采集的1890条信息, 有两个版本(weiboNER.conll和weiboNER_2nd_conll), 共1890样例, 3个标签;
  • NER-CLUE, 中文细粒度命名实体识别(CLUE-NER-2020), CLUE筛选标注的THUCTC数据集(清华大学开源的新闻内容文本分类数据集), 共12091样例, 10个标签;
  • NER-Literature, 中文文学章篇级实体识别数据集(Literature-NER-2017), 数据来源为网站上1000多篇中国文学文章过滤提取的726篇, 共29096样本, 7个标签;
  • NER-Resume, 中文简历实体识别数据集(Resume-NER-2018), 来源为新浪财经网关于上市公司的高级经理人的简历摘要数据, 共1027样例,8个标签。
  • NER-BosonN, 中文新闻实体识别数据集(Boson-NER-2012), 数据集BosonNLP_NER_6C, 新增时间/公司名/产品名等标签, 共2000样例, 6个标签;
  • NER-MSRA, 中文新闻实体识别数据集(MSRA-NER-2005), 由微软亚洲研究院(MSRA)发布, 共55289样例, 通用的有3个标签, 完整的有26个标签;

数据格式

1. 文本分类  (txt格式, 每行为一个json):多类分类格式:
{"text": "人站在地球上为什么没有头朝下的感觉", "label": "教育"}
{"text": "我的小baby", "label": "娱乐"}
{"text": "请问这起交通事故是谁的责任居多小车和摩托车发生事故在无红绿灯", "label": "娱乐"}多标签分类格式:
{"label": "3|myz|5", "text": "课堂搞东西,没认真听"}
{"label": "3|myz|2", "text": "测验90-94.A-"}
{"label": "3|myz|2", "text": "长江作业未交"}2. 序列标注 (txt格式, 每行为一个json):SPAN格式如下:
{"label": [{"type": "ORG", "ent": "市委", "pos": [10, 11]}, {"type": "PER", "ent": "张敬涛", "pos": [14, 16]}], "text": "去年十二月二十四日,市委书记张敬涛召集县市主要负责同志研究信访工作时,提出三问:『假如上访群众是我们的父母姐妹,你会用什么样的感情对待他们?"}
{"label": [{"type": "PER", "ent": "金大中", "pos": [5, 7]}], "text": "今年2月,金大中新政府成立后,社会舆论要求惩治对金融危机负有重大责任者。"}
{"label": [], "text": "与此同时,作者同一题材的长篇侦破小说《鱼孽》也出版发行。"}CONLL格式如下:
青 B-ORG
岛 I-ORG
海 I-ORG
牛 I-ORG
队 I-ORG
和 O

使用方式

更多样例sample详情见/test目录

文本分类(TC), text-classification

# !/usr/bin/python
# -*- coding: utf-8 -*-
# !/usr/bin/python
# -*- coding: utf-8 -*-
# @time    : 2021/2/23 21:34
# @author  : Mo
# @function: 多标签分类, 根据label是否有|myz|分隔符判断是多类分类, 还是多标签分类# 适配linux
import platform
import json
import sys
import os
path_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
sys.path.append(os.path.join(path_root, "pytorch_textclassification"))
print(path_root)
# 分类下的引入, pytorch_textclassification
from tcTools import get_current_time
from tcRun import TextClassification
from tcConfig import model_configevaluate_steps = 320  # 评估步数
save_steps = 320  # 存储步数
# pytorch预训练模型目录, 必填
pretrained_model_name_or_path = "bert-base-chinese"
# 训练-验证语料地址, 可以只输入训练地址
path_corpus = os.path.join(path_root, "corpus", "text_classification", "school")
path_train = os.path.join(path_corpus, "train.json")
path_dev = os.path.join(path_corpus, "dev.json")if __name__ == "__main__":model_config["evaluate_steps"] = evaluate_steps  # 评估步数model_config["save_steps"] = save_steps  # 存储步数model_config["path_train"] = path_train  # 训练模语料, 必须model_config["path_dev"] = path_dev      # 验证语料, 可为Nonemodel_config["path_tet"] = None          # 测试语料, 可为None# 损失函数类型,# multi-class:  可选 None(BCE), BCE, BCE_LOGITS, MSE, FOCAL_LOSS, DICE_LOSS, LABEL_SMOOTH# multi-label:  SOFT_MARGIN_LOSS, PRIOR_MARGIN_LOSS, FOCAL_LOSS, CIRCLE_LOSS, DICE_LOSS等model_config["path_tet"] = "FOCAL_LOSS"os.environ["CUDA_VISIBLE_DEVICES"] = str(model_config["CUDA_VISIBLE_DEVICES"])model_config["pretrained_model_name_or_path"] = pretrained_model_name_or_pathmodel_config["model_save_path"] = "../output/text_classification/model_{}".format(model_type[idx])model_config["model_type"] = "BERT"# mainlc = TextClassification(model_config)lc.process()lc.train()

序列标注(SL), sequence-labeling


# 适配linux
import platform
import json
import sys
import os
path_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
path_sys = os.path.join(path_root, "pytorch_sequencelabeling")
sys.path.append(path_sys)
print(path_root)
print(path_sys)
# 分类下的引入, pytorch_textclassification
from slTools import get_current_time
from slRun import SequenceLabeling
from slConfig import model_configevaluate_steps = 320  # 评估步数
save_steps = 320  # 存储步数
# pytorch预训练模型目录, 必填
pretrained_model_name_or_path = "bert-base-chinese"
# 训练-验证语料地址, 可以只输入训练地址
path_corpus = os.path.join(path_root, "corpus", "sequence_labeling", "ner_china_people_daily_1998_conll")
path_train = os.path.join(path_corpus, "train.conll")
path_dev = os.path.join(path_corpus, "dev.conll")if __name__ == "__main__":model_config["evaluate_steps"] = evaluate_steps  # 评估步数model_config["save_steps"] = save_steps  # 存储步数model_config["path_train"] = path_train  # 训练模语料, 必须model_config["path_dev"] = path_dev      # 验证语料, 可为Nonemodel_config["path_tet"] = None          # 测试语料, 可为None# 一种格式 文件以.conll结尾, 或者corpus_type=="DATA-CONLL"# 另一种格式 文件以.span结尾, 或者corpus_type=="DATA-SPAN"model_config["corpus_type"] = "DATA-CONLL"# 语料数据格式, "DATA-CONLL", "DATA-SPAN"model_config["task_type"] = "SL-CRF"     # 任务类型, "SL-SOFTMAX", "SL-CRF", "SL-SPAN"model_config["dense_lr"] = 1e-3  # 最后一层的学习率, CRF层学习率/全连接层学习率, 1e-5, 1e-4, 1e-3model_config["lr"] = 1e-5        # 学习率, 1e-5, 2e-5, 5e-5, 8e-5, 1e-4, 4e-4model_config["max_len"] = 156    # 最大文本长度, None和-1则为自动获取覆盖0.95数据的文本长度, 0则取训练语料的最大长度, 具体的数值就是强制padding到max_lenmodel_config["pretrained_model_name_or_path"] = pretrained_model_name_or_pathmodel_config["model_save_path"] = "../output/sequence_labeling/model_{}".format(model_type[idx])model_config["model_type"] = model_type[idx]# mainlc = SequenceLabeling(model_config)lc.process()lc.train()

paper

文本分类(TC, text-classification)

  • FastText: Bag of Tricks for Efficient Text Classification
  • TextCNN: Convolutional Neural Networks for Sentence Classification
  • charCNN-kim: Character-Aware Neural Language Models
  • charCNN-zhang: Character-level Convolutional Networks for Text Classification
  • TextRNN: Recurrent Neural Network for Text Classification with Multi-Task Learning
  • RCNN: Recurrent Convolutional Neural Networks for Text Classification
  • DCNN: A Convolutional Neural Network for Modelling Sentences
  • DPCNN: Deep Pyramid Convolutional Neural Networks for Text Categorization
  • VDCNN: Very Deep Convolutional Networks
  • CRNN: A C-LSTM Neural Network for Text Classification
  • DeepMoji: Using millions of emojio ccurrences to learn any-domain represent ations for detecting sentiment, emotion and sarcasm
  • SelfAttention: Attention Is All You Need
  • HAN: Hierarchical Attention Networks for Document Classification
  • CapsuleNet: Dynamic Routing Between Capsules
  • TextGCN: Graph Convolutional Networks for Text Classification
  • Transformer(encode or decode): Attention Is All You Need
  • Bert: BERT: Pre-trainingofDeepBidirectionalTransformersfor LanguageUnderstanding
  • ERNIE: ERNIE: Enhanced Representation through Knowledge Integration
  • Xlnet: XLNet: Generalized Autoregressive Pretraining for Language Understanding
  • Albert: ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS
  • RoBERTa: RoBERTa: A Robustly Optimized BERT Pretraining Approach
  • ELECTRA: ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators
  • GPT-2: Language Models are Unsupervised Multitask Learners
  • T5: Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer

序列标注(SL, sequence-labeling)

  • Bi-LSTM-CRF: Bidirectional LSTM-CRF Models for Sequence Tagging
  • Bi-LSTM-LAN: Hierarchically-Refined Label Attention Network for Sequence Labeling
  • CNN-LSTM: End-to-endSequenceLabelingviaBi-directionalLSTM-CNNs-CRF
  • DGCNN: Multi-Scale Context Aggregation by Dilated Convolutions
  • CRF: Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data
  • Biaffine-BER: Named Entity Recognition as Dependency Parsing
  • Lattice-LSTM: Lattice LSTM:Chinese NER Using Lattice LSTM
  • WC-LSTM: WC-LSTM: An Encoding Strategy Based Word-Character LSTM for Chinese NER Lattice LSTM
  • Lexicon: Simple-Lexicon:Simplify the Usage of Lexicon in Chinese NER
  • FLAT: FLAT: Chinese NER Using Flat-Lattice Transformer
  • MRC: A Unified MRC Framework for Named Entity Recognition

参考

  • keras与tensorflow版本对应: https://docs.floydhub.com/guides/environments/
  • BERT-NER-Pytorch: https://github.com/lonePatient/BERT-NER-Pytorch
  • bert4keras: https://github.com/bojone/bert4keras
  • Kashgari: https://github.com/BrikerMan/Kashgari
  • fastNLP: https://github.com/fastnlp/fastNLP
  • HanLP: https://github.com/hankcs/HanLP
  • scikit-learn: https://github.com/scikit-learn/scikit-learn
  • tqdm: https://github.com/tqdm/tqdm

Reference

For citing this work, you can refer to the present GitHub project. For example, with BibTeX:

@software{Pytorch-NLU,url = {https://github.com/yongzhuo/Pytorch-NLU},author = {Yongzhuo Mo},title = {Pytorch-NLU},year = {2021}

*希望对你有所帮助!

ing this work, you can refer to the present GitHub project. For example, with BibTeX:

@software{Pytorch-NLU,url = {https://github.com/yongzhuo/Pytorch-NLU},author = {Yongzhuo Mo},title = {Pytorch-NLU},year = {2021}

*希望对你有所帮助!

Pytorch-NLU,一个中文文本分类、序列标注(实体识别、分词、词性标注)的极简工具包,基于pytorch与tramsforers相关推荐

  1. Pytorch TextCNN实现中文文本分类(附完整训练代码)

    Pytorch TextCNN实现中文文本分类(附完整训练代码) 目录 Pytorch TextCNN实现中文文本分类(附完整训练代码) 一.项目介绍 二.中文文本数据集 (1)THUCNews文本数 ...

  2. 《基于Tensorflow的知识图谱实战》 --- 实战文本分类与命名实体识别,快速构建知识图谱(王晓华 著)

    ⚽开发平台:jupyter lab

  3. 中文文本分类 传统机器学习+深度学习

    中文文本分类 为了完成课程要求,做了一个中文文本分类的简易系统,再此纪录. 本文项目地址: 项目地址 https://github.com/WhiteGive-Boy/ChineseTextClass ...

  4. 基于pytorch的Bi-LSTM中文文本情感分类

    基于pytorch的Bi-LSTM中文文本情感分类 目录 基于pytorch的Bi-LSTM中文文本情感分类 一.前言 二.数据集的准备与处理 2.1 数据集介绍 2.2 文本向量化 2.3 数据集处 ...

  5. 使用Bert预训练模型进行中文文本分类(基于pytorch)

    前言 最近在做一个关于图书系统的项目,需要先对图书进行分类,想到Bert模型是有中文文本分类功能的,于是打算使用Bert模型进行预训练和实现下游文本分类任务 数据预处理 2.1 输入介绍 在选择数据集 ...

  6. PyTorch入门(五)使用CNN模型进行中文文本分类

      本文将会介绍如何在PyTorch中使用CNN模型进行中文文本分类.   使用CNN实现中文文本分类的基本思路: 文本预处理 将字(或token)进行汇总,形成字典文件,可保留前n个字 文字转数字, ...

  7. 【NLP】BERT 模型与中文文本分类实践

    简介 2018年10月11日,Google发布的论文<Pre-training of Deep Bidirectional Transformers for Language Understan ...

  8. textcnn文本词向量_基于Text-CNN模型的中文文本分类实战

    1 文本分类 文本分类是自然语言处理领域最活跃的研究方向之一,目前文本分类在工业界的应用场景非常普遍,从新闻的分类.商品评论信息的情感分类到微博信息打标签辅助推荐系统,了解文本分类技术是NLP初学者比 ...

  9. 详解CNN实现中文文本分类过程

    摘要:本文主要讲解CNN实现中文文本分类的过程,并与贝叶斯.决策树.逻辑回归.随机森林.KNN.SVM等分类算法进行对比. 本文分享自华为云社区<[Python人工智能] 二十一.Word2Ve ...

  10. 万字总结Keras深度学习中文文本分类

    摘要:文章将详细讲解Keras实现经典的深度学习文本分类算法,包括LSTM.BiLSTM.BiLSTM+Attention和CNN.TextCNN. 本文分享自华为云社区<Keras深度学习中文 ...

最新文章

  1. 在 IDEA 中使用 Debug,真是太厉害了!
  2. wordcount代码_Scala小案例之wordcount
  3. java修改数据库表结构_数据库设计(一):设计传统系统表结构(Java开发)
  4. BAT解密:互联网技术发展之路(5)- 开发层技术剖析
  5. tensorflow学习:分布式tensorflow使用,代码实现inGraph方式
  6. [sh]rm -rf*的防护和普通用户执行命令
  7. Cloudera maneger登录页面后的操作是什么?
  8. 使用C++访问OPC Server的简单方法
  9. linux 关闭端口_手把手教你在Linux中快速检测端口的 3 个小技巧
  10. Windows下80端口被进程SystemPID=4占用的解决方法
  11. Ireport的安装及使用
  12. decimal类型对象里面定义什么类型_数据库数据类型decimal理解
  13. Mysql 设置问题,当使用一些开源的软件动态安装MYSQL数据库后,发现里面的中文全是乱码。...
  14. 规划资源管理常用表格
  15. eclipse中修改xml文件的默认编辑器
  16. 思科模拟配置文件服务器,思科模拟服务器配置教程
  17. Python flag用法
  18. SQLServer 大容量导入导致死锁和系统变慢问题
  19. Gartner发布2022年中国智慧城市和可持续发展技术成熟度曲线
  20. CAJ文件不存在或者不能正常访问问题解决

热门文章

  1. python 实例化_python中如何实例化一个对象-问答-阿里云开发者社区-阿里云
  2. 20款开源搜索引擎介绍与比较
  3. 安卓rom制作教程_刹那 刷机教程20-1三星S10N10等系列韩版国行安卓9升级10详细步骤...
  4. sqlserver安装目录_SQL 2008R2安装教程
  5. ThinkPHP视频教程 PHP-ThinkPHP 8天课程完整版
  6. java官方网站下载_java下载 7.0 官方版
  7. 诺基亚5800软件测试初学者,诺基亚5800刷机【教程详解】
  8. notepad 快速新建html,notepad编写html
  9. 安全方面的文章+VC知识库
  10. sun认证 java怎么考_Sun认证Java开发员考试介绍