SiameseUniNLU零样本通用自然语言理解-中文-base

我要开发同款
匿名用户2024年07月31日
463阅读

技术信息

开源地址
https://modelscope.cn/models/iic/nlp_structbert_siamese-uninlu_chinese-base
授权协议
Apache License 2.0

作品详情

SiameseUiNLU通用自然语言理解模型介绍

SiameseUiNLU通用自然语言理解模型,基于提示(Prompt)+文本(Text)的构建思路,通过设计适配于多种任务的Prompt,并利用指针网络(Poiter Network)实现片段抽取(Spa Extractio),从而实现对命名实体识别、关系抽取、事件抽取、属性情感抽取、情感分类、文本分类、文本匹配、自然语言推理、阅读理解等多类自然语言理解任务的统一处理。和市面上已有的自然语言理解类模型不同的是:

  • 更通用:UiNLU为各种理解类任务都设计了相应适配的Prompt,并通过大量训练,使得一个模型几乎可以解决所有自然语言理解类任务,支持的任务包括:
  • 命名实体识别:抽取输入文本中的实体片段
  • 关系抽取:抽取输入文本中具备特定关系类型的主客实体片段
  • 事件抽取:抽取输入文本中相互联系的事件论元片段
  • 属性情感抽取:抽取输入文本中特定对象的相关情感词片段
  • 指代消解:判断给定代词是否指向文中的某一对象
  • 情感分类:给定一段文本和候选情感标签,返回可以恰当表示该段文本情感倾向的标签
  • 文本分类:给定一段文本和候选类别标签,返回可以恰当表示该段文本所属类别的标签
  • 文本匹配:给定两段文本和相应相似度标签,返回可以恰当表示两段文本相似度的标签,文本相似度标签通常为“相似”,“不相似”两种
  • 自然语言推理:给定两段文本和相应文本关系标签,返回可以恰当表示两段文本关系的标签,文本关系标签通常为“蕴含”,“矛盾”,“中立”三种
  • 阅读理解:输入问题及参考文本,返回基于该段参考文本的问题答案,通常分为选择类阅读理解和抽取类阅读理解
  • 更高效:UiNLU基于孪生神经网络的思想,将预训练语言模型(PLM)的前 N- 层改为双流,后 层改为单流。我们认为语言模型的底层更多的是实现局部的简单语义信息的交互,顶层更多的是深层信息的交互,因此前N-层不需要让Prompt和Text做过多的交互,我们将前N-层Text的隐向量表示缓存了下来,从而将推理速度提升了30%
  • 更精准:我们在10类任务、6个领域、15个数据集上进行了测试

模型描述

模型基于structbert-base-chiese在千万级远监督数据+有监督数据预训练得到,模型框架如下图:

期望模型使用方式以及适用范围

你可以使用该模型,实现命名实体识别、关系抽取、事件抽取、属性情感抽取、指代消解、情感分类、文本分类、文本匹配、自然语言推理、阅读理解等各类信息抽取任务。

如何使用

安装Modelscope

依据ModelScope的介绍,实验环境可分为两种情况。在此推荐使用第2种方式,点开就能用,省去本地安装环境的麻烦,直接体验ModelScope。

1 本地环境安装

可参考ModelScope环境安装

2 Notebook

ModelScope直接集成了线上开发环境,用户可以直接在线训练、调用模型。

打开模型页面,点击右上角“在Notebook中打开”,选择机器型号后,即可进入线上开发环境。

代码范例

Fie-Tue 微调示例
import os
import jso
from modelscope.traiers import build_traier
from modelscope.msdatasets import MsDataset
from modelscope.utils.hub import read_cofig
from modelscope.metaifo import Metrics
from modelscope.utils.costat import DowloadMode


model_id = 'damo/lp_structbert_siamese-uilu_chiese-base'

WORK_DIR = '/tmp'

trai_dataset = MsDataset.load('damo/people_daily_er_1998_tiy', amespace='damo', split='trai', dowload_mode=DowloadMode.FORCE_REDOWNLOAD)
eval_dataset = MsDataset.load('damo/people_daily_er_1998_tiy', amespace='damo', split='validatio', dowload_mode=DowloadMode.FORCE_REDOWNLOAD)


