前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PaddleNLP通用信息抽取技术产业应用实例

PaddleNLP通用信息抽取技术产业应用实例

作者头像
zenRRan
发布2022-09-20 17:19:40
9340
发布2022-09-20 17:19:40
举报

每天给你送来NLP技术干货!


写在前面

我们在《大一统信息抽取技术,PaddleNLP绝了》中介绍了 PaddleNLP安装及安装过程中的问题解决,也小试了一把 PaddleNLP,当时就惊叹了 PaddleNLP 的能力。今天我们就一起来通过这篇更详尽的文章继续了解强大的 PaddleNLP

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

  • 功能全面
    • 全场景支持:覆盖NLUNLG领域十一大经典任务。
    • 文档级输入:支持文档级输入,解决预训练模型对输入文本的长度限制问题,大大节省用户输入长文本时的代码开发量
    • 定制化训练:支持用户使用自己的数据集进行定制化训练,通过自定义路径一键使用定制化训练好的模型
  • 简捷易用
    • 开箱即用,学习成本低,几行代码便可完成调用。
  • 产业级效果
    • 聚合众多百度自然语言处理领域自研算法以及社区优秀开源模型,模型效果领先。

1. 环境准备

代码语言:javascript
复制
!pip install --upgrade paddlenlp
!pip install pypinyin
!pip install LAC

2. 基础能力

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

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

2.0 信息抽取

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

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

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

2.0.1 实体抽取

代码语言:javascript
复制
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
代码语言:javascript
复制
[{'时间': [{'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': '谷爱凌'}]}]

2.0.2 关系抽取

