PaddleNLP笔记
PaddleNLP提供开箱即用的产业级 NLP预置任务能力,无需训练,一键预测。
最全的中文任务:覆盖 自然语言理解与 自然语言生成两大核心应用;极致的产业级效果:在多个中文场景上提供产业级的 精度与 预测性能;
统一的应用范式:通过
paddlenlp.Taskflow
调用。
PaddleNLP一键预测功能:Taskflow API
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/230e5737eab65695e67d14136f49d213.png)
利用 PaddleNLP 的
Taskflow
提取句子中的语言学特征:中文分词、词性识别,依存关系,命名实体识别、关系抽取、事件抽取等。
一、信息抽取 UIE(Universal Information Extraction)
详细API:信息抽取一键预测能力
模型选择:多模型选择,满足精度、速度要求(uie-m-base
和uie-m-large
支持中英文混合抽取)
实体抽取
命名实体识别(Named Entity Recognition,简称NER),是指识别文本中具有特定意义的实体。在开放域信息抽取中,抽取的类别没有限制,用户可以自己定义。
from pprint import pprint
from paddlenlp import Taskflow
# 例如抽取的目标实体类型是"时间"、"选手"和"赛事名称", schema构造如下
schema = ['时间', '选手', '赛事名称']
ie = Taskflow('information_extraction', schema=schema) # 英文模型调用加参数 model='uie-base-en'
# ie.set_schema(schema) # 可以通过set_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': '谷爱凌'}]}]
关系抽取
关系抽取(Relation Extraction,简称RE),是指从文本中识别实体并抽取实体之间的语义关系,进而获取三元组信息,即<主体,谓语,客体>
。
//例如以"歌曲名称"作为抽取主体,抽取关系类型为"歌手"和"所属专辑", schema构造如下
{
'歌曲名称': [
'歌手',
'所属专辑'
]
}
from pprint import pprint
from paddlenlp import Taskflow
schema1 = ['时间', '选手', '赛事名称'] # Define the schema for entity extraction
ie = Taskflow('information_extraction', schema=schema1)
# 关系抽取
schema = {'歌曲名称': ['歌手', '所属专辑']} # Define the schema for relation extraction
ie.set_schema(schema) # 重置 schema
pprint(ie('《告别了》是孙耀威在专辑爱的故事里面的歌曲'))
[{'歌曲名称': [{'end': 4,
'probability': 0.6296160663195707,
'relations': {'所属专辑': [{'end': 16,
'probability': 0.9968462078543183,
'start': 12,
'text': '爱的故事'}],
'歌手': [{'end': 9,
'probability': 0.9988381005599081,
'start': 6,
'text': '孙耀威'}]},
'start': 1,
'text': '告别了'},
{'end': 16,
'probability': 0.2816864699196593,
'relations': {'歌手': [{'end': 9,
'probability': 0.9951415104192272,
'start': 6,
'text': '孙耀威'}]},
'start': 12,
'text': '爱的故事'}]}]
事件抽取
事件抽取 (Event Extraction, 简称EE),是指从自然语言文本中抽取预定义的事件触发词(Trigger)和事件论元(Argument),组合为相应的事件结构化信息。
paddleNLP英文模型暂不支持事件抽取
//例如抽取的目标是"地震"事件的"地震强度"、"时间"、"震中位置"和"震源深度"这些信息,schema构造如下
//触发词的格式统一为触发词或'XX触发词','XX'表示具体事件类型,上例中的事件类型是'地震',则对应触发词为'地震触发词'。
{
'地震触发词': [
'地震强度',
'时间',
'震中位置',
'震源深度'
]
}
from pprint import pprint
from paddlenlp import Taskflow
schema1 = ['时间', '选手', '赛事名称'] # Define the schema for entity extraction
ie = Taskflow('information_extraction', schema=schema1)
# 事件抽取
schema = {'地震触发词': ['地震强度', '时间', '震中位置', '震源深度']} # Define the schema for event extraction
ie.set_schema(schema) # Reset schema
pprint(ie('中国地震台网正式测定:5月16日06时08分在云南临沧市凤庆县(北纬24.34度,东经99.98度)发生3.5级地震,震源深度10千米。'))
[{'地震触发词': [{'end': 58,
'probability': 0.9977425555988333,
'relations': {'地震强度': [{'end': 56,
'probability': 0.998080217831891,
'start': 52,
'text': '3.5级'}],
'时间': [{'end': 22,
'probability': 0.9853299772936026,
'start': 11,
'text': '5月16日06时08分'}],
'震中位置': [{'end': 50,
'probability': 0.7874019167089088,
'start': 23,
'text': '云南临沧市凤庆县(北纬24.34度,东经99.98度)'}],
'震源深度': [{'end': 67,
'probability': 0.9937974422968665,
'start': 63,
'text': '10千米'}]},
'start': 56,
'text': '地震'}]}]
评论观点抽取
评论观点抽取,是指抽取文本中包含的评价维度、观点词。
//例如抽取的目标是文本中包含的评价维度及其对应的观点词和情感倾向
{
'评价维度': [
'观点词',
'情感倾向[正向,负向]'
]
}
//英文
{
'Aspect': [
'Opinion',
'Sentiment classification [negative, positive]'
]
}
from pprint import pprint
from paddlenlp import Taskflow
schema1 = ['时间', '选手', '赛事名称'] # Define the schema for entity extraction
ie = Taskflow('information_extraction', schema=schema1)
# 句子级情感分类
schema = {'评价维度': ['观点词', '情感倾向[正向,负向]']} # Define the schema for sentence-level sentiment classification
ie.set_schema(schema) # Reset schema
pprint(ie("店面干净,很清静,服务员服务热情,性价比很高,发现收银台有排队"))
[{'评价维度': [{'end': 20,
'probability': 0.9817040258681473,
'relations': {'情感倾向[正向,负向]': [{'probability': 0.9966142505350533,
'text': '正向'}],
'观点词': [{'end': 22,
'probability': 0.9573965911122002,
'start': 21,
'text': '高'}]},
'start': 17,
'text': '性价比'},
{'end': 2,
'probability': 0.9696848395970115,
'relations': {'情感倾向[正向,负向]': [{'probability': 0.9982153274927796,
'text': '正向'}],
'观点词': [{'end': 4,
'probability': 0.9945318044652538,
'start': 2,
'text': '干净'}]},
'start': 0,
'text': '店面'}]}]
情感分类
句子级情感倾向分类,即判断句子的情感倾向是“正向”还是“负向”,schema构造如下
'情感倾向[正向,负向]'
//英文
'Sentiment classification [negative, positive]'
from pprint import pprint
from paddlenlp import Taskflow
schema1 = ['时间', '选手', '赛事名称'] # Define the schema for entity extraction
ie = Taskflow('information_extraction', schema=schema1)
# 句子级情感分类
schema = '情感倾向[正向,负向]' # Define the schema for sentence-level sentiment classification
ie.set_schema(schema) # Reset schema
pprint(ie("这个产品用起来真的很流畅,我非常喜欢"))
[{'情感倾向[正向,负向]': [{'probability': 0.9990024058203417, 'text': '正向'}]}]
跨任务抽取
例如在法律场景同时对文本进行实体抽取和关系抽取
//schema可按照如下方式进行构造
[
"法院",
{"原告": "委托代理人"},
{"被告": "委托代理人"}
]
from pprint import pprint
from paddlenlp import Taskflow
schema1 = ['时间', '选手', '赛事名称'] # Define the schema for entity extraction
ie = Taskflow('information_extraction', schema=schema1)
# 跨任务跨领域抽取
schema = ['法院', {'原告': '委托代理人'}, {'被告': '委托代理人'}]
ie.set_schema(schema)
pprint(ie("北京市海淀区人民法院\n民事判决书\n(199x)建初字第xxx号\n原告:张三。\n委托代理人李四,北京市 A律师事务所律师。\n被告:B公司,法定代表人王五,开发公司总经理。\n委托代理人赵六,北京市 C律师事务所律师。"))
[{'原告': [{'end': 37,
'probability': 0.9949814024296764,
'relations': {'委托代理人': [{'end': 46,
'probability': 0.7956843124990414,
'start': 44,
'text': '李四'}]},
'start': 35,
'text': '张三'}],
'法院': [{'end': 10,
'probability': 0.922107121863057,
'start': 0,
'text': '北京市海淀区人民法院'}],
'被告': [{'end': 67,
'probability': 0.8437342990196797,
'relations': {'委托代理人': [{'end': 92,
'probability': 0.7267129513679116,
'start': 90,
'text': '赵六'}]},
'start': 64,
'text': 'B公司'}]}]
二、中文分词
文档级输入
from paddlenlp import Taskflow
# 首次调用会有模型下载的额外时间开销
seg = Taskflow("word_segmentation")
doc = "苏锦一直记得那个午后,明晃晃的光线穿过教室的窗玻璃洒到自己脸上,有种特别暖和的感觉。那阳光仿佛是能够钻进人的心里,继而延展到身体全部的毛孔中,然后以一种温柔的霸道占据体内各个淋巴细胞。苏锦觉得连自己的每一个气息里都似乎是能流窜出明亮的光。她坐着有些微醉于这份上帝恩赐的福祉当中。是在这样一个午后。她记住了段见城的脸。轮廓俊朗的少年。有着羁傲的眼神和清晰的声线。怎么看这都是少女漫画里必经的情节。教语文的老太太此刻正兀自在讲台上口若悬河的讲解着《孔雀东南飞》,毕竟是已经年过半百的老教师,经历的学生多了,倒也不在乎讲台下那一张张脸上是否挂着的无精打采,昏昏欲睡的表情,按着自己的性子眉飞色舞的描绘着千年前的那段爱情传奇。苏锦一边数着从老太太口里横飞出来的唾沫星子,一边念想着,让理科班这群脑子里已全被物理公式填充了的家伙,去对几千年前焦仲卿和刘兰芝的爱情产生兴趣未免是件太困难的事情了。老太太讲到焦仲卿和刘兰芝双双殉情而死之时咳嗽了一声,提醒底下那群不知已经神游到何方的学生们是时候为文章的主旨做笔记了。苏锦把课文翻到最后,快速扫过大致内容,目光却在那句:府吏闻此事,心知长别离。徘徊庭树下,自挂东南枝上硬生生地停了下来。思绪仿若戛然而止,被某种莫名的感怀而包围,心中有些钝痛,却不知从何而来。“懦弱。”一个略带鄙夷的声音传入苏锦的耳,拦截住了她空白的思绪。苏锦转过头,瞥见后桌的段见城。恍然间有种错觉,这个男生好似是被光线包裹着一般。段见城淡淡说。若他是焦仲卿,定不会让自己和深爱的女子走到这步田地,若是真走到山穷水尽的地步,定是决然赴死。何来徘徊。那清淡口气带着些不屑,却是这般笃定至极。他说,平生最鄙夷懦弱的男子。苏锦静默的注视着这个男生。终究是没有说出话来。苏锦莫名其妙的做了段见城的女友是一年以后的事情。全班在KTV里唱歌,美名曰:升高三前最后的狂欢。包厢里都是拥挤的人,但苏锦却还是能够感受到空调的温度调得异常的低,她躲在冷风吹不到的角落,捧着大杯的雪花啤酒像是喝水一样没有节制,她觉得心里有所郁结并且心思混乱,恍恍惚惚的注视着麦克风被传了一轮又一轮,听着音像里传出或高或低的杂乱音符,而自己却似是置身于别处,与此间的喧嚣起伏无关,只觉得空荡荡。苏锦记得自己与同桌曾谈及过自己这种从暑假开始无法摆脱的混沌状态,同桌是一副了然于胸的模样,义正言辞的对苏锦说,这是高三前期综合症。她说,苏锦你别太看重所谓的高三,高考和大学都只是一个过程而并非最终的意义,我们要以平常心去对待这些。苏锦想,其实自己并非执著什么,而是自幼便对于那些未知的一切充满恐惧。因为无法掌控,所以感到束手无策,身不由己。仿佛有种被命运捏在手里随意摆弄的感觉,特别难受正当苏锦失足于自己庞大的幻觉之时,身边的朋友开始玩起了真心话大冒险之类的游戏。在一边起哄的女生提议游戏从今晚没有唱歌过的人开始,于是因为忙着在沙发上的打牌的段见城那拨人便是首先被开刷的对象,而作为聚众赌博的头子,段见城自然是第一个被逮到。几个暗自对段见城有好感的姑娘早就揣摩好了问题,苏锦被旁边兴奋过头的女生推攘着,神志也渐渐清明起来。不知是谁直白的问出了那句:阿城,你有意中人么?KTV中的嘈杂如同顿时沉淀了一般,纵然空气里似乎还遗留着些噪音过境的痕迹,更多的却是一种屏气凝神的静。段见城沉默的捏着手中那张还没打出去扑克牌,几乎是在所有人的耐心倒塌的前一秒,清晰地说出了苏锦的名字。"
print("1. 输入长度:", len(doc))
print("2. 分词结果:", seg(doc))
1. 输入长度: 1413
2. 分词结果: ['苏锦', '一直', '记得', '那个', '午后', ',', '明晃晃', '的', '光线', '穿过', '教室', '的', '窗', '玻璃', '洒', '到', '自己', '脸上', ',', '有种', '特别', '暖和', '的', '感觉', '。', '那', '阳光', '仿佛', '是', '能够', '钻进', '人', '的', '心里', ',', '继而', '延展', '到', '身体', '全部', '的', '毛孔', '中', ',', '然后', '以', '一种', '温柔', '的', '霸道', '占据', '体内', '各', '个', '淋巴细胞', '。', '苏锦', '觉得', '连', '自己', '的', '每一个', '气息', '里', '都', '似乎', '是', '能', '流窜', '出', '明亮', '的', '光', '。', '她', '坐', '着', '有些', '微', '醉', '于', '这份', '上帝恩', '赐', '的', '福祉', '当中', '。', '是', '在', '这样', '一个', '午后', '。', '她', '记住', '了', '段见城', '的', '脸', '。', '轮廓', '俊朗', '的', '少年', '。', '有着', '羁傲', '的', '眼神', '和', '清晰', '的', '声线', '。', '怎么', '看', '这', '都是', '少女', '漫画', '里', '必经', '的', '情节', '。', '教', '语文', '的', '老太太', '此刻', '正兀自在', '讲台', '上', '口若', '悬河', '的', '讲解', '着', '《', '孔雀东南飞', '》', ',', '毕竟', '是', '已经', '年', '过', '半百', '的', '老', '教师', ',', '经历', '的', '学生', '多', '了', ',', '倒', '也', '不', '在乎', '讲台', '下', '那', '一张张', '脸上', '是否', '挂', '着', '的', '无精打采', ',', '昏昏欲睡', '的', '表情', ',', '按', '着', '自己', '的', '性子', '眉飞色舞', '的', '描绘', '着', '千年前', '的', '那段', '爱情传奇', '。', '苏锦', '一边', '数着', '从', '老太太口', '里', '横飞', '出来', '的', '唾沫', '星子', ',', '一边', '念', '想着', ',', '让', '理科', '班', '这', '群', '脑子', '里', '已', '全', '被', '物理', '公式', '填充', '了', '的', '家伙', ',', '去', '对', '几千年前', '焦仲卿', '和', '刘兰芝', '的', '爱情', '产生', '兴趣', '未免', '是', '件', '太', '困难', '的', '事情', '了', '。', '老太太', '讲到', '焦仲卿', '和', '刘兰芝', '双双', '殉情', '而死', '之', '时', '咳嗽', '了', '一声', ',', '提醒', '底下', '那', '群', '不知', '已经', '神游', '到', '何方', '的', '学生们', '是', '时候', '为', '文章', '的', '主旨', '做', '笔记', '了', '。', '苏锦', '把', '课文', '翻', '到', '最后', ',', '快速', '扫', '过', '大致', '内容', ',', '目光', '却', '在', '那', '句', ':', '府', '吏', '闻', '此事', ',', '心', '知', '长别离', '。', '徘徊', '庭', '树下', ',', '自', '挂', '东南', '枝', '上', '硬', '生生', '地', '停', '了', '下来', '。', '思绪', '仿若', '戛然而止', ',', '被', '某种', '莫名', '的', '感怀', '而', '包围', ',', '心中', '有些', '钝', '痛', ',', '却', '不知', '从', '何', '而来', '。', '“', '懦弱', '。', '”', '一个', '略带', '鄙夷', '的', '声音', '传入', '苏锦', '的', '耳', ',', '拦截', '住', '了', '她', '空白', '的', '思绪', '。', '苏锦', '转过', '头', ',', '瞥见', '后桌', '的', '段见城', '。', '恍然间', '有种', '错觉', ',', '这个', '男生', '好似', '是', '被', '光线', '包裹', '着', '一般', '。', '段见城', '淡淡', '说', '。', '若', '他', '是', '焦仲卿', ',', '定', '不会', '让', '自己', '和', '深', '爱', '的', '女子', '走', '到', '这', '步', '田地', ',', '若', '是', '真', '走', '到', '山穷水', '尽', '的', '地步', ',', '定', '是', '决然', '赴死', '。', '何来', '徘徊', '。', '那', '清淡', '口气', '带', '着', '些', '不屑', ',', '却是', '这般', '笃定', '至极', '。', '他', '说', ',', '平生', '最', '鄙夷', '懦弱', '的', '男子', '。', '苏锦静默', '的', '注视', '着', '这个', '男生', '。', '终究', '是', '没有', '说出', '话', '来', '。', '苏锦', '莫名其妙', '的', '做', '了', '段见城', '的', '女友', '是', '一年以后', '的', '事情', '。', '全班', '在', 'KTV', '里', '唱歌', ',', '美名曰', ':', '升高三', '前', '最后', '的', '狂欢', '。', '包厢', '里', '都是', '拥挤', '的', '人', ',', '但', '苏锦', '却', '还是', '能够', '感受到', '空调', '的', '温度', '调', '得', '异常', '的', '低', ',', '她', '躲', '在', '冷风', '吹', '不到', '的', '角落', ',', '捧', '着', '大杯', '的', '雪花', '啤酒', '像', '是', '喝水', '一样', '没有', '节制', ',', '她', '觉得', '心里', '有所', '郁结', '并且', '心思', '混乱', ',', '恍恍惚惚', '的', '注视', '着', '麦克风', '被', '传', '了', '一轮', '又', '一轮', ',', '听', '着', '音像', '里', '传出', '或', '高', '或', '低', '的', '杂乱', '音符', ',', '而', '自己', '却', '似', '是', '置身', '于', '别处', ',', '与', '此间', '的', '喧嚣', '起伏', '无关', ',', '只', '觉得', '空荡荡', '。', '苏锦', '记得', '自己', '与', '同桌', '曾', '谈及', '过', '自己', '这种', '从', '暑假', '开始', '无法', '摆脱', '的', '混沌', '状态', ',', '同桌', '是', '一副', '了然', '于', '胸', '的', '模样', ',', '义正', '言辞', '的', '对', '苏锦', '说', ',', '这', '是', '高三', '前期', '综合症', '。', '她说', ',', '苏锦', '你', '别太', '看重', '所谓', '的', '高三', ',', '高考', '和', '大学', '都', '只是', '一个', '过程', '而', '并非', '最终', '的', '意义', ',', '我们', '要', '以', '平常心', '去', '对待', '这些', '。', '苏锦', '想', ',', '其实', '自己', '并非', '执著', '什么', ',', '而是', '自幼', '便', '对于', '那些', '未知', '的', '一切', '充满', '恐惧', '。', '因为', '无法', '掌控', ',', '所以', '感到', '束手无策', ',', '身不由己', '。', '仿佛', '有种', '被', '命运', '捏', '在', '手里', '随意', '摆弄', '的', '感觉', ',', '特别', '难受', '正当', '苏锦', '失足', '于', '自己', '庞大', '的', '幻觉', '之', '时', ',', '身边', '的', '朋友', '开始', '玩', '起', '了', '真心话', '大冒险', '之类', '的', '游戏', '。', '在', '一边', '起哄', '的', '女生', '提议', '游戏', '从', '今晚', '没有', '唱歌', '过', '的', '人', '开始', ',', '于是', '因为', '忙', '着', '在', '沙发', '上', '的', '打牌', '的', '段见城', '那', '拨', '人', '便是', '首先', '被', '开', '刷', '的', '对象', ',', '而', '作为', '聚众', '赌博', '的', '头子', ',', '段见城', '自然', '是', '第一个', '被逮', '到', '。', '几个', '暗自', '对', '段见城', '有', '好感', '的', '姑娘', '早就', '揣摩', '好', '了', '问题', ',', '苏锦', '被', '旁边', '兴奋', '过头', '的', '女生', '推攘', '着', ',', '神志', '也', '渐渐', '清明', '起来', '。', '不知', '是', '谁', '直白', '的', '问出', '了', '那', '句', ':', '阿城', ',', '你', '有意', '中人', '么', '?', 'KTV', '中', '的', '嘈杂', '如同', '顿时', '沉淀', '了', '一般', ',', '纵然', '空气', '里', '似乎', '还', '遗留', '着', '些', '噪音', '过境', '的', '痕迹', ',', '更多', '的', '却是', '一种', '屏气', '凝神', '的', '静', '。', '段见城', '沉默', '的', '捏', '着', '手中', '那', '张', '还', '没', '打出', '去', '扑克牌', ',', '几乎', '是', '在', '所有人', '的', '耐心', '倒塌', '的', '前一秒', ',', '清晰', '地', '说', '出', '了', '苏锦', '的', '名字', '。']
快速模式分词
seg_fast = Taskflow("word_segmentation", mode="fast")
示例通过快速模式分词对数据集进行词频统计、构建词表
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])
1. 句子数量: 10800
2. 平均速率:1597.16句/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)]
精确模式分词
使用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日', '成立']]
自定义用户词典
想把 ‘我是一只火鸟’ 作为一个完整词来识别,而 ‘上映’ 希望能够被切开
//user_dict.txt内容
我是一只火鸟
上 映
from paddlenlp import Taskflow
seg = Taskflow("word_segmentation", user_dict="./user_dict.txt")
print(seg("曾小贤我是一只火鸟宣布国庆期间上映"))
三、词性标注
基于百度词法分析工具LAC,训练语料包含近2200万句子,覆盖多种场景
from paddlenlp import Taskflow
tag = Taskflow("pos_tagging")
print(tag("第十四届全运会在西安举办"))
[('第十四届', 'm'), ('全运会', 'nz'), ('在', 'p'), ('西安', 'LOC'), ('举办', 'v')]
四、命名实体识别
精确模式
基于百度解语的精确模式:最全中文实体标签的命名实体识别工具,不仅适用于通用领域,也适用于生物医疗、教育等垂类领域。包含66种词性及专名类别标签(同类产品的标签数是15个左右)
from paddlenlp import Taskflow
ner = Taskflow("ner")
print(ner(["李伟拿出具有科学性、可操作性的《陕西省高校管理体制改革实施方案》",
"诺戴商务咨询(上海)有限公司于2016年08月22日成立"]))
[[('李伟', '人物类_实体'), ('拿出', '场景事件'), ('具有', '肯定词'), ('科学性', '词汇用语'), ('、', 'w'), ('可操作性', '词汇用语'), ('的', '助词'), ('《', 'w'), ('陕西省高校管理体制改革实施方案', '作品类_实体'), ('》', 'w')],
[('诺戴商务咨询(上海)有限公司', '组织机构类_企事业单位'), ('于', '介词'), ('2016年08月22日', '时间类_具体时间'), ('成立', '场景事件')]]
快速模式
基于百度词法分析工具LAC,训练语料包含近2200万句子,覆盖多种场景
from paddlenlp import Taskflow
ner_fast = Taskflow("ner", mode="fast")
print(ner_fast("三亚是一个美丽的城市"))
[('三亚', 'LOC'), ('是', 'v'), ('一个', 'm'), ('美丽', 'a'), ('的', 'u'), ('城市', 'n')]
五、依存句法分析
依存关系分析,又称依存句法分析(dependency syntactic parsing),简称依存分析,作用是识别句子中词汇与词汇之间的相互依存关系。
依存句法分析使用方式
from paddlenlp import Taskflow
# 使用BiLSTM作为编码器,速度最快
ddp = Taskflow("dependency_parsing")
# 输出概率值和词性标签
# ddp = Taskflow("dependency_parsing", prob=True, use_pos=True)
print(ddp("2月8日谷爱凌夺得北京冬奥会第三金"))
from paddlenlp import Taskflow
# 编码器部分将BiLSTM替换为ERNIE,模型准确率更高!
ddp = Taskflow("dependency_parsing", model="ddparser-ernie-1.0")
print(ddp("2月8日谷爱凌夺得北京冬奥会第三金"))
[{'word': ['2月8日', '谷爱凌', '夺得', '北京冬奥会', '第三金'],
'head': [3, 3, 0, 5, 3], 'deprel': ['ADV', 'SBV', 'HED', 'ATT', 'VOB']}]
依存句法分析实例:
from paddlenlp import Taskflow
ddp = Taskflow("dependency_parsing")
print(ddp("9月9日上午纳达尔在亚瑟·阿什球场击败俄罗斯球员梅德韦杰夫"))
[{'word': ['9月9日', '上午', '纳达尔', '在', '亚瑟·阿什球场', '击败', '俄罗斯', '球员', '梅德韦杰夫'],
'head': [2, 6, 6, 5, 6, 0, 8, 9, 6],
'deprel': ['ATT', 'ADV', 'SBV', 'MT', 'ADV', 'HED', 'ATT', 'ATT', 'VOB']}]
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])
原文本: 9月9日上午纳达尔在亚瑟·阿什球场击败俄罗斯球员梅德韦杰夫
包含的主谓宾结构: [(('纳达尔', '击败', '梅德韦杰夫'), 'SVO')]
原文本: 2月8日谷爱凌夺得北京冬奥会第三金
包含的主谓宾结构: [(('谷爱凌', '夺得', '第三金'), 'SVO')]
六、PaddleNLP应用
使用Taskflow来完成情感分析、文本纠错、文本相似度
情感分析(句子级情感分类)
采用BiLSTM算法
BiLSTM是Bi-directional Long Short-Term Memory的缩写(双向长短词记忆模型),是由前向LSTM与后向LSTM组合而成。两者在自然语言处理任务中都常被用来建模上下文信息。
from paddlenlp import Taskflow
senta = Taskflow("sentiment_analysis") # 默认使用的是BiLSTM。
print(senta("这个产品用起来真的很流畅,我非常喜欢"))
[{'text': '这个产品用起来真的很流畅,我非常喜欢', 'label': 'positive', 'score': 0.9938690066337585}]
采用SKEP算法
集成百度自研的情感知识增强预训练模型SKEP,利用情感知识构建预训练目标,在海量中文数据上进行预训练,为各类情感分析任务提供统一且强大的情感语义表示能力。
from paddlenlp import Taskflow
senta = Taskflow("sentiment_analysis", model="skep_ernie_1.0_large_ch")
print(senta("作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上办理入住手续,节省时间。"))
[{'text': '作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上办理入住手续,节省时间。',
'label': 'positive', 'score': 0.984320878982544}]
文本纠错
ERNIE-CSC在ERNIE预训练模型的基础上,融合了拼音特征的端到端中文拼写纠错模型。
from paddlenlp import Taskflow
corrector = Taskflow("text_correction")
print(corrector('遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇。'))
[{'source': '遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇。', 'target': '遇到逆境时,我们必须勇于面对,而且要愈挫愈勇。',
'errors': [{'position': 3, 'correction': {'竟': '境'}}]}]
文本相似度
基于百度知道2200万对相似句组训练SimBERT达到前沿文本相似效果
from paddlenlp import Taskflow
similarity = Taskflow("text_similarity")
print(similarity([["春天适合种什么花?", "春天适合种什么菜?"], ["小蝌蚪找妈妈怎么样", "小蝌蚪找妈妈是谁画的"]]))
[{'text1': '春天适合种什么花?', 'text2': '春天适合种什么菜?', 'similarity': 0.004863257519900799},
{'text1': '小蝌蚪找妈妈怎么样', 'text2': '小蝌蚪找妈妈是谁画的', 'similarity': 0.15818725526332855}]
解语-知识标注
基于百度解语,首个能够覆盖所有中文词汇的词类知识标注工具,旨在为中文文本解析提供全面、丰富的知识标注结果
from paddlenlp import Taskflow
wordtag = Taskflow("knowledge_mining")
# 结果会与TermTree进行绑定,输出termid
print(wordtag("第24届冬季奥林匹克运动会在北京举办"))
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'])
未完