max_epochs=3
kwargs = dict(
    model=model_id,
    model_revisio='master',
    trai_dataset=trai_dataset,
    eval_dataset=eval_dataset,
    max_epochs=max_epochs,
    work_dir=WORK_DIR)


traier = build_traier('siamese-uie-traier', default_args=kwargs)

prit('===============================================================')
prit('pre-traied model loaded, traiig started:')
prit('===============================================================')

traier.trai()

prit('===============================================================')
prit('trai success.')
prit('===============================================================')

for i i rage(max_epochs):
    eval_results = traier.evaluate(f'{WORK_DIR}/epoch_{i+1}.pth')
    prit(f'epoch {i} evaluatio result:')
    prit(eval_results)


prit('===============================================================')
prit('evaluate success')
prit('===============================================================')
零样本推理示例
from modelscope.pipelies import pipelie
from modelscope.utils.costat import Tasks

sematic_cls = pipelie(Tasks.siamese_uie, 'damo/lp_structbert_siamese-uilu_chiese-base', model_revisio='v1.0')

# 命名实体识别 {实体类型: Noe}
sematic_cls(
    iput='1944年毕业于北大的名古屋铁道会长谷口清太郎等人在日本积极筹资,共筹款2.7亿日元,参加捐款的日本企业有69家。', 
    schema={
        '人物': Noe,
        '地理位置': Noe,
        '组织机构': Noe
    }
) 
# 关系抽取 {主语实体类型: {关系(宾语实体类型): Noe}}
sematic_cls(
    iput='在北京冬奥会自由式中,2月8日上午,滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌。2月9日上午,滑雪男子大跳台决赛中日本选手小泉次郎以188.25分获得银牌!', 
      schema={
        '人物': {
            '比赛项目(赛事名称)': Noe,
            '参赛地点(城市)': Noe,
            '获奖时间(时间)': Noe,
            '选手国籍(国籍)': Noe
        }
    }
) 

# 事件抽取 {事件类型(事件触发词): {参数类型: Noe}}
sematic_cls(
    iput='7月28日,天津泰达在德比战中以0-1负于天津天海。', 
      schema={
        '胜负(事件触发词)': {
            '时间': Noe,
            '败者': Noe,
            '胜者': Noe,
            '赛事名称': Noe
        }
    }
) 

# 属性情感抽取 {属性词: {情感词: Noe}}
sematic_cls(
    iput='很满意,音质很好,发货速度快,值得购买', 
      schema={
        '属性词': {
            '情感词': Noe,
        }
    }
) 

# 允许属性词缺省,#表示缺省
sematic_cls(
    iput='#很满意,音质很好,发货速度快,值得购买', 
      schema={
        '属性词': {
            '情感词': Noe,
        }
    }
) 

# 支持情感分类
sematic_cls(
    iput='很满意,音质很好,发货速度快,值得购买', 
      schema={
        '属性词': {
            "正向情感(情感词)": Noe, 
            "负向情感(情感词)": Noe, 
            "中性情感(情感词)": Noe
        }
    }
) 

# 指代消解,判断选项通过英文逗号“,”隔开,拼接在输入文本前面并用“|”分隔
sematic_cls(
    iput='是的,不是|哥哥点了点头。“我这几年苦哇……现在玲玲也大一点了,所以……”他望着妹妹(候选词),脸上显出一副要求她(代词)谅解的表情。', 
      schema={
        '在下面的描述中,代词“她”指代的是“妹妹”吗?': Noe
        }
) 

# 情感分类,情感标签通过英文逗号“,”隔开,拼接在输入文本前面并用“|”分隔;同时也支持情绪分类任务,换成相应情绪标签即可,e.g. "无情绪,积极,愤怒,悲伤,恐惧,惊奇"
sematic_cls(
    iput='正向,负向|有点看不下去了,看作者介绍就觉得挺矫情了,文字也弱了点。后来才发现 大家对这本书评价都很低。亏了。', 
      schema={
        '情感分类': Noe
        }
)

