[Deep Learning] seq2seq 를 이용한 챗봇 (Neural Machine Chatbot) 자동 진화 버젼 처음부터 시작하기

저번 자동진화 웹버젼 챗봇 에 추가 설명을 하겠습니다. 처음부터 어떻게 해야 하는지 모르겠다는 평을 들었기 때문입니다. 


자연스럽게 따라하기 편하게 명령을 쭈욱 나열하겠습니다. 이 명령은 아나콘다 가 설치되어 있는 OSX(또는 우분투 머신) 기준에서 작성했습니다. Windows 는 알아서 적용하시길 바랍니다. 


$ conda create -n tensor python=3.6
$ git clone git@github.com:crazia/NM-chatbot.git
$ cd NM-chatbot
$ pip install -r requirements.txt
$ python manage.py migrate
$ python manage.py createsuperuser
$ python manage.py makedata --initial
$ python manage.py runserver


여기까지 진행하시면 자연스럽게 http://localhost:8000/admin 으로 접속해서 만들어둔 id/password 로 로그인 할 수가 있습니다. 


자동진화 웹버젼 챗봇 을 참조해서 대화 데이타를 만들어 줍니다. Admin 에서 작업하셔도 되고, http://localhost:8000 에 접속해서 나오는 대화창에 대화내용을 입력하면 자동으로 데이터베이스에 대화 내용이 저장되니 그 내용을 수정해서 작업해도 됩니다. 


이렇게 대화가 저장이 되면 


$ python manage.py makedata


다시 이 명령을 실행해주면 저장된 대화록을 바탕으로 자동으로 교육자료를 만들고 교육을 시켜서 새로운 모델로 만들어진 교육자료를 지정하게 바뀝니다. 



[Deep Learning] seq2seq 를 이용한 챗봇 (Neural Machine Chatbot) 자동 진화 버젼

지난 포스트 


NMT를 이용한 챗봇(console)


NMT를 이용한 챗봇(Web 버젼)


에 이어서 세번째 자동 진화 버젼입니다. 간단한 교육시스템을 추가 했습니다. 원리는 간단합니다. 


1. 챗봇을 이용하면 모든 대화의 내용이 데이터베이스에 저장됩니다. 


2. 저장된 내용을 검토해서 올바른 대답으로 올바른 대답으로 바꾸고 '검토 완료'로 상태를 바꿔서 저장




3. 이렇게 저장된 내용을 교육데이터(train) , 아직은 테스트 데이터를 따로 만들기 어렵기 때문에 교육과 train 을 같이 씁니다. 추후에 따로 분리할 예정입니다. 그리고 train 데이터로부터 단어집을 만들어 줍니다. 





4. 이렇게 만들어진 데이터를 바탕으로 교육을 시작합니다. (참고로 aws 저 사용에서 돌리니 서버가 멈출정도로 부하를 주더군요. 알아서 상황에 따라 돌리는 걸 추천합니다)


5. 기존 데이터셋을 새로 만들어진 데이터셋으로 바꾸고 서비스를 재시작 합니다. 



이것을 자동화할 수 있는 명령이 바로 


python manage.py makedata 


입니다. 물론 $PROJECT/chat/management/commands/makedata.py 파일에 필요한 내용을 채워서 돌려야 하는건 필수 입니다. 


https://github.com/crazia/NM-chatbot (소스)

https://chat.crazia.org (Live Demo)



[Deep Learning] seq2seq 를 이용한 챗봇 (Neural Machine Chatbot) 데모 버젼

seq2seq 를 이용해서 챗봇을 만든 시리즈중에서 3번째 입니다. 


콘솔버젼


웹버젼


에 이어서 웹버젼 을 실제 AWS 에 디플로이 한 버젼입니다. 현재는 교육 자료가 간단한 문답 6개로 이루어져 있어서 제대로 동작하지는 않지만 추후에 데이타가 많아지면 좀 제대로 대답할 듯 합니다. 


https://chat.crazia.org 에서 확인 가능합니다. Websocket 을 띄우는데 많이 애 먹었습니다 ㅋㅋ 



[Deep Learning] seq2seq 를 이용한 챗봇 (Neural Machine Chatbot) 웹 버젼

