이 저장소에는 GCA(Generative Conversational Agent)에 대한 새로운 적대적 훈련 방법이 포함되어 있습니다.
이 새로운 학습 방법에 대한 자세한 내용은 Oswaldo Ludwig, "End-to-end Adversarial Learning for Generative Conversational Agents", arXiv:1711.10122 cs.CL, 2017년 11월 논문에서 확인할 수 있습니다. 이 저장소의 코드를 보려면 이 문서를 친절하게 인용해 주세요.
우리의 방법은 GCA를 대화를 인간 생성 또는 기계 생성으로 표시하는 판별자를 속이는 것을 목표로 하는 생성기로 가정합니다. 우리의 접근 방식에서 판별자는 토큰 수준 분류를 수행합니다. 즉, 현재 토큰이 인간에 의해 생성되었는지 아니면 기계에 의해 생성되었는지 나타냅니다. 이를 위해 판별자는 문맥 발화(대화 기록)와 현재 토큰까지의 불완전한 답변도 입력으로 받습니다. 이 새로운 접근 방식을 통해 역전파를 통한 엔드투엔드 학습이 가능해졌습니다. 자기 대화 프로세스를 통해 적대적 훈련을 위해 더욱 다양한 생성 데이터 세트를 생성할 수 있습니다. 이 접근 방식은 훈련 데이터와 관련이 없는 질문에 대한 성능을 향상시킵니다.
여기에서 사용할 수 있는 훈련된 모델은 여기에서 사용할 수 있는 온라인 영어 코스의 대화에서 수집한 데이터 세트를 사용했습니다.
GCA 모델은 다음 순서도로 설명할 수 있습니다.
다음 의사 코드는 GCA 알고리즘을 설명합니다.
우리의 새로운 엔드투엔드 적대적 훈련은 생성자와 판별자로 구성된 다음 Keras 모델(train_bot_GAN.py 파일에 구현됨)로 설명할 수 있습니다. 노란색 블록은 GCA(생성기)에 속하고 녹색 블록은 판별자에 속합니다. 흰색 블록은 생성기와 판별기 간에 공유됩니다.
다음 의사 코드는 새로운 알고리즘을 설명합니다(변수 정의에 대해서는 논문 참조).
사전 학습된 모델과 채팅하려면 다음 안내를 따르세요.
사전 훈련된 판별자를 사용하여 대화 줄을 평가하려면 다음을 수행하십시오.
새로운 적대적 방법을 사용하여 엔드 투 엔드를 훈련하려면 다음을 수행하십시오.
처음부터 적대적 훈련을 시작하려면 가중치 파일 my_model_weights.h5(새로운 적대적 방법으로 사전 훈련됨)를 my_model_weights20.h5(교사 강제로 사전 훈련됨)와 동일하게 만들고 train_script.py를 실행하십시오.