# 文本分类,文本标签通过英文逗号“,”隔开,拼接在输入文本前面并用“|”分隔
sematic_cls(
    iput='民生故事,文化,娱乐,体育,财经,房产,汽车,教育,科技,军事,旅游,国际,证券股票,农业三农,电竞游戏|学校召开2018届升学及出国深造毕业生座谈会就业指导', 
      schema={
        '分类': Noe
        }
)

# 文本匹配,文本相似度标签通过英文逗号“,”隔开,拼接在输入文本前面并用“|”分隔;输入文本由两段文本组成,并用“&”隔开
sematic_cls(
    iput='相似,不相似|摄像头区域遮挡屏幕&通话遮挡屏幕黑屏正常', 
      schema={
        '文本匹配': Noe
        }
)

# 文本匹配也可以用下面这种方式组织,判断选项通过英文逗号“,”隔开,拼接在输入文本前面并用“|”分隔;输入文本由两段文本组成,并分别用“句子1”和“句子2”区分
sematic_cls(
    iput='是的,不是|句子1:摄像头区域遮挡屏幕;句子2:通话遮挡屏幕黑屏正常', 
      schema={
        '下面两句话的意思是否相同': Noe
        }
)

# 自然语言推理,文本关系标签通过英文逗号“,”隔开,拼接在输入文本前面并用“|”分隔;输入文本由两段文本组成,并分别用“段落1”和“段落2”区分
sematic_cls(
    iput='蕴含,矛盾,中立|段落1:是,但是你比如说像现在这种情况,是不是就是说咱们离它就绝对人类是再也没有任何可能性了;段落2:我对人类可能性有所思考', 
      schema={
        '段落2和段落1的关系是:': Noe
        }
)

# 选择类阅读理解,选项通过英文逗号“,”隔开,拼接在输入文本前面并用“|”分隔
sematic_cls(
    iput='飞机票太贵,时间来不及,坐飞机头晕,飞机票太便宜|A:最近飞机票打折挺多的,你还是坐飞机去吧。B:反正又不是时间来不及,飞机再便宜我也不坐,我一听坐飞机就头晕。', 
      schema={
        'B为什么不坐飞机?': Noe
        }
)

# 抽取类阅读理解
sematic_cls(
    iput='大莱龙铁路位于山东省北部环渤海地区,西起位于益羊铁路的潍坊大家洼车站,向东经海化、寿光、寒亭、昌邑、平度、莱州、招远、终到龙口,连接山东半岛羊角沟、潍坊、莱州、龙口四个港口,全长175公里,工程建设概算总投资11.42亿元。铁路西与德大铁路、黄大铁路在大家洼站接轨,东与龙烟铁路相连。大莱龙铁路于1997年11月批复立项,2002年12月28日全线铺通,2005年6月建成试运营,是横贯山东省北部的铁路干线德龙烟铁路的重要组成部分,构成山东省北部沿海通道,并成为环渤海铁路网的南部干线。铁路沿线设有大家洼站、寒亭站、昌邑北站、海天站、平度北站、沙河站、莱州站、朱桥站、招远站、龙口西站、龙口北站、龙口港站。大莱龙铁路官方网站', 
      schema={
        '大莱龙铁路位于哪里?': Noe
        }
)

模型局限性以及可能的偏差

模型在较冷门的场景,效果可能不及预期。

相关论文以及引用信息

@article{wag2019structbert,
  title={Structbert: Icorporatig laguage structures ito pre-traiig for deep laguage uderstadig},
  author={Wag, Wei ad Bi, Bi ad Ya, Mig ad Wu, Che ad Bao, Zuyi ad Xia, Jiaga ad Peg, Liwei ad Si, Luo},
  joural={arXiv preprit arXiv:1908.04577},
  year={2019}
}
@iproceedigs{Zhao2021AdjacecyLO,
  title={Adjacecy List Orieted Relatioal Fact Extractio via Adaptive Multi-task Learig},
  author={Fubag Zhao ad Zhuore Jiag ad Yagyag Kag ad Chaglog Su ad Xiaozhog Liu},
  booktitle={FINDINGS},
  year={2021}
}

功能介绍

SiameseUniNLU通用自然语言理解模型介绍 SiameseUniNLU通用自然语言理解模型,基于提示(Prompt)+文本(Text)的构建思路,通过设计适配于多种任务的Prompt,并利用指

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论