一:飞浆(paddle)介绍
飞桨是国内唯一功能完备的端到端开源深度学习平台,集深度学习训练和预测框架、模型库、工具组件和服务平台为一体,拥有兼顾灵活性和高性能的开发机制、工业级应用效果的模型、超大规模并行深度学习能力、推理引擎一体化设计以及系统化服务支持的五大优势,致力于让深度学习技术的创新与应用更简单。
飞桨提供的70+ 官方模型,全部经过真实应用场景的有效验证。不仅包含 更懂中文 的NLP 模型,同时开源多个视觉领域国际竞赛冠军算法。
支持python、C ++
PaddleNLP是一款简单易用且功能强大的自然语言处理开发库。聚合业界优质预训练模型并提供开箱即用的开发体验,覆盖NLP多场景的模型库搭配产业实践范例可满足开发者灵活定制的需求。
GPU 测试工具 https://aistudio.baidu.com/ 领取免费算力
二:飞浆(paddle)相关地址
官网:https://www.paddlepaddle.org.cn/paddle/paddlenlp
github:https://github.com/PaddlePaddle/PaddleNLP
文档:https://paddlenlp.readthedocs.io/zh/latest/
三:PaddleNLP安装
环境依赖python >= 3.7
paddlepaddle >= 2.3
pip install --upgrade paddlenlp
安装成功后使用时提示错误
解决方法:
pip install --upgrade paddlepaddle
如果无法安装可以通过更换国内源的方法来解决
pip install --upgrade paddlepaddle -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
常用的国内镜像源地址:
- 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
- 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
- 阿里云 http://mirrors.aliyun.com/pypi/simple/
- 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
- 豆瓣(douban) http://pypi.douban.com/simple/
四:PaddleNLP特性
- 开箱即用的NLP工具集
- 丰富完备的中文模型库
- 产业级端到端系统范例
- 高性能分布式训练与推理
五:PaddleNLP使用
1:中文分词
- PaddleNLP提供了多种分词模式,满足快速切分和实体粒度精准切分,训练数据来源 百度自建数据集,包含近2200万句子,覆盖多种场景
>>> 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("近日国家卫健委发布第九版新型冠状病毒肺炎诊疗方案")
['近日', '国家卫健委', '发布', '第九版', '新型冠状病毒肺炎', '诊疗', '方案']
- 批量样本输入,平均速度更快
>>> from paddlenlp import Taskflow
>>> seg = Taskflow("word_segmentation")
>>> seg(["第十四届全运会在西安举办", "三亚是一个美丽的城市"])
[['第十四届', '全运会', '在', '西安', '举办'], ['三亚', '是', '一个', '美丽', '的', '城市']]
- 自定义分词
创建一个user_dict.txt文件,内容如下
平原上的火焰
上 映
>>> from paddlenlp import Taskflow
>>> seg = Taskflow("word_segmentation")
>>> seg("平原上的火焰宣布延期上映")
['平原', '上', '的', '火焰', '宣布', '延期', '上映']
>>> seg = Taskflow("word_segmentation", user_dict="user_dict.txt")
>>> seg("平原上的火焰宣布延期上映")
['平原上的火焰', '宣布', '延期', '上', '映']
2:文本纠错
>>> 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:文本相似度
基于百万量级Dureader Retrieval数据集训练RocketQA并达到前沿文本相似效果
数据集来源 收集百度知道2200万对相似句组
有多模型选择,默认选择词库最大的模型,其他模型对精度、速度做出平衡,无自定义训练
>>> from paddlenlp import Taskflow
>>> similarity = Taskflow("text_similarity")
>>> arr =[["乌克兰回应“泽连斯基替身被拍到”:是保镖?", "乌克兰方面对泽连斯基使用替身事件做出回应,系第三方保镖?"]]
>>> res = similarity(arr)
[{'text1': '乌克兰回应“泽连斯基替身被拍到”:是保镖?', 'text2': '乌克兰方面对泽连斯基使用替身事件做出回应,系第三方保镖?', 'similarity': 0.8714959621429443}]
>>> similarity = Taskflow("text_similarity", model='rocketqa-base-cross-encoder')
>>> res = similarity(arr)
[{'text1': '乌克兰回应“泽连斯基替身被拍到”:是保镖?', 'text2': '乌克兰方面对泽连斯基使用替身事件做出回应,系第三方保镖?', 'similarity': 0.5669652819633484}]
4:情感分析
集成BiLSTM、SKEP、UIE等模型,支持评论维度、观点抽取、情感极性分类等情感分析任务训练数据来源 百度自建数据集
>>> from paddlenlp import Taskflow
>>> similarity = Taskflow("text_similarity")
>>> schema = ['情感倾向[正向,负向]']
>>> senta = Taskflow("sentiment_analysis", model="uie-senta-base", schema=schema)
senta("这家店服务热情,价格也便宜")
[{'情感倾向[正向,负向]': [{'text': '正向', 'probability': 0.9953493324753282}]}]
>>> senta("这家店感觉不太干净")
[{'情感倾向[正向,负向]': [{'text': '负向', 'probability': 0.9996670165660646}]}]
5:生成式问答
使用最大中文开源CPM模型完成问答,包 9.6G
>>> from paddlenlp import Taskflow
>>> qa = Taskflow("question_answering")
# 单条输入
>>> qa("中国的国土面积有多大?")
[{'text': '中国的国土面积有多大?', 'answer': '960万平方公里。'}]
# 多条输入
>>> qa(["中国国土面积有多大?", "中国的首都在哪里?"])
[{'text': '中国国土面积有多大?', 'answer': '960万平方公里。'}, {'text': '中国的首都在哪里?', 'answer': '北京。'}]
6:文本摘要
>>> from paddlenlp import Taskflow
>>> summarizer = Taskflow("text_summarization")
# 单条输入
>>> summarizer('2022年,中国房地产进入转型阵痛期,传统“高杠杆、快周转”的模式难以为继,万科甚至直接喊话,中国房地产进入“黑铁时代”')
# 输出:['万科喊话中国房地产进入“黑铁时代”']
summarizer("26日下午,日本冲绳县市民团体组织大规模集会,反对日本政府去年12月通过的新版《国家安全保障战略》等三份安保政策文件,反对增加防卫费、在冲绳岛屿部署导弹、扩充自卫队,批评美军驻冲绳基地给当地民众造成的各种困扰,呼吁日本政府走和平道路。当天下午,来自日本各地的约1600多名民众聚集在冲绳县民广场,打出“反对安保三文件”“反对军事利用冲绳机场港湾”“反对部署导弹”“不需要美军基地”等标语,反对日本政府企图重走战争道路。")
# 输出:['日本民众集会反对安倍部署导弹']
7:文档智能
以多语言跨模态布局增强文档预训练模型ERNIE-Layout为核心底座
同时依赖飞桨OCR功能
例如识别发票中的信息
>>> from paddlenlp import Taskflow
>>> docprompt = Taskflow("document_intelligence")
>>> pprint(docprompt([{"doc": "invoice.jpg", "prompt": ["发票号码是多少?", "校验码是多少?","开票日期是什么时候?","合计是多少?","开票人是谁?"]}]))
#输出
[{'prompt': '发票号码是多少?',
'result': [{'end': 16, 'prob': 1.0, 'start': 16, 'value': 'No05152193'},
{'end': 23, 'prob': 0.79, 'start': 23, 'value': '05152193'}]},
{'prompt': '校验码是多少?',
'result': [{'end': 253,
'prob': 1.0,
'start': 249,
'value': '10534 7935109182 86662'}]},
{'prompt': '开票日期是什么时候?',
'result': [{'end': 35, 'prob': 1.0, 'start': 30, 'value': '2023年02月19日'}]},
{'prompt': '合计是多少?',
'result': [{'end': 170, 'prob': 0.62, 'start': 168, 'value': '339.62'}]},
{'prompt': '开票人是谁?',
'result': [{'end': 285, 'prob': 1.0, 'start': 283, 'value': '凌钦剑'}]}]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。