---
title: nlp_space_dialog-modeling
canonical_url: "https://www.modelscope.cn/models/iic/nlp_space_dialog-modeling"
md_url: "https://www.modelscope.cn/models/iic/nlp_space_dialog-modeling.md"
repository: iic/nlp_space_dialog-modeling
chinese_name: "SPACE对话生成模型-英文-base"
last_updated: 2022-10-22
license: "Apache License 2.0"
pipeline_tag: task-oriented-conversation
tasks:
  - task-oriented-conversation
model_type:
  - space3.0
library_name:
  - pytorch
frameworks:
  - pytorch
language:
  - en
domain:
  - nlp
downloads: 757
stars: 4
tags:
  - transformer
  - Alibaba
---

# nlp_space_dialog-modeling

> nlp_space_dialog-modeling - iic 在 ModelScope 开源的模型。该模型是 SPACE 基于一个端到端多轮对话数据集 MultiWOZ2.0 微调后的下游模型，称作 space_dialog-modeling，可针对旅游、餐馆等领域和用户直接进行多轮对话。

iic/nlp_space_dialog-modeling 是 ModelScope 魔搭社区上的task-oriented-conversation模型，采用 Apache License 2.0 许可。

- **Repository**: iic/nlp_space_dialog-modeling
- **License**: Apache License 2.0
- **Tasks**: task-oriented-conversation
- **Tags**: transformer, Alibaba
- **Downloads**: 757
- **Stars**: 4
- **Last updated**: 2022-10-22

Source: https://www.modelscope.cn/models/iic/nlp_space_dialog-modeling

---

# SPACE 端到端任务型对话生成模型介绍
SPACE 模型是一个统一的半监督预训练对话模型，可用于解决下游各种类型的任务型对话任务。模型采用大量无标对话语料和少量对话标注知识进行预训练，统一的架构使得模型可同时用于对话理解和对话生成类任务。模型采用全小写英文语料进行训练和使用。

本项目的模型是 SPACE 基于一个端到端多轮对话数据集 MultiWOZ2.0 微调后的下游模型，称作 space_dialog-modeling，可针对餐馆、酒店等领域和用户直接进行多轮对话。用户可以在对话过程中表达自己对实体属性的要求，并在系统的帮助下找到符合要求的实体。


## 模型描述
SPACE同时采用有英文标注对话语料和英文无标注对话语料进行预训练，旨在对话预训练过程中融入对话标注知识。
模型采用统一的单个Transformer架构作为模型底座，由四个连续的组件组成，以建模任务型对话中的对话流：
- 对话编码模块：用于编码对话历史并且捕捉公共的对话上下文表征
- 对话理解模块：用于提取当前轮用户问题或者系统回复的语义向量
- 对话策略模块：用于生成代表当前轮系统回复的高层次语义的策略向量
- 对话生成模块：用于生成当前轮合适的系统回复语句以返回给用户

模型采用半监督的方式同时在有标数据和无标数据上进行训练，针对每个模型组件设计不同的预训练目标，最终模型采用5个预训练目标：片段掩码语言建模，半监督理解语义建模，语义区域建模，策略语义建模和对话生成建模，最后以多任务的方式进行训练。
因此，模型可以在预训练过程中同时学到对话理解，对话策略和对话生成的能力，可以同时用于下游各种类型的任务型对话任务。针对对话理解类任务，只需要复用模型的对话编码模块和对话理解模块进行编码；针对对话策略和对话生成类任务，需要使用完整模型的所有模块进行编码和生成。

在本项目的端到端对话建模任务中，我们利用 SPACE 底座进行微调，通过对话编码组件建模对话历史，再利用对话理解、对话策略、对话生成三个组件进行推理最终生成系统回复，从而可以和真实用户进行多轮交互。



## 期望模型使用方式以及适用范围
你可以使用 space_dialog-modeling 模型针对 MultiWOZ2.0 所有覆盖的领域进行对话，领域包括restaurant（餐馆），hotel（酒店），attraction（景点），train（火车）， taxi（计程车）。
输入用户语句，模型就能够开始多轮交互，帮助用户完成特定的任务（如找到某个用户感兴趣的餐馆、酒店）。

### 如何使用

