数据处理轻松搞定:如何利用PaddleNLP高效处理大规模文本数据

news2024/11/29 20:43:29

目录

  • 前言
  • 一、paddleNLP介绍、特性
    • 1-1、介绍
    • 1-2、特性介绍
  • 二、paddleNLP安装
  • 三、PaddleNLP一键使用
    • 3-1、中文分词
    • 3-2、词性标注
    • 3-3、命名实体识别
    • 3-4、依存句法分析(DDParser)
    • 3-5、解语知识标注
    • 3-6、文本纠错(ERNIE-CSC)
    • 3-7、文本相似度(SimBERT)
    • 3-8、情感分析(BiLSTM、SKEP、UIE)
    • 3-9、生成式回答(CPM)
    • 3-10、智能写诗(CPM)
    • 3-11、开放领域回答(PLATO-Mini)
    • 3-12、代码生成
    • 3-13、文本摘要
    • 3-14、文档智能
    • 3-15、问题生成
    • 3-16、零样本文本分类(UTC)
    • 3-17、模型特征提取
  • 总结


前言

PaddleNLP是一个基于PaddlePaddle深度学习平台的自然语言处理(NLP)工具库。它提供了一系列用于文本处理、文本分类、情感分析、机器翻译、文本生成等任务的预训练模型、模型组件和工具函数。

一、paddleNLP介绍、特性

1-1、介绍

在这里插入图片描述

PaddleNLP是一个基于PaddlePaddle深度学习平台的自然语言处理(NLP)工具库。它提供了一系列用于文本处理、文本分类、情感分析、机器翻译、文本生成等任务的预训练模型、模型组件和工具函数。
以下是PaddleNLP的一些主要功能和特点:

  • 预训练模型:PaddleNLP提供了多个预训练模型,包括BERT、ERNIE、RoBERTa、GPT等,这些模型在各种NLP任务中取得了优异的性能表现。用户可以通过PaddleNLP加载这些预训练模型,进行特征提取、文本分类、序列标注等任务。
  • 模型组件:PaddleNLP提供了各种常用的NLP模型组件,例如词向量(Word Embedding)、注意力机制(Attention Mechanism)、编码器(Encoder)等,用户可以使用这些组件构建自定义的NLP模型。
  • 数据处理工具:PaddleNLP提供了用于数据处理和数据集加载的工具函数,包括文本分词、数据预处理、数据批处理等功能,简化了NLP任务中数据的准备过程。
  • 任务示例:PaddleNLP提供了丰富的任务示例代码,覆盖了文本分类、序列标注、文本生成等多个任务。这些示例代码可以帮助用户快速上手并理解如何使用PaddleNLP解决具体的NLP问题。
  • 多语言支持:PaddleNLP支持多种语言,包括中文和英文,可以应用于不同语种的NLP任务。
  • 与PaddlePaddle无缝集成:PaddleNLP基于PaddlePaddle深度学习平台构建,可以与PaddlePaddle的其他组件和功能进行无缝集成,充分发挥PaddlePaddle的优势。

总之,PaddleNLP是一个功能强大且易于使用的NLP工具库,为用户提供了丰富的预训练模型、模型组件和工具函数,帮助用户解决各种文本处理和NLP任务。无论是初学者还是有经验的研究人员和工程师,都可以从PaddleNLP中受益并加快NLP项目的开发速度。

1-2、特性介绍

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

  • 最全的中文任务:覆盖自然语言理解与自然语言生成两大核心应用;
  • 极致的产业级效果:在多个中文场景上提供产业级的精度与预测性能;
  • 统一的应用范式:通过paddlenlp.Taskflow调用,简捷易用。
    在这里插入图片描述

二、paddleNLP安装

安装

# 需要安装如下几种包
pip install python==3.8.10 -i https://mirror.baidu.com/pypi/simple
pip install paddlepaddle==2.4.2 -i https://mirror.baidu.com/pypi/simple
pip install paddlenlp==2.3.4 -i https://mirror.baidu.com/pypi/simple

# 智能文档任务需要调用
pip install opencv-python -i https://mirror.baidu.com/pypi/simple
pip install paddleocr -i https://mirror.baidu.com/pypi/simple

pip install --upgrade opencv-python
pip install --upgrade paddlenlp
pip install --upgrade paddleocr

验证

import paddle
paddle.utils.run_check()

# 如果没有报错,则安装成功

其他问题

