Chat Bot with Deep Learning on Real Field

  • 참조 Source GitHub : https://github.com/TensorMSA/tensormsa1. 개요
    Story Board 기반의 ChatBot 을 Deep Learning 을 활용하여 만든 경험을 공유하고자 한다. 기본적으로 프로젝트 Scope 은 사람을 찾는 업무로 한정되었다.
    Deep Learning Base 로 NLP 처리를 하기 위해서는 첫 번째로 문제가 되는 것이 데이터를 만드는 일이다. 사람 찾기의 경우 사람마다 질문하는 패턴이 매우 상이하다는 점은 다른 비지니스와 다를 바가 없었으나,  “사람이름”, “부서”, “업무” 등 각각 하나의 계열사만 해도 수천건 전체 수만건 이상의 데이터를 갖는 부분들 때문에 데이터를 어떻게 생성해야 할지 고민이 되었다.

    2. 데이터 생성
    데이터 생성에서 가장 먼저 생각한 것은 사람의 노동력을 최소화 하는 것이었다. Brat 과 같은 iob Tagging 을 위한 Tool 의 사용도 고려하였지만 그 또한 편의성을 제공할 뿐이지 엄청난 노동력을 필요로 하였기 때문에 고려 대상에서 제외하였다.
    사람의 노동력을 최소화 하기 위해서 Entity Name 으로 구성된 문장 패턴과 각 Entity 의 List 두 가지를 사람이 생성하고 NER 처리, Word Embedding 처리, Intent Anal 처리에 필요한 데이터를 자동으로 생성하여 사용하였다.
    위와 같은 형태로 사람은 기존의 업무 시스템에서 추출 가능한 기준성 정보 + 비교적 적은 노력이 필요한 패턴 데이터만 입력하면 실제 훈련이 필요한 3가지 타입의 데이터를 자동을 생성하도록 하였다.
    실제 5가지 정도의 Entity, 각 Entity 기준 정보 1만 ~ 5만건과 다양한 패턴 문장 100여가지 를 조합하여 데이터를 생성한 결과 500G 이상의 데이터가 생성 되었으며 iob, plain, intent 형태로 따로 생성하면 X3 1.5Tb 정도의 데이터가 생성되었다.

3. 모델 훈련 및 튜닝 
Deep Learning 에 물론 많은 데이터가 있으면 좋지만, 무작정 많은 데이터를 사용할 수는 없다고 생각하였다. 다른 업무까지의 확장을 생각하면 사람찾기 업무 하나에 1.5TB 는
조금 많다고 생각하였다. 결국 전체 데이터가 아닌 일부 데이터를 활용하여 전체 Case 를 만족할 수 있도록 만들기 위하여 기존에 단어 단위로만 Embedding 하던 것을 음소 단위까지 Vector 화하여 합쳐서 사용하는 방향으로 모델들을 변경하였다.

NER 의 경우 부서와 업부의 경우 워낙 유사한 패턴이 많아서 약간의 혼동이 있는 결과가 나왔지만, 전체적으로 92.4% 정도의 정확도를 보여주었다.
Word Embedding 의 경우 동일한 데이터로 훈련을 하였기 때문에 NER 에서 사용할 때 Face Book 에서 제공하는 한글 Vector 를 사용하는 것도다 더 좋은 결과가 있었다.
Intent 분석의 경우 Char CNN 을 사용하여 의도를 구분하는데 90% 이상의 분류율을 보여주었다.

4. 서비스 개발 
이렇게 생성된 NER, Word Embedding,  Intent, 답변 가능여부 신경망을 내부적으로 사용하여 모바일 및 브라우져를 통해서 입력되는 문장을 이해하고 서비스하기 위해서 내부적으로 Story Board 를 선택하고 Slot 을 채워서 서비스를 하기 위한 별도의 Scoring 로직을 개발하여 Deep Learning 만으로 해결되지 않는 Case 들을 처리 할 수 있도록 하였다. 이 부분에 대해서는 별도의 포스팅을 통해 자세히 설명할 수 있도록 하겠다.