Skip to content

Specification

pangthing edited this page Sep 15, 2022 · 10 revisions

Ⅰ. Model Introduction

Description

  • 사람과 대화 및 상담을 하기 위해 제작 및 설계된 AI Model입니다.
  • 사용자에게 서비스를 제공하는 데에 있어 텍스트를 분석하고, 대화를 생성하는 역할을 수행합니다.

Design Direction

  • 날씨, 취미와 같은 사람과 일상적인 대화를 나누는 듯한 일상 대화 서비스와 심리적으로 불안 및 고통받는 상황에 대해 위로 및 상담해주는 상담 대화 서비스를 지원하는 것을 목표로 하였습니다.
  • 위 목표를 위해 사용자가 말하고자 하는 의미 및 대화에서 나타나는 상황을 분석하도록 모델을 설계했습니다.
  • 분석한 정보를 토대로 사용자에게 적절한 서비스를 결정하며, 대화 흐름을 자연스럽게 하기 위해 학습 데이터 및 방법 선정에 중요도를 두었습니다.
  • 서버의 submodule로서 작동하도록, 데이터 구성과 흐름 과정을 설계했습니다.

Ⅱ. Feature configuration

기능 flow는 대화 분석, 대화 분류, 대화 생성 및 대화 데이터 구성으로 나눌 수 있습니다.

1. 대화 분석

Definition

  • Chatbot은 우선, 사용자로부터 받은 text의 상황과 의미에 대한 분석을 수행합니다.
  • 우리는 분석에 대한 지표를 대화에 담긴 감정과 주제로 정의하였고, 입력 text 데이터는 사전 학습된 AI model들에 의해 지정된 레이블로 분류됩니다.

Main method & valiable

  • EmotionClassificationBertModel : 감정 분류에 대해 사전 학습된 model instance
  • TopicBertModel : 주제 분석에 대해 사전 학습된 model instance
  • make_datasets_for_prediction : BERT model input 형식에 맞게 텍스트를 인코딩
  • emo_predict : 텍스트에 적절한 감정 레이블 예측 및 확률 벡터 디코딩
  • Topic_predict : 텍스트에 적절한 주제 레이블 예측 및 확률 벡터 디코딩
  • emotion_mapping_by_index : 감정 레이블 dictionary
  • Topics_mapping_by_index : 주제 레이블 dictionary

Algorithm

  • 데이터 인코딩
    • 문장을 subword 단위로 tokenizing 한 후, 정수 인코딩을 진행
    • token들의 길이 만큼의 position embedding
    • BERT 입력 개수에 대해 segment embedding
    • 세 인코딩 데이터를 하나의 tensor로 구성
  • fine-tuning
    • TFBertModel layer와 classifier layer를 쌓아 Model 제작
  • 예측
    • 인코딩한 데이터를 모델에 입력
    • 모델의 결과값인 확률 벡터 중 최대 값을 가리키는 요소를 추출 후, label dictionary로 label 반환

2. 대화 분류

Definition

  • 분류된 대화 정보들로 사용자가 입력한 텍스트의 대화 타입을 분류해 냅니다.
  • 일상 대화라면 일상 대화 생성 페이즈로, 상담 대화라면 상담 대화 시나리오 페이즈로 넘어갑니다.

Main method & valiable

  • dialog_buffer : 사용자로부터 입력되는 텍스트 문장들을 저장하는 buffer
  • manage_dailogbuffer : dialog_buffer의 size를 관리하고, 주제 분석 여부 결정
  • get_results : 감정, 주제 정보를 예측하고, 정보들을 바탕으로 대화 타입을 분류

Algorithm

  • 대화 정보 분석
    • 감정 분류 모델에 입력된 텍스트로 감정 레이블 예측 및 분류
    • dialog_buffer에 텍스트 push
    • manage_dailogbuffer method를 통해 dialog_buffer의 size가 3미만이면 False를, 3이면 True를, 3초과이면 size가 3이 될 때까지 데이터 drop 후 True를 반환
    • manage_dailogbuffer 반환 값이 False면 주제 없음으로 분류
    • manage_dailogbuffer 반환 값이 True면 dialog_buffer를 주제 분석 모델에 입력하여 주제 레이블 예측 및 분류
  • 주제 분류
    • 감정 분류, 주제 분석 완료 시 재예측 여부 확인
    • 감정 정보가 중립 및 긍정이거나, 주제 레이블 예측 확률이 99% 이상이면 재예측 하지 않고, 초기에 예측된 주제 정보를 그대로 반환
    • 감정 정보가 부정이고, 주제 레이블 예측 확률이 99% 미만이면 상담 시나리오 관련 주제의 확률벡터만 고려하여 주제 재예측하여 반환
  • 타입 분류
    • 감정 정보가 부정이고, 주제 정보가 상담 시나리오 관련 주제이면 상담 대화로 분류
    • 감정 정보가 중립 및 긍정이고, 주제 정보가 일상 대화 관련 주제이면 일상 대화로 분류

3. 대화 생성 및 대화 데이터 구성

Definition

  • 사용자에게 제공할 대화를 생성합니다.
  • 입력 텍스트에 대해 분석 및 예측한 정보를 하나로 묶어 해당 텍스트를 나타내는 하나의 자료로 만들어 냅니다.

Main method & valiable

  • GeneralDialogBertModel: 일상 대화 생성에 대해 사전 학습된 model instance
  • GC_predict : 입력 텍스트에 대한 챗봇의 답변 생성
  • make_datasets_for_prediction : BERT model input 형식에 맞게 텍스트를 인코딩
  • decoder_layer : 인코딩된 입력 텍스트의 attention과 답변 텍스트의 self-attention을 통해 답변 텍스트의 token들을 예측해 내는 layer
  • decoder : 여러 decoder_layer들을 모아 하나의 decoder로 통합
  • run : 입력 텍스트에 대해 분석 및 예측 데이터들을 얻고 대화 데이터로 만들어 서버에 반환

Algorithm

  • 일상 대화 시퀸스
    • 데이터 인코딩
      • 문장을 subword 단위로 tokenizing 한 후, 정수 인코딩을 진행
      • token들의 길이 만큼의 position embedding
      • BERT 입력 개수에 대해 segment embedding
      • 세 인코딩 데이터를 하나의 tensor로 구성
    • fine-tuning 및 대화 생성
      • TFBertModel layer와 context_vec layer를 쌓아 Bert의 출력을 decoder 입력 형태로 변환
      • Bert 출력단에 transformer decoder를 쌓아올림
      • decoder에 Bert의 인코딩된 입력과, Bert의 출력을 입력하여 attention mechanism 및 FFNN 을 통해 답변 token들을 차례로 도출
  • 대화 데이터 구성
    • run method에서 모든 대화 정보 및 타입, 일상 대화 답변에 대한 method 수행
    • OrderedDict 자료형에 데이터들을 저장하여 서버에 반환