# 在后续使用过程中,我遇到了scipy和sk-learn的一个兼容问题,我这里都卸载后重新安装了一下

pip uninstall scipy scikit-learn
pip install scipy scikit-learn -i https://mirror.baidu.com/pypi/simple

三、PaddleNLP一键使用

3-1、中文分词

中文分词(BiGRU+CRF、jieba、WordTag)

参数

  • mode:指定分词模式,快速、精确、默认(两者之间)。
  • batch_size: 批处理大小,结合机器情况调整,默认为1。
  • user_dict: 自定义词典文件路径,默认为None。
  • task_path: 自定义任务路径,默认为None。

案例如下

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("近日国家卫健委发布第九版新型冠状病毒肺炎诊疗方案")
# ['近日', '国家卫健委', '发布', '第九版', '新型冠状病毒肺炎', '诊疗', '方案']

# 批量样本输入时,平均速度更快,以下NLP任务,同样适用。
seg(["第十四届全运会在西安举办", "三亚是一个美丽的城市"])
# [['第十四届', '全运会', '在', '西安', '举办'], ['三亚', '是', '一个', '美丽', '的', '城市']]

自定义词典:词典文件每一行由一个或多个自定义item组成。词典文件user_dict.txt示例:

平原上的火焰
上 映

3-2、词性标注

词性标注

参数

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • user_dict:用户自定义词典文件,默认为None。
  • task_path:自定义任务路径,默认为None。

案例如下:基于百度词法分析工具LAC

>>> from paddlenlp import Taskflow
# 单条预测
>>> tag = Taskflow("pos_tagging")
>>> tag("第十四届全运会在西安举办")
# [('第十四届', 'm'), ('全运会', 'nz'), ('在', 'p'), ('西安', 'LOC'), ('举办', 'v')]

# 批量样本输入,平均速度更快
>>> tag(["第十四届全运会在西安举办", "三亚是一个美丽的城市"])
# [[('第十四届', 'm'), ('全运会', 'nz'), ('在', 'p'), ('西安', 'LOC'), ('举办', 'v')], [('三亚', 'LOC'), ('是', 'v'), ('一个', 'm'), ('美丽', 'a'), ('的', 'u'), ('城市', 'n')]]

标签以及对应含义如下
在这里插入图片描述

3-3、命名实体识别

命名实体识别

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • user_dict:用户自定义词典文件,默认为None。
  • task_path:自定义任务路径,默认为None。
  • entity_only:只返回实体/概念词及其对应标签。

案例分析

# 精确模式(默认),基于百度解语,内置91种词性及专名类别标签
>>> from paddlenlp import Taskflow
>>> ner = Taskflow("ner")
>>> ner("《孤女》是2010年九州出版社出版的小说,作者是余兼羽")
# [('《', 'w'), ('孤女', '作品类_实体'), ('》', 'w'), ('是', '肯定词'), ('2010年', '时间类'), ('九州出版社', '组织机构类'), ('出版', '场景事件'), ('的', '助词'), ('小说', '作品类_概念'), (',', 'w'), ('作者', '人物类_概念'), ('是', '肯定词'), ('余兼羽', '人物类_实体')]

>>> ner = Taskflow("ner", entity_only=True)  # 只返回实体/概念词
>>> ner("《孤女》是2010年九州出版社出版的小说,作者是余兼羽")
# [('孤女', '作品类_实体'), ('2010年', '时间类'), ('九州出版社', '组织机构类'), ('出版', '场景事件'), ('小说', '作品类_概念'), ('作者', '人物类_概念'), ('余兼羽', '人物类_实体')]

# 快速模式,基于百度LAC,内置24种词性和专名类别标签
>>> from paddlenlp import Taskflow
>>> ner = Taskflow("ner", mode="fast")
>>> ner("三亚是一个美丽的城市")
# [('三亚', 'LOC'), ('是', 'v'), ('一个', 'm'), ('美丽', 'a'), ('的', 'u'), ('城市', 'n')]

精确模式标签集合

在这里插入图片描述

快速模式标签集合:快速模式有点和词性标注类似了。
在这里插入图片描述

3-4、依存句法分析(DDParser)

