Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
models
提交
d594e88b
M
models
项目概览
PaddlePaddle
/
models
大约 1 年 前同步成功
通知
222
Star
6828
Fork
2962
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
602
列表
看板
标记
里程碑
合并请求
255
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
models
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
602
Issue
602
列表
看板
标记
里程碑
合并请求
255
合并请求
255
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d594e88b
编写于
8月 07, 2019
作者:
0
0YuanZhang0
提交者:
pkpk
8月 06, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix_dmtk_cpu_and_readme (#3041)
上级
56055e7f
变更
9
展开全部
隐藏空白更改
内联
并排
Showing
9 changed file
with
349 addition
and
212 deletion
+349
-212
PaddleNLP/dialogue_model_toolkit/auto_dialogue_evaluation/.run_ce.sh
...ialogue_model_toolkit/auto_dialogue_evaluation/.run_ce.sh
+51
-18
PaddleNLP/dialogue_model_toolkit/auto_dialogue_evaluation/README.md
...dialogue_model_toolkit/auto_dialogue_evaluation/README.md
+181
-104
PaddleNLP/dialogue_model_toolkit/auto_dialogue_evaluation/data/config/ade.yaml
...del_toolkit/auto_dialogue_evaluation/data/config/ade.yaml
+2
-2
PaddleNLP/dialogue_model_toolkit/auto_dialogue_evaluation/run.sh
...LP/dialogue_model_toolkit/auto_dialogue_evaluation/run.sh
+1
-3
PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding/.run_ce.sh
...e_model_toolkit/dialogue_general_understanding/.run_ce.sh
+47
-46
PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding/README.md
...ue_model_toolkit/dialogue_general_understanding/README.md
+64
-34
PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding/__init__.py
..._model_toolkit/dialogue_general_understanding/__init__.py
+0
-0
PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding/data/config/dgu.yaml
...olkit/dialogue_general_understanding/data/config/dgu.yaml
+1
-1
PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding/run.sh
...logue_model_toolkit/dialogue_general_understanding/run.sh
+2
-4
未找到文件。
PaddleNLP/dialogue_model_toolkit/auto_dialogue_evaluation/.run_ce.sh
浏览文件 @
d594e88b
#!/bin/sh
export
CE_MODE_X
=
ce
export
FLAGS_eager_delete_tensor_gb
=
0.0
#!/bin/bash
export
FLAGS_sync_nccl_allreduce
=
0
export
FLAGS_eager_delete_tensor_gb
=
1.0
export
CUDA_VISIBLE_DEVICES
=
0
pretrain_model_path
=
"data/saved_models/matching_pretrained"
if
[
!
-d
${
pretrain_model_path
}
]
then
mkdir
${
pretrain_model_path
}
fi
python
-u
main.py
\
--do_train
True
\
--use_cuda
\
--save_path
model_files_tmp/matching_pretrained
\
--train_path
data/unlabel_data/train.ids
\
--val_path
data/unlabel_data/val.ids
\
--print_step
3
\
--num_scan_data
3 | python _ce.py
--do_train
=
true
\
--use_cuda
=
true
\
--loss_type
=
"CLS"
\
--max_seq_len
=
50
\
--save_model_path
=
"data/saved_models/matching_pretrained"
\
--save_param
=
"params"
\
--training_file
=
"data/input/data/unlabel_data/train.ids"
\
--epoch
=
20
\
--print_step
=
1
\
--save_step
=
400
\
--batch_size
=
256
\
--hidden_size
=
256
\
--emb_size
=
256
\
--vocab_size
=
484016
\
--learning_rate
=
0.001
\
--sample_pro
=
0.1
\
--enable_ce
=
"store_true"
| python _ce.py
export
CUDA_VISIBLE_DEVICES
=
0,1,2,3
save_model_path
=
"data/saved_models/human_finetuned"
if
[
!
-d
${
save_model_path
}
]
then
mkdir
${
save_model_path
}
fi
python
-u
main.py
\
--do_train
True
\
--use_cuda
\
--save_path
model_files_tmp/matching_pretrained
\
--train_path
data/unlabel_data/train.ids
\
--val_path
data/unlabel_data/val.ids
\
--print_step
3
\
--num_scan_data
3 | python _ce.py
--do_train
=
true
\
--use_cuda
=
true
\
--loss_type
=
"L2"
\
--max_seq_len
=
50
\
--init_from_pretrain_model
=
"data/saved_models/matching_pretrained"
\
--save_model_path
=
"data/saved_models/human_finetuned"
\
--save_param
=
"params"
\
--training_file
=
"data/input/data/label_data/human/train.ids"
\
--epoch
=
50
\
--print_step
=
1
\
--save_step
=
400
\
--batch_size
=
256
\
--hidden_size
=
256
\
--emb_size
=
256
\
--vocab_size
=
484016
\
--learning_rate
=
0.001
\
--sample_pro
=
0.1
\
--enable_ce
=
"store_true"
| python _ce.py
PaddleNLP/dialogue_model_toolkit/auto_dialogue_evaluation/README.md
浏览文件 @
d594e88b
此差异已折叠。
点击以展开。
PaddleNLP/dialogue_model_toolkit/auto_dialogue_evaluation/data/config/ade.yaml
浏览文件 @
d594e88b
...
...
@@ -7,7 +7,7 @@ save_steps: 10
num_scan_data
:
"
"
word_emb_init
:
"
"
init_model
:
"
"
use_cuda
:
"
"
use_cuda
:
True
batch_size
:
256
hidden_size
:
256
emb_size
:
256
...
...
@@ -26,4 +26,4 @@ vocab_path: ""
max_seq_len
:
128
random_seed
:
110
do_save_inference_model
:
False
enable_ce
:
"
store_true
"
enable_ce
:
"
"
PaddleNLP/dialogue_model_toolkit/auto_dialogue_evaluation/run.sh
浏览文件 @
d594e88b
...
...
@@ -16,9 +16,6 @@ fi
TRAIN_TYPE
=
$1
TASK_TYPE
=
$2
typeset
-l
TRAIN_TYPE
typeset
-l
TASK_TYPE
candi_train_type
=(
"matching"
"seq2seq_naive"
"seq2seq_att"
"keywords"
"human"
)
candi_task_type
=(
"train"
"predict"
"evaluate"
"inference"
)
...
...
@@ -43,6 +40,7 @@ PYTHON_PATH="python"
#train pretrain model
if
[
!
"
$CUDA_VISIBLE_DEVICES
"
]
then
export
CPU_NUM
=
1
use_cuda
=
false
else
use_cuda
=
true
...
...
PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding/.run_ce.sh
浏览文件 @
d594e88b
#!/bin/bash
train_atis_slot
(){
train_atis_slot
(){
if
[
!
-d
"./data/saved_models/atis_slot"
]
;
then
mkdir
"./data/saved_models/atis_slot"
fi
python
-u
train.py
\
--task_name
atis_slot
\
--use_cuda
true
\
--do_train
true
\
--do_val
true
\
--do_test
true
\
--epoch
2
\
--batch_size
32
\
--data_dir
./data/atis/atis_slot
\
--bert_config_path
./uncased_L-12_H-768_A-12/bert_config.json
\
--vocab_path
./uncased_L-12_H-768_A-12/vocab.txt
\
--init_pretraining_params
./uncased_L-12_H-768_A-12/params
\
--checkpoints
./output/atis_slot
\
--save_steps
100
\
--learning_rate
2e-5
\
--weight_decay
0.01
\
--max_seq_len
128
\
--skip_steps
10
\
--validation_steps
1000000
\
--num_iteration_per_drop_scope
10
\
--use_fp16
false
\
--enable_ce
--task_name
=
atis_slot
\
--use_cuda
=
true
\
--do_train
=
true
\
--in_tokens
=
false
\
--epoch
=
2
\
--batch_size
=
32
\
--data_dir
=
./data/input/data/atis/atis_slot
\
--bert_config_path
=
./data/pretrain_model/uncased_L-12_H-768_A-12/bert_config.json
\
--vocab_path
=
./data/pretrain_model/uncased_L-12_H-768_A-12/vocab.txt
\
--init_from_pretrain_model
=
./data/pretrain_model/uncased_L-12_H-768_A-12/params
\
--save_model_path
=
./data/saved_models/atis_slot
\
--save_param
=
"params"
\
--save_steps
=
100
\
--learning_rate
=
2e-5
\
--weight_decay
=
0.01
\
--max_seq_len
=
128
\
--print_steps
=
10
\
--use_fp16
=
false
\
--enable_ce
=
store_true
}
train_mrda
(){
train_atis_intent
(){
if
[
!
-d
"./data/saved_models/atis_intent"
]
;
then
mkdir
"./data/saved_models/atis_intent"
fi
python
-u
train.py
\
--task_name
mrda
\
--use_cuda
true
\
--do_train
true
\
--do_val
true
\
--do_test
true
\
--epoch
2
\
--batch_size
4096
\
--data_dir
./data/mrda
\
--bert_config_path
./uncased_L-12_H-768_A-12/bert_config.json
\
--vocab_path
./uncased_L-12_H-768_A-12/vocab.txt
\
--init_pretraining_params
./uncased_L-12_H-768_A-12/params
\
--checkpoints
./output/mrda
\
--save_steps
500
\
--learning_rate
2e-5
\
--weight_decay
0.01
\
--max_seq_len
128
\
--skip_steps
200
\
--validation_steps
1000000
\
--num_iteration_per_drop_scope
10
\
--use_fp16
false
\
--enable_ce
--task_name
=
atis_intent
\
--use_cuda
=
true
\
--do_train
=
true
\
--in_tokens
=
true
\
--epoch
=
2
\
--batch_size
=
4096
\
--data_dir
=
./data/input/data/atis/atis_intent
\
--bert_config_path
=
./data/pretrain_model/uncased_L-12_H-768_A-12/bert_config.json
\
--vocab_path
=
./data/pretrain_model/uncased_L-12_H-768_A-12/vocab.txt
\
--init_from_pretrain_model
=
./data/pretrain_model/uncased_L-12_H-768_A-12/params
\
--save_model_path
=
./data/saved_models/atis_intent
\
--save_param
=
"params"
\
--save_steps
=
100
\
--learning_rate
=
2e-5
\
--weight_decay
=
0.01
\
--max_seq_len
=
128
\
--print_steps
=
10
\
--use_fp16
=
false
\
--enable_ce
=
store_true
}
# FIXME(zjl): this model would fail when GC is enabled,
...
...
@@ -63,5 +65,4 @@ sleep 20
cudaid
=
${
single
:
=0
}
export
CUDA_VISIBLE_DEVICES
=
$cudaid
train_atis_slot | python _ce.py
train_atis_intent | python _ce.py
PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding/README.md
浏览文件 @
d594e88b
...
...
@@ -20,7 +20,7 @@
-
cudnn >= 7.0
-
PaddlePaddle >= 1.3.1,请参考
[
安装指南
](
http://www.paddlepaddle.org/#quick-start
)
进行安装, 由于模块内模型基于bert做finetuning, 训练速度较慢, 建议用户安装GPU版本PaddlePaddle进行训练。
  
注意:使用Windows GPU环境的用户,需要将示例代码中的
[
fluid.ParallelExecutor
](
http://paddlepaddle.org/documentation/docs/zh/1.4/api_cn/fluid_cn.html#parallelexecutor
)
替换为
[
fluid.Executor
](
http://paddlepaddle.org/documentation/docs/zh/1.4/api_cn/fluid_cn.html#executor
)
。
  
注意:使用Windows GPU环境的用户,需要将示例代码中的
[
fluid.ParallelExecutor
](
http://paddlepaddle.org/documentation/docs/zh/1.4/api_cn/fluid_cn.html#parallelexecutor
)
替换为
[
fluid.Executor
](
http://paddlepaddle.org/documentation/docs/zh/1.4/api_cn/fluid_cn.html#executor
)
。
####   b、安装代码
    
克隆代码库到本地
...
...
@@ -31,7 +31,7 @@ cd models/PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding
```
### 任务简介
    
本模块内共包含6个任务,内容如下:
    
本模块内共包含6个任务,内容如下:
```
udc: 使用Ubuntu Corpus V1公开数据集,实现对话匹配任务;
...
...
@@ -41,6 +41,7 @@ atis_intent: 使用微软提供的公开数据集(Airline Travel Information Sys
mrda: 使用公开数据集Meeting Recorder Dialogue Act,实现DA识别任务;
swda:使用公开数据集Switchboard Dialogue Act Corpus,实现DA识别任务;
```
### 数据准备
    
数据集说明:
...
...
@@ -52,44 +53,51 @@ MRDA: Meeting Recorder Dialogue Act;
SWDA:Switchboard Dialogue Act Corpus;
```
    
数据集、相关模型下载:
    
数据集、相关模型下载:
```
cd dgu && sh prepare_data_and_model.sh
cd dgu &&
ba
sh prepare_data_and_model.sh
```
    
下载的数据集中已提供了训练集,测试集和验证集,用户如果需要重新生成某任务数据集的训练数据,可执行:
    
下载的数据集中已提供了训练集,测试集和验证集,用户如果需要重新生成某任务数据集的训练数据,可执行:
```
cd dgu/scripts && sh run_build_data.sh task_name
cd dgu/scripts &&
ba
sh run_build_data.sh task_name
参数说明:
task_name: udc, swda, mrda, atis, dstc2, 选择5个数据集选项中用户需要生成的数据名
```
### 单机训练
####     
方式一: 推荐直接使用模块内脚本训练
####     方式一: 推荐直接使用模块内脚本训练
```
sh run.sh task_name task_type
ba
sh run.sh task_name task_type
参数说明:
task_name: udc, swda, mrda, atis_intent, atis_slot, dstc2,选择6个任务中任意一项;
task_type: train,predict, evaluate, inference, all, 选择5个参数选项中任意一项(train: 只执行训练,predict: 只执行预测,evaluate:只执行评估过程,依赖预测的结果,inference: 保存inference model,all: 顺序执行训练、预测、评估、保存inference model的过程);
训练示例: sh run.sh atis_intent train
训练示例:
ba
sh run.sh atis_intent train
```
    
方式一如果为CPU训练:
    
方式一如果为CPU训练:
```
请将run.sh内参数设置为:
1、export CUDA_VISIBLE_DEVICES=
```
    
方式一如果为GPU训练:
    
方式一如果为GPU训练:
```
请将run.sh内参数设置为:
1、如果为单卡训练(用户指定空闲的单卡):
export CUDA_VISIBLE_DEVICES=0
2、如果为多卡训练(用户指定空闲的多张卡):
export CUDA_VISIBLE_DEVICES=0,1,2,3
```
####      方式二: 执行训练相关的代码:
####     方式二: 执行训练相关的代码:
```
export FLAGS_sync_nccl_allreduce=0
...
...
@@ -109,6 +117,10 @@ fi
TASK_NAME="atis_intent" #指定训练的任务名称
BERT_BASE_PATH="data/pretrain_model/uncased_L-12_H-768_A-12"
if [ ! -d "./data/saved_models/${TASK_NAME}" ]; then
mkdir "./data/saved_models/${TASK_NAME}"
fi
python -u main.py \
--task_name=${TASK_NAME} \
--use_cuda=${use_cuda} \
...
...
@@ -130,32 +142,40 @@ python -u main.py \
--print_steps=10 \
--use_fp16 false
```
注:采用方式二时,模型训练过程可参考run.sh内相关任务的参数设置
### 模型预测
####      方式一: 推荐直接使用模块内脚本预测
####     方式一: 推荐直接使用模块内脚本预测
```
sh run.sh task_name task_type
ba
sh run.sh task_name task_type
参数说明:
task_name: udc, swda, mrda, atis_intent, atis_slot, dstc2,选择6个任务中任意一项;
task_type: train,predict, evaluate, inference, all, 选择5个参数选项中任意一项(train: 只执行训练,predict: 只执行预测,evaluate:只执行评估过程,依赖预测的结果,inference: 保存inference model,all: 顺序执行训练、预测、评估、保存inference model的过程);
预测示例: sh run.sh atis_intent predict
预测示例:
ba
sh run.sh atis_intent predict
```
    
方式一如果为CPU预测:
    
方式一如果为CPU预测:
```
请将run.sh内参数设置为:
1、export CUDA_VISIBLE_DEVICES=
```
    
方式一如果为GPU预测:
    
方式一如果为GPU预测:
```
请将run.sh内参数设置为:
支持单卡预测(用户指定空闲的单卡):
export CUDA_VISIBLE_DEVICES=0
```
注:预测时,如采用方式一,用户可通过修改run.sh中init_from_params参数来指定自己训练好的需要预测的模型,目前代码中默认为加载官方已经训练好的模型;
####      方式二: 执行预测相关的代码:
####     方式二: 执行预测相关的代码:
```
export FLAGS_sync_nccl_allreduce=0
export FLAGS_eager_delete_tensor_gb=1 #开启显存优化
...
...
@@ -191,7 +211,8 @@ python -u main.py \
注:采用方式二时,模型预测过程可参考run.sh内具体任务的参数设置
### 模型评估
    
模块中6个任务,各任务支持计算的评估指标内容如下:
    
模块中6个任务,各任务支持计算的评估指标内容如下:
```
udc: 使用R1@10、R2@10、R5@10三个指标评估匹配任务的效果;
atis_slot: 使用F1指标来评估序列标注任务;
...
...
@@ -200,7 +221,8 @@ atis_intent: 使用acc指标来评估分类结果;
mrda: 使用acc指标来评估DA任务分类结果;
swda:使用acc指标来评估DA任务分类结果;
```
    
效果上,6个任务公开数据集评测效果如下表所示:
    
效果上,6个任务公开数据集评测效果如下表所示:
| task_name | udc | udc | udc | atis_slot | dstc2 | atis_intent | swda | mrda |
| :------ | :------ | :------ | :------ | :------| :------ | :------ | :------ | :------ |
...
...
@@ -211,19 +233,20 @@ swda:使用acc指标来评估DA任务分类结果;
| SOTA | 76.70% | 87.40% | 96.90% | 96.89% | 74.50% | 98.32% | 81.30% | 91.70% |
| DGU | 82.03% | 90.59% | 97.73% | 97.14% | 91.23% | 97.76% | 80.37% | 91.53% |
####     
方式一: 推荐直接使用模块内脚本评估
####     方式一: 推荐直接使用模块内脚本评估
```
sh run.sh task_name task_type
ba
sh run.sh task_name task_type
参数说明:
task_name: udc, swda, mrda, atis_intent, atis_slot, dstc2,选择6个任务中任意一项;
task_type: train,predict, evaluate, inference, all, 选择5个参数选项中任意一项(train: 只执行训练,predict: 只执行预测,evaluate:只执行评估过程,依赖预测的结果,inference: 保存inference model,all: 顺序执行训练、预测、评估、保存inference model的过程);
评估示例: sh run.sh atis_intent evaluate
评估示例:
ba
sh run.sh atis_intent evaluate
```
注:评估计算ground_truth和predict_label之间的打分,默认CPU计算即可;
####     
方式二: 执行评估相关的代码:
####     方式二: 执行评估相关的代码:
```
TASK_NAME="atis_intent" #指定预测的任务名称
...
...
@@ -237,28 +260,34 @@ python -u main.py \
```
### 模型推断
####      方式一: 推荐直接使用模块内脚本保存inference model
####     方式一: 推荐直接使用模块内脚本保存inference model
```
sh run.sh task_name task_type
ba
sh run.sh task_name task_type
参数说明:
task_name: udc, swda, mrda, atis_intent, atis_slot, dstc2,选择6个任务中任意一项;
task_type: train,predict, evaluate, inference, all, 选择5个参数选项中任意一项(train: 只执行训练,predict: 只执行预测,evaluate:只执行评估过程,依赖预测的结果,inference: 保存inference model,all: 顺序执行训练、预测、评估、保存inference model的过程);
保存模型示例: sh run.sh atis_intent inference
保存模型示例:
ba
sh run.sh atis_intent inference
```
    
方式一如果为CPU执行inference model过程:
    
方式一如果为CPU执行inference model过程:
```
请将run.sh内参数设置为:
1、export CUDA_VISIBLE_DEVICES=
```
    
方式一如果为GPU执行inference model过程:
    
方式一如果为GPU执行inference model过程:
```
请将run.sh内参数设置为:
1、单卡模型推断(用户指定空闲的单卡):
export CUDA_VISIBLE_DEVICES=0
```
####      方式二: 执行inference model相关的代码:
####     方式二: 执行inference model相关的代码:
```
TASK_NAME="atis_intent" #指定预测的任务名称
BERT_BASE_PATH="./data/pretrain_model/uncased_L-12_H-768_A-12"
...
...
@@ -282,7 +311,7 @@ python -u main.py \
```
### 预训练模型
    
支持PaddlePaddle官方提供的BERT及ERNIE相关模型作为预训练模型
    
支持PaddlePaddle官方提供的BERT及ERNIE相关模型作为预训练模型
| Model | Layers | Hidden size | Heads |Parameters |
| :------| :------: | :------: |:------: |:------: |
...
...
@@ -294,9 +323,9 @@ python -u main.py \
### 服务部署
    
模块内提供已训练好6个对话任务的inference_model模型,用户可根据自身业务情况进行下载使用。
    
模块内提供已训练好6个对话任务的inference_model模型,用户可根据自身业务情况进行下载使用。
#### 服务器部署
    
请参考PaddlePaddle官方提供的
[
服务器端部署
](
https://www.paddlepaddle.org.cn/documentation/docs/zh/1.5/advanced_usage/deploy/inference/index_cn.html
)
文档进行部署上线。
    
请参考PaddlePaddle官方提供的
[
服务器端部署
](
https://www.paddlepaddle.org.cn/documentation/docs/zh/1.5/advanced_usage/deploy/inference/index_cn.html
)
文档进行部署上线。
## 3、进阶使用
...
...
@@ -361,6 +390,7 @@ python -u main.py \
## 作者
zhangxiyuan01@baidu.com
zhouxiangyang@baidu.com
## 如何贡献代码
...
...
PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding/__init__.py
已删除
100644 → 0
浏览文件 @
56055e7f
PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding/data/config/dgu.yaml
浏览文件 @
d594e88b
...
...
@@ -27,4 +27,4 @@ use_cuda: True
task_name
:
"
"
in_tokens
:
False
do_save_inference_model
:
False
enable_ce
:
"
store_true
"
enable_ce
:
"
"
PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding/run.sh
浏览文件 @
d594e88b
...
...
@@ -6,6 +6,7 @@ export FLAGS_eager_delete_tensor_gb=1
export
CUDA_VISIBLE_DEVICES
=
0
if
[
!
"
$CUDA_VISIBLE_DEVICES
"
]
then
export
CPU_NUM
=
1
use_cuda
=
false
else
use_cuda
=
true
...
...
@@ -14,9 +15,6 @@ fi
TASK_NAME
=
$1
TASK_TYPE
=
$2
typeset
-l
TASK_NAME
typeset
-l
TASK_TYPE
BERT_BASE_PATH
=
"./data/pretrain_model/uncased_L-12_H-768_A-12"
INPUT_PATH
=
"./data/input/data/
${
TASK_NAME
}
"
SAVE_MODEL_PATH
=
"./data/saved_models/
${
TASK_NAME
}
"
...
...
@@ -64,7 +62,7 @@ then
print_steps
=
10
batch_size
=
4096
in_tokens
=
true
epoch
=
1
epoch
=
20
learning_rate
=
2e-5
INPUT_PATH
=
"./data/input/data/atis/
${
TASK_NAME
}
"
elif
[
"
${
TASK_NAME
}
"
=
"atis_slot"
]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录