你可以直接通过一个流水线使用模型用于端到端对话生成任务：

#### 代码范例

```python
from modelscope.pipelines import pipeline
from modelscope.outputs import OutputKeys

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 ."} # 第二轮输入
]
my_pipeline = pipeline("task-oriented-conversation", model='damo/nlp_space_dialog-modeling')
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[OutputKeys.OUTPUT])))   # 输出每一轮的系统回复
```

#### 对话样例

| user utterance （输入）                                                                        | system response （输出）                                                                                    |
|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|
| I am looking for a place to to stay that has cheap price range it should be in a type of hotel | \[value_name\] is in the \[value_area\] . would you like me to book it for you ?                                                                           |
| no, i just need to make sure it's cheap. oh, and i need parking                                | \[value_name\] fits that criteria . would you like me to book it for you ?                                                     |
| Yes, please. 6 people 3 nights starting on tuesday.                                            | booking was successful . reference number is : \[value_reference\] . is there anything else i can help you with ? |
| No, that will be all. Good bye.                                                                | Thank you for using our services.                                                                                                     |

> **NOTE**: 系统的输出会根据解码结果有一定变化。这里我们遵循 MultiWOZ 数据集的评估脚本惯例，将 system response 去词汇化，即槽值利用特殊的带有\[\]的 token 来表示。如果直接替换数据库中的真实值则可得到自然语句

### 模型局限性以及可能的偏差
由于下游任务是都是限定领域的对话，因此用户需要在该任务领域相关的场景里使用，不宜像使用闲聊对话系统一样进行开放域测试。请参考范例更多了解相关场景。

## 训练数据介绍
MultiWOZ2.0 是一个多领域的多轮对话数据，是任务型对话最受欢迎的 benchmark，一共包括了1万个对话 sessions，其对话通常是通过交互辅助用户找到一个合适的entity，整个对话是一个多轮填槽的过程。

## 模型训练流程

### 预处理
输入文本将全部转化为小写的形式，然后采用一个预设词表大小为35022的WordPiece子词分词算法进行分词。输入模型的对话将被处理成以下形式：
```text
<sos_u> user query 1 <eos_u> <sos_r> system response 1 <eos_r> <sos_u> user query 2 <eos_u>
```

### 训练
模型采用8张40G显存的A100进行预训练，总计优化了30个epoch。模型架构采用隐藏层状态维度为768的12层Transformer模块，输入的对话上下文和系统回复语句的最大长度分别限制为256和50。批处理大小设置为128，采用初始learn rate设置为1e-5的AdamW优化器进行优化。随机失活概率设置为0.2。在下游任务的微调阶段，我们采用网格搜索在验证集上自动寻找最优的超参数。
下游任务训练和预训练保持一样的超参数设置，在1张40G显存的A100进行 finetune。 


## 数据评估及结果
模型进行端到端对话建模下游任务，在MultiWOZ2.0数据集上取得了 SOTA 指标：

### Task：端到端对话生成 End-to-End Dialog Modeling

| Dataset Name | 使用 booking 信息 | Inform | Success | BLEU  | Combined Score |
|:--------------:|:----------:|:--------|:---------:|:-------:|:----------------:|
| MultiWOZ2.0  | 否                | 95.00  | 85.80   | 19.41 | 109.81         |
| MultiWOZ2.0  | 是                | 95.30  | 88.00   | 19.30 | 110.95         |

> **NOTE**: Inform指标用于评估多轮对话的理解能力，Success指标用于评估多轮对话的任务完成率，BLEU指标用于评估每轮系统生成回复语句的流畅度，Combined Score = (Inform + Success) * 0.5 + BLEU。 是否使用数据集中的真实 booking 结果信息在不同下游模型里不一样，这里我们将两个结果都展示。本项目提供的测试交互的模型是不使用额外 booking 信息的。


### 相关论文以及引用信息

```bib
@article{he2022unified, 
    title={Unified Dialog Model Pre-training for Task-Oriented Dialog Understanding and Generation}, 
    author={He, Wanwei and Dai, Yinpei and Yang, Min and Huang, Fei and Si, Luo and Sun, jian and Li, Yongbin}, 
    journal={SIGIR}, 
    year={2022} 
}
```
