【ModelScope使用】1个模型8个SOTA,SPACE预训练对话模型初体验

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 简介: 近期SIGIR会议上发布的预训练对话模型SPACE在8个下游相关任务获得了SOTA结果,表现抢眼。阿里近期打造的Modelscope模型即服务共享平台已接入了SPACE模型,笔者在该平台做了尝试,轻松复现了下游任务中的的SOTA结果。

SPACE预训练对话模型

SPACE 统一了对话理解,对话策略和对话生成,并在50余个有标和无标对话相关数据集上进行半监督预训练,最终在下游对话任务8个数据集中都取得了SOTA的结果。该模型通过5种损失函数对于对话理解和对话策略加以建模,并且结合了最新的动态prompt技术,对于对话输入和回复的语意都做到了精准的把握。

ModelScope使用

MdoelScope作为一个Maas平台,有着和Huggingface类似的功能和界面,还提供了在线开发的环境,能够轻松体验和复现SOTA的结果。详细的信息可以查看ModelScope使用简介。可以用以下的两种方法来使用ModelScope:

(1)使用ModelScope提供的远程环境,在Notebook中进行开发

在ModelScope中注册后进入个人中心,在我的Notebook中使用GPU环境打开Notebook

(2)下载modelscope工具包,在本地环境开发:

安装modelscope(python>=3.7):  pip install modelscope -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html(注:如需节省空间,可在modelscop后加入[NLP],只下载自然语言处理相关工具)

在下游任务中利用SPACE复现SOTA结果

任务一:对话状态跟踪(DST)

  • 任务和模型概况:

DST任务为:给定对话上下文,追踪截止到当前轮为止的用户状态。

使用的模型为SPACE3.0在MultiWOZ2.2上finetune的结果,最终在该数据集上取得了Joint Goal Accuracy 57.50的结果,详情的信息在modelcard中都有,以下是一些调用的过程。

  • 代码调用方法:

(1)加载模型:

#模型加载frommodelscope.modelsimportModelmodel_id='damo/nlp_space_dialog-state-tracking'model=Model.from_pretrained(model_id)
#创建pipelinefrommodelscope.pipelinesimportpipelinefrommodelscope.preprocessorsimportDialogStateTrackingPreprocessorfrommodelscope.utils.constantimportTaskspreprocessor=DialogStateTrackingPreprocessor(model_dir=model.model_dir)
my_pipeline=pipeline(task=Tasks.dialog_state_tracking, model=model, preprocessor=preprocessor)

(2)组织输入数据,格式见下图:

如果要进行完整的测试,可以从MultiWOZ2.2上下载相应的数据并处理成相应的格式。

注意:数据格式需要严格按照以下格式进行组织,并且每轮对话的System需要包含ground-truth(或者模型预测的Dialog-Act)

test_case= [
    { 
"User-1": "Hi, I\'m looking for a train that is going to cambridge and arriving there by 20:45, is there anything like that?"    }, 
    { 
"System-1": "There are over 1,000 trains like that.  Where will you be departing from?",
"Dialog_Act-1": {
"Train-Inform": [["Choice", "over 1"], ["Choice", "000"]],"Train-Request": [["Depart", "?"]]
        },
"User-2": "I am departing from birmingham new street."}, 
    { 
"System-2": "Can you confirm your desired travel day?",
"Dialog_Act-2": {
"Train-Request": [["Day", "?"]]
        },
"User-3": "I would like to leave on wednesday"    }
]

(3)最终测试及输出结果:

history_states= [{}]
utter= {}
forstep, iteminenumerate(test_case):
utter.update(item)
result=my_pipeline({
'utter': utter,
'history_states': history_states    })
print({k: vfork, vinresult['dialog_states'].items() ifv!='none'}) 
# 输出对话状态,值='none'的 slot 代表当前未提及,默认不显示history_states.extend([result['dialog_states'], {}])

结果显示:


任务二:对话意图识别(NLU)

  • 任务和模型概况:

NLU任务为:给定对话上下文,识别当轮用户的意图。

使用的模型为SPACE3.0在Banking77数据集(可从DialoGLUE中获得)上finetune的结果,最终在该数据集上取得了94.94的 Accuracy,模型详情见modelcard

  • 代码调用方法:

(1)加载模型:

#模型加载frommodelscope.modelsimportModelmodel_id='damo/nlp_space_dialog-intent-prediction'model=Model.from_pretrained(model_id)
#创建pipelinefrommodelscope.pipelinesimportpipelinefrommodelscope.preprocessorsimportDialogIntentPredictionPreprocessorfrommodelscope.utils.constantimportTaskspreprocessor=DialogIntentPredictionPreprocessor(model_dir=model.model_dir)
my_pipeline=pipeline(task=Tasks.dialog_intent_prediction, model=model, preprocessor=preprocessor)

(2)数据组织及测试:

