镜像社区
部署GPU实例
文档中心
常见问题(FAQ)
深度学习
其他
SiameseUniNLU零样本通用NLU
一键实现各种NLU任务
0/小时
v1.0

SiameseUniNLU 镜像使用教程

  1. 模型介绍

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

  • 更通用

    :UniNLU为各种理解类任务都设计了相应适配的Prompt,并通过大量训练,使得一个模型几乎可以解决所有自然语言理解类任务,支持的任务包括:

    • 命名实体识别:抽取输入文本中的实体片段
    • 关系抽取:抽取输入文本中具备特定关系类型的主客实体片段
    • 事件抽取:抽取输入文本中相互联系的事件论元片段
    • 属性情感抽取:抽取输入文本中特定对象的相关情感词片段
    • 指代消解:判断给定代词是否指向文中的某一对象
    • 情感分类:给定一段文本和候选情感标签,返回可以恰当表示该段文本情感倾向的标签
    • 文本分类:给定一段文本和候选类别标签,返回可以恰当表示该段文本所属类别的标签
    • 文本匹配:给定两段文本和相应相似度标签,返回可以恰当表示两段文本相似度的标签,文本相似度标签通常为“相似”,“不相似”两种
    • 自然语言推理:给定两段文本和相应文本关系标签,返回可以恰当表示两段文本关系的标签,文本关系标签通常为“蕴含”,“矛盾”,“中立”三种
    • 阅读理解:输入问题及参考文本,返回基于该段参考文本的问题答案,通常分为选择类阅读理解和抽取类阅读理解
  • 更高效:UniNLU基于孪生神经网络的思想,将预训练语言模型(PLM)的前 N-n 层改为双流,后 n 层改为单流。语言模型的底层更多的是实现局部的简单语义信息的交互,顶层更多的是深层信息的交互,因此前N-n层不需要让Prompt和Text做过多的交互。

  1. 模型结构

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

环境安装

镜像中已经提供了一个可用的conda虚拟环境:nlp。若环境不可用或出现运行错误,可在新建conda环境,并把以下依赖包保存为"requirements.txt", 执行命令安装:

addict
datasets
dill
Jinja2
modelscope
mpmath
multidict
multiprocess
networkx
numpy
packaging
pandas
pillow
pytz
PyYAML
regex
requests
safetensors
scipy
setuptools
simplejson
sortedcontainers
sympy
tokenizers
torch
tqdm
transformers
triton
tzdata
urllib3
wheel
yarl

零样本推理示例

激活conda虚拟环境:

conda activate nlp

运行测试代码:

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks


semantic_cls = pipeline(
    task=Tasks.siamese_uie,
    model="/root/workspace/nlp_structbert_siamese-uninlu_chinese-base",
)

# 命名实体识别 {实体类型: None}
print(
    semantic_cls(
        input="1944年毕业于北大的名古屋铁道会长谷口清太郎等人在日本积极筹资,共筹款2.7亿日元,参加捐款的日本企业有69家。",
        schema={"人物": None, "地理位置": None, "组织机构": None},
    )
)

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

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


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


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

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

镜像信息
@whisdom
已使用
5
镜像大小50GB
最近编辑2025-02-13
支持卡型
RTX40系48G RTX40系P403080Ti3090A100A800
+7
框架版本
PyTorch-2.5.1
CUDA版本
12.4
应用
JupyterLab: 8888
版本
v1.0
2025-07-03
PyTorch:2.5.1 | CUDA:12.4 | 大小:50.00GB