이 저장소에는 16 개의 Myers-Briggs 성격 유형 중 하나를 취할 수있는 챗봇을 개발하는 코드가 포함되어 있습니다.
챗봇은 해당 하위 레드에 속하는 게시물과 주석을 사용하여 각 성격에 대해 미세 조정됩니다 (예 : infj 유형 의 R/infj).
reddit_scraper.py 주어진 하위 레드를 긁어내는 스크립트를 포함합니다. 이를 실행하려면 먼저 연결하려면 MySQL 데이터베이스 인스턴스가 필요합니다. 또한 Reddit 계정 및 MySQL 데이터베이스와 관련된 일부 매개 변수가 필요합니다. config.example.py 의 스키마에 따라 config.py 파일에 삽입해야합니다.
스크립트는 먼저 posts 이라는 테이블에 모든 게시물을로드 한 다음 comments 이라는 테이블에 주석을로드합니다. 병렬화가 적용되었지만이 두 번째 부분에는 몇 시간이 걸릴 것입니다. 그렇기 때문에 메인 스크립트 (~ 20min)를 통해 관심있는 게시물을 다운로드 한 후에는 스크립트 comments_scraper.py 사용하여 관련 댓글을 다운로드 할 수 있습니다. 방해가되면 다음에 실행할 때 스크립트가 떠난 곳에서 시작됩니다.
모델을 훈련시키기 위해 먼저 데이터를 conversational dataset format , 즉 다음 구조의 CSV 테이블로보고했습니다.
| ID | 응답 | 문맥 | 컨텍스트/0 | ... | 맥락/n |
|---|---|---|---|---|---|
| S892NN | 잘 지내요 | 괜찮아요. 당신은 어때요? | 인생은 어때? | ... | 안녕! |
여기서, Context/N은 대화의 시작을 나타냅니다. 가장 최근의 교환으로 이동합니다 ( 문맥/0 , 컨텍스트 및 응답 에 표시되며 대화의 최신 문장입니다). config.py 파일에서 NUMBER_OF_CONTEXTS 매개 변수를 재정의하여 컨텍스트의 카디널리티를 변경하는 것이 가능합니다.
스크립트 create_conversational_dataset.py 스크래핑 단계에서 생성 된 SQL 테이블에서 시작하여 CSV를 생성하여 데이터 폴더의 피클 파일에 저장합니다. 대화는 게시물과 직접 의견 중 하나 또는 게시물, 주석 및 주석 체인에서 구축됩니다.
스크립트의 실행은 병렬화되므로 NUMBER_OF_PROCESSES 매개 변수에 따라 N 다른 CSV -N에 기록됩니다. 결과 피클 파일을 생성하기 위해 최종적으로 연결되었습니다.
Notebook training.py 에는 대화 데이터에 대한 DialoGPT-medium Language 모델의 미세 조정이 포함되어 있으며 주로이 this notebook 에서 찾을 수있는 코드의 적응입니다.
demo.py 실행하면 대화가 시작됩니다.
respository에서 모든 코드를 실행하려면 가상 환경을 생성하고 다음 명령을 실행할 수 있습니다.
virtualenv venv
source ./venv/bin/activate
pip install -r requirements.txt