paddlenlp 任务清单 中文分词、中文纠错、文本相似度、情感分析、词性标注等一键

PaddleNLP Taskflow https://github.com/PaddlePaddle/PaddleNLP/blob/develop/docs/model_zoo/taskflow.md#paddlenlp-taskflow

PaddleNLP Taskflow

  • PaddleNLP Taskflow
    • 介绍
      • 任务清单
    • 用法
      • 查看使用示例
      • 中文分词
      • 词性标注
      • 命名实体识别
      • 文本纠错
      • 句法分析
      • 情感分析
      • 文本相似度
      • 『解语』-词类知识标注
      • 『解语』-名词短语标注
      • 生成式问答
      • 智能写诗
      • 开放域对话
    • 自定义任务
    • FAQ

介绍

paddlenlp.Taskflow提供开箱即用的NLP预置任务,覆盖自然语言理解与自然语言生成两大核心应用,在中文场景上提供产业级的效果与极致的预测性能。

任务清单

自然语言理解任务自然语言生成任务
中文分词生成式问答
词性标注智能写诗
命名实体识别开放域对话
文本纠错文本翻译(TODO)
句法分析自动对联(TODO)
情感分析
文本相似度
『解语』-词类知识标注
『解语』-名词短语标注

随着版本迭代会持续开放更多的应用场景。

安装

环境依赖

  • python >= 3.6
  • paddlepaddle >= 2.2.0
  • paddlenlp >= 2.2.0

用法

查看使用示例

from paddlenlp import Taskflowseg = Taskflow("word_segmentation")
seg.help()
>>> Examples:from paddlenlp import Taskflowseg = Taskflow("word_segmentation")seg("第十四届全运会在西安举办")'''['第十四届', '全运会', '在', '西安', '举办']'''seg(["第十四届全运会在西安举办", "三亚是一个美丽的城市"])'''[['第十四届', '全运会', '在', '西安', '举办'], ['三亚', '是', '一个', '美丽', '的', '城市']]'''

中文分词

  • 支持三种模式分词

    • Base模式(默认)
    from paddlenlp import Taskflowseg = Taskflow("word_segmentation")
    seg("第十四届全运会在西安举办")
    >>> ['第十四届', '全运会', '在', '西安', '举办']seg(["第十四届全运会在西安举办", "三亚是一个美丽的城市"])
    >>> [['第十四届', '全运会', '在', '西安', '举办'], ['三亚', '是', '一个', '美丽', '的', '城市']]
    
    • 快速模式

    利用『结巴』中文分词工具,实现文本快速切分。

    from paddlenlp import Taskflowseg = Taskflow("word_segmentation", mode="fast")
    seg("第十四届全运会在西安举办")
    >>> ['第十四届', '全运会', '在', '西安', '举办']
    
    • 精确模式

    试图将句子中的实体词完整切分,分词精确度高。

    seg = Taskflow("word_segmentation", mode="accurate")
    seg("李伟拿出具有科学性、可操作性的《陕西省高校管理体制改革实施方案》")
    >>> ['李伟', '拿出', '具有', '科学性', '、', '可操作性', '的', '《', '陕西省高校管理体制改革实施方案', '》']
    
  • 自定义词典

    • 快速模式词典载入方式:

      用户可以在词典文件每一行有两个部分:词语、词频(可省略),用空格隔开。词频省略则自动计算能保证分出该词的词频。

      词典文件user_dict.txt示例:

      新冠肺炎 8
      国家卫健委
      

      "国家卫健委修订完成了新冠肺炎诊疗方案"原本的输出结果为:

      ['国家', '卫健委', '修订', '完成', '了', '新冠', '肺炎', '诊疗', '方案']
      

      装载自定义词典及输出结果示例:

      from paddlenlp import Taskflowmy_seg = Taskflow("word_segmentation", mode="fast", user_dict="user_dict.txt")
      my_seg("国家卫健委修订完成了新冠肺炎诊疗方案")
      >>> ['国家卫健委', '修订', '完成', '了', '新冠肺炎', '诊疗', '方案']
      
    • Base、精确模式词典载入方式:

      词典文件每一行表示一个自定义item。

      词典文件user_dict.txt示例:

      平原上的火焰
      年 末
      

      以默认模型为例,"平原上的火焰计划于年末上映"原本的输出结果为:

      ['平原', '上', '的', '火焰', '计划', '于', '年末', '上映']
      

      装载自定义词典及输出结果示例:

      from paddlenlp import Taskflowmy_seg = Taskflow("word_segmentation", user_dict="user_dict.txt")
      my_seg("平原上的火焰计划于年末上映")
      >>> ['平原上的火焰', '计划', '于', '年', '末', '上映']
      

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • user_dict:用户自定义词典文件,默认为None。
  • task_path:自定义任务路径,默认为None。

词性标注