저번  NMT를 이용한 챗봇(Console) 에 간단하게 웹 인터페이스(web interface) 를 붙여봤습니다. 저번 버젼에서 옵션같은 것을 조정하고 환경변수에 모델이 저장된 위치를 지정하고 웹만 띄우면 되는 버젼으로 가볍게 고쳤습니다.


교육(Train) 시키고 이런 것은 저번 포스트에서 다루었기 때문에 실제로 구동하는 것만 할 줄 알면 될것 같습니다.  웹 버젼은 장고를 이용해서 작성했으면 채널을 이용해서 간단한 웹소켓을 이용하는 식으로 만들었습니다. 


저번 포스트 참조하기


다만 저반하고 달라진건 교육 시키는 방법 입니다. 저번에는 급하게 만드느라 package path 연결시키는 것을 무시했는데 이번에는 그걸 다 맞췄습니다. 


python -m core.nmt \
    --attention=scaled_luong \
    --src=req --tgt=rep \
    --vocab_prefix=/tmp/nmt_chat/vocab  \
    --train_prefix=/tmp/nmt_chat/train \
    --dev_prefix=/tmp/nmt_chat/test  \
    --test_prefix=/tmp/nmt_chat/test \
    --out_dir=/tmp/chat_model \
    --num_train_steps=12000 \
    --steps_per_stats=100 \
    --num_layers=4 \
    --num_units=128 \
    --dropout=0.2 \
    --metrics=bleu


이제 교육이 된 모델을 소유하고 있다면 ENV 에 그 내용을 추가해 줍니다. 



export OUT_DIR='POSITION FOR MODEL'



PROJECT ROOT 로 이동해서 



python manage.py runserver 



하면 서버가 띄워지고 http://localhost:8000 으로 가서 확인이 가능합니다. 


모든 소스는 


https://github.com/crazia/NM-chatbot


에서 받을수 있습니다. 


[blockchain] 영지식증명(zero-knowledge proof) 란?

이름이 멋있는 영지식 증명(zero-knowledge proof)이 최근 뜨고 있습니다. 개념 자체는 1985년때부터 내려오고 있는데 최근 이름이 언급되는건 zcash 가 사용하는 zk-Snarks 때문 일것입니다. 


http://설명이 잘 되어 있는 사이트


전 위키피디아 글 보다 위의 사이트가 더 설명이 잘 되어 있더군요. 


영지식 증명은 증명자(prover) 가 검증자(verifier) 에게 '무언가가 참'이라는 것을 증명하는 방법입니다. 단 '무언가'에 관한 어떤 정보도 노출 시키지 않습니다.



정의 보다는 예를 보면 확실하게 느껴질 수가 있습니다. 


색이 다른 두 공이 있습니다. 

내가 (prover) 맹인에게(verifier) 두 공을 주고, '두 공이 색이 다르다는 사실'을 증명 시키되 맹인에게 색을 직접적으로 언급하지 않습니다. 


맹인은 한손에 공을 한개씩 쥐고 테이블 밑으로 손을 내린 다음에 공을 위로 올려서 나에게 보이면 내가 그 공의 색을 말하지는 않지만 전꺼와 색이 같네 전꺼와 색이 다르네 라는 검증을 반복하면 할 수록 맹인은 두개의 공의 색이 정말 다르다는 것을 인식할 수가 있습니다. 


이게 블록체인에 적용이 되면 더 실용적으로 이해할 수가 있습니다. 기존 블록체인에서는 보내는 사람(sender), 받는 사람(receiver), 수량 등이 노출되어 있었습니다. 따라서 거래를 주고 받는 당사자 뿐만 아니라 그 트랜잭션을 지켜볼 수 있는 사람들도 전부 민감한 정보를 볼 수 있었죠.






위 그림에서 보듯이 트랜잭션의 센더(sender) 와 리시버(receiver) 끼리 센더가 리시버의 공개키로 내용을 암호화 해서 보내면 세상에서 리시버만 내용을 풀어볼 수가 있습니다. 그리고 이 트랜잭션을 밖에서 바라보는 사람들은 둘이 주고 받는 내용이 어떤 내용인지 알 수는 없지만 (PKI 란?   참조) 내용이 제대로 전달 되었다는 사실 여부는 알 수가 있습니다.