#输入result=my_pipeline("I cannot find my card now.") # 输入单轮的 user query 即可print(result['label'])
#输出结果:lost_or_stolen_card

附:该模型仅使用于银行领域

任务三:对话回复生成(NLG)

  • 任务和模型概况:

NLG任务为:给定对话上下文,预测系统的回复话术。

使用的模型为SPACE3.0在MultiWOZ2.2上finetune的结果,最终在该数据集上取得了Combined Score 110.95的结果,模型详情见modelcard

  • 代码调用方法:

(1)加载模型:

#模型加载frommodelscope.modelsimportModelmodel_id='damo/nlp_space_dialog-modeling'model=Model.from_pretrained(model_id)
#创建pipelinefrommodelscope.pipelinesimportpipelinefrommodelscope.preprocessorsimportDialogModelingPreprocessorfrommodelscope.utils.constantimportTaskspreprocessor=DialogModelingPreprocessor(model_dir=model.model_dir)
my_pipeline=pipeline(task=Tasks.task_oriented_conversation, model=model, preprocessor=preprocessor)

(2)数据组织及测试:

#输入test_case= [
    { "user": "i would like a taxi from saint john 's college to pizza hut fen ditton ."}, # 第一轮输入     { "user": "i want to leave after 17:15 ."} # 第二轮输入]
result= {}
foritemintest_case:
user=item['user']
print('user: {}'.format(user))
result=my_pipeline({
'user_input': user,
'history': result    })
print('response : {}'.format(' '.join(result['response'])))   # 批量输出每一轮的系统回复#输出结果:response : i can help with that . what time would you like to leave and arrive by ?#输出结果:user: i want to leave after 17:15 .#输出结果:response : booking completed ! booked car type : [value_car] contact number : [value_phone]

注:该模型的输出为去词汇化的结果,如果需要得到自然语言回复,需要通过查询数据库进行回填。

最后

就这么简单,半小时不到,只需要几十行代码,我们就在ModelScope复现了SPACE三个下游任务效果,ModelScope的整体使用体验还是挺不错的~

相关文章
|
5月前
|
自然语言处理
在ModelScope中,你可以通过设置模型的参数来控制输出的阈值
在ModelScope中,你可以通过设置模型的参数来控制输出的阈值
129 1
|
5月前
|
API 语音技术
ModelScope-FunASR**有支持热词又支持时间戳的模型**。
【2月更文挑战第30天】ModelScope-FunASR**有支持热词又支持时间戳的模型**。
200 2
|
5月前
|
人工智能 API 决策智能
Modelscope结合α-UMi:基于Modelscope的多模型协作Agent
基于单个开源小模型的工具调用Agent,由于模型容量和预训练能力获取的限制,无法在推理和规划、工具调用、回复生成等任务上同时获得比肩大模型等性能。
|
5月前
|
人工智能 达摩院 自然语言处理
超好用的开源模型平台,ModelScope阿里达摩院
超好用的开源模型平台,ModelScope阿里达摩院
405 1
|
2月前
|
人工智能 开发框架 物联网
赢万元奖金 | 第七届CCF开源创新大赛ModelScope开源模型应用挑战赛开启报名!
第七届CCF开源创新大赛(后简称“大赛”) 由中国计算机学会(CCF)主办,长沙理工大学、CCF开源发展委员会联合承办。
|
5月前
|
人工智能 自然语言处理 搜索推荐
魔搭ModelScope社区作为一个AI模型开源平台,提供了丰富的模型资源和便捷的服务
【2月更文挑战第9天】魔搭ModelScope社区作为一个AI模型开源平台,提供了丰富的模型资源和便捷的服务
425 3
|
4月前
|
人工智能 开发工具 Swift
ModelScope联手OpenDataLab:直接调用7000+开源数据集,赋能AI模型加速研发
魔搭社区和OpenDatalab浦数合作,共同开启一场模型与数据的深度融合,旨在为中国开发者打造更加高效、开放的AI体验。
|
5月前
|
机器学习/深度学习 人工智能 Swift
PAI x ModelScope: 在PAI使用ModelScope模型
在当前的人工智能领域,特别是大语言模型、文生图等领域,基于预训练模型完成机器学习模型的开发部署已成为重要的应用范式,开发者们依赖于这些先进的开源预训练模型,以简化机器学习应用的开发并加速创新。
|
5月前
|
机器学习/深度学习 测试技术 TensorFlow
ModelScope模型使用与EAS部署调用
本文以魔搭数据的模型为例,演示在DSW实例中如何快速调用模型,然后通过Python SDK将模型部署到阿里云PAI EAS服务,并演示使用EAS SDK实现对服务的快速调用,重点针对官方关于EAS模型上线后示例代码无法正常调通部分进行了补充。
202 2
|
5月前
modelscope-funasr怎么拿验证集评估微调后的模型效果呢
【2月更文挑战第19天】modelscope-funasr怎么拿验证集评估微调后的模型效果呢
81 1