from paddlenlp import Taskflowtag = Taskflow("pos_tagging")
tag("第十四届全运会在西安举办")
>>>[('第十四届', 'm'), ('全运会', 'nz'), ('在', 'p'), ('西安', 'LOC'), ('举办', 'v')]tag(["第十四届全运会在西安举办", "三亚是一个美丽的城市"])
>>> [[('第十四届', 'm'), ('全运会', 'nz'), ('在', 'p'), ('西安', 'LOC'), ('举办', 'v')], [('三亚', '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时间
  • 自定义词典

    用户可以通过装载自定义词典来定制化分词和词性标注结果。词典文件每一行表示一个自定义item,可以由一个单词或者多个单词组成,单词后面可以添加自定义标签,格式为item/tag,如果不添加自定义标签,则使用模型默认标签。

    词典文件user_dict.txt示例:

    赛里木湖/LAKE
    高/a 山/n
    海拔最高
    湖 泊
    

    以"赛里木湖是新疆海拔最高的高山湖泊"为例,原本的输出结果为:

    [('赛里木湖', 'LOC'), ('是', 'v'), ('新疆', 'LOC'), ('海拔', 'n'), ('最高', 'a'), ('的', 'u'), ('高山', 'n'), ('湖泊', 'n')]
    

    装载自定义词典及输出结果示例:

    from paddlenlp import Taskflowmy_tag = Taskflow("pos_tagging", user_dict="user_dict.txt")
    my_tag("赛里木湖是新疆海拔最高的高山湖泊")
    >>> [('赛里木湖', 'LAKE'), ('是', 'v'), ('新疆', 'LOC'), ('海拔最高', 'n'), ('的', 'u'), ('高', 'a'), ('山', 'n'), ('湖', 'n'), ('泊', 'n')]
    

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • user_dict:用户自定义词典文件,默认为None。
  • task_path:自定义任务路径,默认为None。

命名实体识别

  • 支持两种模式

    • 快速模式
    from paddlenlp import Taskflowner = Taskflow("ner", mode="fast")
    ner("三亚是一个美丽的城市")
    >>> [('三亚', 'LOC'), ('是', 'v'), ('一个', 'm'), ('美丽', 'a'), ('的', 'u'), ('城市', 'n')]
    
    • 精确模式(默认)
    from paddlenlp import Taskflowner = Taskflow("ner")
    ner("《孤女》是2010年九州出版社出版的小说,作者是余兼羽")
    >>> [('《', 'w'), ('孤女', '作品类_实体'), ('》', 'w'), ('是', '肯定词'), ('2010年', '时间类'), ('九州出版社', '组织机构类'), ('出版', '场景事件'), ('的', '助词'), ('小说', '作品类_概念'), (',', 'w'), ('作者', '人物类_概念'), ('是', '肯定词'), ('余兼羽', '人物类_实体')]ner(["热梅茶是一道以梅子为主要原料制作的茶饮", "《孤女》是2010年九州出版社出版的小说,作者是余兼羽"])
    >>> [[('热梅茶', '饮食类_饮品'), ('是', '肯定词'), ('一道', '数量词'), ('以', '介词'), ('梅子', '饮食类'), ('为', '肯定词'), ('主要原料', '物体类'), ('制作', '场景事件'), ('的', '助词'), ('茶饮', '饮食类_饮品')], [('《', 'w'), ('孤女', '作品类_实体'), ('》', 'w'), ('是', '肯定词'), ('2010年', '时间类'), ('九州出版社', '组织机构类'), ('出版', '场景事件'), ('的', '助词'), ('小说', '作品类_概念'), (',', 'w'), ('作者', '人物类_概念'), ('是', '肯定词'), ('余兼羽', '人物类_实体')]]
    
  • 只返回实体/概念词:

from paddlenlp import Taskflowner = Taskflow("ner", mode="accurate", entity_only=True)
ner("《孤女》是2010年九州出版社出版的小说,作者是余兼羽")
>>> [('孤女', '作品类_实体'), ('2010年', '时间类'), ('九州出版社', '组织机构类'), ('出版', '场景事件'), ('小说', '作品类_概念'), ('作者', '人物类_概念'), ('余兼羽', '人物类_实体')]
  • 自定义词典

    用户可以通过装载自定义词典来定制化分词和词性标注结果。词典文件每一行表示一个自定义item,可以由一个单词或者多个单词组成,单词后面可以添加自定义标签,格式为item/tag,如果不添加自定义标签,则使用模型默认标签。

    词典文件user_dict.txt示例:

    长津湖/电影类_实体
    收/词汇用语 尾/术语类
    最 大
    海外票仓
    

    以"《长津湖》收尾,北美是最大海外票仓"为例,原本的输出结果为:

    [('《', 'w'), ('长津湖', '作品类_实体'), ('》', 'w'), ('收尾', '场景事件'), (',', 'w'), ('北美', '世界地区类'), ('是', '肯定词'), ('最大', '修饰词'), ('海外', '场所类'), ('票仓', '词汇用语')]
    

    装载自定义词典及输出结果示例:

    from paddlenlp import Taskflowmy_ner = Taskflow("ner", user_dict="user_dict.txt")
    my_ner("《长津湖》收尾,北美是最大海外票仓")
    >>> [('《', 'w'), ('长津湖', '电影类_实体'), ('》', 'w'), ('收', '词汇用语'), ('尾', '术语类'), (',', 'w'), ('北美', '世界地区类'), ('是', '肯定词'), ('最', '修饰词'), ('大', '修饰词'), ('海外票仓', '场所类')]
    

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • user_dict:用户自定义词典文件,默认为None。
  • task_path:自定义任务路径,默认为None。
  • entity_only:是否返回所有词性标签;若设置为True,则只返回实体/概念词;默认为False。

文本纠错

from paddlenlp import Taskflowcorrector = Taskflow("text_correction")
corrector('遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇,这样我们才能朝著成功之路前进。')
>>> [{'source': '遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇,这样我们才能朝著成功之路前进。', 'target': '遇到逆境时,我们必须勇于面对,而且要愈挫愈勇,这样我们才能朝著成功之路前进。', 'errors': [{'position': 3, 'correction': {'竟': '境'}}]}]corrector(['遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇,这样我们才能朝著成功之路前进。','人生就是如此,经过磨练才能让自己更加拙壮,才能使自己更加乐观。'])
>>> [{'source': '遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇,这样我们才能朝著成功之路前进。', 'target': '遇到逆境时,我们必须勇于面对,而且要愈挫愈勇,这样我们才能朝著成功之路前进。', 'errors': [{'position': 3, 'correction': {'竟': '境'}}]}, {'source': '人生就是如此,经过磨练才能让自己更加拙壮,才能使自己更加乐观。', 'target': '人生就是如此,经过磨练才能让自己更加茁壮,才能使自己更加乐观。', 'errors': [{'position': 18, 'correction': {'拙': '茁'}}]}]

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • task_path:自定义任务路径,默认为None。

句法分析

from paddlenlp import Taskflowddp = Taskflow("dependency_parsing")
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']}]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']}, {'word': ['他', '送', '了', '一本', '书'], 'head': [2, 0, 2, 5, 2], 'deprel': ['SBV', 'HED', 'MT', 'ATT', 'VOB']}]