依存句法分析:基于最大规模中文依存句法树库研发的DDParser,使用命名实体识别抽取实体,来进行依存分析。

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • model:选择任务使用的模型,可选有ddparser,ddparser-ernie-1.0和ddparser-ernie-gram-zh。
  • tree:确保输出结果是正确的依存句法树,默认为True。
  • prob:是否输出每个弧对应的概率值,默认为False。
  • use_pos:是否返回词性标签,默认为False。
  • use_cuda:是否使用GPU进行切词,默认为False。
  • return_visual:是否返回句法树的可视化结果,默认为False。
  • task_path:自定义任务路径,默认为None。

案例分析:抽取的实体为’时间’, ‘选手’, ‘赛事名称’。

>>> from pprint import pprint
>>> from paddlenlp import Taskflow

>>> schema = ['时间', '选手', '赛事名称'] # Define the schema for entity extraction
>>> ie = Taskflow('information_extraction', schema=schema)
>>> pprint(ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!")) # Better print results using pprint

输出
[{‘时间’: [{‘end’: 6,
‘probability’: 0.9857378532924486,
‘start’: 0,
‘text’: ‘2月8日上午’}],
‘赛事名称’: [{‘end’: 23,
‘probability’: 0.8503089953268272,
‘start’: 6,
‘text’: ‘北京冬奥会自由式滑雪女子大跳台决赛’}],
‘选手’: [{‘end’: 31,
‘probability’: 0.8981548639781138,
‘start’: 28,
‘text’: ‘谷爱凌’}]}]

在上例中我们已经实例化了一个Taskflow对象,这里可以通过set_schema方法重置抽取目标。

调用示例

>>> schema = ['肿瘤的大小', '肿瘤的个数', '肝癌级别', '脉管内癌栓分级']
>>> ie.set_schema(schema)
>>> pprint(ie("(右肝肿瘤)肝细胞性肝癌(II-III级,梁索型和假腺管型),肿瘤包膜不完整,紧邻肝被膜,侵及周围肝组织,未见脉管内癌栓(MVI分级:M0级)及卫星子灶形成。(肿物1个,大小4.2×4.0×2.8cm)。"))

输出如下
[{‘肝癌级别’: [{‘end’: 20,
‘probability’: 0.9243267447402701,
‘start’: 13,
‘text’: ‘II-III级’}],
‘肿瘤的个数’: [{‘end’: 84,
‘probability’: 0.7538413804059623,
‘start’: 82,
‘text’: ‘1个’}],
‘肿瘤的大小’: [{‘end’: 100,
‘probability’: 0.8341128043459491,
‘start’: 87,
‘text’: ‘4.2×4.0×2.8cm’}],
‘脉管内癌栓分级’: [{‘end’: 70,
‘probability’: 0.9083292325934664,
‘start’: 67,
‘text’: ‘M0级’}]}]

3-5、解语知识标注


3-6、文本纠错(ERNIE-CSC)

文本纠错

参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • task_path:自定义任务路径,默认为None。

案例如下

>>> from paddlenlp import Taskflow
>>> corrector = Taskflow("text_correction")
# 单条输入
>>> corrector('遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇。')
# [{'source': '遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇。', 'target': '遇到逆境时,我们必须勇于面对,而且要愈挫愈勇。', 'errors': [{'position': 3, 'correction': {'竟': '境'}}]}]

# 批量预测
>>> corrector(['遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇。', '人生就是如此,经过磨练才能让自己更加拙壮,才能使自己更加乐观。'])
# [{'source': '遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇。', 'target': '遇到逆境时,我们必须勇于面对,而且要愈挫愈勇。', 'errors': [{'position': 3, 'correction': {'竟': '境'}}]}, {'source': '人生就是如此,经过磨练才能让自己更加拙壮,才能使自己更加乐观。', 'target': '人生就是如此,经过磨练才能让自己更加茁壮,才能使自己更加乐观。', 'errors': [{'position': 18, 'correction': {'拙': '茁'}}]}]

3-7、文本相似度(SimBERT)

文本相似度
参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • max_seq_len:最大序列长度,默认为384。
  • task_path:自定义任务路径,默认为None。

案例如下:

>>> from paddlenlp import Taskflow
>>> similarity = Taskflow("text_similarity")
>>> similarity([["春天适合种什么花?", "春天适合种什么菜?"]])
# [{'text1': '春天适合种什么花?', 'text2': '春天适合种什么菜?', 'similarity': 0.83402544}]

3-8、情感分析(BiLSTM、SKEP、UIE)

情感分析

参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • model:选择任务使用的模型,可选有bilstm,skep_ernie_1.0_large_ch,uie-senta-base,uie-senta-- medium,uie-senta-mini,uie-senta-micro,uie-senta-nano。
  • task_path:自定义任务路径,默认为None。

案例如下:

>>> from paddlenlp import Taskflow
# 默认使用bilstm模型进行预测,速度快
>>> senta = Taskflow("sentiment_analysis")
>>> senta("这个产品用起来真的很流畅,我非常喜欢")
[{'text': '这个产品用起来真的很流畅,我非常喜欢', 'label': 'positive', 'score': 0.9938690066337585}]

# 使用SKEP情感分析预训练模型进行预测,精度高
>>> senta = Taskflow("sentiment_analysis", model="skep_ernie_1.0_large_ch")
>>> senta("作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上办理入住手续,节省时间。")
[{'text': '作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上办理入住手续,节省时间。', 'label': 'positive', 'score': 0.984320878982544}]

# 使用UIE模型进行情感分析,具有较强的样本迁移能力
# 1. 语句级情感分析
>>> schema = ['情感倾向[正向,负向]']
>>> senta = Taskflow("sentiment_analysis", model="uie-senta-base", schema=schema)
>>> senta('蛋糕味道不错,店家服务也很好')
[{'情感倾向[正向,负向]': [{'text': '正向', 'probability': 0.996646058824652}]}]

# 2. 评价维度级情感分析
>>> # Aspect Term Extraction
>>> # schema =  ["评价维度"]
>>> # Aspect - Opinion Extraction
>>> # schema =  [{"评价维度":["观点词"]}]
>>> # Aspect - Sentiment Extraction
>>> # schema =  [{"评价维度":["情感倾向[正向,负向,未提及]"]}]
>>> # Aspect - Sentiment - Opinion Extraction
>>> schema =  [{"评价维度":["观点词", "情感倾向[正向,负向,未提及]"]}]

>>> senta = Taskflow("sentiment_analysis", model="uie-senta-base", schema=schema)
>>> senta('蛋糕味道不错,店家服务也很热情')
[{'评价维度': [{'text': '服务', 'start': 9, 'end': 11, 'probability': 0.9709093024793489, 'relations': { '观点词': [{'text': '热情', 'start': 13, 'end': 15, 'probability': 0.9897222206316556}], '情感倾向[正向,负向,未提及]': [{'text': '正向', 'probability': 0.9999327669598301}]}}, {'text': '味道', 'start': 2, 'end': 4, 'probability': 0.9105472387838915, 'relations': {'观点词': [{'text': '不错', 'start': 4, 'end': 6, 'probability': 0.9946981266891619}], '情感倾向[正向,负向,未提及]': [{'text': '正向', 'probability': 0.9998829392709467}]}}]}]

3-9、生成式回答(CPM)

生成式回答

参数说明

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

案例如下:

>>> from paddlenlp import Taskflow
>>> qa = Taskflow("question_answering")
# 单条输入
>>> qa("中国的国土面积有多大?")
[{'text': '中国的国土面积有多大?', 'answer': '960万平方公里。'}]
# 多条输入
>>> qa(["中国国土面积有多大?", "中国的首都在哪里?"])
[{'text': '中国国土面积有多大?', 'answer': '960万平方公里。'}, {'text': '中国的首都在哪里?', 'answer': '北京。'}]

3-10、智能写诗(CPM)

案例如下:

>>> from paddlenlp import Taskflow
>>> poetry = Taskflow("poetry_generation")
# 单条输入
>>> poetry("林密不见人")
[{'text': '林密不见人', 'answer': ',但闻人语响。'}]
# 多条输入
>>> poetry(["林密不见人", "举头邀明月"])
[{'text': '林密不见人', 'answer': ',但闻人语响。'}, {'text': '举头邀明月', 'answer': ',低头思故乡。'}]

3-11、开放领域回答(PLATO-Mini)

开放领域回答: 十亿级语料训练最强中文闲聊模型PLATO-Mini,支持多轮对话

参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • max_seq_len:最大序列长度,默认为512。

案例如下
非交互模式

>>> from paddlenlp import Taskflow
>>> dialogue = Taskflow("dialogue")
>>> dialogue(["吃饭了吗"])
['刚吃完饭,你在干什么呢?']

>>> dialogue(["你好", "吃饭了吗"], ["你是谁?"])
['吃过了,你呢', '我是李明啊']

交互模式

>>> from paddlenlp import Taskflow

>>> dialogue = Taskflow("dialogue")
# 输入`exit`可退出交互模式
# max_turn:任务能记忆的对话轮数,当max_turn为1时,模型只能记住当前对话,无法获知之前的对话内容。
>>> dialogue.interactive_mode(max_turn=3)

'''
[Human]:你好
[Bot]:你好,很高兴认识你,我想问你一下,你喜欢运动吗?
[Human]:喜欢
[Bot]:那你喜欢什么运动啊?
[Human]:篮球,你喜欢篮球吗
[Bot]:当然了,我很喜欢打篮球的
'''

3-12、代码生成

3-13、文本摘要

文本摘要: 十亿级语料训练最强中文闲聊模型PLATO-Mini,支持多轮对话

参数说明

  • model:可选模型,默认为IDEA-CCNL/Randeng-Pegasus-523M-Summary-Chinese。
  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。

案例如下: 通过Pegasus模型来生成摘要、支持单条、批量预测。

>>> from paddlenlp import Taskflow
>>> summarizer = Taskflow("text_summarization")
# 单条输入
>>> summarizer('2022年,中国房地产进入转型阵痛期,传统“高杠杆、快周转”的模式难以为继,万科甚至直接喊话,中国房地产进入“黑铁时代”')
# 输出:['万科喊话中国房地产进入“黑铁时代”']

# 多条输入
>>> summarizer([
  '据悉,2022年教育部将围绕“巩固提高、深化落实、创新突破”三个关键词展开工作。要进一步强化学校教育主阵地作用,继续把落实“双减”作为学校工作的重中之重,重点从提高作业设计水平、提高课后服务水平、提高课堂教学水平、提高均衡发展水平四个方面持续巩固提高学校“双减”工作水平。',
  '党参有降血脂,降血压的作用,可以彻底消除血液中的垃圾,从而对冠心病以及心血管疾病的患者都有一定的稳定预防工作作用,因此平时口服党参能远离三高的危害。另外党参除了益气养血,降低中枢神经作用,调整消化系统功能,健脾补肺的功能。'
  ])
#输出:['教育部:将从四个方面持续巩固提高学校“双减”工作水平', '党参能降低三高的危害']

3-14、文档智能

文档智能: 以多语言跨模态布局增强文档预训练模型ERNIE-Layout为核心底座,注意:从我目前的实验结果来看,仅支持单页图片。如果遇到有关于环境配置的问题,请查看参考链接第四个。

参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • lang:选择PaddleOCR的语言,ch可在中英混合的图片中使用,en在英文图片上的效果更好,默认为ch。
  • topn: 如果模型识别出多个结果,将返回前n个概率值最高的结果,默认为1。

案例如下:

>>> 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’: ‘金融学(本科)’}]}]

