分享一个“产业级,开箱即用”的NLP自然语言处理工具

发布时间:2024年01月23日

NLP的全称是Natuarl Language Processing,中文意思是自然语言处理,是人工智能领域的一个重要方向

自然语言处理(NLP)的一个最伟大的方面是跨越多个领域的计算研究,从人工智能到计算语言学的多个计算研究领域都在研究计算机与人类语言之间的相互作用。它主要关注计算机如何准确并快速地处理大量的自然语言语料库。什么是自然语言语料库?它是用现实世界语言表达的语言学习,是从文本和语言与另一种语言的关系中理解一组抽象规则的综合方法。

人类语言是抽象的信息符号,其中蕴含着丰富的语义信息,人类可以很轻松地理解其中的含义。而计算机只能处理数值化的信息,无法直接理解人类语言,所以需要将人类语言进行数值化转换。不仅如此,人类间的沟通交流是有上下文信息的,这对于计算机也是巨大的挑战。

结合以上难点,飞桨团队推出PaddleNLP,号称拥有?易用的文本领域API多场景的应用示例、和?高性能分布式训练?三大特点,我们先来了解一下飞浆团队。

百度的定义:

飞桨是百度旗下开源深度学习平台(PaddlePaddle),提供了诸多开源技术与框架,如常见的OCR光学字符识别(PaddleOCR)、NLP自然语言处理(PaddleNLP)等,让你实现仅需几行调用代码,即可完成一次推理工作。

结合文心大模型的OCR功夫更是了的。管网:飞桨AI Studio星河社区-人工智能学习与实训社区

下面我们说回PaddleNLP

  • 易用的文本领域API

    • 提供丰富的产业级预置任务能力?Taskflow?和全流程的文本领域API:支持丰富中文数据集加载的?Dataset API,可灵活高效地完成数据预处理的?Data API?,预置60+预训练词向量的?Embedding API?,提供100+预训练模型的?Transformer API?等,可大幅提升NLP任务建模的效率。

  • 多场景的应用示例

    • 覆盖从学术到产业级的NLP应用示例,涵盖NLP基础技术、NLP系统应用以及相关拓展应用。全面基于飞桨核心框架2.0全新API体系开发,为开发者提供飞桨文本领域的最佳实践。

  • 高性能分布式训练

    • 基于飞桨核心框架领先的自动混合精度优化策略,结合分布式Fleet API,支持4D混合并行策略,可高效地完成大规模预训练模型训练。

如何使用PaddleNLP?

1. 环境准备

? python环境:3.7.4

? 首次运行需要安装PaddlePaddle(如果已经安装请跳过)

? GPU环境需要注意CUDA版本,官网地址:开始使用_飞桨-源于产业实践的开源深度学习平台

CPU版本:
conda install paddlepaddle==2.4.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/

GPU版本:
python -m pip install paddlepaddle-gpu==2.4.2.post116 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html

?安装PaddleNLP

pip install --upgrade paddlenlp

2.开始推理:

? ?引入依赖:

from pprint import pprint
from paddlenlp import Taskflow

? ?实体抽取:

