데이터 사이언스(Data Science)/자연어 처리 ,NLP

딥러닝 챗봇 만들기 - 4 (실제 프로젝트 만들어보기)

게임이 더 좋아 2021. 1. 16. 18:57
반응형
728x170

실제 내용은 7장부터 시작이어서 나도 7장부터 시작하려고 한다.

 

근데 Mysql 미치겠다. ㅋㅋㅋ 내가 루트계정 권한을 안주고 종료했는지.. 접속이 안된다. 노트북 바꿀 때 잘못설치한듯..

 

무슨 에러 겁나 떠서 재설치도 제대로 안되고.. 그냥

8.0.20 버전으로 새로 깔았다.. 그 이후

쭉쭉 진행이 됐다.


그렇게 DB를 생성하고

DB 접속하기 위해서 DB 정보 모듈도 만들고 그랬는데

DB_HOST = "127.0.0.1"
DB_USER = "chatbot"
DB_PASSWORD = "1234"
DB_NAME = "chatbot"

def DatabaseConfig():
    global DB_HOST, DB_USER, DB_PASSWORD, DB_NAME

정작 create_train_data를 하는 과정에서 

path가 달라서 import가 안되는 상황이 벌어졌다.

 

1. 같은 폴더로 옮겨준다.

2. sys.path.append(모듈을 저장한 경로) 사용하기

 

import sys

sys.path.append("~\~\~\B")

 

sys.path는 파이썬 라이브러리가 설치되어 있는 경로들을 보여준다. 따라서 B의 경로를 sys.path에 추가하면  B 안에 있는 어떠한 모듈(라이브러리)들을 가져와서 사용할 수 있다.

 

그 이후에는 순순히 넘어가지긴 했다.

 

load_train_data

기존의 것을 버리고 새로운 것을 update하는 것인데

음.. 새로운 것이 많이 생기지 않았다면 비효율적인 방법이긴 했다.

굳이 다 지우고 다시 써넣는다고??

# 학습 데이터 초기화
def all_clear_train_data(db):
    # 기존 학습 데이터 삭제
    sql = '''
            delete from chatbot_train_data
        '''
    with db.cursor() as cursor:
        cursor.execute(sql)

    # auto increment 초기화
    sql = '''
    ALTER TABLE chatbot_train_data AUTO_INCREMENT=1
    '''
    with db.cursor() as cursor:
        cursor.execute(sql)

 

 

이정도로 Mysql을 다루는 것을 했고 다음은 챗봇 엔진에 대해서 알아보았다.

 


 

 

챗봇은 보편적으로 만들기는 정말 어렵고 어떠한 task에 집중해서 만들 수 있다.

 

이 책에서는 아래 5가지의 기능을 가지는 챗봇을 만든다고 한다.

 

1. 질문 의도 분류

-화자의 질문 의도를 파악한다. -> 의도 분류 모델을 이용해 prediction

 

2. 개체명 인식

-화자의 질문에서 단어 토큰별 개체명 인식 -> 단어 토큰에 맞는 개체명 예측

 

3. 핵심키워드 추출

-화자의 질문 의미에서 핵심이 될 만한 단어 토큰 추출 -> 형태소 분석기를 이용해서 핵심 명사나 동사 추출

 

4. 답변 검색

-해당 질문의 의도, 개체명, 키워드를 기반으로 학습 DB에서 검색 후 출력

 

5. 소켓 서버

-다양한 종류의 챗봇 클라이언트에서 요청하는 질문을 처리하기 위해 소켓 서버 프로그램 역할 구현

(챗봇 엔진 서버 프로그램)이라고 말할 수 있음

 

 

최종 구현은 이렇게 한다고 한다.

 


다시 말해서

챗봇에게 말을 걸면

1. 전처리를 진행함

2. 형태소 분석기를 이용 키워드 추출 후 불용어 제거

3. 의도 분석을 하고, 개체명 인식 후 결과 출력

4. 그 결괏값을 이용해 적절한 답변을 학습 DB에서 검색해서 출력

 

챗봇이 이러한 것을 배우기 위해서는 *의도분석과 *개체명 인식 에서 딥러닝 모델을 이용해 학습을 해야한다.

즉, 특수 목적에 맞는 task를 수행하기 위해 그 domain,도메인에 관한 지식이 많으면 좋은 성능을 보이는 챗봇이 될 것이다.

하지만 충분한 학습자료가 없다면 룰베이스(rule base) 와 딥러닝 모델을 같이 사용해서 만드는 것이 그나마 낫다.

 

++딥러닝이 무조건 정답은 아니란 뜻이다.

 

다음 글부터 위에 나와있는 순서대로 코딩을 해보자

 

 

반응형
그리드형