关于算法:PaddleNLP通用信息抽取技术UIE一产业应用实例信息抽取实体关系抽取中文分词精准实体标情感分析等

1次阅读

共计 15687 个字符,预计需要花费 40 分钟才能阅读完成。

相干文章:
1. 快递单中抽取要害信息【一】—- 基于 BiGRU+CR+ 预训练的词向量优化
2. 快递单信息抽取【二】基于 ERNIE1.0 至 ErnieGram + CRF 预训练模型
3. 快递单信息抽取【三】– 五条标注数据进步准确率,仅需五条标注样本,疾速实现快递单信息工作
1)PaddleNLP 通用信息抽取技术 UIE【一】产业利用实例:信息抽取{实体关系抽取、中文分词、精准实体标。情感剖析等}、文本纠错、问答零碎、闲聊机器人、定制训练
2)PaddleNLP–UIE(二)– 小样本疾速晋升性能(含 doccona 标注)
!强烈推荐:数据标注平台 doccano—- 简介、装置、应用、踩坑记录
我的项目连贯:https://aistudio.baidu.com/aistudio/projectdetail/4180615?contributionType=1

0. PaddleNLP 一键预测能力 Taskflow API 之三大个性

  • 性能全面

    • 全场景反对:笼罩 NLUNLG畛域十一大经典工作。
    • 文档级输出:反对 文档级输出 ,解决预训练模型对输出文本的长度限度问题,大大节俭用户输出长文本时的 代码开发量
    • 定制化训练:反对用户应用本人的数据集进行定制化训练,通过自定义门路 一键应用定制化训练好的模型
  • 简捷易用

    • 开箱即用,学习成本低,几行代码便可实现调用。
  • 产业级成果

    • 聚合泛滥百度自然语言解决畛域自研算法以及社区优良开源模型,模型成果当先。

1. 环境筹备

!pip install --upgrade paddlenlp
!pip install pypinyin
!pip install LAC

2. 根底能力

这一章节将会学到的 Taskflow 技能:

  • 利用 PaddleNLP Taskflow 提取句子中的语言学特色:中文分词、词性辨认,依存关系,命名实体辨认、关系抽取、事件抽取等。

2.0 信息抽取

PaddleNLP 5.16 新发凋谢域信息抽取能力,只有你想不到的 schema,没有 UIE 抽取不到的后果哦!

详情可参考:信息抽取一键预测能力

如需定制化训练,全套代码在此:传送门

实体抽取


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.9857378532473966,
          'start': 0,
          'text': '2 月 8 日上午'}],
  '赛事名称': [{'end': 23,
            'probability': 0.8503082243989795,
            'start': 6,
            'text': '北京冬奥会自由式滑雪男子大跳台决赛'}],
  '选手': [{'end': 31,
          'probability': 0.8981535684051067,
          'start': 28,
          'text': '谷爱凌'}]}]

关系抽取

