O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

20170227 파이썬으로 챗봇_만들기

Building a Chatbot with Natural Language Interface using Python

  • Entre para ver os comentários

20170227 파이썬으로 챗봇_만들기

  1. 1. 파이썬으로 챗봇 만들기 (With Natural Language Interface) 2017.02.27 발표자 : 김성동
  2. 2. 이름 : 김성동(@DSKSD) 연락처 : tjdehd1222@gmail.com 숭실대 경영/글로벌미디어 (졸업ㅜㅜ) 현재는 스타트업에서 챗봇을 개발중입니다:) Hello !!
  3. 3. 목차 1.Introduction 2.Main Components of Chatbot 3.Deep Learning for Chatbot 4.Conclusion
  4. 4. Introduction “Facebook's future is in Chatbot” 2016.4, Mark Zuckerberg Inspiration – 거창한 이유 Lock-In effect(고객 고착화) Automation(비용 절감) …
  5. 5. Introduction Inspiration – 개인적인 이유 데이터 수집이 비교적 쉽다.(웹에는 텍스트 천지다.) 필요하다면 데이터를 만들어 낼 수도 있다. (Dialogue Design 일명 노가다) 아주 다양하고 범용한 응용 도메인 (언어는 어디서나 사용하니깐..!) 아직 미개척지가 많은 Challenging한 분야!! (잘하면 Pioneer가 될 지도..?) 언어(대화)에 문화적 특성이 녹아 있어서 구글에게 정복당할 확률이 그나마 낮은 분야 (자국어의 경우...)
  6. 6. Introduction What is Chatbot? 챗봇 = 인공지능? 챗봇 = 사용자와 대화(Chat)를 나눌 수 있는 컴퓨터 프로그램(그 안이 어떻게 구성되었건…)
  7. 7. Introduction What is Chatbot? 챗봇 = 인공지능? 챗봇 = 사용자와 대화(Chat)를 나눌 수 있는 컴퓨터 프로그램(그 안이 어떻게 구성되었건…) User InterfaceUser Interface Input Output Answer Maker Process * 아래 3가지 모듈은 예시이며 모든 케이스를 포함하지 않음
  8. 8. Introduction What is Chatbot? 챗봇 = 인공지능? 챗봇 = 사용자와 대화(Chat)를 나눌 수 있는 컴퓨터 프로그램(그 안이 어떻게 구성되었건…) User InterfaceUser Interface Input Output Answer Maker Process 상대방(유저)으로부터 입력을 받아들이는 부분 간단한 명령어/키워드(#시작) 버튼(후보 답변 중 선택) 자연어(Natural Language Understanding) * 아래 3가지 모듈은 예시이며 모든 케이스를 포함하지 않음 풍부 단편
  9. 9. Introduction What is Chatbot? 챗봇 = 인공지능? 챗봇 = 사용자와 대화(Chat)를 나눌 수 있는 컴퓨터 프로그램(그 안이 어떻게 구성되었건…) User InterfaceUser Interface Input Output Answer Maker Process 목적 Closed Domain(Goal based) Open Domain(General Bot) 적절한 답변을 만들어내는 부분 Rule based Retrieval Inference * 아래 3가지 모듈은 예시이며 모든 케이스를 포함하지 않음 풍부 단편
  10. 10. Introduction What is Chatbot? 챗봇 = 인공지능? 챗봇 = 사용자와 대화(Chat)를 나눌 수 있는 컴퓨터 프로그램(그 안이 어떻게 구성되었건…) User InterfaceUser Interface Input Output Answer Maker Process 답변을 유저가 보기에 적절한 형태로 가공하여 전달 답변 검색(Database Retrieval) #심심이 템플릿(Entity/Information 끼워넣기) 자연어(Natural Language Generation) * 아래 3가지 모듈은 예시이며 모든 케이스를 포함하지 않음 풍부 단편
  11. 11. Introduction 그래서 오늘 집중해서 소개하고 싶은 챗봇은 바로!! 요것 Natural Language Interface 자연어로 입력을 받아서 Inference based Answer Maker (Closed domain) 가장 적절한 답변을 추론한다
  12. 12. Main Components of Chatbot 목적을 상기해보자 자연어로 입력 받아서 가장 적절한 답변을 추론한다. 상대방의 발화 의도 파악(Intent) 대화의 맥락도 고려(Context) 상대방의 발언 중 개체를 파악(Entity) (답변을 추론(Inference)) 이건 다음 챕터에서 ...! * 이 Components도 명확히 구분 되는 것이 아님..!!
  13. 13. Main Components of Chatbot Intent U: 안녕 B: 안녕하세요. U: 오늘 날씨 어때? B: 어디요? U: 어디긴, 서울이지 B: 오늘 서울 날씨는 맑음입니다. U: 고마워 B: 이용해주셔서 감사합니다. 1. Greeting() 2. AskWeather() 2. AskWeather() 아주 간단한 Goal Bot(날씨 알려주는 봇)을 만들어 보며 각 Component들을 살펴보자 ~ 이를 위해 Intent는 총 5가지로 정의한다. 3. Appreciate() 4. Bye() 5. Other()
  14. 14. Main Components of Chatbot Intent 가장 간단한 방법 : Keyword Matching def Greeting(sentence): # 인사 Intent를 캐치하기 위한 키워드들 GREETING_KEYWORDS = ["ㅎㅇ", "하이", "안녕", "안뇽", "하잉“] # 후보 답변 GREETING_RESPONSES = ["ㅎㅇ", "하이","안뇽", "안녕하세요"] # 키워드를 캐치하면 답변을 한다. for word in sentence: if word.lower() in GREETING_KEYWORDS: return random.choice(GREETING_RESPONSES) 유저의 어휘는 이것보다 훨씬 풍부할 수 있는데, 미리 키워드가 정의되어 있지 않으면 Intent를 캐치할 수 없다. 확실하지만 시간과 노력이 많이 든다. (Rule based의 일종)
  15. 15. Main Components of Chatbot Intent 좀더 나은 방법 : Intent Classifier 1. Raw text를 전처리하고 벡터화 (konlpy, genism) 2. Intent Classifier 트레이닝 (sklearn) 3. Classifier로부터 의도 파악 Raw text Preprocessing Vectorize Classifier 1 2 3 4 5
  16. 16. Main Components of Chatbot Intent - Preprocessing 좀더 나은 방법 : Intent Classifier from konlpy.tag import Twitter tagger = Twitter() def Preprocessing(sentences): """raw_text를 토큰화하고 간단한 전처리(숫자-><NUM>) """ result = [] for sent in sentences: processed_sent = [] pos_tagged = tagger.pos(sent) # 안녕ㅋㅋ -> [('안녕', 'Noun'), ('ㅋㅋ', 'KoreanParticle')] for token in pos_tagged: if token[0].isdigit(): token[0] = '<NUM>' processed_sent.append(token[0]+'/'+token[1]) result.append(processed_sent) return result
  17. 17. Main Components of Chatbot Intent - Vectorize 좀더 나은 방법 : Intent Classifier import gensim def Vectorize(sentences): Text를 모델에 Input으로 주기 위해 벡터로 표현한다. 여러 가지 방법 有 1> One-hot Vector 2> Bag-of-words 3> TFIDF 4> Word2Vec(Glove) 5> Paragraph2Vec (Doc2Vec) (link) 6> RNN Encoder 7> CNN for text (link) 8> FastText (link) … 출처 : 한국어와 NLTK, Gensim의 만남, 박은정, 2015 Pycon
  18. 18. Main Components of Chatbot Intent - Vectorize 좀더 나은 방법 : Intent Classifier from gensim.models import doc2vec # 트레이닝 과정 생략 doc_vectorizer = doc2vec.Doc2Vec.load('doc2vec.model') # trained model def Vectorize(processed_sent): return doc_vectorizer.infer_vector(processed_sent) U: 오늘 날씨 어때? Classifier (Logistic Reg, SVM, Random Forest, NN) 2 (AskWeather)
  19. 19. Main Components of Chatbot Intent - Classifier 좀더 나은 방법 : Intent Classifier from sklearn.linear_model import LogisticRegression classifier = LogisticRegression(random_state=1234) # classifier.fit(train_x, train_y) # 트레이닝 과정 생략 intent = classifier.predict(vectorized_sent) U: 오늘 날씨 어때? Classifier (Logistic Reg, SVM, Random Forest, NN) 2 (AskWeather)
  20. 20. Main Components of Chatbot Entity 드디어 유저의 발화 의도를 알아냈다..!! 이제 답변을 하면 되는데.. U: 오늘 날씨 어때? B: 어디요? 성공적인 응답을 하기 위해서는 '오늘'이라는 '날짜'에 관한 정보를 이해하고 오늘 특정 위치 (도시)의 날씨를 알려주어야 성공적인 응답이 될 것이다. 따라서 봇은 유저가 '위치'에 관한 정 보를 알려주지 않았다는 것을 캐치하고 위와 같이 되물어야 한다. (아직 문맥(Context) 고려 x) 2 (AskWeather)
  21. 21. Main Components of Chatbot Entity 문장에서 개체(Entity)를 알아내자! (Named Entity Recognition) A named entity is a collection of rigidly designated chunks of text that refer to exactly one or multiple identical, real or abstract concept instances. Person, Location, Organization, Date, Time, ... Ex) 오늘/Date 날씨 좀 알려줘 오늘 이대/Location에서 보아즈/Organization 전체세션 합니다. 담주/Date 제주도/Location 날씨 좀 알려줘! 개체(Entity)란?
  22. 22. Main Components of Chatbot Entity 여기서도 가장 간단한 방법은 NER 사전으로 단어들을 검사하는 것. 하지만 NER 사전에 포함되어 있지 않은 단어들을 캐치해내지 못하고 신조어에도 약하다……! 역시나 시간과 비용의 이슈가 있다. 결국 사전 관리를 사람이 해야 하기 때문이다. => 이번에도 머신러닝을 이용해서 알아내잣! # 수도 코드 Load NER_dict for token in sent: if token in NER_dict: Check
  23. 23. Main Components of Chatbot Entity 직접 데이터를 모아서 모델을 만들자!!! 아쉽게도 NER 태거는 공개된 코퍼스가 없다.. Sequence Labeling Model (HMM, CRF, RNN, ...) for POS, NER Tagging 𝑧1 𝑧2 𝑧3 𝑥1 𝑥2 𝑥3관찰열(Observation Sequence) 내재 변수 (Latent state) 전이 확률(T) 전이 확률(T) 배출 확률(E) 배출 확률(E) 배출 확률(E) https://github.com/krikit/annie * ANNIE [2016 국어 정보 처리 시스템 – 개체명 인식 시스템] Hidden Markov Model[Kaist 문일철 교수님]
  24. 24. Main Components of Chatbot Entity BIO 태그 for NER Model 데이터에 태깅(레이블링) 할 때, 단순하게 토큰마다 태깅을 하면 문제가 있다. 두 개 이상의 토큰이 하나의 Entity를 구성하는 경우가 많기 때문이다. Ex> <웨인 루니>/Person, <경기도 성남시 분당구>/Location 이러한 이슈를 해결하기 위한 트릭으로 BIO 태그를 사용한다. B : Entity의 시작 토큰, I : B 뒤로 이어지는 Entity 토큰, O : Other Ex> 웨인/B-PER 루니/I-PER, 경기도/B-LOC 성남시/I-LOC 분당구/I-LOC
  25. 25. Main Components of Chatbot Entity Conditional Random Field for NER http://homepages.inf.ed.ac.uk/csutton/publications/crftut-fnt.pdf
  26. 26. Main Components of Chatbot Entity Conditional Random Field for NER import pycrfsuite # pip install python-crfsuite def word2features(sent, i): 1> 자신의 앞뒤로 -2~2의 형태소 2> 자신의 앞뒤로 -2~2의 POS 태그 3> 자신의 접미사 4> 형태소의 길이 5> 숫자 여부 6> 기호, 구두점 여부 7> 형태소의 어절 내 위치 … return features CRF를 이용한 한국어 자동 띄어쓰기(설진석님 블로그)
  27. 27. Main Components of Chatbot Entity Conditional Random Field for NER import pycrfsuite # pip install python-crfsuite # 트레이닝 과정 생략 tagger = pycrfsuite.Tagger() tagger.open('myner.crfsuite') # trained model Predict = tagger.tag(sent2features(example_sent)) # 오늘 서울 날씨 어때 ? # B-DATE B-LOC O O O CRF를 이용한 한국어 자동 띄어쓰기(설진석님 블로그) cf. 모델의 검증은 Classification의 지표인 Precision/Recall/F1-Score로 하는 것이 일반적. 한국어의 경우 보통 F1-Score로 80 전후가 나온 다... 20퍼센트의 오차가 비즈니스를 망칠 수도..?! 현재 state-of-the-art의 성능을 보이는 Bidirectional LSTM + CRF https://github.com/rockingdingo/deepnlp
  28. 28. Main Components of Chatbot Entity 유저의 발화의도와 Entity까지 알아낼 수 있다. 답변을 한다! U: 오늘/Date 날씨 어때? B: 어디요? AskWeather(LOC, DATE=today) U: 어디긴, 서울/Location이지 AskWeather(LOC=Seoul, DATE=today) B: 오늘 서울 날씨는 맑음입니다. 현재 이 간단한 날씨봇은 답변을 directly Inference 하기 보단 Intent를 파악하고 답변에 필요한 Entity가 모두 충족되면 API Call을 하는 방식으로 동작하고 있다.(Slot filling) (현재는 이러한 Process 자체가 Inference)
  29. 29. Main Components of Chatbot Context API Call을 통해 답변을 내놓고 나면 Context를 파악하지 못하고 다시 무로 돌아간다...!! (즉, 봇 자신이 방금 전까지 무슨 대화를 했었는지 알지 못함) U: 오늘/Date 날씨 어때? B: 어디요? AskWeather(LOC, DATE=today) U: 어디긴, 서울/Location이지 AskWeather(LOC=Seoul, DATE=today) B: 오늘 서울 날씨는 맑음입니다. U: 내일/Date은? B: 네..? Other()
  30. 30. Main Components of Chatbot Context API Call을 통해 답변을 내놓고 나면 Context를 파악하지 못하고 다시 무로 돌아간다...!! (즉, 봇 자신이 방금 전까지 무슨 대화를 했었는지 알지 못함) EX> 레스토랑 Slot filling (이상적인 대화) B> 안녕하세요. 무엇을 도와드릴까요? U> 오늘 저녁 7시에 6명으로 이탈리안 레스토랑 찾고 있어요. B> 알겠습니다. 가격대는 어느 정도로 생각하고 계세요? U> 1인당 2만원 이하요. B> 위치는 강남이 맞나요? U> 네 맞아요. B> 알겠습니다. 더 추가할 사항은 없으신가요? U> 네 없어요. B> API CALL LOCATION : 강남 PRICE_RANGE : 2만원 NUM_OF_PEAPLE : 6 TYPE_OF_CUISINE : 이탈리안 TIME : 오늘 저녁 7시 Entities
  31. 31. Main Components of Chatbot Context API Call을 통해 답변을 내놓고 나면 Context를 파악하지 못하고 다시 무로 돌아간다...!! (즉, 봇 자신이 방금 전까지 무슨 대화를 했었는지 알지 못함) Entities EX> 레스토랑 Slot filling (Context 관리 안될 경우) B> 안녕하세요. 무엇을 도와드릴까요? U> 오늘 저녁 7시에 6명으로 이탈리안 레스토랑 찾고 있어요. B> 알겠습니다. 가격대는 어느 정도로 생각하고 계세요? U> 1인당 2만원 이하요. B> 시간대를 알려주시겠어요? U> 오늘 저녁 7시라니깐요.. B> 알겠습니다. 더 추가할 사항은 없으신가요? U> 위치는 어디로 하시려구요? B> 죄송해요. 못찾겠어요. U> ;; LOCATION : NULL PRICE_RANGE : 2만원 NUM_OF_PEAPLE : 6 TYPE_OF_CUISINE : 이탈리안 TIME : NULL
  32. 32. Main Components of Chatbot Context 가장 간단한 방법은 이전 대화 로그를 저장해두고 Intent와 Entity를 자연스럽게 참조하는 것. def weatherBotEngine(User,userSay): context = stack(User).pop() # 수도코드, 이전 대화의 로그를 참조한다 entities = tagger.tag(sent2features(example_sent)) entities.extend(context['entities']) sent_vector = Vectorize(Processing(userSay)) intent = intentClassifier.predict(sent_vector) pre_intent = context[‘intent‘] # 최종 Answer making # 쪼꼼 복잡한 로직 ~_~ return reply
  33. 33. Deep Learning for Chatbot 이렇게 아주 간단한 Goal bot을 만드는 것만해도 상당한 노력이 들어간다... 또한 다양한 한계도 존재한다. 그러다 보니 봇 연구자들은 자연스럽게 End-to-End 방식을 갈구하게 된다!! (질문과 답만 줄 테니 알아서 좀 해봐..) 실제로도 학계, 산업계에서 많은 실험이 진행되고 있다. (아직 그리 잘되진 않는 모양) 그 중에서는 답변을 Directly Inference하는 Deep Learning model, 혹은 앞서 소개한 여러 컴 포넌트와 Deep Learning을 혼재해서 사용하는 model 등 그 모양새도 다양.. 이러한 Deep learning model들 중 대부분은 Machine Translation의 Seq2Seq 모델에 영감 받아 다양한 변형과 응용을 하고 있다.
  34. 34. Deep Learning for Chatbot Sequence2Sequence model Encoder와 Decoder라고 하는 2개의 RNN(LSTM)으로 이루어진 구조. Encoder : 문장(sequence)를 인풋으로 받는데 각 timestep 당 하나의 word(token)으로 받아 처리를 한다. 이는 words의 시퀀스를 고정된 사이즈의 feature vector로 변환한다. * 이 feature vector는 인풋에 관한 중요한 정보만 담고 불필요한 정보들은 까먹는다! 이러한 feature vector는 input sequence의 요약을 가지고 있다고 볼 수 있으며 context or thought vector라고 부른다. Decoder : 디코더는 thought vector를 넘겨받아 아웃풋 sequence를 generate한다. Vocab을 target으로 Softmax!
  35. 35. Deep Learning for Chatbot Sequence2Sequence model 시퀀스 모델의 한계점 : 1> 문법적 오류 존재 2> 여전히 대화의 맥락을 이해하지 못한다.(Context) 3> 다양성의 부재(확률적으로 '몰라요', '그렇군요' 등과 같은 일반적인 답변이 나올 가능성이 높다) 코드 : Goblin(김진중)님 Tensorflow tutorial 04. Chatbot 참고
  36. 36. Deep Learning for Chatbot Hierarchical Recurrent Encoder Decoder HRED는 Seq2Seq2 모델이 2계층으로 이루어져있다. 하나는 word level의 sequence 하나는 Dialogue level의 sequence * Context hidden state : m번째 발언까지의 context들을 내포하고 있음!  𝑼 𝒎+𝟏 예측에 사용 (Context를 답변 추론에 녹이기 위한 방법) Context hidden state https://arxiv.org/abs/1507.04808
  37. 37. Deep Learning for Chatbot Hierarchical Recurrent Encoder Decoder 꽤나 그럴싸 하지만, 실은 I don't know나 I'm sorry와 같은 일반적인 답변을 많이 한다. 즉, 다양성이 부족.. 1> data scarcity 2> token의 대부분이 대명사 3> triple 자체가 너무 짧다. {𝑈1, 𝑈2, 𝑈3} https://arxiv.org/abs/1507.04808
  38. 38. Deep Learning for Chatbot Attention https://arxiv.org/abs/1507.04808 Seq2seq 모델의 큰 한계점 중 하나는 전체 정보가 고정된 길이의 vector(context)로 인코딩 돼야 한다는 것이다. 그렇기에 인풋 문장의 길이가 길어질 수록, 많은 정보들이 손실된다. 때문에 긴 문장을 잘 디코딩 못한다. Attention 메커니즘은 디코더가 디코딩을 하는 동안 인풋 시퀀스 중 어디에 집중할지를 결정하여 디코딩에 반영하는 방법
  39. 39. Deep Learning for Chatbot Dialogue System as Reinforcement Learning POMDP(Partially Observable Markov Decision Process)와 Reinforcement learning을 이용해 Task(Goal) Oriented Bot 문제를 풀려고 했던 시도가 있었으나 action과 state space를 모두 hand- written (룰)에 기반하여 디자인했었기에 불안정한 모델이었음..!! (not scalable) http://mi.eng.cam.ac.uk/~sjy/papers/ygtw13.pdf
  40. 40. Deep Learning for Chatbot Dialogue System as Reinforcement Learning 하지만 앞선 모델에 영감 받아 다양한 시도들이 있다. State와 Action은 딥러닝 모델을 이용하여 Directly Inference하되 이러한 모델의 주요 포인트는 Reward를 어떻게 주느냐..! (어떤 대답이 좋은 대답인지를 수치화 시켜야 하는 문제) https://arxiv.org/abs/1601.04574
  41. 41. Deep Learning for Chatbot Hybrid Model 기존의 머신러닝 방식과 딥러닝(RL) 방식의 장점을 융합하고 단점을 상호보완 하려 하는 시도들도 존재 https://arxiv.org/abs/1606.01269 https://arxiv.org/abs/1604.04562
  42. 42. Deep Learning for Chatbot Memory Network 기존 RNN 기반 모델(LSTM Cell 포함)들은 아주 아주 긴 long term memory를 읽고 쓰는 능력이 부족 하다. 특히 특정 사실을 정확히 기억하고 있는 것을 못한다. (Memorization) 이러한 한계를 극복하기 위해 Memory Network는 외부 메모리에 정보를 적절하게 쓰고 읽는 법을 학습하여 답변 추론에 이용하는 모델이다. https://arxiv.org/abs/1503.08895코드 : 김태훈님 MemN2N Tensorflow Implementation 참고
  43. 43. Deep Learning for Chatbot Learning through Dialogue Interaction Memory Network는 메모리에 적당한 정보가 없는 경우 답변을 제대로 하지 못한다. (상대방의 오타, 처음 보는 단어 등...) 이런 경우 상대방에게 질문을 던져 힌트를 얻는 방식으로 상호작용하며 대화를 이어나갈 수 있다. 이때 언제 질문을 던져야 할지 강화학습으로 학습한다. https://arxiv.org/abs/1612.04936
  44. 44. Conclusion 정리 제목은 거창하게 지어놓고 막상 코드는 거의 날림으로... 큭..(죄송합니다.) 어찌됐건 오늘의 목적은 챗봇이란 무엇이며, 무엇이 중요한 Issue인지 전달하는 것.(전달이 되었나요..?) 사실은 이러한 봇을 편하게 만들도록 지원하는 여러 Bot Framework가 존재한다. 다만, 1> 돈이 든다. 2> 한국어? 잘 안된다.(사실 안 써봐서 몰라요..) 3> 스스로 개선시키기 어렵다
  45. 45. Conclusion 스스로 개선시키자 - 파이썬 파이썬은 자연어 처리를 하기에 매우 좋은 언어!! 문장을 토큰화하여 리스트에 담는 것으로부터 시작 start> NLP with Python [link] 또한 다양한 패키지를 지원한다. nltk spaCy numpy konlpy gensim python-crfsuite 특히, 쏟아져 나오고 있는 딥러닝 기반의 챗봇들도 구현해볼 수 있다.(과연?) (feat. Tensorflow) https://github.com/datanada/Awesome-Korean-NLP
  46. 46. Conclusion What is good conversation? 답변을 Inference(추론)하는 챗봇들을 쭉 살펴본 결과 어떤 대화가 좋은 대화인지에 대한 측정 기준이 미비하다. Ex> Perplexity, (Entity) F1-Score, BLEU, Task-complete, DSTC 등의 간접지표 사용 https://research.fb.com/downloads/babi/http://camdial.org/~mh521/dstc/
  47. 47. Conclusion Future work 진정한 의미의 End-to-End Model은 아직은 미숙한 단계. 특히 상업용 봇의 경우 '실수하지 않는 것' 이 더욱 중요하기 때문에 전통적인 룰 기반, 머신러닝 방식과 딥러닝의 방식 등을 적절히 함께 사용 하는 것이 현재로선 최선. 개인적으로 앞으로는 Reinforcement Learning(Reward를 어떻게? 즉, 좋은 대화를 어떻게 측정할 것인지) With External Memory(Memory Network 류) (메모리가 커진다면 어떻게?)의 연구를 눈 여겨 봐야 하지 않을까 생각이 듭니다.
  48. 48. Reference 모두를 위한 머신러닝/딥러닝[홍콩과기대 김성훈 교수님] http://hunkim.github.io/ml/ CS-224d : Deep learning for NLP[Richard socher] http://cs224d.stanford.edu/syllabus.html Chatbot Fundamentals An interactive guide to writing bots in Python https://apps.worldwritable.com/tutorials/chatbot/ Building AI Chat bot using Python 3 & TensorFlow[신정규 님] https://speakerdeck.com/inureyes/building-ai-chat-bot-using-python-3-and-tensorflow Developing Korean Chatbot 101 [조재민 님] https://www.slideshare.net/JaeminCho6/developing-korean-chatbot-101-71013451 Deeplearning for Chatbot [Denny Britz] http://www.wildml.com/2016/04/deep-learning-for-chatbots-part-1-introduction/ 자연어처리를 위한 기계학습 [강원대 이창기 교수님] https://www.slideshare.net/deview/f2-14341235 * 다른 레퍼런스들도 그때그때 링크를 걸어두었습니다!
  49. 49. Thank you for listening https://github.com/DSKSD

×