Chatting-Day's Dialogue State Tracking (DST)
프로젝트 기간 : 2021.04.26 ~ 2021.05.20
프로젝트 주제 : Deep Knowledge Tracing
pip install -r requirements.txt
모델을 사용하기 위해서는 run.sh
를 실행시킵니다.
$ p3-dst-chatting-day/run.sh
총 4가지의 모델을 선택할 수 있습니다.
monologg/koelectra-base-v3-discriminator
의 token_embeddings
을 pretrained Subword Embedding으로 사용합니다.Parallel Decoding
이 구현되어 있습니다.
p3-dst-chatting-day/Baseline/
│
├── train.py
├── preprocessor.py
├── model.py
├── inference.py
├── evaluation.py
└── data_utils.py
WOS (Wizard Of Seoul) dataset
에 적합한 코드로 수정해서 사용했습니다.
p3-dst-chatting-day/ChanDST/
│
├── main_chan.py - for train
├── preprocessor.py
├── model_chan.py
├── inference.py
├── evaluation.py
└── data_utils.py
WOS (Wizard Of Seoul) dataset
에 적합한 코드로 수정해서 사용했습니다.Encoder
로는 dsksd/bert-ko-small-minimal
을 사용했습니다.
p3-dst-chatting-day/SomDST/
│
├── assets/ - config files & vocab
│ ├── bert_config_base_uncased.json
│ ├── bert_config_large_uncased.json
│ └── vocab.txt
├── utils/ - util files
│ ├── __init__.py
│ ├── ckpt_utils.py - for saving model
│ ├── data_utils.py - for controlling data
│ ├── fix_label.py
│ └── mapping.pair - convert general word
├── LICENSE
├── NOTICE
├── README.md
├── create_data.py
├── evaluation.py
├── inference.py
├── model.py
└── train.py
WOS (Wizard Of Seoul) dataset
에 적합한 코드로 수정해서 사용했습니다.Encoder
와 Decoder
는 dsksd/bert-ko-small-minimal
을 사용했습니다.
p3-dst-chatting-day/TransformerDST/
│
├── utils/ - util files
│ ├── bert_config_multilingual_uncased.json
│ ├── bert_config_base_uncased.json
│ ├── bert_ko_small_minimal.json
│ ├── ckpt_utils.py - for saving model
│ ├── data_utils.py - for controlling data
│ └── eval_utils.py
├── TransformerDSTevaluation.py
├── TransformerDSTinference.py
├── TransformerDSTmodel.py
├── TransformerDSTtrain.py
└── modeling_bert.py - custom bert
WOS (Wizard Of Seoul) dataset
로 DST task를 수행하면서 초반에 (또는 동시에) MLM task를 수행합니다.TRADE
모델과 SUMBT
모델에 적용했습니다.
p3-dst-chatting-day/
│
├── SUMBT_TAPT/
│ ├── sumbt_tapt.py
│ └── data_utils.py
├── TRADE_TAPT/
│ ├── data_utils.py
│ ├── eval_utils.py
│ ├── evaluation.py
│ ├── inference.py
│ ├── model.py
│ ├── preprocessor.py
└── └── train.py
torchserve
를 사용했습니다.REST API
)해 챗봇과 유사하게 작동합니다.
p3-dst-chatting-day/
│
├── Serving/ - License from Pytorch
│ ├── ...
│ ├── dst_trade/
│ │ ├── DST_custom_handler.py - 모델이 동작하는 방식을 명시
│ │ ├── README.md
│ │ ├── config.properties - serving management config
│ │ ├── data_utils.py
│ │ ├── exp_config.json
│ │ ├── model.py
│ │ ├── preprocessor.py
│ │ ├── requirements.txt - 아카이브 제작 때 dependencies 사용 가능
│ │ ├── slot_meta.json
│ │ └── test.json - model serving 후 test해볼 수 있는 json 파일
│ └── ...
├── django_server/
│ ├── chat/
│ │ ├── migrations/ - migration 관리 폴더
│ │ │ ├── ...
│ │ ├── templates/chat/ - Html 등 frontend 부분
│ │ │ ├── ...
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── consumers.py - 사용자들 간의 message 처리
│ │ ├── models.py
│ │ ├── routing.py - routing pattern
│ │ ├── tests.py
│ │ ├── urls.py
│ │ └── views.py - view templates
│ ├── project_dst/
│ │ └── ...
└── └── manage.py - django의 manage 파일
Input으로 들어가는 JSON File은 WOS (Wizard Of Seoul)
의 양식을 따릅니다.
dialogue_idx
: 대화 고유의 index를 나타냅니다.domain
: 대화 전체 turn에서 나오는 domain들입니다.dialgoue
role
: user 또는 system으로 구성됩니다.text
: user 또는 system의 발화입니다.state
: 추적해야할 domain-slot-value을 의미합니다.
[
{
"dialogue_idx": "snowy-hat-1111:관광_식당_11",
"domains": [
"관광",
"식당"
],
"dialogue": [
{
"role": "user",
"text": "서울 중앙에 있는 박물관을 찾아주세요",
"state": [
"관광-종류-박물관",
"관광-지역-서울 중앙"
]
},
{
"role": "sys",
"text": "안녕하세요. 문화역서울 284은 어떠신가요? 평점도 4점으로 방문객들에게 좋은 평가를 받고 있습니다."
},
{
"role": "user",
"text": "좋네요 거기 평점은 말해주셨구 전화번호가 어떻게되나요?",
"state": [
"관광-종류-박물관",
"관광-지역-서울 중앙",
"관광-이름-문화역서울 284"
]
},
{
"role": "sys",
"text": "전화번호는 983880764입니다. 더 필요하신 게 있으실까요?"
},
{
"role": "user",
"text": "네 관광지와 같은 지역의 한식당을 가고싶은데요 야외석이 있어야되요",
"state": [
"관광-종류-박물관",
"관광-지역-서울 중앙",
"관광-이름-문화역서울 284",
"식당-지역-서울 중앙",
"식당-종류-한식당",
"식당-야외석 유무-yes"
]
},
{
"role": "sys",
"text": "생각하고 계신 가격대가 있으신가요?"
},
{
"role": "user",
"text": "음.. 저렴한 가격대에 있나요?",
"state": [
"관광-종류-박물관",
"관광-지역-서울 중앙",
"관광-이름-문화역서울 284",
"식당-가격대-저렴",
"식당-지역-서울 중앙",
"식당-종류-한식당",
"식당-야외석 유무-yes"
]
},
{
"role": "sys",
"text": "죄송하지만 저렴한 가격대에는 없으시네요."
},
..생략
{
"role": "sys",
"text": "감사합니다. 즐거운 여행되세요."
}
]
},
..생략
]
Chatting Day 피어들의 Ground Rule
, 실험노트
, 피어세션
등 한달 간의 행보를 확인하시려면 다음 링크를 클릭하세요.