3-15、问题生成

问题生成:基于百度自研中文预训练模型UNIMO-Text和大规模多领域问题生成数据集

参数说明

  • model:可选模型,默认为unimo-text-1.0-dureader_qg,支持的模型有[“unimo-text-1.0”, “unimo-text-1.0-dureader_qg”, “unimo-text-1.0-- - question-generation”, “unimo-text-1.0-question-generation-dureader_qg”]。
  • device:运行设备,默认为"gpu"。
  • template:模版,可选项有[0, 1, 2, 3],1表示使用默认模版,0表示不使用模版。
  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • output_scores:是否要输出解码得分,默认为False。
    i- s_select_from_num_return_sequences:是否对多个返回序列挑选最优项输出,当为True时,若num_return_sequences不为1则自动根据解码得分选择得分最高的序列最为最终结果,否则返回num_return_sequences个序列,默认为True。
  • max_length:生成代码的最大长度,默认为50。
  • min_length:生成代码的最小长度,默认为3。
  • decode_strategy:解码策略,支持beam_search和sampling,默认为beam_search。
  • temperature:解码参数temperature,默认为1.0。
  • top_k:解码参数top_k,默认为0。
  • top_p:解码参数top_p,默认为1.0。
  • num_beams:解码参数num_beams,表示beam_search解码的beam size,默认为6。
  • num_beam_groups:解码参数num_beam_groups,默认为1。
  • diversity_rate:解码参数diversity_rate,默认为0.0。
  • length_penalty:解码长度控制值,默认为1.2。
  • num_return_sequences:解码返回序列数,默认为1。
  • repetition_penalty:解码重复惩罚值,默认为1。
  • use_fast:表示是否开启基于FastGeneration的高性能预测,注意FastGeneration的高性能预测仅支持gpu,默认为False。
  • use_fp16_decoding: 表示在开启高性能预测的时候是否使用fp16来完成预测过程,若不使用则使用fp32,默认为False。

