开发者社区> 游客xlpmt3zasm7yo> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 简介: 近期SIGIR会议上发布的预训练对话模型SPACE在8个下游相关任务获得了SOTA结果,表现抢眼。阿里近期打造的Modelscope模型即服务共享平台已接入了SPACE模型,笔者在该平台做了尝试,轻松复现了下游任务中的的SOTA结果。
+关注继续查看

SPACE预训练对话模型

image

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

imageModelScope使用

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

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

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

(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)加载模型:

#模型加载
from modelscope.models import Model
model_id = 'damo/nlp_space_dialog-state-tracking'
model = Model.from_pretrained(model_id)
#创建pipeline
from modelscope.pipelines import pipeline
from modelscope.preprocessors import DialogStateTrackingPreprocessor
from modelscope.utils.constant import Tasks
preprocessor = 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 = {}
for step, item in enumerate(test_case):
    utter.update(item)
    result = my_pipeline({
        'utter': utter,
        'history_states': history_states
    })
    print({k: v for k, v in result['dialog_states'].items() if v != 'none'}) 
    # 输出对话状态,值='none'的 slot 代表当前未提及,默认不显示
    history_states.extend([result['dialog_states'], {}])

结果显示:

image


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

  • 任务和模型概况:

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

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

  • 代码调用方法:

(1)加载模型:

#模型加载
from modelscope.models import Model
model_id = 'damo/nlp_space_dialog-intent-prediction'
model = Model.from_pretrained(model_id)
#创建pipeline
from modelscope.pipelines import pipeline
from modelscope.preprocessors import DialogIntentPredictionPreprocessor
from modelscope.utils.constant import Tasks
preprocessor = 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)加载模型:

#模型加载
from modelscope.models import Model
model_id = 'damo/nlp_space_dialog-modeling'
model = Model.from_pretrained(model_id)
#创建pipeline
from modelscope.pipelines import pipeline
from modelscope.preprocessors import DialogModelingPreprocessor
from modelscope.utils.constant import Tasks
preprocessor = 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 = {}
for item in test_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的整体使用体验还是挺不错的~

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
全文搜索引擎 Lucene Solr ElasticSearch 关系?
全文搜索引擎是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。
62 0
Sql Support within Solr-类Sql的solr搜索实现(1)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。
31 0
EasyUI+JavaWeb奖助学金管理系统[5]-使用ApacheCommonDbUtils进行数据访问类开发
本文目录 1. 本章任务 2. 数据模型类开发 3. 数据访问类选型 4. 数据访问类开发 5. 测试验证
49 0
Behind the Scenes with Alibaba Cloud's 8K Live Streaming
Learn about 8K and discover how Alibaba Cloud realized the world's first Internet-based 8K live streaming solution.
2687 0
使用jquery.qrcode.js生成二维码
通常生成二维码的方式有两种:第一种是java代码的形式,第二种是通过Js方式。 在这里我做个记录,用js生成二维码,可以在官网下载源码:http://jeromeetienne.github.io/jquery-qrcode/ 1.
973 0
Alsa音频子系统Codec---al5623.c内核代码框架分析
驱动代码位于: sound/soc/codec/alc5623.c随便找个linux内核都会有。 1、首先进行i2c总线驱动加载在: static int __init alc5623_modinit(void)在该函数中: i2c_add_driver(&alc5623_i2c_driver)...
1116 0
1
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载