End-to-End로 태스크 지향 대화하는 TC-Bot 소개

TC-Bot이란?



Nextremer Advent Calendar 2017 13일째의 기사입니다.

TC-Bot 은 MicrosoftResearch가 발표한 End-to-End Task-Completion Neural Dialogue Systems의 저자에 의한 구현입니다.
이것은 논문의 타이틀대로, 태스크 지향 대화를 End2End로 행하는 텍스트 베이스의 대화 시스템이 됩니다.
TC-Bot의 특징으로는 다음 두 가지가 있습니다.
  • 강화 학습을 통한 대화 관리
  • 사용자 시뮬레이터를 사용하여 대화 관리부 학습

  • 사용자 시뮬레이터는 규칙 기반의 사용자 응답 규칙을 설명하는 시뮬레이터입니다.
    TC-Bot에서는 이 사용자 시뮬레이터와의 대화를 통해 에이전트(대화 관리부)의 학습을 진행시켜 갑니다.

    사용자 시뮬레이터를 사용하여,
    1. 기존의 대화 코퍼스를 강화 학습의 훈련 데이터에 사용할 수 있다
    2. 일정한 응답 정밀도가 될 때까지 모델을 오프라인으로 훈련할 수 있습니다.

    같은 장점이 있습니다.

    TC-Bot에서는 기본적으로 영화 티켓 예약, 영화 검색 등 두 가지 작업을 수행할 수 있습니다.

    제안 방법에 대해




    ([2]에서 인용)

    시스템의 개요는 위 그림과 같습니다.

    영화 티켓 예약 작업을 예로 설명하면,
    사용자 시뮬레이터는 각 에피소드에서 달성하고자하는 Goal을 가지고 있습니다.
    Goal은 json 형식으로 표현됩니다.
    예를 들면 「『내일』『시애틀』의『regal meridian 16』에서 『16시』부터 상영하는 『주트피아』를 본다」라고 다음과 같이 됩니다.
    {
    "date":"tomorrow",
    "city":"seatle",
    "place":"regal merdian 16",
    "starttime":"16:00",
    "moviename":"zootopia"
    }
    

    대화를 통해 사용자 시뮬레이터에서 이 조건을 듣고 조건 일치하는 티켓을 규정 턴 이내에 예약할 수 있으면 태스크 성공이 됩니다.

    또한 시뮬레이터와 에이전트가 교환하는 의미 프레임은 다음과 같은 형식으로 표현됩니다.
    {
      "request_slots": {
        "ticket": "UNK"
      },
      "diaact": "request",
      "inform_slots": {
        "theater": "regal meridian 16",
        "moviename": "zootopia"
      },
      "nl":"Can I get tickets for zootopia at regal meridian 16?"
    }
    

    diaact는 발화 행위로, inform slots는 전달하는 정보, request slots에는 요구하는 정보, nl에는 이들을 자연 언어로 표현한 문장이 들어 있습니다.
    이러한 상호 작용으로 대화를 진행합니다.

    또 에이전트의 입력값이 되는 것은 대화 이력입니다.
    전 턴의 유저의 발화 행위, inform slots·request slots의 one-hot 표현, 이미 응답이 끝난 슬롯 정보등이 벡터화되어 상태로서 표현됩니다.

    정리하면 TC-Bot의 설정은 다음과 같습니다.
    環境 = ユーザシミュレータ
    行動 = 発話行為・スロット
    状態 = 対話履歴
    報酬 = タスク成否
    

    보상은 태스크의 성부에 따라 고정으로, 학습이 진행됨에 따라 더 빨리 태스크를 달성할 수 있게 됩니다.

    사용법



    README에 자세하게 쓰여져 있으므로 설명의 필요는 없을까 생각합니다만, 다음의 커멘드로 DL~학습을 개시할 수 있습니다.
    덧붙여 Python은 2.X계가 아니면 움직이지 않습니다.
    $ git clone https://github.com/MiuLab/TC-Bot.git
    $ cd TC-Bot/src
    $ python run.py --agt 9 --usr 1 --max_turn 40
              --movie_kb_path ./deep_dialog/data/movie_kb.1k.p
              --goal_file_path ./deep_dialog/data/user_goals_first_turn_template.part.movie.v1.p
              --write_model_dir ./deep_dialog/checkpoints/rl_agent/
              --dqn_hidden_size 80
              --experience_replay_pool_size 1000
              --episodes 500
              --simulation_epoch_size 100
              --run_mode 3
              --act_level 1
              --batch_size 16
              --warm_start 1
              --warm_start_epochs 120
    

    감상



    TC-Bot은 End-to-End에서 태스크 지향 대화를 수행하는 대화 시스템입니다.
    구현도 numpy의 사용 이외는 거의 풀 스크래치로 쓰여져 있고, 대화 시스템으로서도 매우 간단하게 구현되고 있으므로, 여러가지 참고가 됩니다.

    강화 학습에서의 대화 관리는 현시점에서는 아직도 과제도 많습니다만, 유연한 대화에는 빠뜨릴 수 없는 기술이라고 생각하기 때문에, 향후의 동향도 눈을 뗄 수 없습니다.

    참고



    [1] MiuLab/TC-Bot
    [2] End-to-End Task-Completion Neural Dialogue Systems
    [3] A User Simulator for Task-Completion Dialogues

    좋은 웹페이지 즐겨찾기