Skip to content

bcaitech1/p3-dst-chatting-day

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

92 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Chatting-Day's Dialogue State Tracking (DST)

ν”„λ‘œμ νŠΈ κΈ°κ°„ : 2021.04.26 ~ 2021.05.20

ν”„λ‘œμ νŠΈ 주제 : Deep Knowledge Tracing

[λͺ©μ°¨]



[Dialogue State Tracking μ†Œκ°œ]

  • λŒ€ν™” μƒνƒœ 좔적(Dialogue State Tracking) 은 λͺ©μ  μ§€ν–₯ν˜• λŒ€ν™”(Task-Oriented Dialogue)의 μ€‘μš”ν•œ ν•˜μœ„ ν…ŒμŠ€ν¬ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.
  • μœ μ €μ™€μ˜ λŒ€ν™”μ—μ„œ 미리 μ‹œλ‚˜λ¦¬μ˜€μ— μ˜ν•΄ μ •μ˜λœ 정보인 Slotκ³Ό λ§€ ν„΄λ§ˆλ‹€ 그에 속할 수 μžˆλŠ” Value의 집합인, λŒ€ν™” μƒνƒœ (Dialogue State)λ₯Ό λ§€ ν„΄λ§ˆλ‹€ μΆ”λ‘ ν•˜λŠ” ν…ŒμŠ€ν¬μž…λ‹ˆλ‹€.
  • μ‹œμŠ€ν…œμ€ μœ μ €μ˜ λͺ©μ (Goal)을 νŒŒμ•…ν•΄μ•Όλ§Œ ν•˜κ³ , 보톡 이 Goal은 (Slot, Value) νŽ˜μ–΄μ˜ μ§‘ν•©μœΌλ‘œ ν‘œν˜„λ  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 예λ₯Όλ“€μ–΄, μˆ™μ†Œλ₯Ό μ˜ˆμ•½ν•˜λŠ” μ‹œλ‚˜λ¦¬μ˜€μ˜ 경우 "μˆ™μ†Œμ˜ μ’…λ₯˜", "μˆ™μ†Œμ˜ κ°€κ²©λŒ€"κ°€ Slot의 νƒ€μž…μ΄ 될 수 있고, 이에 속할 수 μžˆλŠ” Value둜 각각 ("ν˜Έν…”", "λͺ¨ν…”", "에어비앀비", ...), ("μ €λ ΄", "적당", "λΉ„μ‹Ό", ...) 등을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.


[Installation]

Dependencies

  • torch==1.7.0+cu101
  • transformers==3.5.1
  • wandb
  • pytorch-transformers==1.0.0
  • wget==3.2
  • pytorch-pretrained-bert
pip install -r requirements.txt


[Usage]

λͺ¨λΈμ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” run.sh λ₯Ό μ‹€ν–‰μ‹œν‚΅λ‹ˆλ‹€.

$ p3-dst-chatting-day/run.sh

총 4κ°€μ§€μ˜ λͺ¨λΈμ„ 선택할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • SomDST
  • ChanDST
  • TransformerDST
  • TRADE_TAPT


[File Structure]

Baseline (TRADE)

  • TRADEλŠ” Open-vocab based DST modelλ‘œμ„œ, Ontologyλ₯Ό κΈ°λ°˜μ—μ„œ λ²—μ–΄λ‚œ λͺ¨λΈμž…λ‹ˆλ‹€.
  • 기쑴의 GloVe, Char Embedding λŒ€μ‹  monologg/koelectra-base-v3-discriminator의 token_embeddings을 pretrained Subword Embedding으둜 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • λ©”λͺ¨λ¦¬λ₯Ό 아끼기 μœ„ν•΄ Token Embedding (768) => Hidden Dimension (400)으둜의 Projection layerκ°€ λ“€μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • λΉ λ₯Έ ν•™μŠ΅μ„ μœ„ν•΄Β Parallel Decoding이 κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

p3-dst-chatting-day/Baseline/
β”‚
β”œβ”€β”€ train.py
β”œβ”€β”€ preprocessor.py
β”œβ”€β”€ model.py
β”œβ”€β”€ inference.py
β”œβ”€β”€ evaluation.py
└── data_utils.py


CHAN-DST

  • CHAN-DST Open-vocab based DST modelλ‘œμ„œ, SOTA (2020, MULTIWOZ 2.1) λͺ¨λΈμž…λ‹ˆλ‹€.
  • 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


SOM-DST

  • SOM-DSTλŠ” Open-vocab based DST model 기반의 λͺ¨λΈλ‘œμ„œ, TRADE의 느린 ν•™μŠ΅/μΆ”λ‘  μ‹œκ°„μ„ κ°œμ„ ν•œ λͺ¨λΈμž…λ‹ˆλ‹€.
  • 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


Transformer-DST

  • Transformer-DSTλŠ” Open-vocab based DST model 기반의 λͺ¨λΈλ‘œμ„œ, Slot Generator 뢀뢄을 Transformer Decoder둜 λŒ€μ²΄ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • 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


TAPT (Task-adaptive Pretraining)

  • TAPTλŠ” ν•™μŠ΅ν•  데이터에 λŒ€ν•΄ λͺ¨λΈμ„ pretraining (λ˜λŠ” multi ν•™μŠ΅) ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
  • WOS (Wizard Of Seoul) dataset둜 DST taskλ₯Ό μˆ˜ν–‰ν•˜λ©΄μ„œ μ΄ˆλ°˜μ— (λ˜λŠ” λ™μ‹œμ—) MLM taskλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • TAPTλŠ” 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


Serving

  • Serving은 AI λͺ¨λΈμ„ μ‹€μ œ μ„œλΉ„μŠ€μ—μ„œ μ‚¬μš©ν•  수 있게 Server에 μ˜¬λ¦¬λŠ” μž‘μ—…μž…λ‹ˆλ‹€.
  • Serving은 Pytorchμ—μ„œ μ œκ³΅ν•˜λŠ” torchserveλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.
  • Django Chat App μ„œλ²„μ™€ μ—°κ²°(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]

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": "κ°μ‚¬ν•©λ‹ˆλ‹€. 즐거운 μ—¬ν–‰λ˜μ„Έμš”."
      }
    ]
  },
   
  ..μƒλž΅

]


[Contributors]



[Collaborative Tool]

Chatting Day ν”Όμ–΄λ“€μ˜ Ground Rule, μ‹€ν—˜λ…ΈνŠΈ, ν”Όμ–΄μ„Έμ…˜ λ“± ν•œλ‹¬ κ°„μ˜ 행보λ₯Ό ν™•μΈν•˜μ‹œλ €λ©΄ λ‹€μŒ 링크λ₯Ό ν΄λ¦­ν•˜μ„Έμš”.



[Reference]

Papers

Dataset

  • WOS (Wizard Of Seoul)

About

Chatting-Day's Dialogue State Tracking (DST)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5