案例如下

>>> from paddlenlp import Taskflow
# 默认模型为 unimo-text-1.0-dureader_qg
>>> question_generator = Taskflow("question_generation")
# 单条输入
>>> question_generator([
  {"context": "奇峰黄山千米以上的山峰有77座,整座黄山就是一座花岗岩的峰林,自古有36大峰,36小峰,最高峰莲花峰、最险峰天都峰和观日出的最佳点光明顶构成黄山的三大主峰。", "answer": "莲花峰"}
  ])
'''
  ['黄山最高峰是什么']
'''
# 多条输入
>>> question_generator([
  {"context": "奇峰黄山千米以上的山峰有77座,整座黄山就是一座花岗岩的峰林,自古有36大峰,36小峰,最高峰莲花峰、最险峰天都峰和观日出的最佳点光明顶构成黄山的三大主峰。", "answer": "莲花峰"},
  {"context": "弗朗索瓦·韦达外文名:franciscusvieta国籍:法国出生地:普瓦图出生日期:1540年逝世日期:1603年12月13日职业:数学家主要成就:为近代数学的发展奠定了基础。", "answer": "法国"}
  ])
'''
  ['黄山最高峰是什么',  '弗朗索瓦是哪里人']
'''

3-16、零样本文本分类(UTC)