schema = ['时间', '选手', '赛事名称'] #要抽取的字段信息
ie = Taskflow('information_extraction', schema=schema)
pprint(ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!")) #要抽取的文本信息


#Result:

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

是不是很惊艳,再无样本训练的情况下,仍能达到很好的效果。

关系抽取:

schema = {'歌曲名称': ['歌手', '所属专辑']} 
ie.set_schema(schema) # Reset schema
ie('《告别了》是孙耀威在专辑爱的故事里面的歌曲')

#Result

[{'歌曲名称': [{'text': '告别了',
    'start': 1,
    'end': 4,
    'probability': 0.6296147448952354,
    'relations': {'歌手': [{'text': '孙耀威',
       'start': 6,
       'end': 9,
       'probability': 0.9988380409852198}],
     '所属专辑': [{'text': '爱的故事',
       'start': 12,
       'end': 16,
       'probability': 0.9968462078543183}]}},
   {'text': '爱的故事',
    'start': 12,
    'end': 16,
    'probability': 0.28168534139751955,
    'relations': {'歌手': [{'text': '孙耀威',
       'start': 6,
       'end': 9,
       'probability': 0.9951413914998}]}}]}]

事件抽取:

schema = {'地震触发词': ['地震强度', '时间', '震中位置', '震源深度']} 
ie.set_schema(schema) 
ie('中国地震台网正式测定:5月16日06时08分在云南临沧市凤庆县(北纬24.34度,东经99.98度)发生3.5级地震,震源深度10千米。')

#Result

[{'地震触发词': [{'text': '地震',
    'start': 56,
    'end': 58,
    'probability': 0.9977425555988333,
    'relations': {'地震强度': [{'text': '3.5级',
       'start': 52,
       'end': 56,
       'probability': 0.998080158269417}],
     '时间': [{'text': '5月16日06时08分',
       'start': 11,
       'end': 22,
       'probability': 0.9853299181377793}],
     '震中位置': [{'text': '云南临沧市凤庆县(北纬24.34度,东经99.98度)',
       'start': 23,
       'end': 50,
       'probability': 0.7874013050677604}],
     '震源深度': [{'text': '10千米',
       'start': 63,
       'end': 67,
       'probability': 0.9937973233053299}]}}]}]

句子级情感分类:

schema = '情感倾向[正向,负向]' 

ie.set_schema(schema) # Reset schema
ie('这个产品用起来真的很流畅,我非常喜欢')

#Result
[{'情感倾向[正向,负向]': [{'text': '正向', 'probability': 0.9990024058203417}]}]

评价维度、观点抽取,对象级情感分析:

schema = {'评价维度': ['观点词', '情感倾向[正向,负向]']} 
ie.set_schema(schema) 
pprint(ie("地址不错,服务一般,设施陈旧")) 


#Result

[{'评价维度': [{'end': 2,
            'probability': 0.9888138676472664,
            'relations': {'情感倾向[正向,负向]': [{'probability': 0.998228967796706,
                                           'text': '正向'}],
                          '观点词': [{'end': 4,
                                   'probability': 0.9927846479537372,
                                   'start': 2,
                                   'text': '不错'}]},
            'start': 0,
            'text': '地址'},
           {'end': 12,
            'probability': 0.9588297379365116,
            'relations': {'情感倾向[正向,负向]': [{'probability': 0.9949388606013692,
                                           'text': '负向'}],
                          '观点词': [{'end': 14,
                                   'probability': 0.9286749937276362,
                                   'start': 12,
                                   'text': '陈旧'}]},
            'start': 10,
            'text': '设施'},
           {'end': 7,
            'probability': 0.959285414999755,
            'relations': {'情感倾向[正向,负向]': [{'probability': 0.9952498258302498,
                                           'text': '负向'}],
                          '观点词': [{'end': 9,
                                   'probability': 0.9949358587838901,
                                   'start': 7,
                                   'text': '一般'}]},
            'start': 5,
            'text': '服务'}]}]

跨任务跨领域抽取:

schema = ['寺庙', {'丈夫': '妻子'}]
ie.set_schema(schema)
pprint(ie('李治即位后,让身在感业寺的武则天续起头发,重新纳入后宫。'))

#Result

[{'丈夫': [{'end': 2,
          'probability': 0.989690572797457,
          'relations': {'妻子': [{'end': 16,
                                'probability': 0.9987625986569526,
                                'start': 13,
                                'text': '武则天'}]},
          'start': 0,
          'text': '李治'}],
  '寺庙': [{'end': 12,
          'probability': 0.9888578809890554,
          'start': 9,
          'text': '感业寺'}]}]

中文分词:(支持文档级输入)

seg = Taskflow("word_segmentation")

doc = "苏锦一直记得那个午后,明晃晃的光线穿过教室的窗玻璃洒到自己脸上,有种特别暖和的感觉。那阳光仿佛是能够钻进人的心里,继而延展到身体全部的毛孔中,然后以一种温柔的霸道占据体内各个淋巴细胞。苏锦觉得连自己的每一个气息里都似乎是能流窜出明亮的光。她坐着有些微醉于这份上帝恩赐的福祉当中。是在这样一个午后。她记住了段见城的脸。轮廓俊朗的少年。有着羁傲的眼神和清晰的声线。怎么看这都是少女漫画里必经的情节。教语文的老太太此刻正兀自在讲台上口若悬河的讲解着《孔雀东南飞》,毕竟是已经年过半百的老教师,经历的学生多了,倒也不在乎讲台下那一张张脸上是否挂着的无精打采,昏昏欲睡的表情,按着自己的性子眉飞色舞的描绘着千年前的那段爱情传奇。苏锦一边数着从老太太口里横飞出来的唾沫星子,一边念想着,让理科班这群脑子里已全被物理公式填充了的家伙,去对几千年前焦仲卿和刘兰芝的爱情产生兴趣未免是件太困难的事情了。老太太讲到焦仲卿和刘兰芝双双殉情而死之时咳嗽了一声,提醒底下那群不知已经神游到何方的学生们是时候为文章的主旨做笔记了。苏锦把课文翻到最后,快速扫过大致内容,目光却在那句:府吏闻此事,心知长别离。徘徊庭树下,自挂东南枝上硬生生地停了下来。思绪仿若戛然而止,被某种莫名的感怀而包围,心中有些钝痛,却不知从何而来。“懦弱。”一个略带鄙夷的声音传入苏锦的耳,拦截住了她空白的思绪。苏锦转过头,瞥见后桌的段见城。恍然间有种错觉,这个男生好似是被光线包裹着一般。段见城淡淡说。若他是焦仲卿,定不会让自己和深爱的女子走到这步田地,若是真走到山穷水尽的地步,定是决然赴死。何来徘徊。那清淡口气带着些不屑,却是这般笃定至极。他说,平生最鄙夷懦弱的男子。苏锦静默的注视着这个男生。终究是没有说出话来。苏锦莫名其妙的做了段见城的女友是一年以后的事情。全班在KTV里唱歌,美名曰:升高三前最后的狂欢。包厢里都是拥挤的人,但苏锦却还是能够感受到空调的温度调得异常的低,她躲在冷风吹不到的角落,捧着大杯的雪花啤酒像是喝水一样没有节制,她觉得心里有所郁结并且心思混乱,恍恍惚惚的注视着麦克风被传了一轮又一轮,听着音像里传出或高或低的杂乱音符,而自己却似是置身于别处,与此间的喧嚣起伏无关,只觉得空荡荡。苏锦记得自己与同桌曾谈及过自己这种从暑假开始无法摆脱的混沌状态,同桌是一副了然于胸的模样,义正言辞的对苏锦说,这是高三前期综合症。她说,苏锦你别太看重所谓的高三,高考和大学都只是一个过程而并非最终的意义,我们要以平常心去对待这些。苏锦想,其实自己并非执著什么,而是自幼便对于那些未知的一切充满恐惧。因为无法掌控,所以感到束手无策,身不由己。仿佛有种被命运捏在手里随意摆弄的感觉,特别难受正当苏锦失足于自己庞大的幻觉之时,身边的朋友开始玩起了真心话大冒险之类的游戏。在一边起哄的女生提议游戏从今晚没有唱歌过的人开始,于是因为忙着在沙发上的打牌的段见城那拨人便是首先被开刷的对象,而作为聚众赌博的头子,段见城自然是第一个被逮到。几个暗自对段见城有好感的姑娘早就揣摩好了问题,苏锦被旁边兴奋过头的女生推攘着,神志也渐渐清明起来。不知是谁直白的问出了那句:阿城,你有意中人么?KTV中的嘈杂如同顿时沉淀了一般,纵然空气里似乎还遗留着些噪音过境的痕迹,更多的却是一种屏气凝神的静。段见城沉默的捏着手中那张还没打出去扑克牌,几乎是在所有人的耐心倒塌的前一秒,清晰地说出了苏锦的名字。"

print("输入长度:", len(doc))
print("分词结果:", seg(doc))

#Result

输入长度: 1413
分词结果: ['苏锦', '一直', '记得', '那个', '午后', ',', '明晃晃', '的', '光线', '穿过', '教室', '的', '窗', '玻璃', '洒', '到', '自己', '脸上', ',', '有种', '特别', '暖和', '的', '感觉', '。', '那', '阳光', '仿佛', '是', '能够', '钻进', '人', '的', '心里', ',', '继而', '延展', '到', '身体', '全部', '的', '毛孔', '中', ',', '然后', '以', '一种', '温柔', '的', '霸道', '占据', '体内', '各', '个', '淋巴细胞', '。', '苏锦', '觉得', '连', '自己', '的', '每一个', '气息', '里', '都', '似乎', '是', '能', '流窜', '出', ...........

词性标注:

from paddlenlp import Taskflow

tag = Taskflow("pos_tagging")

print(tag("第十四届全运会在西安举办"))

#Result

[(‘第十四届’, ‘m’), (‘全运会’, ‘nz’), (‘在’, ‘p’), (‘西安’, ‘LOC’), (‘举办’, ‘v’)]

命名实体识别

from paddlenlp import Taskflow

ner = Taskflow("ner")

print(ner(["李伟拿出具有科学性、可操作性的《陕西省高校管理体制改革实施方案》", "诺戴商务咨询(上海)有限公司于2016年08月22日成立"]))

#Result

[[('李伟', '人物类_实体'), ('拿出', '场景事件'), ('具有', '肯定词'), ('科学性', '修饰词_性质'), ('、', 'w'), ('可操作性', '修饰词_性质'), ('的', '助词'), ('《', 'w'), ('陕西省高校管理体制改革实施方案', '作品类_实体'), ('》', 'w')], [('诺戴商务咨询(上海)有限公司', '组织机构类_企事业单位'), ('于', '介词'), ('2016年08月22日', '时间类_具体时间'), ('成立', '场景事件')]]`在这里插入代码片`

依存句法分析

from paddlenlp import Taskflow

# 使用BiLSTM作为编码器,速度最快
ddp = Taskflow("dependency_parsing")

#Result

print(ddp("2月8日谷爱凌夺得北京冬奥会第三金"))

[{‘word’: [‘2月8日’, ‘谷爱凌’, ‘夺得’, ‘北京冬奥会’, ‘第三金’], ‘head’: [3, 3, 0, 5, 3], ‘deprel’: [‘ADV’, ‘SBV’, ‘HED’, ‘ATT’, ‘VOB’]}]

?依存句法分析标注关系集合表

文本纠错

ERNIE-CSC在ERNIE预训练模型的基础上,融合了拼音特征的端到端中文拼写纠错模型,整体框架图如下:

????????????????????????

from paddlenlp import Taskflow

corrector = Taskflow("text_correction")
print(corrector('遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇。'))

#Result

[{'source': '遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇。', 'target': '遇到逆境时,我们必须勇于面对,而且要愈挫愈勇。', 'errors': [{'position': 3, 'correction': {'竟': '境'}}]}]

文本相似度

from paddlenlp import Taskflow

similarity = Taskflow("text_similarity")
print(similarity([["春天适合种什么花?", "春天适合种什么菜?"], ["小蝌蚪找妈妈怎么样", "小蝌蚪找妈妈是谁画的"]]))

#Result

[{'text1': '春天适合种什么花?', 'text2': '春天适合种什么菜?', 'similarity': 0.83395267}, {'text1': '小蝌蚪找妈妈怎么样', 'text2': '小蝌蚪找妈妈是谁画的', 'similarity': 0.81923723}]

交互式闲聊对话

from paddlenlp import Taskflow

dialogue = Taskflow("dialogue")


print(dialogue(["你好"]))

????????????????????????????????????????????????????????????????????

生成式问答

基于开源社区优秀中文预训练模型CPM,参数规模26亿,预训练中文数据达100GB。
调用示例:

智能写诗
基于开源社区优秀中文预训练模型CPM,参数规模26亿,预训练中文数据达100GB。
调用示例:

参考:

开始使用_飞桨-源于产业实践的开源深度学习平台

飞桨AI Studio星河社区-人工智能学习与实训社区

PaddleNLP通用信息抽取技术UIE【一】产业应用实例:信息抽取{实体关系抽取、中文分词、精准实体标。情感分析等}、文本纠错、问答系统、闲聊机器人、定制训练_汀丶人工智能的技术博客_51CTO博客

欢迎使用PaddleNLP — PaddleNLP 文档

文章来源:https://blog.csdn.net/Li_Zhongxin/article/details/135763347
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。