输出概率值和词性标签:

ddp = Taskflow("dependency_parsing", prob=True, use_pos=True)
ddp("9月9日上午纳达尔在亚瑟·阿什球场击败俄罗斯球员梅德韦杰夫")
>>> [{'word': ['9月9日', '上午', '纳达尔', '在', '亚瑟·阿什', '球场', '击败', '俄罗斯', '球员', '梅德韦杰夫'], 'head': [2, 7, 7, 6, 6, 7, 0, 9, 10, 7], 'deprel': ['ATT', 'ADV', 'SBV', 'MT', 'ATT', 'ADV', 'HED', 'ATT', 'ATT', 'VOB'], 'postag': ['TIME', 'TIME', 'PER', 'p', 'PER', 'n', 'v', 'LOC', 'n', 'PER'], 'prob': [0.79, 0.98, 1.0, 0.49, 0.97, 0.86, 1.0, 0.85, 0.97, 0.99]}]

使用ddparser-ernie-1.0进行预测:

ddp = Taskflow("dependency_parsing", model="ddparser-ernie-1.0")
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']}]

使用分词结果来输入:

ddp = Taskflow("dependency_parsing")
ddp.from_segments([['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 paddlenlp import Taskflowddp = Taskflow("dependency_parsing", return_visual=True)
result = ddp("9月9日上午纳达尔在亚瑟·阿什球场击败俄罗斯球员梅德韦杰夫")[0]['visual']
import cv2
cv2.imwrite('test.png', result)
  • 标注关系说明:
Label关系类型说明示例
SBV主谓关系主语与谓词间的关系他送了一本书(他<–送)
VOB动宾关系宾语与谓词间的关系他送了一本书(送–>书)
POB介宾关系介词与宾语间的关系我把书卖了(把–>书)
ADV状中关系状语与中心词间的关系我昨天买书了(昨天<–买)
CMP动补关系补语与中心词间的关系我都吃完了(吃–>完)
ATT定中关系定语与中心词间的关系他送了一本书(一本<–书)
F方位关系方位词与中心词的关系在公园里玩耍(公园–>里)
COO并列关系同类型词语间关系叔叔阿姨(叔叔–>阿姨)
DBL兼语结构主谓短语做宾语的结构他请我吃饭(请–>我,请–>吃饭)
DOB双宾语结构谓语后出现两个宾语他送我一本书(送–>我,送–>书)
VV连谓结构同主语的多个谓词间关系他外出吃饭(外出–>吃饭)
IC子句结构两个结构独立或关联的单句你好,书店怎么走?(你好<–走)
MT虚词成分虚词与中心词间的关系他送了一本书(送–>了)
HED核心关系指整个句子的核心

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • model:选择任务使用的模型,可选有ddparserddparser-ernie-1.0ddparser-ernie-gram-zh
  • tree:确保输出结果是正确的依存句法树,默认为True。
  • prob:是否输出每个弧对应的概率值,默认为False。
  • use_pos:是否返回词性标签,默认为False。
  • use_cuda:是否使用GPU进行切词,默认为False。
  • return_visual:是否返回句法树的可视化结果,默认为False。
  • task_path:自定义任务路径,默认为None。

情感分析

使用BiLSTM模型:

from paddlenlp import Taskflowsenta = Taskflow("sentiment_analysis")
senta("这个产品用起来真的很流畅,我非常喜欢")
>>> [{'text': '这个产品用起来真的很流畅,我非常喜欢', 'label': 'positive', 'score': 0.9938690066337585}]senta(["这个产品用起来真的很流畅,我非常喜欢", "作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上办理入住手续,节省时间"])
>>> [{'text': '这个产品用起来真的很流畅,我非常喜欢', 'label': 'positive', 'score': 0.9938690066337585}, {'text': '作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上办理入住手续,节省时间', 'label': 'positive', 'score': 0.985750675201416}]

使用SKEP情感分析预训练模型进行预测:

senta = Taskflow("sentiment_analysis", model="skep_ernie_1.0_large_ch")
senta("作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上办理入住手续,节省时间。")
>>> [{'text': '作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上办理入住手续,节省时间。', 'label': 'positive', 'score': 0.984320878982544}]

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • model:选择任务使用的模型,可选有bilstmskep_ernie_1.0_large_ch
  • task_path:自定义任务路径,默认为None。

文本相似度

from paddlenlp import Taskflowsimilarity = Taskflow("text_similarity")
similarity([["世界上什么东西最小", "世界上什么东西最小?"]])
>>> [{'text1': '世界上什么东西最小', 'text2': '世界上什么东西最小?', 'similarity': 0.992725}]similarity([["光眼睛大就好看吗", "眼睛好看吗?"], ["小蝌蚪找妈妈怎么样", "小蝌蚪找妈妈是谁画的"]])
>>> [{'text1': '光眼睛大就好看吗', 'text2': '眼睛好看吗?', 'similarity': 0.74502707}, {'text1': '小蝌蚪找妈妈怎么样', 'text2': '小蝌蚪找妈妈是谁画的', 'similarity': 0.8192149}]

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • max_seq_len:最大序列长度,默认为128。
  • task_path:自定义任务路径,默认为None。

知识挖掘-词类知识标注

from paddlenlp import Taskflowwordtag = Taskflow("knowledge_mining")
wordtag("《孤女》是2010年九州出版社出版的小说,作者是余兼羽")
>>> [{'text': '《孤女》是2010年九州出版社出版的小说,作者是余兼羽', 'items': [{'item': '《', 'offset': 0, 'wordtag_label': 'w', 'length': 1}, {'item': '孤女', 'offset': 1, 'wordtag_label': '作品类_实体', 'length': 2}, {'item': '》', 'offset': 3, 'wordtag_label': 'w', 'length': 1}, {'item': '是', 'offset': 4, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '2010年', 'offset': 5, 'wordtag_label': '时间类', 'length': 5, 'termid': '时间阶段_cb_2010年'}, {'item': '九州出版社', 'offset': 10, 'wordtag_label': '组织机构类', 'length': 5, 'termid': '组织机构_eb_九州出版社'}, {'item': '出版', 'offset': 15, 'wordtag_label': '场景事件', 'length': 2, 'termid': '场景事件_cb_出版'}, {'item': '的', 'offset': 17, 'wordtag_label': '助词', 'length': 1, 'termid': '助词_cb_的'}, {'item': '小说', 'offset': 18, 'wordtag_label': '作品类_概念', 'length': 2, 'termid': '小说_cb_小说'}, {'item': ',', 'offset': 20, 'wordtag_label': 'w', 'length': 1}, {'item': '作者', 'offset': 21, 'wordtag_label': '人物类_概念', 'length': 2, 'termid': '人物_cb_作者'}, {'item': '是', 'offset': 23, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '余兼羽', 'offset': 24, 'wordtag_label': '人物类_实体', 'length': 3}]}]wordtag(["热梅茶是一道以梅子为主要原料制作的茶饮","《孤女》是2010年九州出版社出版的小说,作者是余兼羽"])
>>> [{'text': '热梅茶是一道以梅子为主要原料制作的茶饮', 'items': [{'item': '热梅茶', 'offset': 0, 'wordtag_label': '饮食类_饮品', 'length': 3}, {'item': '是', 'offset': 3, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '一道', 'offset': 4, 'wordtag_label': '数量词', 'length': 2}, {'item': '以', 'offset': 6, 'wordtag_label': '介词', 'length': 1, 'termid': '介词_cb_以'}, {'item': '梅子', 'offset': 7, 'wordtag_label': '饮食类', 'length': 2, 'termid': '饮食_cb_梅'}, {'item': '为', 'offset': 9, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_为'}, {'item': '主要原料', 'offset': 10, 'wordtag_label': '物体类', 'length': 4, 'termid': '物品_cb_主要原料'}, {'item': '制作', 'offset': 14, 'wordtag_label': '场景事件', 'length': 2, 'termid': '场景事件_cb_制作'}, {'item': '的', 'offset': 16, 'wordtag_label': '助词', 'length': 1, 'termid': '助词_cb_的'}, {'item': '茶饮', 'offset': 17, 'wordtag_label': '饮食类_饮品', 'length': 2, 'termid': '饮品_cb_茶饮'}]}, {'text': '《孤女》是2010年九州出版社出版的小说,作者是余兼羽', 'items': [{'item': '《', 'offset': 0, 'wordtag_label': 'w', 'length': 1}, {'item': '孤女', 'offset': 1, 'wordtag_label': '作品类_实体', 'length': 2}, {'item': '》', 'offset': 3, 'wordtag_label': 'w', 'length': 1}, {'item': '是', 'offset': 4, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '2010年', 'offset': 5, 'wordtag_label': '时间类', 'length': 5, 'termid': '时间阶段_cb_2010年'}, {'item': '九州出版社', 'offset': 10, 'wordtag_label': '组织机构类', 'length': 5, 'termid': '组织机构_eb_九州出版社'}, {'item': '出版', 'offset': 15, 'wordtag_label': '场景事件', 'length': 2, 'termid': '场景事件_cb_出版'}, {'item': '的', 'offset': 17, 'wordtag_label': '助词', 'length': 1, 'termid': '助词_cb_的'}, {'item': '小说', 'offset': 18, 'wordtag_label': '作品类_概念', 'length': 2, 'termid': '小说_cb_小说'}, {'item': ',', 'offset': 20, 'wordtag_label': 'w', 'length': 1}, {'item': '作者', 'offset': 21, 'wordtag_label': '人物类_概念', 'length': 2, 'termid': '人物_cb_作者'}, {'item': '是', 'offset': 23, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '余兼羽', 'offset': 24, 'wordtag_label': '人物类_实体', 'length': 3}]}]
  • 标签集合:

知识挖掘-词类知识标注任务共包含66种词性及专名类别标签,标签集合如下表

WordTag标签集合 人物类_实体物体类生物类_动物医学术语类链接地址肯定词 人物类_概念物体类_兵器品牌名术语类_生物体个性特征否定词 作品类_实体物体类_化学物质场所类疾病损伤类感官特征数量词 作品类_概念其他角色类场所类_交通场所疾病损伤类_植物病虫害场景事件叹词 组织机构类文化类位置方位宇宙类介词拟声词 组织机构类_企事业单位文化类_语言文字世界地区类事件类介词_方位介词修饰词 组织机构类_医疗卫生机构文化类_奖项赛事活动饮食类时间类助词外语单词 组织机构类_国家机关文化类_制度政策协议饮食类_菜品时间类_特殊日代词英语单词 组织机构类_体育组织机构文化类_姓氏与人名饮食类_饮品术语类连词汉语拼音 组织机构类_教育组织机构生物类药物类术语类_符号指标类副词词汇用语 组织机构类_军事组织机构生物类_植物药物类_中药信息资料疑问词w(标点)
  • 自定义词典

    用户可以通过装载自定义词典来定制化分词和词性标注结果。词典文件每一行表示一个自定义item,可以由一个单词或者多个单词组成,单词后面可以添加自定义标签,格式为item/tag,如果不添加自定义标签,则使用模型默认标签。

    词典文件user_dict.txt示例:

    长津湖/电影类_实体
    收/词汇用语 尾/术语类
    最 大
    海外票仓
    

    以"《长津湖》收尾,北美是最大海外票仓"为例,原本的输出结果为:

    [{'text': '《长津湖》收尾,北美是最大海外票仓', 'items': [{'item': '《', 'offset': 0, 'wordtag_label': 'w', 'length': 1}, {'item': '长津湖', 'offset': 1, 'wordtag_label': '作品类_实体', 'length': 3, 'termid': '影视作品_eb_长津湖'}, {'item': '》', 'offset': 4, 'wordtag_label': 'w', 'length': 1}, {'item': '收尾', 'offset': 5, 'wordtag_label': '场景事件', 'length': 2, 'termid': '场景事件_cb_收尾'}, {'item': ',', 'offset': 7, 'wordtag_label': 'w', 'length': 1}, {'item': '北美', 'offset': 8, 'wordtag_label': '世界地区类', 'length': 2, 'termid': '世界地区_cb_北美'}, {'item': '是', 'offset': 10, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '最大', 'offset': 11, 'wordtag_label': '修饰词', 'length': 2, 'termid': '修饰词_cb_最大'}, {'item': '海外', 'offset': 13, 'wordtag_label': '场所类', 'length': 2, 'termid': '区域场所_cb_海外'}, {'item': '票仓', 'offset': 15, 'wordtag_label': '词汇用语', 'length': 2}]}]
    

    装载自定义词典及输出结果示例:

    from paddlenlp import Taskflowmy_wordtag = Taskflow("knowledge_mining", user_dict="user_dict.txt")
    my_wordtag("《长津湖》收尾,北美是最大海外票仓")
    >>> [{'text': '《长津湖》收尾,北美是最大海外票仓', 'items': [{'item': '《', 'offset': 0, 'wordtag_label': 'w', 'length': 1}, {'item': '长津湖', 'offset': 1, 'wordtag_label': '电影类_实体', 'length': 3}, {'item': '》', 'offset': 4, 'wordtag_label': 'w', 'length': 1}, {'item': '收', 'offset': 5, 'wordtag_label': '词汇用语', 'length': 1}, {'item': '尾', 'offset': 6, 'wordtag_label': '术语类', 'length': 1, 'termid': '动物体构造_cb_动物尾巴'}, {'item': ',', 'offset': 7, 'wordtag_label': 'w', 'length': 1}, {'item': '北美', 'offset': 8, 'wordtag_label': '世界地区类', 'length': 2, 'termid': '世界地区_cb_北美'}, {'item': '是', 'offset': 10, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '最', 'offset': 11, 'wordtag_label': '修饰词', 'length': 1}, {'item': '大', 'offset': 12, 'wordtag_label': '修饰词', 'length': 1, 'termid': '修饰词_cb_大'}, {'item': '海外票仓', 'offset': 13, 'wordtag_label': '场所类', 'length': 4}]}]
    

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • linking:实现基于词类的linking,默认为True。
  • task_path:自定义任务路径,默认为None。
  • user_dict:用户自定义词典文件,默认为None。

知识挖掘-名词短语标注

from paddlenlp import Taskflownptag = Taskflow("knowledge_mining", model="nptag")
nptag("糖醋排骨")
>>> [{'text': '糖醋排骨', 'label': '菜品'}]nptag(["糖醋排骨", "红曲霉菌"])
>>> [{'text': '糖醋排骨', 'label': '菜品'}, {'text': '红曲霉菌', 'label': '微生物'}]# 使用`linking`输出粗粒度类别标签`category`,即WordTag的词汇标签。
nptag = Taskflow("knowledge_mining", model="nptag", linking=True)
nptag(["糖醋排骨", "红曲霉菌"])
>>> [{'text': '糖醋排骨', 'label': '菜品', 'category': '饮食类_菜品'}, {'text': '红曲霉菌', 'label': '微生物', 'category': '生物类_微生物'}]

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • max_seq_len:最大序列长度,默认为64。
  • linking:实现与WordTag类别标签的linking,默认为False。
  • task_path:自定义任务路径,默认为None。

生成式问答

from paddlenlp import Taskflowqa = Taskflow("question_answering")
qa("中国的国土面积有多大?")
>>> [{'text': '中国的国土面积有多大?', 'answer': '960万平方公里。'}]qa(["中国国土面积有多大?", "中国的首都在哪里?"])
>>> [{'text': '中国国土面积有多大?', 'answer': '960万平方公里。'}, {'text': '中国的首都在哪里?', 'answer': '北京。'}]

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。

智能写诗

from paddlenlp import Taskflowpoetry = Taskflow("poetry_generation")
poetry("林密不见人")
>>> [{'text': '林密不见人', 'answer': ',但闻人语响。'}]poetry(["林密不见人", "举头邀明月"])
>>> [{'text': '林密不见人', 'answer': ',但闻人语响。'}, {'text': '举头邀明月', 'answer': ',低头思故乡。'}]

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。

开放域对话

  • 支持两种模式

    • 非交互模式:
    from paddlenlp import Taskflowdialogue = Taskflow("dialogue")
    dialogue(["吃饭了吗"])
    >>> ['刚吃完饭,你在干什么呢?']dialogue(["你好", "吃饭了吗"], ["你是谁?"])
    >>> ['吃过了,你呢', '我是李明啊']
    
    • 交互模式:

    交互模式下,Taskflow具备多轮对话记忆功能。

    from paddlenlp import Taskflowdialogue = Taskflow("dialogue")
    # 输入`exit`可退出交互模式
    dialogue.interactive_mode(max_turn=3)'''
    [Human]:你好
    [Bot]:你好,很高兴认识你,我想问你一下,你喜欢运动吗?
    [Human]:喜欢
    [Bot]:那你喜欢什么运动啊?
    [Human]:篮球,你喜欢篮球吗
    [Bot]:当然了,我很喜欢打篮球的
    '''
    

可配置参数说明

  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • max_seq_len:最大序列长度,默认为512。
  • max_turn:仅在交互模式有效,表示任务能记忆的对话轮数;当max_turn为1时,模型只能记住当前对话,无法获知之前的对话内容。

自定义任务

Taskflow提供了定制接口来使用自己的数据对模型进行微调/训练,适配任务如下:

任务名称默认路径
Taskflow("word_segmentation", mode="base")$HOME/.paddlenlp/taskflow/word_segmentation/lac示例
Taskflow("word_segmentation", mode="accurate")$HOME/.paddlenlp/taskflow/word_segmentation/wordtag示例
Taskflow("ner", mode="fast")$HOME/.paddlenlp/taskflow/ner/lac示例
Taskflow("ner", mode="accurate")$HOME/.paddlenlp/taskflow/ner/wordtag示例
Taskflow("text_correction", model="csc-ernie-1.0")$HOME/.paddlenlp/taskflow/text_correction/csc-ernie-1.0示例
Taskflow("dependency_parsing", model="ddparser")$HOME/.paddlenlp/taskflow/dependency_parsing/ddparser示例
Taskflow("dependency_parsing", model="ddparser-ernie-1.0")$HOME/.paddlenlp/taskflow/dependency_parsing/ddparser-ernie-1.0示例
Taskflow("dependency_parsing", model="ddparser-ernie-gram-zh")$HOME/.paddlenlp/taskflow/dependency_parsing/ddparser-ernie-gram-zh示例
Taskflow("sentiment_analysis", model="bilstm")$HOME/.paddlenlp/taskflow/sentiment_analysis/bilstm暂无
Taskflow("sentiment_analysis", model="skep_ernie_1.0_large_ch")$HOME/.paddlenlp/taskflow/sentiment_analysis/skep_ernie_1.0_large_ch示例
Taskflow("knowledge_mining", model="wordtag")$HOME/.paddlenlp/taskflow/knowledge_mining/wordtag示例
Taskflow("knowledge_mining", model="nptag")$HOME/.paddlenlp/taskflow/knowledge_mining/nptag示例

定制任务示例

这里我们以命名实体识别Taskflow("ner", mode="accurate")为例,展示如何定制自己的模型。

任务的默认路径为$HOME/.paddlenlp/taskflow/ner/wordtag/,该默认路径包含以下文件:

$HOME/.paddlenlp/taskflow/ner/wordtag/
├── model_state.pdparams # 默认模型参数文件
├── model_config.json # 默认模型配置文件
└── tags.txt # 默认标签文件
  • 参考表中对应示例准备数据集和标签文件tags.txt,执行相应训练脚本得到自己的model_state.pdparamsmodel_config.json

  • 通过task_path指定用户自定义路径,自定义路径下的文件需要和默认路径的文件一致:

custom_task_path/
├── model_state.pdparams # 定制模型参数文件
├── model_config.json # 定制模型配置文件
└── tags.txt # 定制标签文件
  • 使用Taskflow加载自定义模型进行一键预测:
from paddlenlp import Taskflowmy_ner = Taskflow("ner", mode="accurate", task_path="./custom_task_path/")

FAQ

Q1 Taskflow如何修改任务保存路径?

A: Taskflow默认会将任务相关模型等文件保存到$HOME/.paddlenlp下,可以在任务初始化的时候通过home_path自定义修改保存路径。

示例:

from paddlenlp import Taskflowner = Taskflow("ner", home_path="/workspace")

通过以上方式即可将ner任务相关文件保存至/workspace路径下。

参考资料

  1. fxsjy/jieba

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 以知识图谱为基础的开放域对话生成的目标规划

笔记整理 | 韩振峰&#xff0c;天津大学硕士。链接&#xff1a;https://ojs.aaai.org//index.php/AAAI/article/view/6474动机 之前有关开放域对话生成的神经模型没有有效的机制来管理聊天主题&#xff0c;并且往往会生成不连贯的对话。受到人与人对话策略的启发&#xff0c;本…

LeetCode 378. 有序矩阵中第K小的元素(二分查找)

文章目录1. 题目2. 解题2.1 暴力法2.2 二分查找1. 题目 给定一个 n x n 矩阵&#xff0c;其中每行和每列元素均按升序排序&#xff0c;找到矩阵中第k小的元素。 请注意&#xff0c;它是排序后的第k小元素&#xff0c;而不是第k个元素。 示例: matrix [[ 1, 5, 9],[10, 11,…

LeetCode 341. 扁平化嵌套列表迭代器(双栈)

文章目录1. 题目2. 双栈解题1. 题目 给定一个嵌套的整型列表。设计一个迭代器&#xff0c;使其能够遍历这个整型列表中的所有整数。 列表中的项或者为一个整数&#xff0c;或者是另一个列表。 示例 1: 输入: [[1,1],2,[1,1]] 输出: [1,1,2,1,1] 解释: 通过重复调用 next 直到…

外卖O2O的用户画像实践

美团外卖经过3年的飞速发展&#xff0c;品类已经从单一的外卖扩展到了美食、夜宵、鲜花、商超等多个品类。用户群体也从早期的学生为主扩展到学生、白领、社区以及商旅&#xff0c;甚至包括在KTV等娱乐场所消费的人群。随着供给和消费人群的多样化&#xff0c;如何在供给和用户…

simbert文本相似度,短文本语义匹配模型

simbert文本相似语义召回&#xff1b;保存及在线服务https://blog.csdn.net/weixin_42357472/article/details/116205077 SimBERT&#xff08;基于UniLM思想、融检索与生成于一体的BERT模型&#xff09;【主要应用场景&#xff1a;相似文本生成、相似文本检索】 https://blog.…

论文浅尝 | 利用开放域触发器知识改进事件检测

笔记整理 | 申时荣&#xff0c;东南大学博士来源&#xff1a;ACL 2020源码&#xff1a;https://github.com/shuaiwa16/ekd.git摘要事件检测&#xff08;ED&#xff09;是文本自动结构化处理的一项基本任务。由于训练数据的规模小&#xff0c;以前的方法在unseen/标记稀疏的触发…

Beyond 预训练语言模型,NLP还需要什么样的知识?

近年来&#xff0c;深度学习技术已广泛应用于NLP领域&#xff0c;但实际应用效果往往受限于缺乏大规模高质量监督样本。2018年底&#xff0c;预训练语言模型横空出世&#xff0c;极大缓解了这个问题&#xff0c;通过“超大规模无监督语料上的预训练语言模型相对少量的监督样本进…

日志级别动态调整——小工具解决大问题

随着外卖业务的快速发展&#xff0c;业务复杂度不断增加&#xff0c;线上系统环境有任何细小波动&#xff0c;对整个外卖业务都可能产生巨大的影响&#xff0c;甚至形成灾难性的雪崩效应&#xff0c;造成巨大的经济损失。每一次客诉、系统抖动等都是对技术人员的重大考验&#…

LeetCode 324. 摆动排序 II

文章目录1. 题目2. 解题1. 题目 给定一个无序的数组 nums&#xff0c;将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。 示例 1: 输入: nums [1, 5, 1, 1, 6, 4] 输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6] 示例 2: 输入: nums [1, 3, 2, 2, 3,…

最全的Pycharm debug技巧

最全的Pycharm debug技巧&#xff1a; 工欲善其事&#xff0c;必先利其器。无论你的 IDE 是 IntelliJ IDEA、Pycharm、WebStorm、GoLang、还是PhpStorm &#xff0c;调试器都是标配。在遇到有问题的程序时&#xff0c;合理的利用调试器的跟踪和断点技巧&#xff0c;可以很快的…

OpenKG祝大家端午安康

—????????OpenKG祝大家端午安康????????—

两个月,刷了八千篇Arxiv,我发现……

文 | 白鹡鸰编 | 小轶从五月初到现在&#xff0c;大约刷了八千篇Arxiv之后&#xff0c;我发现我有毛病。当然&#xff0c;这是读论文上头时的牢骚&#xff0c;不是真心话&#xff0c;只是说&#xff0c;我在Arxiv上投入的精力的努力&#xff0c;与我预计的收获不成正比。故事的…

深度学习在美团的应用

近年来&#xff0c;深度学习在语音、图像、自然语言处理等领域取得非常突出的成果&#xff0c;成了最引人注目的技术热点之一。美团这两年在深度学习方面也进行了一些探索&#xff0c;其中在自然语言处理领域&#xff0c;我们将深度学习技术应用于文本分析、语义匹配、搜索引擎…

LeetCode 315. 计算右侧小于当前元素的个数(二叉查找树二分查找归并排序逆序数总结)

文章目录1. 题目2. 解题2.1 二叉查找树2.2 二分插入2.3 归并排序1. 题目 给定一个整数数组 nums&#xff0c;按要求返回一个新数组 counts。数组 counts 有该性质&#xff1a; counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例: 输入: [5,2,6,1] 输出: [2,1,1…

Python实现共现语义网络

Python实现共现语义网络&#xff1a;

领域应用 | 金融资管领域知识图谱的构建和应用

转载公众号 | DataFunTalk分享嘉宾&#xff1a;李渔 熵简科技 联合创始人编辑整理&#xff1a;唐汝佳出品平台&#xff1a;DataFunTalk导读&#xff1a;本次分享的主题是金融资管领域知识图谱的构建和应用&#xff0c;主要介绍如何运用大数据、AI这些技术手段&#xff0c;来帮助…

我分析了ACL21论文列表,发现对比学习已经...

文 | 花小花Posy小伙伴们&#xff0c;好久不见呀&#xff0c;小花又回来了&#xff01;最近关注对比学习&#xff0c;所以ACL21的论文列表出来后&#xff0c;小花就搜罗了一波&#xff0c;好奇NLPers们都用对比学习干了什么&#xff1f;都是怎么用的呀&#xff1f;效果怎样呀&a…

2016,你最不应该错过的热门技术文章

本文首发在“美团技术团队”微信公众号&#xff0c;内容已覆盖截止至2017年1月23日最新的技术文章。 1955年3月15日&#xff0c;爱因斯坦给刚去世的密友Michele Besso家人的信中说&#xff1a; “像我们这样信仰物理学的人都知道&#xff0c;过去、现在和未来之间的分别只不过是…

LeetCode 629. K个逆序对数组(DP)

文章目录1. 题目2. 动态规划3. 优化的DP1. 题目 给出两个整数 n 和 k&#xff0c;找出所有包含从 1 到 n 的数字&#xff0c;且恰好拥有 k 个逆序对的不同的数组的个数。 逆序对的定义如下&#xff1a;对于数组的第i个和第 j个元素&#xff0c;如果满i < j且 a[i] > a[…

快速的找出元素是否在list中 python

number [[1,2],[3,2]] num np.array(number) np.argwhere(num2) np.argwhere(num2) array([[0, 1], [1, 1]], dtypeint64) 注意&#xff1a;只能是维度相同的时候&#xff0c;才能用该方法。 om ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or nd…