# 
schema = {'歌曲名称': ['歌手', '所属专辑']} # Define the schema for relation extraction
ie.set_schema(schema) # Reset schema
ie('《辞别了》是孙耀威在专辑爱的故事外面的歌曲')
[{'歌曲名称': [{'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 = {'地震触发词': ['地震强度', '工夫', '震中地位', '震源深度']} # Define the schema for event extraction
ie.set_schema(schema) # Reset schema
ie('中国地震台网正式测定:5 月 16 日 06 时 08 分在云南临沧市凤庆县 (北纬 24.34 度,东经 99.98 度) 产生 3.5 级地震,震源深度 10 千米。')
[{'地震触发词': [{'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 = '情感偏向[正向,负向]' # Define the schema for sentence-level sentiment classification
ie.set_schema(schema) # Reset schema
ie('这个产品用起来真的很晦涩,我十分喜爱')
[{'情感偏向[正向,负向]': [{'text': '正向', 'probability': 0.9990024058203417}]}]

评估维度、观点抽取,对象级情感剖析

schema = {'评估维度': ['观点词', '情感偏向[正向,负向]']} # Define the schema for opinion extraction
ie.set_schema(schema) # Reset schema
pprint(ie("地址不错,服务个别,设施古老")) # Better print results using pprint
[{'评估维度': [{'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('李治即位后,让身在感业寺的武则天续起头发,从新纳入后宫。'))
[{'丈夫': [{'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': '感业寺'}]}]

2.1 中文分词

分词作为许多 NLP 工作的第一道工序,如何在不同场景中『用好』、『用对』尤为重要。

Taskflow 提供了多种中文分词模式供大家抉择,咱们列举了几种不同的场景,来示例不同应用形式。

2.1.1 文档级输出

  • 反对超长文本输出,无需放心『文本截断』问题
# 首次调用会有模型下载的额定工夫开销
seg = Taskflow("word_segmentation")

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

print("1. 输出长度:", len(doc))
print("2. 分词后果:", seg(doc))
1. 输出长度:1413
2. 分词后果:['苏锦', '始终', '记得', '那个', '午后', ',', '明晃晃', '的', '光线', '穿过', '教室', '的', '窗', '玻璃', '洒', '到', '本人', '脸上', ',', '有种', '特地', '温暖', '的', '感觉', '。', '那', '阳光', '好像', '是', '可能', '钻进', '人', '的', '心里', ',', '继而', '延展', '到', '身材', '全副', '的', '毛孔', '中', ',', '而后', '以', '一种', '温顺', '的', '王道', '占据', '体内', '各', '个', '淋巴细胞', '。', '苏锦', '感觉', '连', '本人', '的', '每一个', '气味', '里', '都', '仿佛', '是', '能', '流窜', '出', ...........

2.1.2 疾速模式分词

  • 示例如何通过疾速模式分词对数据集进行词频统计、构建词表
import time
from collections import defaultdict

from paddlenlp.datasets import load_dataset
from paddlenlp import Taskflow

seg_fast = Taskflow("word_segmentation", mode="fast")

# 加载 ChnSentiCorp 数据集
train_ds, dev_ds = load_dataset("chnsenticorp", splits=["train", "dev"])
texts = []
for data in train_ds:
    texts.append(data["text"])
for data in dev_ds:
    texts.append(data["text"])
inputs_length = len(texts)

print("1. 句子数量:", inputs_length)

tic_seg = time.time()

# 疾速分词
results = seg_fast(texts)

time_diff = time.time() - tic_seg

print("2. 均匀速率:%.2f 句 /s" % (inputs_length/time_diff))

# 词频统计
word_counts = defaultdict(int)
for result in results:
    for word in result:
        word_counts[word] += 1

# 打印频次最高的前 20 个单词及其对应词频
print("3. Top 20 Words:", sorted(word_counts.items(), key=lambda d: d[1], reverse=True)[:20])
100%|██████████| 1909/1909 [00:00<00:00, 7614.49it/s]
1. 句子数量:10800
Building prefix dict from the default dictionary ...
Dumping model to file cache /tmp/jieba.cache
Loading model cost 0.995 seconds.
Prefix dict has been built successfully.
2. 均匀速率:1429.74 句 /s
3. Top 20 Words:[(',', 59389), ('的', 41468), ('。', 23207), ('了', 15048), ('', 11426), (' 是 ', 10479), (',', 9204), (' 我 ', 9167), (' 很 ', 6881), ('!', 6169), (' 也 ', 5793), (' 在 ', 5180), (' 酒店 ', 4829), (' 不 ', 4784), (' 都 ', 4604), (' 有 ', 4589), (' 就 ', 4169), ('.', 4099), (' 没有 ', 3594), (' 还 ', 3455)]

2.1.3 准确模式分词

  • 应用 Taskflow 准确模式,实体粒度分词精度最高,语义片段残缺,在常识图谱构建等利用中劣势显著。
  • 实体词容易被切开,例如『陕西省高校治理体制改革实施方案』、『诺戴商务征询(上海)有限公司』心愿可能被残缺辨认。
from paddlenlp import Taskflow

# 准确模式模型体积较大,可联合机器状况适当调整 batch_size,采纳批量样本输出的形式。seg_accurate = Taskflow("word_segmentation", mode="accurate", batch_size=32)

# 批量样本输出,输出为多个句子组成的 list,均匀速率更快
texts = ["李伟拿出具备科学性、可操作性的《陕西省高校治理体制改革实施方案》", "诺戴商务征询(上海)有限公司于 2016 年 08 月 22 日成立"]
print(seg_accurate(texts))
[['李伟', '拿出', '具备', '科学性', '、', '可操作性', '的', '《', '陕西省高校治理体制改革实施方案', '》'], ['诺戴商务征询(上海)有限公司', '于', '2016 年 08 月 22 日', '成立']]

2.1.4 用户词典

  • 疾速配置用户词典来对分词后果进行干涉
from paddlenlp import Taskflow

seg = Taskflow("word_segmentation")

print(seg("平原上的火焰发表延期上映"))`

[‘ 平原 ’, ‘ 上 ’, ‘ 的 ’, ‘ 火焰 ’, ‘ 发表 ’, ‘ 延期 ’, ‘ 上映 ’]

  • 例如咱们想把『平原上的火焰』作为一个残缺词来辨认,而『上映』心愿可能被切开,则能够依照如下格局配置自定义词典文件user_dict.txt
平原上的火焰
上 映
  • 配置后通过 user_dict 一键装载 在这里插入代码片
seg = Taskflow("word_segmentation", user_dict="/home/aistudio/user_dict.txt")

print(seg("平原上的火焰发表延期上映"))

[‘ 平原上的火焰 ’, ‘ 发表 ’, ‘ 延期 ’, ‘ 上 ’, ‘ 映 ’]

2.2 词性标注

  • 基于百度词法剖析工具 LAC,训练语料蕴含近 2200 万句子,笼罩多种场景
from paddlenlp import Taskflow

tag = Taskflow("pos_tagging")

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

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

2.3 命名实体辨认

2.3.1 准确模式

  • 基于百度解语的准确模式:最全中文实体标签的命名实体辨认工具,不仅实用于通用畛域,也实用于生物医疗、教育等垂类畛域。蕴含 66 种词性及专名类别标签(同类产品的标签数是 15 个左右)

from paddlenlp import Taskflow

ner = Taskflow("ner")

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

[[('李伟', '人物类_实体'), ('拿出', '场景事件'), ('具备', '必定词'), ('科学性', '修饰词_性质'), ('、', 'w'), ('可操作性', '修饰词_性质'), ('的', '助词'), ('《', 'w'), ('陕西省高校治理体制改革实施方案', '作品类_实体'), ('》', 'w')], [('诺戴商务征询(上海)有限公司', '组织机构类_企事业单位'), ('于', '介词'), ('2016 年 08 月 22 日', '工夫类_具体工夫'), ('成立', '场景事件')]]` 在这里插入代码片 `
  • 准确模式标签汇合
<table>

<tr><td> 人物类_实体 <td> 物体类 <td> 生物类_动物 <td> 医学术语类
<tr><td> 人物类_概念 <td> 物体类_兵器 <td> 品牌名 <td> 术语类_生物体
<tr><td> 作品类_实体 <td> 物体类_化学物质 <td> 场合类 <td> 疾病伤害类
<tr><td> 作品类_概念 <td> 其余角色类 <td> 场合类_交通场合 <td> 疾病伤害类_动物病虫害
<tr><td> 组织机构类 <td> 文化类 <td> 地位方位 <td> 宇宙类
<tr><td> 组织机构类_企事业单位 <td> 文化类_语言文字 <td> 世界地区类 <td> 事件类
<tr><td> 组织机构类_医疗卫生机构 <td> 文化类_奖项赛事流动 <td> 饮食类 <td> 工夫类
<tr><td> 组织机构类_国家机关 <td> 文化类_制度政策协定 <td> 饮食类_菜品 <td> 工夫类_非凡日
<tr><td> 组织机构类_体育组织机构 <td> 文化类_姓氏与人名 <td> 饮食类_饮品 <td> 术语类
<tr><td> 组织机构类_教育组织机构 <td> 生物类 <td> 药物类 <td> 术语类_符号指标类
<tr><td> 组织机构类_军事组织机构 <td> 生物类_动物 <td> 药物类_中药 <td> 信息材料
<tr><td> 链接地址 <td> 必定词 <td> 个性特征 <td> 否定词
<tr><td> 感官特色 <td> 数量词 <td> 场景事件 <td> 叹词
<tr><td> 介词 <td> 拟声词 <td> 介词_方位介词 <td> 修饰词
<tr><td> 助词 <td> 外语单词 <td> 代词 <td> 英语单词
<tr><td> 连词 <td> 汉语拼音 <td> 副词 <td> 词汇用语
<tr><td> 疑问词 <td>w(标点)<td><td>
  
</table>

精准模式对局部类目(如组织机构等),做了 更细的划分辨认(如,医疗卫生机构、体育组织机构)。

2.3.2 疾速模式

  • 基于百度词法剖析工具 LAC,训练语料蕴含近 2200 万句子,笼罩多种场景
from paddlenlp import Taskflow

ner_fast = Taskflow("ner", mode="fast")

print(ner_fast("三亚是一个漂亮的城市"))

[(‘ 三亚 ’, ‘LOC’), (‘ 是 ’, ‘v’), (‘ 一个 ’, ‘m’), (‘ 漂亮 ’, ‘a’), (‘ 的 ’, ‘u’), (‘ 城市 ’, ‘n’)]

  • 疾速模式标签汇合
标签 含意 标签 含意 标签 含意 标签 含意
n 一般名词 f 方位名词 s 处所名词 t 工夫
nr 人名 ns 地名 nt 机构名 nw 作品名
nz 其余专名 v 一般动词 vd 动副词 vn 名动词
a 形容词 ad 副形词 an 名形词 d 副词
m 数量词 q 量词 r 代词 p 介词
c 连词 u 助词 xc 其余实词 w 标点符号
PER 人名 LOC 地名 ORG 机构名 TIME 工夫

2.4 依存句法分析

2.4.1 多种应用形式

from paddlenlp import Taskflow

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

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

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

# 编码器局部将 BiLSTM 替换为 ERNIE,模型准确率更高!ddp = Taskflow("dependency_parsing", model="ddparser-ernie-1.0")

print(ddp("2 月 8 日谷爱凌夺得北京冬奥会第三金"))
# 输入概率值和词性标签
ddp = Taskflow("dependency_parsing", prob=True, use_pos=True)

print(ddp("2 月 8 日谷爱凌夺得北京冬奥会第三金"))
  • 依存句法分析标注关系汇合
Label 关系类型 阐明 示例
SBV 主谓关系 主语与谓词间的关系 他送了一本书(他 <– 送)
VOB 动宾关系 宾语与谓词间的关系 他送了一本书(送 –> 书)
POB 介宾关系 介词与宾语间的关系 我把书卖了(把 –> 书)
ADV 状中关系 状语与中心词间的关系 我昨天买书了(昨天 <– 买)
CMP 动补关系 补语与中心词间的关系 我都吃完了(吃 –> 完)
ATT 定中关系 定语与中心词间的关系 他送了一本书(一本 <– 书)
F 方位关系 方位词与中心词的关系 在公园里游玩(公园 –> 里)
COO 并列关系 同类型词语间关系 叔叔阿姨(叔叔 –> 阿姨)
DBL 兼语构造 主谓短语做宾语的构造 他请我吃饭(请 –> 我,请 –> 吃饭)
DOB 双宾语构造 谓语后呈现两个宾语 他送我一本书(送 –> 我,送 –> 书)
VV 连谓构造 同主语的多个谓词间关系 他外出吃饭(外出 –> 吃饭)
IC 子句构造 两个构造独立或关联的单句 你好,书店怎么走?(你好 <– 走)
MT 实词成分 实词与中心词间的关系 他送了一本书(送 –> 了)
HED 外围关系 指整个句子的外围

2.4.2 利用示例

  • 通过句法分析抽取句子的 主谓宾构造信息
from paddlenlp import Taskflow

ddp = Taskflow("dependency_parsing")

print(ddp("9 月 9 日上午纳达尔在亚瑟·阿什球场击败俄罗斯球员梅德韦杰夫"))
  • 下图句子中蕴含了多种结构化信息:

<img src=”https://user-images.githubusercontent.com/40840292/160275877-ea2827d0-831f-4d89-b676-57882922d294.png” width=”600″ height=”700″ align=”middle” />

from utils import SVOInfo

texts = ["9 月 9 日上午纳达尔在亚瑟·阿什球场击败俄罗斯球员梅德韦杰夫", "2 月 8 日谷爱凌夺得北京冬奥会第三金"]
results = ddp(texts)

# 抽取句子中的 SVO(主谓宾)结构化信息
svo_info = []
for result in results:
    svo_info.append(SVOInfo(result).parse())

for i in range(len(texts)):
    print("原文本:", texts[i])
    print("蕴含的主谓宾构造:", svo_info[i])

3.『产业』利用

这一章节将会学到的 Taskflow 技能:

  • 应用 Taskflow 来实现情感剖析、文本纠错、文本类似度

    3.1 情感剖析

    3.1.1 BiLSTM

  • 默认应用的是BiLSTM
from paddlenlp import Taskflow

senta = Taskflow("sentiment_analysis")

print(senta("这个产品用起来真的很晦涩,我十分喜爱"))
[{'text': '这个产品用起来真的很晦涩,我十分喜爱', 'label': 'positive', 'score': 0.993867814540863}]

3.1.2 SKEP

  • 集成百度自研的情感常识加强预训练模型 SKEP,利用 情感常识构建预训练指标 ,在 海量中文数据 上进行预训练,为各类情感剖析工作提供对立且弱小的情感语义示意能力。

<img src=”https://bj.bcebos.com/paddlenlp/models/transformers/skep/skep.png” width=”750″ height=”600″ align=”middle” />

  • 在多个公开数据集上 模型成果 SOTA
<center> 工作 <center> 数据汇合 <center> 语言 <center> 指标 <center>SKEP
<center> 句子级情感
<center> 分类
<center>SST-2 <center> 英文 <center>ACC <center>97.60
<center>ChnSentiCorp <center> 中文 <center>ACC <center>96.08
<center> 评估对象级的
<center> 情感分类
<center>SE-ABSA16_PHNS <center> 中文 <center>ACC <center>65.22
<center> 观点
<center> 抽取
<center>COTE_DP <center> 中文 <center>F1 <center>86.30
from paddlenlp import Taskflow

senta = Taskflow("sentiment_analysis", model="skep_ernie_1.0_large_ch")

print(senta("作为老的四星酒店,房间仍然很整洁,相当不错。机场接机服务很好,能够在车上办理入住手续,节省时间。"))
[{'text': '作为老的四星酒店,房间仍然很整洁,相当不错。机场接机服务很好,能够在车上办理入住手续,节省时间。', 'label': 'positive', 'score': 0.9843240976333618}]

3.2 文本纠错

  • ERNIE-CSC 在 ERNIE 预训练模型的根底上,交融了拼音特色的端到端中文拼写纠错模型,整体框架图如下:

<img src=”https://user-images.githubusercontent.com/10826371/131974040-fc84ec04-566f-4310-9839-862bfb27172e.png” width=”400″ height=”550″ align=”middle” />

  • 在中文纠错经典数据集 SIGHAN 上成果当先:
Metric SIGHAN 13 SIGHAN 14 SIGHAN 15
Detection F1 0.8348 0.6534 0.7464
Correction F1 0.8217 0.6302 0.7296
from paddlenlp import Taskflow

corrector = Taskflow("text_correction")
print(corrector('遇到逆竟时,咱们必须敢于面对,而且要愈挫愈勇。'))
[{'source': '遇到逆竟时,咱们必须敢于面对,而且要愈挫愈勇。', 'target': '遇到顺境时,咱们必须敢于面对,而且要愈挫愈勇。', 'errors': [{'position': 3, 'correction': {'竟': '境'}}]}]

3.3 文本类似度

  • 基于百度晓得 2200 万对类似句组训练 SimBERT 达到前沿文本类似成果
from paddlenlp import Taskflow

similarity = Taskflow("text_similarity")
print(similarity([["春天适宜种什么花?", "春天适宜种什么菜?"], ["小蝌蚪找妈妈怎么样", "小蝌蚪找妈妈是谁画的"]]))
[{'text1': '春天适宜种什么花?', 'text2': '春天适宜种什么菜?', 'similarity': 0.83395267}, {'text1': '小蝌蚪找妈妈怎么样', 'text2': '小蝌蚪找妈妈是谁画的', 'similarity': 0.81923723}]

3.4『解语』- 常识标注

  • 基于百度解语,首个可能笼罩所有中文词汇的词类常识标注工具,旨在为中文文本解析提供全面、丰盛的常识标注后果
from paddlenlp import Taskflow
wordtag = Taskflow("knowledge_mining")
# 后果会与 TermTree 进行绑定,输入 termid
print(wordtag("第 24 届夏季奥林匹克运动会在北京举办"))
[{'text': '第 24 届夏季奥林匹克运动会在北京举办', 'items': [{'item': '第 24 届夏季奥林匹克运动会', 'offset': 0, 'wordtag_label': '事件类', 'length': 13}, {'item': '在', 'offset': 13, 
'wordtag_label': '介词', 'length': 1, 'termid': '介词_cb_在'}, {'item': '北京', 'offset': 14, 
'wordtag_label': '世界地区类', 'length': 2, 'termid': '中国地区_cb_北京市'}, {'item': '举办', 'offset': 16, 'wordtag_label': '场景事件', 'length': 2, 'termid': '场景事件_cb_举办'}]}]
from termtree import TermTree

# 加载百科知识树
termtree = TermTree.from_dir("termtree_type.csv", "TermTree.V1.0")

# 通过 termid 获取别名
print(termtree._nodes["奖项赛事流动_eb_夏季奥林匹克运动会"]._data['alias'])

# 通过 termid 获取百度百科链接
print(termtree._nodes['奖项赛事流动_eb_夏季奥林匹克运动会']._data['links'][0]['bdbkUrl'])

[‘ 冬奥会 ’, ‘ 冬奥 ’, ‘ 夏季奥运会 ’]

  • 更多 TermTree 应用办法参考解语:TermTree(百科知识树)

4.『趣味』利用

这一章节将会学到的 Taskflow 技能:

  • 感触海量数据训练进去的预训练模型的超强能力
  • 利用 Taskflow 打造一个『伶牙俐齿、善于聊天』的机器人
  • 利用 Taskflow 构建一个问答 / 写诗零碎

4.1 交互式闲聊对话

  • 基于 PLATO-MINI,模型在 十亿级别的中文对话数据 上进行了预训练,闲聊场景对话 效果显著。
from paddlenlp import Taskflow

dialogue = Taskflow("dialogue")


print(dialogue(["你好"]))
  • 交互模式

(举荐应用终端 terminal 进入 python 解释器进行体验):

<img src=”https://user-images.githubusercontent.com/40840292/160269082-35017f54-a13b-46a5-aa22-d022e1f5c9b6.png” width=”350″ height=”300″ align=”middle” />

4.2 生成式问答

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

<img src=”https://user-images.githubusercontent.com/40840292/160269161-91605a4e-5069-40a4-8ccf-996066c1b760.png” width=”750″ height=”280″ align=”middle” />

  • NOTE:因为我的项目空间无限,这里只列举了调用办法,为了有更好的应用体验,大家能够另外创立一个我的项目来体验这部分性能~

    4.3 智能写诗

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

<img src=”https://user-images.githubusercontent.com/40840292/160269203-202ea28b-5b91-437a-9568-983265618f62.png” width=”650″ height=”250″ align=”middle” />

  • NOTE:因为我的项目空间无限,这里只列举了调用办法,为了有更好的应用体验,大家能够另外创立一个我的项目来体验这部分性能~

5. 定制化训练

这一章节将会学到的 Taskflow 技能:

  • 利用本人的数据训练 / 微调模型,通过 Taskflow 一键装载并应用

    5.1 数据筹备和训练

  • 参考 PaddleNLP SKEP 情感剖析训练示例,实现数据筹备和模型训练。
# 训练步骤省略,提供了训练好的模型权重文件
# 间接下载并保留到 /home/aistudio/custom_model 门路
!wget https://bj.bcebos.com/paddlenlp/taskflow/demo/model_state.pdparams -P /home/aistudio/custom_model
!wget https://bj.bcebos.com/paddlenlp/taskflow/demo/model_config.json -P /home/aistudio/custom_model

5.2 应用定制化模型

  • 通过 task_path 指定自定义模型门路一键加载即可。
from paddlenlp import Taskflow

my_senta = Taskflow("sentiment_analysis", model="skep_ernie_1.0_large_ch", task_path="/home/aistudio/custom_model")

print(my_senta("不错的酒店, 服务还能够, 下次还会入住的~"))

[{‘text’: ‘ 不错的酒店, 服务还能够, 下次还会入住的~’, ‘label’: ‘positive’, ‘score’: 0.9968485236167908}]

我的项目连贯:https://aistudio.baidu.com/aistudio/projectdetail/4180615?contributionType=1

正文完
 0