代码语言:javascript
复制
# 
schema = {'歌曲名称': ['歌手', '所属专辑']} # Define the schema for relation extraction
ie.set_schema(schema) # Reset schema
ie('《告别了》是孙耀威在专辑爱的故事里面的歌曲')
代码语言:javascript
复制
[{'歌曲名称': [{'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}]}}]}]

2.0.3 事件抽取

代码语言:javascript
复制
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千米。')
代码语言:javascript
复制
[{'地震触发词': [{'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}]}}]}]

2.0.4 句子级情感分类

代码语言:javascript
复制
schema = '情感倾向[正向,负向]' # Define the schema for sentence-level sentiment classification
ie.set_schema(schema) # Reset schema
ie('这个产品用起来真的很流畅,我非常喜欢')
代码语言:javascript
复制
[{'情感倾向[正向,负向]': [{'text': '正向', 'probability': 0.9990024058203417}]}]

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

代码语言:javascript
复制
schema = {'评价维度': ['观点词', '情感倾向[正向,负向]']} # Define the schema for opinion extraction
ie.set_schema(schema) # Reset schema
pprint(ie("地址不错,服务一般,设施陈旧")) # Better print results using pprint
代码语言:javascript
复制
[{'评价维度': [{'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': '服务'}]}]

2.0.6 跨任务跨领域抽取

代码语言:javascript
复制
schema = ['寺庙', {'丈夫': '妻子'}]
ie.set_schema(schema)
pprint(ie('李治即位后,让身在感业寺的武则天续起头发,重新纳入后宫。'))
代码语言:javascript
复制
[{'丈夫': [{'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 文档级输入

  • 支持超长文本输入,无需担心『文本截断』问题
代码语言:javascript
复制
# 首次调用会有模型下载的额外时间开销
seg = Taskflow("word_segmentation")

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

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

2.1.2 快速模式分词

  • 示例如何通过快速模式分词对数据集进行词频统计、构建词表
代码语言:javascript
复制
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])
代码语言:javascript
复制
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精确模式,实体粒度分词精度最高,语义片段完整,在知识图谱构建等应用中优势明显。
    • 实体词容易被切开,例如『陕西省高校管理体制改革实施方案』、『诺戴商务咨询(上海)有限公司』希望能够被完整识别。
代码语言:javascript
复制
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))
代码语言:javascript
复制
[['李伟', '拿出', '具有', '科学性', '、', '可操作性', '的', '《', '陕西省高校管理体制改革实施方案', '》'], ['诺戴商务咨询(上海)有限公司', '于', '2016年08月22日', '成立']]

2.1.4 用户词典

  • 快速配置用户词典来对分词结果进行干预
代码语言:javascript
复制
from paddlenlp import Taskflow

seg = Taskflow("word_segmentation")

print(seg("平原上的火焰宣布延期上映"))`

[‘平原’, ‘上’, ‘的’, ‘火焰’, ‘宣布’, ‘延期’, ‘上映’]

  • 例如我们想把『平原上的火焰』作为一个完整词来识别,而『上映』希望能够被切开,则可以按照如下格式配置自定义词典文件user_dict.txt
代码语言:javascript
复制
平原上的火焰
上 映
  • 配置后通过user_dict一键装载在这里插入代码片
代码语言:javascript
复制
seg = Taskflow("word_segmentation", user_dict="/home/aistudio/user_dict.txt")

print(seg("平原上的火焰宣布延期上映"))

[‘平原上的火焰’, ‘宣布’, ‘延期’, ‘上’, ‘映’]

2.2 词性标注

  • 基于百度词法分析工具LAC,训练语料包含近2200万句子,覆盖多种场景
代码语言:javascript
复制
from paddlenlp import Taskflow

tag = Taskflow("pos_tagging")

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

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

2.3 命名实体识别

2.3.1 精确模式

  • 基于百度解语的精确模式:最全中文实体标签的命名实体识别工具,不仅适用于通用领域,也适用于生物医疗、教育等垂类领域。包含66种词性及专名类别标签(同类产品的标签数是15个左右)
代码语言:javascript
复制
from paddlenlp import Taskflow

ner = Taskflow("ner")

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

[[('李伟', '人物类_实体'), ('拿出', '场景事件'), ('具有', '肯定词'), ('科学性', '修饰词_性质'), ('、', 'w'), ('可操作性', '修饰词_性质'), ('的', '助词'), ('《', 'w'), ('陕西省高校管理体制改革实施方案', '作品类_实体'), ('》', 'w')], [('诺戴商务咨询(上海)有限公司', '组织机构类_企事业单位'), ('于', '介词'), ('2016年08月22日', '时间类_具体时间'), ('成立', '场景事件')]]`在这里插入代码片`
  • 精确模式标签集合
代码语言:javascript
复制
<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万句子,覆盖多种场景
代码语言:javascript
复制
from paddlenlp import Taskflow

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

print(ner_fast("三亚是一个美丽的城市"))

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

  • 快速模式标签集合

快速模式标签集合

2.4 依存句法分析

2.4.1 多种使用方式

代码语言:javascript
复制
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’]}]

代码语言:javascript
复制
# 编码器部分将BiLSTM替换为ERNIE,模型准确率更高!
ddp = Taskflow("dependency_parsing", model="ddparser-ernie-1.0")

print(ddp("2月8日谷爱凌夺得北京冬奥会第三金"))
代码语言:javascript
复制
# 输出概率值和词性标签
ddp = Taskflow("dependency_parsing", prob=True, use_pos=True)

print(ddp("2月8日谷爱凌夺得北京冬奥会第三金"))
  • 依存句法分析标注关系集合

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

2.4.2 应用示例

  • 通过句法分析抽取句子的主谓宾结构信息
代码语言:javascript
复制
from paddlenlp import Taskflow

ddp = Taskflow("dependency_parsing")

print(ddp("9月9日上午纳达尔在亚瑟·阿什球场击败俄罗斯球员梅德韦杰夫"))
  • 下图句子中包含了多种结构化信息:
代码语言:javascript
复制
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
代码语言:javascript
复制
from paddlenlp import Taskflow

senta = Taskflow("sentiment_analysis")

print(senta("这个产品用起来真的很流畅,我非常喜欢"))
[{'text': '这个产品用起来真的很流畅,我非常喜欢', 'label': 'positive', 'score': 0.993867814540863}]

3.1.2 SKEP

  • 集成百度自研的情感知识增强预训练模型SKEP,利用情感知识构建预训练目标,在海量中文数据上进行预训练,为各类情感分析任务提供统一且强大的情感语义表示能力。
  • 在多个公开数据集上模型效果SOTA
代码语言:javascript
复制
from paddlenlp import Taskflow

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

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

3.2 文本纠错

  • ERNIE-CSC在ERNIE预训练模型的基础上,融合了拼音特征的端到端中文拼写纠错模型,整体框架图如下:
  • 在中文纠错经典数据集SIGHAN上效果领先:
代码语言:javascript
复制
from paddlenlp import Taskflow

corrector = Taskflow("text_correction")
print(corrector('遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇。'))
代码语言:javascript
复制
[{'source': '遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇。', 'target': '遇到逆境时,我们必须勇于面对,而且要愈挫愈勇。', 'errors': [{'position': 3, 'correction': {'竟': '境'}}]}]

3.3 文本相似度

  • 基于百度知道2200万对相似句组训练SimBERT达到前沿文本相似效果
代码语言:javascript
复制
from paddlenlp import Taskflow

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

3.4 『解语』-知识标注

  • 基于百度解语,首个能够覆盖所有中文词汇的词类知识标注工具,旨在为中文文本解析提供全面、丰富的知识标注结果
代码语言:javascript
复制
from paddlenlp import Taskflow
wordtag = Taskflow("knowledge_mining")
# 结果会与TermTree进行绑定,输出termid
print(wordtag("第24届冬季奥林匹克运动会在北京举办"))
代码语言:javascript
复制
[{'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_举办'}]}]
代码语言:javascript
复制
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(百科知识树)[3]

4. 『趣味』应用

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

  • 感受海量数据训练出来的预训练模型的超强能力
  • 利用Taskflow打造一个『能说会道、擅长聊天』的机器人
  • 利用Taskflow构建一个问答/写诗系统

4.1 交互式闲聊对话

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

dialogue = Taskflow("dialogue")


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

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

4.2 生成式问答

  • 基于开源社区优秀中文预训练模型CPM,参数规模26亿预训练中文数据达100GB
  • 调用示例:
  • NOTE:由于项目空间有限,这里只列举了调用方法,为了有更好的使用体验,大家可以另外创建一个项目来体验这部分功能~

4.3 智能写诗

  • 基于开源社区优秀中文预训练模型CPM,参数规模26亿预训练中文数据达100GB
  • 调用示例:
  • NOTE:由于项目空间有限,这里只列举了调用方法,为了有更好的使用体验,大家可以另外创建一个项目来体验这部分功能~

5.定制化训练

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

  • 利用自己的数据训练/微调模型,通过Taskflow一键装载并使用

5.1 数据准备和训练

  • 参考PaddleNLP SKEP情感分析训练示例[4],完成数据准备和模型训练。
代码语言:javascript
复制
# 训练步骤省略,提供了训练好的模型权重文件
# 直接下载并保存到/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指定自定义模型路径一键加载即可。
代码语言:javascript
复制
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

参考资料

[1]

信息抽取一键预测能力: https://github.com/PaddlePaddle/PaddleNLP/blob/develop/docs/model_zoo/taskflow.md#%E4%BF%A1%E6%81%AF%E6%8A%BD%E5%8F%96

[2]

传送门: https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie

[3]

解语:TermTree(百科知识树): https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_to_knowledge/termtree

[4]

SKEP情感分析训练示例: https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/sentiment_analysis/skep

文章来源:https://blog.csdn.net/sinat_39620217/article/details/125167848?spm=1001.2014.3001.5501 作者:汀 排版:AI算法小喵


📝论文解读投稿,让你的文章被更多不同背景、不同方向的人看到,不被石沉大海,或许还能增加不少引用的呦~ 投稿加下面微信备注“投稿”即可。

最近文章

为什么回归问题不能用Dropout?

Bert/Transformer 被忽视的细节

中文小样本NER模型方法总结和实战

一文详解Transformers的性能优化的8种方法

DiffCSE: 将Equivariant Contrastive Learning应用于句子特征学习

苏州大学NLP团队文本生成&预训练方向招收研究生/博士生(含直博生)

代码语言:javascript
复制

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深度学习自然语言处理 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 0. PaddleNLP 一键预测能力 Taskflow API之三大特性
  • 1. 环境准备
  • 2. 基础能力
    • 2.0 信息抽取
      • 2.0.1 实体抽取
      • 2.0.2 关系抽取
      • 2.0.3 事件抽取
      • 2.0.4 句子级情感分类
      • 2.0.5 评价维度、观点抽取,对象级情感分析
      • 2.0.6 跨任务跨领域抽取
    • 2.1 中文分词
      • 2.1.1 文档级输入
      • 2.1.2 快速模式分词
      • 2.1.3 精确模式分词
      • 2.1.4 用户词典
    • 2.2 词性标注
      • 2.3 命名实体识别
        • 2.3.1 精确模式
        • 2.3.2 快速模式
      • 2.4 依存句法分析
        • 2.4.1 多种使用方式
        • 2.4.2 应用示例
    • 3. 『产业』应用
      • 3.1 情感分析
        • 3.1.1 BiLSTM
        • 3.1.2 SKEP
      • 3.2 文本纠错
        • 3.3 文本相似度
          • 3.4 『解语』-知识标注
          • 4. 『趣味』应用
            • 4.1 交互式闲聊对话
              • 4.2 生成式问答
                • 4.3 智能写诗
                • 5.定制化训练
                  • 5.1 数据准备和训练
                    • 5.2 使用定制化模型
                      • 参考资料
                  相关产品与服务
                  NLP 服务
                  NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档