适配多场景的零样本通用文本分类工具:通用文本分类主要思想是利用单一模型支持通用分类、评论情感分析、语义相似度计算、蕴含推理、多项式阅读理解等众多“泛分类”任务。用户可以自定义任意标签组合,在不限定领域、不设定 prompt 的情况下进行文本分类。

参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • task_path:自定义任务路径,默认为None。
  • schema:定义任务标签候选集合。
  • model:选择任务使用的模型,默认为utc-base, 支持utc-xbase, utc-base, utc-medium, utc-micro, utc-mini, utc-nano, utc-pico。
  • max_seq_len:最长输入长度,包括所有标签的长度,默认为512。
  • pred_threshold:模型对标签预测的概率在0~1之间,返回结果去掉小于这个阈值的结果,默认为0.5。
  • precision:选择模型精度,默认为fp32,可选有fp16和fp32。fp16推理速度更快。如果选择fp16,请先确保机器正确安装NVIDIA相关驱动和基础软件,确保CUDA>=11.2,cuDNN>=8.1.1,初次使用需按照提示安装相关依赖。其次,需要确保GPU设备的CUDA计算能力(CUDA Compute Capability)大于7.0,典型的设备包括V100、T4、A10、A100、GTX 20系列和30系列显卡等。更多关于CUDA Compute - Capability和精度支持情况请参考NVIDIA文档:GPU硬件与支持精度对照表。

案例如下: 这里以语义相似度为例。

>>> from paddlenlp import Taskflow
>>> cls = Taskflow("zero_shot_text_classification", schema=["不同", "相同"])
>>> cls([["怎么查看合同", "从哪里可以看到合同"]])
[{'predictions': [{'label': '相同', 'score': 0.9951385264364382}], 'text_a': '怎么查看合同', 'text_b': '从哪里可以看到合同'}]
>>> cls([["为什么一直没有电话来确认借款信息", "为何我还款了,今天却接到客服电话通知"]])
[{'predictions': [{'label': '不同', 'score': 0.9991497973466908}], 'text_a': '为什么一直没有电话来确认借款信息', 'text_b': '为何我还款了,今天却接到客服电话通知'}]

3-17、模型特征提取

模型特征提取:基于百度自研中文图文跨模态预训练模型ERNIE-ViL 2.0

参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • _static_mode:静态图模式,默认开启。
  • model:选择任务使用的模型,默认为PaddlePaddle/ernie_vil-2.0-base-zh。
