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
Reference
이 문제에 관하여(End-to-End로 태스크 지향 대화하는 TC-Bot 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/riverwell/items/c8f1d4d476d3bf0da005텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)