코드 저장소 TC-Bot 및 종이 엔드투엔드 작업 완료 신경 대화 시스템을 기반으로 합니다. 이 저장소는 TC-Bot의 단순화된 버전으로, 직접 비교할 수는 없지만 비슷한 수준의 정확도로 작동합니다.
이는 간단한 사용자 시뮬레이터를 사용하여 목표 지향적인 챗봇으로서 심층 강화 학습을 통해 간단한 DQN 에이전트를 훈련하는 방법을 보여줍니다. 이 코드는 MiuLab의 TC-Bot의 단순화된 버전입니다. 주요 차이점은 이 코드에는 NLG 또는 NLU 구성 요소가 포함되지 않고 대화 관리자만 교육한다는 점입니다. GO 챗봇이 DRL로 훈련되어 구현되지 않는 방법을 이해하는 데 NL 구성 요소가 필요하지 않습니다.
다음은 TC-Bot에 대한 논문의 다이어그램이며 LU 및 NLG 구성 요소 외에 이 프로젝트에서 사용된 대화 흐름과 유사합니다.
NL 제거 외에도 성공 조건, DQN 에이전트 최적화 프로그램 및 기타 몇 가지 사소한 변경 사항이 변경되었습니다. 따라서 TC-Bot과 이 repo 간에 정확도를 직접 비교해서는 안 됩니다.
데이터베이스는 TC-Bot에서 사용되는 것과 동일한 영화 티켓 데이터베이스입니다. 데이터의 피클 버전과 텍스트 버전 모두 데이터 디렉터리에서 볼 수 있습니다.
이 코드를 자세히 설명하고 살펴보는 5부로 구성된 튜토리얼 시리즈는 여기 매체에서 찾을 수 있습니다!
python train.py
사용하면 에이전트를 처음부터 훈련할 수 있습니다.
Constants.json에서는 "save_weights_file_path" 및 "load_weights_file_path"(둘 다 상대 경로)를 포함한 하이퍼파라미터를 변경하여 각각 가중치를 저장하고 로드할 수 있습니다. 예를 들어, 가중치 폴더에 있는 사전 훈련된 가중치를 사용하려면 "load_weights_file_path" 값을 "weights/model.h5"로 설정하세요. 목표(tar) 및 행동(beh) keras 모델 모두에 대한 가중치는 현재 성공률이 새로운 최고 수준에 도달할 때마다 저장됩니다.
python test.py
사용하여 에이전트를 테스트할 수도 있습니다. 하지만 Constants.json의 "load_weights_file_path"를 동작 및 목표 가중치가 모두 포함된 상대 경로로 설정하여 가중치를 로드해야 합니다.
모든 상수는 DQN(참) 또는 Double DQN(거짓)을 의미하는 에이전트 아래의 "바닐라"를 제외하면 꽤 자명합니다. 기본은 바닐라 DQN입니다.
참고: 기차나 테스트에서 피클링 오류가 발생하는 경우 python pickle_converter.py
실행하면 문제가 해결됩니다.
Constants.json의 run에서 "usersim"을 false로 설정하여 사용자 시뮬레이션을 사용하는 대신 사용자로서 자신의 작업을 입력하여 에이전트를 테스트할 수 있습니다. 콘솔에서 에피소드/대화의 모든 단계에서 작업과 성공 표시기를 입력합니다. 작업 입력 형식은 의도/알림 슬롯/요청 슬롯입니다.
작업 입력 예시:
또한 콘솔에서는 에이전트가 아직 성공했는지 여부에 대한 표시기를 요청합니다(에피소드의 초기 작업 입력 이후 제외). 허용되는 입력은 손실인 경우 -1, 아직 결과가 없는 경우 0, 성공인 경우 1입니다.
Constants.json의 하이퍼파라미터를 사용했습니다.
해당 에피소드까지의 기간/열차 빈도(100개 에피소드마다)의 최대 성공률별 에피소드 표(40000개 중 2000개마다):