방문자 참고 사항:
python3 manage.py runserver
실행하세요. 이런 방식으로 플라스크를 실행하는 데 익숙하지 않다면 Flask-Script에 대한 문서를 참조하세요. 불편을 끼쳐드려 죄송합니다!2017년 5월 9일 현재 프로젝트의 주요 패키지는 다음과 같습니다.
python3 manage.py runserver
실행하여 로컬로 실행할 수 있습니다.사용자/개발자의 관점에서 볼 때 이 프로젝트는 시퀀스 간 모델을 수정하기 위한 더욱 깔끔한 인터페이스를 제공합니다. 이상적인 결과는 Keras의 가독성을 제공하지만 TensorFlow에 더 가까운 유연성을 갖춘 챗봇 API입니다.
'클라이언트' 측에서 모델 매개변수를 가지고 놀고 실행하는 것은 구성(yaml) 파일을 만들고, Python 인터프리터를 열고, 몇 가지 명령을 실행하는 것만큼 쉽습니다. 예를 들어, 다음 스니펫은 구성을 사용하여 코넬 데이터세트(물론 다운로드한 후)에 대한 교육을 시작하는 데 필요한 모든 것입니다.
import data
import chatbot
from utils import io_utils
# Load config dictionary with the flexible parse_config() function,
# which can handle various inputs for building your config dictionary.
config = io_utils . parse_config ( config_path = 'path_to/my_config.yml' )
dataset = getattr ( data , config [ 'dataset' ])( config [ 'dataset_params' ])
bot = getattr ( chatbot , config [ 'model' ])( dataset , config )
bot . train ()
이는 프로젝트와 인터페이스하는 한 가지 방법일 뿐입니다. 예를 들어, 사용자는 명령줄 인수를 통해 매개변수를 전달할 수도 있으며, 이 매개변수는 자신이 지정한 구성 파일과 병합됩니다(충돌하는 경우 명령줄 인수에 우선순위가 부여됨). 이전에 저장한 챗봇의 위치를 전달하여 훈련을 재개하거나 대화를 시작할 수도 있습니다. 자세한 내용은 main.py
참조하세요.
Ubuntu Dialogue Corpus: 전처리 접근 방식은 노트북 폴더의 ubuntu_reformat.ipynb에서 볼 수 있습니다. 데이터 세트의 의도된 용도는 다중 회전 대화에 대한 응답 순위를 지정하는 것입니다. 그러나 저는 발화 쌍을 추출하고 이를 인코더 및 디코더의 입력에 해당하는 단일 문장에서 단일 응답으로 해석하는 다소 간단한 접근 방식을 취했습니다. , 각각 모델에서.
Cornell Movie-Dialogs: 저는 코넬 코퍼스의 전처리된 버전으로 시작하여 노이즈를 줄이기 위해 약간의 수정을 가했습니다.
Reddit 댓글: 약. 17억 개의 레딧 댓글. 현재 이 대규모 데이터 세트를 전처리하고 대화 모델 교육에 적합한 형식으로 줄이는 작업을 진행 중입니다. 완료되면 처리된 데이터 세트 다운로드 링크를 게시할 예정입니다!
DynamicBot: model_comComponents.py의 사용자 정의 클래스에서 제공하는 보다 객체 지향적인 접근 방식을 사용합니다. 그 결과 온라인 일괄 연결 임베딩이 더 빨라지고 채팅에 대한 더 자연스러운 접근 방식이 가능해졌습니다. TensorFlow 1.0 릴리스의 (환상적인) 새로운 Python API, 특히 Dynamic_rnn을 사용합니다. 또한 문서와 소스 코드에서 관찰한 좋은 변수 범위 지정 관행과 일반적인 텐서플로 규칙을 준수합니다. 이는 TensorBoard의 깔끔한 그래프 시각화와 같은 좋은 부작용이 있습니다.
SimpleBot: 아래의 더 복잡한 'ChatBot' 모델을 기반으로 한 단순화된 버킷 모델입니다. 버킷 파티션을 사용자 정의하는 데 유연성이 떨어지고 샘플링 대신 전체 어휘에 대해 희소 소프트맥스를 사용하지만 구현이 훨씬 더 투명합니다. ChatBot과 달리 tf.contrib를 최소한으로 사용하며 기본 텐서플로우 메소드에 주로 의존한다는 의미에서 "처음부터" 구현됩니다. TensorFlow를 처음 사용하는 경우, TensorFlow 프로그래밍의 일반적인 규칙에 대한 느낌을 얻기 위해 구현을 읽어보는 것이 유용할 수 있습니다. 이는 제가 ChatBot에 있는 모든 메서드의 소스 코드를 읽고 나만의 좀 더 간결한 코드를 작성한 결과이기 때문입니다. 해석.
ChatBot: 이 TensorFlow 튜토리얼에 설명된 모델의 확장 버전입니다. 아키텍처 특성: 버킷 입력, 디코더는 주의 메커니즘을 사용합니다(내 노트의 69페이지 참조). 입력은 tf.contrib 라이브러리에 제공된 간단한 함수와 함께 내장됩니다. 또한 샘플링된 소프트맥스 손실 기능을 사용하여 더 큰 어휘 크기를 허용합니다(페이지 추가 설명: 버킷 모델의 특성으로 인해 다른 모델에 비해 모델을 생성하는 데 시간이 훨씬 오래 걸립니다. 주요 병목 현상은 가장 큰 버킷의 크기와 이를 기반으로 그라데이션 작업이 생성되는 방식으로 보입니다. 버킷 크기.
웹페이지 디렉토리는 Flask 애플리케이션에 TensorFlow 모델을 배포하기 위한 간단하고 공간 효율적인 방법을 보여줍니다. 모델이 '동결'되었습니다. 채팅에 필요하지 않은 모든 구성 요소(예: 최적화 프로그램)가 제거되고 나머지 모든 변수는 상수로 변환됩니다. 사용자가 모델 이름을 클릭하면 해당 모델에 대한 REST API가 생성됩니다. 사용자가 양식에 문장을 입력하면 (AJAX) POST 요청이 발행되며, 여기서 응답은 챗봇의 응답 문장입니다. REST API에 대한 자세한 내용은 views.py를 참조하세요.
Flask 애플리케이션은 애플리케이션 인스턴스화를 위한 청사진 사용, 애플리케이션 환경(예: 개발 또는 프로덕션)에 따른 다양한 데이터베이스 등의 모범 사례를 따릅니다.
여기에서는 모델이 어떻게 구성되고 시각화될 수 있는지에 대해 자세히 설명하겠습니다. 이 섹션은 진행 중인 작업이며 아직 완료되지 않았습니다.
모델에 데이터 배치를 입력하기 위해 feed_dict
인수를 사용하는 대신 그래프 구조 자체에서 입력 정보 및 전처리 기술을 인코딩하는 것이 훨씬 더 빠릅니다. 이는 훈련 시간에 모델에 아무것도 제공하지 않는다는 것을 의미합니다. 오히려 모델은 일련의 대기열을 사용하여 Google protobuf 형식의 파일에서 데이터에 액세스하고, 파일을 텐서 시퀀스로 디코딩하고, 시퀀스를 동적으로 일괄 처리하고 패딩한 다음 이러한 일괄 처리를 임베딩 디코더에 공급합니다. 모두 그래프 구조 내에 있습니다. 또한 이 데이터 처리는 여러 스레드에 의해 병렬로 조정됩니다. 텐서보드(및 변수 범위 지정에 대한 모범 사례)를 사용하여 이러한 유형의 파이프라인을 높은 수준에서 시각화할 수 있습니다.
(자세한 설명은 곧 제공됩니다!)
이러한 모델에 대한 많은 연구가 진행되었으며 여기 딥 러닝 노트의 마지막 섹션에서 가장 "중요한" 논문에 대한 노트를 문서화해 왔습니다. 메모에는 논문의 자료를 TensorFlow 코드로 번역하려고 시도한 방법도 포함되어 있습니다. 더 많은 논문의 아이디어가 이 프로젝트에 반영되면 이를 업데이트하겠습니다.
서류:
온라인 자료: