ITPub博客

首页 > 数据库 > 数据库开发技术 > PaddleNLP-Taskflow实践

PaddleNLP-Taskflow实践

原创 数据库开发技术 作者:ArronAI 时间:2022-11-18 14:36:18 0 删除 编辑

PaddleNLP提供开箱即用的产业级NLP预置任务能力,无需训练,一键预测。

  • 最全的中文任务:覆盖自然语言理解与自然语言生成两大核心应用;

  • 极致的产业级效果:在多个中文场景上提供产业级的精度与预测性能;

  • 统一的应用范式:通过paddlenlp.Taskflow调用,简捷易用。

目前paddleNLP Taskflow支持的任务与特点如下:

任务名称 调用方式 一键预测 单条输入 多条输入 文档级输入 定制化训练 其它特性
中文分词 Taskflow("word_segmentation") ✅ ✅ ✅ ✅ ✅ 多种分词模式,满足快速切分和实体粒度精准切分
词性标注 Taskflow("pos_tagging") ✅ ✅ ✅ ✅ ✅ 基于百度前沿词法分析工具LAC
命名实体识别 Taskflow("ner") ✅ ✅ ✅ ✅ ✅ 覆盖最全中文实体标签
依存句法分析 Taskflow("dependency_parsing") ✅ ✅ ✅
✅ 基于最大规模中文依存句法树库研发的DDParser
信息抽取 Taskflow("information_extraction") ✅ ✅ ✅ ✅ ✅ 适配多场景的开放域通用信息抽取工具
『解语』-知识标注 Taskflow("knowledge_mining") ✅ ✅ ✅ ✅ ✅ 覆盖所有中文词汇的知识标注工具
文本纠错 Taskflow("text_correction") ✅ ✅ ✅ ✅ ✅ 融合拼音特征的端到端文本纠错模型ERNIE-CSC
文本相似度 Taskflow("text_similarity") ✅ ✅ ✅

基于百万量级Dureader Retrieval数据集训练RocketQA并达到前沿文本相似效果
情感倾向分析 Taskflow("sentiment_analysis") ✅ ✅ ✅
✅ 基于情感知识增强预训练模型SKEP达到业界SOTA
生成式问答 Taskflow("question_answering") ✅ ✅ ✅

使用最大中文开源CPM模型完成问答
智能写诗 Taskflow("poetry_generation") ✅ ✅ ✅

使用最大中文开源CPM模型完成写诗
开放域对话 Taskflow("dialogue") ✅ ✅ ✅

十亿级语料训练最强中文闲聊模型PLATO-Mini,支持多轮对话
代码生成 Taskflow("code_generation") ✅ ✅ ✅

代码生成大模型
文图生成 Taskflow("text_to_image") ✅ ✅ ✅

文图生成大模型
文本摘要 Taskflow("text_summarization") ✅ ✅ ✅ ✅
文本摘要大模型
文档智能 Taskflow("document_intelligence") ✅ ✅ ✅ ✅
以多语言跨模态布局增强文档预训练模型ERNIE-Layout为核心底座
问题生成 Taskflow("question_generation") ✅ ✅ ✅ ✅
问题生成大模型

环境依赖

  • python >= 3.6

  • paddlepaddle >= 2.3.0

  • paddlenlp >= 2.3.4

PART Ⅰ   一键预测

中文分词

 (可展开详情)多种分词模式,满足快速切分和实体粒度精准切分

三种分词模式,满足各类分词需求

from paddlenlp import Taskflow
# 默认模式————实体粒度分词,在精度和速度上的权衡,基于百度LAC>>> seg = Taskflow("word_segmentation")>>> seg("近日国家卫健委发布第九版新型冠状病毒肺炎诊疗方案")['近日', '国家卫健委', '发布', '第九版', '新型', '冠状病毒肺炎', '诊疗', '方案']
# 快速模式————最快:实现文本快速切分,基于jieba中文分词工具>>> seg_fast = Taskflow("word_segmentation", mode="fast")>>> seg_fast("近日国家卫健委发布第九版新型冠状病毒肺炎诊疗方案")['近日', '国家', '卫健委', '发布', '第九版', '新型', '冠状病毒', '肺炎', '诊疗', '方案']
# 精确模式————最准:实体粒度切分准确度最高,基于百度解语# 精确模式基于预训练模型,更适合实体粒度分词需求,适用于知识图谱构建、企业搜索Query分析等场景中>>> seg_accurate = Taskflow("word_segmentation", mode="accurate")>>> seg_accurate("近日国家卫健委发布第九版新型冠状病毒肺炎诊疗方案")['近日', '国家卫健委', '发布', '第九版', '新型冠状病毒肺炎', '诊疗', '方案']

批量样本输入,平均速度更快

输入为多个句子组成的list,平均速度会更快。

>>> from paddlenlp import Taskflow>>> seg = Taskflow("word_segmentation")>>> seg(["第十四届全运会在西安举办", "三亚是一个美丽的城市"])[['第十四届', '全运会', '在', '西安', '举办'], ['三亚', '是', '一个', '美丽', '的', '城市']]

