챗봇을 만드는 방법은 상당히 많이 있으나 가장 고전적이면서 가장 많이 활용되고, 기업들이 가장 많이 활용하고 있는 Rule-Based 챗봇을 만들어보도록 한다. 사실 룰기반 챗봇은 다른 말로 표현하는 것이 워낙 많기도 하다. 기업에서 상용적으로 사용하는 Rule-Based는 대표적으로 Intent(의도)와 Entity(개체)를 관리해서 하는 경우가 많고 이들도 큰 틀로 Rule-Based라 할 수 있다. Rule-Based 설계하기 Rule-Based가 뭔지 모르는 분들에게 간단하게 설명을 한다면 규칙을 직접 설계해서 어떤 말이 만들어진 규칙에 해당한다면 Answer를 하는 것이다. 여기서 설명할 Rule-Based는 너무나 방대한 챗봇을 만드는 것이 아니라 간단하게 만들어볼 것이며 Entity와 Int..
우리팀은 대화를 회사 메신저를 활용하지 않고 디스코드를 사용하고 있다보니 디스코드에 흥미를 느끼게 되었고 디스코드로 뭔가 제품을 시연하는 것이 상당히 편리하다는 것을 깨닫게 되었다. 별도의 데모 페이지를 구축하는 것보다 디스코드 봇을 만들어서 시연을 하게 되면 업무의 능률도 빠르고 필자처럼 back-end api를 만드는 사람에게 상당히 유용해 보인다. 디스코드는 다양한 언어를 제공해주지만 라이트하게 가기 위해서 파이썬으로 진행하려 한다. 처음에는 자바로 진행하려 했지만 목업 수준을 만들기 위해서 자바로 하는 것만큼 바보 같은 것이 없기 때문에 우선 Python으로 한 후 막히는 부분이 있으면 그때 자바를 고려할 예정이다. 라이브러리 설치 D:\Project\bots\discord>pip install ..
기계독해(MRC)는 만드는 사람 맘이기 때문에 사실 다양한 방법들이 존재한다. 챗봇을 하나 만들어도 다양한 기법들이 존재하는 것처럼 챗봇과 본질적으로 유사한 기계독해 역시 마찬가지이다. 다만 기계독해는 문서를 기반으로 공부를 해야 한다는 차이가 있을 것이다. 기계독해 타입들 아래는 필자가 생각하는 기계독해의 타입들이라 생각한다. 물론 다양한 기법들이 존재하지만 대표적으로 몇가지만 끄적여 보았다. 1. 학습없이 진행하는 실시간 타입 가. 질문에 해당하는 가장 유사한 문장을 찾기 나. 해당 문장에서 가장 적합한 답변을 추출하기 이렇게 적으니 엄청 심플해 보인다. 엄청 간단해보이지만, 사실 위 내용을 구현하기 위해서는 인덱스를 추출하고 어느정도 의미를 추출해야만 가능하다. 2. 질문과 문장을 학습한 나름 딥러..
기계독해(MRC)란 컴퓨터에게 질문을 던졌을 때 답을 하는 매우 인공지능스러운 분야이다. 그러나 기계독해라는 것이 한글 기준으로 참 지랄맞은 부분이 있기 때문에 포스팅을 하면서 생각의 정리를 하고자 한다. 처음에 BERT를 봤을 때는 참 만능처럼 보였고, Step by Step으로 KorQuad를 진행하였을 때 뭔지도 모른 상태로 남들이 하라는 대로 하였다. 내 머리속에 기계독해는 문서를 던지면 문서를 통째로 읽고 다음에 질문을 던지면 답변을 하는 녀석으로 생각했지만 KorQuad의 Training 셋을 보면서 의문을 갖게 되었다. 해당 데이터는 문장, 질문, 답변이 세트로 되어있었기 때문이다. 그러다보니 "이 training set은 어떻게 만들지?"라는 의문이 생겼고 저 부분이 기계독해를 만드는데 가..
일반적으로 채팅을 개발하기 위해서 가장 많이 사용하는 방식이 바로 웹소켓(Web Socket)일 것이다. 그러나 사이트에서 프로젝트를 하거나 혹은 취미로 프로젝트를 할 때 인터넷에 떠돌아 다니는 웹소켓 채팅 솔루션을 적용하다보면 난관에 부딪힐때가 있다. 대부분 채팅 + 웹소켓에 관해서 포스팅한 내용들은 완성된 프로젝트 형태가 아니라 PoC 기반의 컨셉을 구현한 경우만 많기 때문에 실제 프로젝트 코드랑 괴리감이 존재한다. 그럼 웹소켓의 차이점이 무엇인지 단점이 무엇인지 알아봐야 할 것이다. 웹소켓과 HTTP Polling 방법 일반적으로 HTTP 4 이하 기반의 웹 형태로 채팅 시스템을 구현하려면, 윗방법과 같이 폴링(Polling)하는 방법을 사용할 것이다. 주기적으로 채팅서버에 새로운 대화가 있는지 찾..
다중채팅 솔루션은 우리가 흔히 아는 채팅방을 만들고 여러명이 대화를 하는 구조를 말한다. 이러한 기술은 사실 크게 어려운 방법이 아니다. 인터넷을 조금만 뒤져봐도 HTML 5.0 기술의 웹소켓(Web Socket)을 이용하여 구현한 사례는 얼마든지 있으며, 필자 역시 개인적으로 웹소켓을 구현해서 다중채팅을 만든적이 있다. 그러나 이 채팅 시스템이 상담사와 사용자가 대화를 한다고 가정을 해보자, 그러면 한가지 문제가 되는 것이 웹소켓의 세션 처리 방식이다. 웹소켓은 서로간에 대화를 쉽게 하게 만들지만 상담 시스템은 상담사 한명당 여러명의 사용자와 대화를 해야 한다. 여기에 한가지를 더 포함해서 챗봇과 공유하는 시스템은 어떻게 만들면 될 것인가? 즉 카카오톡처럼 한명당 여러개의 채팅방이 존재할 수 있고, 방..