>>> from paddlenlp import Taskflow
>>> from PIL import Image
>>> import paddle.nn.functional as F
>>> vision_language= Taskflow("feature_extraction")
# 单条输入
>>> image_embeds = vision_language(Image.open("demo/000000039769.jpg"))
>>> image_embeds["features"]
Tensor(shape=[1, 768], dtype=float32, place=Place(gpu:0), stop_gradient=True,
       [[-0.59475428, -0.69795364,  0.22144008,  0.88066685, -0.58184201,
# 单条输入
>>> text_embeds = vision_language("猫的照片")
>>> text_embeds['features']
Tensor(shape=[1, 768], dtype=float32, place=Place(gpu:0), stop_gradient=True,
       [[ 0.04250504, -0.41429776,  0.26163983,  0.29910022,  0.39019185,
         -0.41884750, -0.19893740,  0.44328332,  0.08186490,  0.10953025,
         ......

# 多条输入
>>> image_embeds = vision_language([Image.open("demo/000000039769.jpg")])
>>> image_embeds["features"]
Tensor(shape=[1, 768], dtype=float32, place=Place(gpu:0), stop_gradient=True,
       [[-0.59475428, -0.69795364,  0.22144008,  0.88066685, -0.58184201,
       ......
# 多条输入
>>> text_embeds = vision_language(["猫的照片","狗的照片"])
>>> text_embeds["features"]
Tensor(shape=[2, 768], dtype=float32, place=Place(gpu:0), stop_gradient=True,
       [[ 0.04250504, -0.41429776,  0.26163983, ...,  0.26221892,
          0.34387422,  0.18779707],
        [ 0.06672225, -0.41456309,  0.13787819, ...,  0.21791610,
          0.36693242,  0.34208685]])
>>> image_features = image_embeds["features"]
>>> text_features = text_embeds["features"]
>>> image_features /= image_features.norm(axis=-1, keepdim=True)
>>> text_features /= text_features.norm(axis=-1, keepdim=True)
>>> logits_per_image = 100 * image_features @ text_features.t()
>>> probs = F.softmax(logits_per_image, axis=-1)
>>> probs
Tensor(shape=[1, 2], dtype=float32, place=Place(gpu:0), stop_gradient=True,
       [[0.99833173, 0.00166824]])

在这里插入图片描述

参考文章:
官方GitHub.
GitHub_相关功能介绍.
PaddleNLP常见问题汇总(持续更新).
拓展阅读:Paddle开源项目——PaddleNLP文档智能技术重磅升级,动手搭建端到端文档抽取问答模型_副本.
端到端开放文档抽取问答系统.

从0到1实现全流程本地部署Paddle项目——视频人像分割(一).
部署:一行命令启动,十分钟内完成部署,Paddle Serving开放模型即服务功能.


总结

樱花🌸公主佩戴着花环,跳舞在春风里,将绚烂的花瓣洒满整个季节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/741347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工业园区扬尘噪音监测,该怎么操作?这篇告诉你!

随着工业园区的不断发展和扩大,扬尘和噪声问题成为引起关注的重要环境挑战。工业活动产生的扬尘和噪声不仅对周边居民的生活质量和健康构成威胁,也对环境可持续性产生负面影响。 因此,进行有效的扬尘和噪声监测成为管理者和决策者必须关注和解…

【打包问题】执行mvn spotless:apply之后,import的包被去移除了

import的包被去移除了 出现的问题mvn spotless:apply的作用原因在哪解决方式快速恢复代码的规范性 出现的问题 执行mvn spotless:apply之后 mvn spotless:apply的作用 简单来说这个就是执行代码的规范化 原因在哪 我为了展示效果所以把下满应该引入的包注释了出来&#xf…

CDN应用的三大技术及五大优点

CDN应用的三大技术 CDN的实现需要依赖多种网络技术,如负载均衡技术、动态内容分发与复制技术、缓存技术等,以下为您做简要介绍: 1、负载均衡技术 负载均衡技术就是将网络中的流量尽可能平均分配到多个能完成相同任务的服务器或网络节点&am…

奇葩功能实现:级联选择框组件el-cascader实现同一级的二级只能单选,但是一级可以多选

前言: 其实也不能说这个功能奇葩,做项目碰到这种需求也算合理正常,只是确实没有能直接实现这一需求的现成组件。 el-cascader作为级联选择组件,并不能同时支持一级多选,二级单选的功能,只能要么是单选或者…

从零开始构建一个电影知识图谱,实现KBQA智能问答[下篇]:Apache jena SPARQL endpoint及推理、KBQA问答Demo超详细教学

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实…

Pyhon学习之条件判断和循环语句

1.if flag 1 if 1:print(type(True)) if 0:print(name) if flag:print("flag的类型:"str(type(flag)))根据这个结果,可以看出来,这里没有进行类型转换,bool就是int true 就是1 false 就是0 flag 0 if 1:print(type(…

Fiddler抓取app HTTPS请求

一、电脑和手机连接同一WIFI cmd->ipconfig,查看电脑当前IP地址为192.168.101.48 二、配置Fiddler Options选项勾选Allow remote computers to connect。 安装证书 勾选抓取HTTPS请求 三、手机端配置代理 手机端连接wifi,手动配置代理。 主机名&…

uniapp下上传图片后图片裁剪加图片旋转,支持H5和app

效果图 代码如下 <template><view class"container" v-show"isShow"><view><view class"cropper-content"><view v-if"isShowImg" class"uni-corpper":style"width: cropperInitW px;he…

Java 动态规划 174. 地下城游戏

代码展示&#xff1a; class Solution {public int calculateMinimumHP(int[][] dungeon) {int mdungeon.length;int ndungeon[0].length;//创建dp数组int[][]dpnew int[m1][n1];//初始化for(int i0;i<m;i){dp[i][n]Integer.MAX_VALUE;}for(int j0;j<n;j){dp[m][j]Integ…

Linux - 用户|权限管理 - 查看用户组

当我们需要查看 Linux服务器都有哪些用户组的时候, 可以通过如下命令进行查看: cat /etc/group如下图所示: 同时, 还可以通过groupmod三次tab键 进行查看: 具体信息内容解读:

js- 左右两边子数组的和相等

给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为在下标的左侧不存在元素。这一点…

网络编程-day5

IO多路复用--服务器 从中获取返回给指定客户端的信息&#xff08;修改版&#xff09; IO多路复用--客户端

【Distributed】分布式ELK日志文件分析系统(二)

文章目录 一、FilebeatELK 部署1. 环境部署2. 在 Filebeat 节点上操作2.1 安装 Filebeat2.2 设置 filebeat 的主配置文件 3. 在 Apache 节点上操作3.1 在 Logstash 组件所在节点上新建一个 Logstash 配置文件 3. 启动3.1 在Logstash 组件所在节点启动3.2 在 Filebeat 节点 启动…

神仙打架——号称是性能最强的中英文百亿参数量开源模型Baichuan-13B他来了!

下午开个会的功夫看到新闻推送一条最新的大模型相关的项目开源发布了&#xff0c;到底是怎么个事我们来一起看下。 官方项目地址在这里&#xff0c;如下所示&#xff1a; 可以看到&#xff1a;才刚刚过去十几分钟的时间就已经有超过500的star量了。 就在不久前的6月15日&…

Java中使用工厂模式和策略模式优雅消除if-else语句(UML类图+案例分析)

前言&#xff1a;在最近的后端开发中&#xff0c;多多少少会发现有很多if-else语句&#xff0c;如果条件过多则会造成整体代码看起来非常臃肿&#xff0c;这边我就举一个我在实际开发中的例子&#xff0c;来进行阐述这两种模式在实际开发中我是如何运用的。 目录 一、工厂模式…

Web APls-day05

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; Window对象 BOM BOM(Browser Object Model ) 是浏览器对象模型 window对象是一个全局对象&#xff0c;也可以说是…

❤️创意网页:猜数字游戏

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

【架构设计】高并发架构实战:从需求分析到系统设计

写在前面 很多软件工程师的职业规划是成为架构师&#xff0c;但是要成为架构师很多时候要求先有架构设计经验&#xff0c;而不做架构师又怎么会有架构设计经验呢&#xff1f;那么要如何获得架构设计经验呢&#xff1f; 1 高并发是什么 高并发是指系统在同一时间内处理的请求量…

左神算法中级提升(3)

目录 【案例1】 【题目描述】【2018阿里巴巴面试题】 【思路解析】 【代码实现】 【案例2】 【题目描述】 【思路解析1】 【思路解析2】 【代码实现】 【案例3】 【题目描述】 【思路解析】 【代码实现】 【案例4】 【题目描述】 【思路解析】 【代码实现】 【案例5】…

无人机禁飞区地图更新!图新地球全国限飞区自定义地图免费分享!

随着无人机的普及&#xff0c;人们越来越容易拥有一台无人机。但很多用户并不了解无人机的飞行规则和禁飞限制。对于没有严格遵守规定的人来说&#xff0c;无人机飞行往往会构成公共安全和私人财产的潜在危害。 为此&#xff0c;政府和航空管理机构陆续出台了一系列限制无人机…