自定义词典

你可以通过传入user_dict参数,装载自定义词典来定制分词结果。在默认模式和精确模式下,词典文件每一行由一个或多个自定义item组成。词典文件user_dict.txt示例:

平原上的火焰上 映

在快速模式下,词典文件每一行为一个自定义item+"\t"+词频(词频可省略,词频省略则自动计算能保证分出该词的词频),暂时不支持黑名单词典(即通过设置”年“、”末“,以达到切分”年末“的目的)。词典文件user_dict.txt示例:

平原上的火焰  10

加载自定义词典及输出结果示例:

>>> from paddlenlp import Taskflow>>> seg = Taskflow("word_segmentation")>>> seg("平原上的火焰宣布延期上映")['平原', '上', '的', '火焰', '宣布', '延期', '上映']>>> seg = Taskflow("word_segmentation", user_dict="user_dict.txt")>>> seg("平原上的火焰宣布延期上映")['平原上的火焰', '宣布', '延期', '上', '映']

参数说明

  • mode:指定分词模式,默认为None。

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。

  • user_dict:自定义词典文件路径,默认为None。

  • task_path:自定义任务路径,默认为None。

文档智能

以多语言跨模态布局增强文档预训练模型ERNIE-Layout为核心底座

输入格式

[  {"doc": "./invoice.jpg", "prompt": ["发票号码是多少?", "校验码是多少?"]},  {"doc": "./resume.png", "prompt": ["五百丁本次想要担任的是什么职位?", "五百丁是在哪里上的大学?", "大学学的是什么专业?"]}]

默认使用PaddleOCR进行OCR识别,同时支持用户通过word_boxes传入自己的OCR结果,格式为List[str, List[float, float, float, float]]。

[  {"doc": doc_path, "prompt": prompt, "word_boxes": word_boxes}]

支持单条、批量预测

  • 支持本地图片路径输入

>>> from pprint import pprint>>> from paddlenlp import Taskflow
>>> docprompt = Taskflow("document_intelligence")>>> pprint(docprompt([{"doc": "./resume.png", "prompt": ["五百丁本次想要担任的是什么职位?", "五百丁是在哪里上的大学?", "大学学的是什么专业?"]}]))[{'prompt': '五百丁本次想要担任的是什么职位?', 'result': [{'end': 7, 'prob': 1.0, 'start': 4, 'value': '客户经理'}]},{'prompt': '五百丁是在哪里上的大学?', 'result': [{'end': 37, 'prob': 1.0, 'start': 31, 'value': '广州五百丁学院'}]},{'prompt': '大学学的是什么专业?', 'result': [{'end': 44, 'prob': 0.82, 'start': 38, 'value': '金融学(本科)'}]}]
  • http图片链接输入

>>> from pprint import pprint>>> from paddlenlp import Taskflow
>>> docprompt = Taskflow("document_intelligence")>>> pprint(docprompt([{"doc": "https://bj.bcebos.com/paddlenlp/taskflow/document_intelligence/images/invoice.jpg", "prompt": ["发票号码是多少?", "校验码是多少?"]}]))[{'prompt': '发票号码是多少?', 'result': [{'end': 2, 'prob': 0.74, 'start': 2, 'value': 'No44527206'}]},{'prompt': '校验码是多少?', 'result': [{'end': 233, 'prob': 1.0, 'start': 231, 'value': '01107 555427109891646'}]}]

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。

  • lang:选择PaddleOCR的语言,ch可在中英混合的图片中使用,en在英文图片上的效果更好,默认为ch。

  • topn: 如果模型识别出多个结果,将返回前n个概率值最高的结果,默认为1。

PART Ⅱ   定制化训练

这里我们以命名实体识别Taskflow("ner", mode="accurate")为例,展示如何定制自己的模型。

调用Taskflow接口后,程序自动将相关文件下载到$HOME/.paddlenlp/taskflow/wordtag/,该默认路径包含以下文件:

$HOME/.paddlenlp/taskflow/wordtag/├── model_state.pdparams # 默认模型参数文件├── model_config.json # 默认模型配置文件└── tags.txt # 默认标签文件
  • 参考上表中对应示例准备数据集和标签文件tags.txt,执行相应训练脚本得到自己的model_state.pdparams和model_config.json。

  • 根据自己数据集情况,修改标签文件tags.txt。

  • 将以上文件保存到任意路径中,自定义路径下的文件需要和默认路径的文件一致:

custom_task_path/├── model_state.pdparams # 定制模型参数文件├── model_config.json # 定制模型配置文件└── tags.txt # 定制标签文件
  • 通过task_path指定自定义路径,使用Taskflow加载自定义模型进行一键预测:

from paddlenlp import Taskflowmy_ner = Taskflow("ner", mode="accurate", task_path="./custom_task_path/")




原文作者:ArronAI;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-01-10

  • 博文量
    179
  • 访问量
    140209