이 저장소는 "상황 인식 주제 주의를 통한 신경 반응 생성 증대" 논문의 구현을 호스팅합니다.
THRED는 상황에 맞는 주제 인식 응답을 생성하기 위한 다중 턴 응답 생성 시스템입니다. 코드베이스는 Tensorflow NMT 저장소에서 발전되었습니다.
TL;DR 이 프레임워크를 사용하여 대화 에이전트를 만드는 단계:
conda env create -f thred_env.yml
사용하여 종속성을 설치합니다( pip
사용하려면 종속성 참조).MODEL_DIR
은 모델이 저장될 디렉터리입니다. 최소 2개의 GPU에서 훈련하는 것이 좋습니다. 그렇지 않으면 데이터 크기(훈련 파일에서 대화를 생략하여)와 모델 크기(구성 파일을 수정하여)를 줄일 수 있습니다. python -m thred --mode train --config conf/thred_medium.yml --model_dir
--train_data --dev_data --test_data
python -m thred --mode interactive --model_dir
Reddit 데이터를 구문 분석하고 정리하는 데만 1개의 패키지가 필요합니다. 2는 명령줄 대화형 모드에서 대화 모델을 테스트하는 데에만 사용됩니다.
pip
사용하여 종속성을 설치하려면 pip install -r requirements
실행하세요. Anaconda의 경우 conda env create -f thred_env.yml
실행합니다(권장). 종속성 작업이 완료되면 pip install -e .
thred 패키지를 설치합니다.
Reddit Conversation Corpus(RCC)라고 부르는 Reddit 데이터세트는 선택된 95개의 하위 레딧(여기 나열됨)에서 수집됩니다. 우리는 2016년 11월부터 2018년 8월까지 20개월 동안 Reddit을 처리했습니다(2017년 6월과 2017년 7월 제외. 이 두 달을 2016년 10월 데이터와 함께 활용하여 LDA 모델을 학습했습니다). 원시 Reddit 파일의 전처리 및 정리를 포함하여 Reddit 데이터 세트가 구축되는 방법에 대한 자세한 내용은 여기를 참조하세요. 다음 표에는 RCC 정보가 요약되어 있습니다.
신체 | #기차 | #개발자 | #시험 | 다운로드 | 주제 단어와 함께 다운로드 |
---|---|---|---|---|---|
라인당 3회전 | 9.2M | 508K | 406K | 다운로드(773MB) | 다운로드(2.5GB) |
라인당 4회전 | 4M | 223K | 178K | 다운로드(442MB) | 다운로드(1.2GB) |
라인당 5턴 | 180만 | 100K | 80K | 다운로드(242MB) | 다운로드(594MB) |
데이터 파일에서 각 줄은 발화가 TAB으로 구분되는 단일 대화에 해당합니다. 주제 단어는 TAB으로 구분된 마지막 발화 뒤에 나타납니다.
3턴/4턴/5턴 파일에는 줄당 발화 수는 다르지만 비슷한 콘텐츠가 포함되어 있습니다. 모두 동일한 소스에서 추출되었습니다. 데이터에서 오류나 부적절한 발언을 발견한 경우 여기에 우려사항을 신고해 주세요.
모델 구성 파일(즉, conf의 YAML 파일)에서 임베딩 유형은 glove840B
, fastText
, word2vec
및 hub_word2vec
중 하나일 수 있습니다. 사전 훈련된 임베딩 벡터를 처리하기 위해 Pymagnitude와 Tensorflow-Hub를 활용합니다. 반응 생성 모델을 훈련하는 동안 벡터를 학습하기 위해 random300
(300은 임베딩 벡터의 차원을 나타내며 임의의 값으로 대체될 수 있음)을 사용할 수도 있습니다. 임베딩 모델과 관련된 설정은 word_embeddings.yml에 제공됩니다.
학습 구성은 Tensorflow NMT와 유사한 YAML 파일에 정의되어야 합니다. THRED 및 기타 기준에 대한 샘플 구성이 여기에 제공됩니다.
구현된 모델은 Seq2Seq, HRED, Topic Aware-Seq2Seq 및 THRED입니다.
대부분의 매개변수는 서로 다른 모델 간에 공통되지만 일부 모델에는 추가 매개변수가 있을 수 있습니다(예: 주제 모델에는 topic_words_per_utterance
및 boost_topic_gen_prob
매개변수가 있음).
모델을 학습하려면 다음 명령어를 실행하세요.
python main.py --mode train --config < YAML_FILE >
--train_data < TRAIN_DATA > --dev_data < DEV_DATA > --test_data < TEST_DATA >
--model_dir < MODEL_DIR >
에는 어휘 파일과 Tensorflow 모델 파일이 저장됩니다. 다음을 실행하여 훈련을 재개할 수 있습니다.
python main.py --mode train --model_dir < MODEL_DIR >
다음 명령을 사용하면 테스트 데이터 세트에 대해 모델을 테스트할 수 있습니다.
python main.py --mode test --model_dir < MODEL_DIR > --test_data < TEST_DATA >
테스트 중에 테스트 매개변수를 재정의할 수 있습니다. 이러한 매개변수는 빔 폭 --beam_width
, 길이 페널티 가중치 --length_penalty_weight
및 샘플링 온도 --sampling_temperature
입니다.
학습된 모델과 대화할 수 있는 간단한 명령줄 인터페이스가 구현되었습니다(테스트 모드와 유사하며 테스트 매개변수도 재정의될 수 있음).
python main.py --mode interactive --model_dir < MODEL_DIR >
대화형 모드에서는 추론된 주제 단어를 모델에 공급하려면 사전 훈련된 LDA 모델이 필요합니다. 우리는 이 목적을 위해 수집된 Reddit 코퍼스에서 Gensim을 사용하여 LDA 모델을 훈련했습니다. 여기에서 다운로드할 수 있습니다. 다운로드한 파일은 압축을 풀고 --lda_model_dir
통해 프로그램에 전달해야 합니다.
귀하의 연구에 우리의 작업을 사용한 경우 다음 논문을 인용해 주십시오.
@article{dziri2018augmenting,
title={Augmenting Neural Response Generation with Context-Aware Topical Attention},
author={Dziri, Nouha and Kamalloo, Ehsan and Mathewson, Kory W and Zaiane, Osmar R},
journal={arXiv preprint arXiv:1811.01063},
year={2018}
}