########################################################
업데이트
2021.03.10 - [Bigdata, AI/NLP] - 잘 만들어진 오픈소스 챗봇 KoChat !! - 구현하기
위 글에서는 git clone부터 챗봇 실행까지 구현하는 과정을 담았습니다.
##########################################################
1. 수많은 챗봇 오픈소스
챗봇 오픈소스는 많다. github에서 chatbot을 찾아보더라도 굉장히 많은 챗봇 프로젝트들이 나온다
그런데 이중에 한글로 된 챗봇은 없다. 그렇다보니 시중에 볼수있는 챗봇의 경우엔 이미 정형화된 문답 형식의 챗봇들이 가득하다. 빌더를 통해 만드는 그런 챗봇들... 커스터마이징이 거의 불가능하고 정형화된 답밖에 들을수 없는 그런 챗봇들이 기본이다.
그런데 최근 kochat이라는 한글로 된 챗봇 오픈소스 프로젝트가 나와서 소개하고자 한다.
2. 본론
1) RASA를 닮은 kochat
kochat은 한국어 전용 챗봇 개발 프레임워크 로써 이미 상용화된 챗봇 빌더들은 매우 간편한 웹 기반의 UX/UI를 제공하며 일반인을 타깃으로 하지만 Kochat은 챗봇빌더 보다는 개발자를 타깃으로하는 프레임워크에 가깝습니다. 개발자는 소스코드를 작성함에 따라서 프레임워크에 본인만의 모델을 추가할 수 있고, Loss 함수를 바꾸거나 본인이 원하면 아예 새로운 기능을 첨가할 수도 있다.
실제 미국의 RASA라는 챗봇을 보고 영감을 얻은 개발자는, RASA의 경우 직접 소스코드를 수정할 수 있기 때문에 다양한 부분을 커스터마이징 할수 있지만 한국어를 제대로 지원하지 않아, 전용 토크나이저를 추가하는 등 매우 번거로운 작업이 필요하고 실제로 너무 다양한 컴포넌트가 존재하여 익숙해지는데 조금 어려운 편이라고 소개한다. 때문에 누군가 한국어 기반이면서 조금 더 컴팩트한 챗봇 프레임워크를 제작한다면 챗봇을 개발해야하는 개발자들에게 정말 유용할 것이라고 생각되었고 직접 이러한 프레임워크를 만들어보자는 생각에 Kochat을 제작하였다고 한다.
2) 챗봇의 분류
챗봇의 경우엔 2가지로 분류할수 있다. 자유롭게 대화할 수 있는 Open Domain 챗봇이 있고, 특정 목적을 수행하는 Close Domain 챗봇이 있다. close Domain 챗봇의 경우에는 사람의 업무를 도와줄 수 있는 개인 비서형 챗봇, 사내 업무 지원형, 고객 서비스 챗봇 등으로 구분되어 질 수 있다.
이중에 kochat은 Close Domain만을 지원하고 있다. 나중에는 Open Domain까지 발전할 계획을 가지고 있다고 한다.
Close Domain 챗봇을 구현하고자 개발자는 slot filling 방식을 구현하였다고 한다. slot filling 방식은 말 그대로 정해진 slot이 있는데 이 slot을 채움으로써 챗봇의 역할이 정해지는 방식이다.
3) 인공지능을 이용한 챗봇
kochat은 딥러닝 기반의 프레임워크이다.
그래서 데이터를 학습하고 모델을 생성하여 새로운 데이터가 들어왔을때 문장 내에 어떤 의도를 가지고 있고 어떠한 개체가 무엇을 원하는지 체크한다. 데이터를 구하는게 정말 쉽지 않은 일인데 고맙게도 개발자가 데이터셋을 제공해주고 있다.
이를 통해 loss 를 계산하고 loss를 줄여가는 방식으로 학습을 진행한다.
개발자가 제시한 표를 보게되면 약 95%의 정확도를 보이고 있고 f-1 score는 98%가까운 수치를 보이고 있다.
이를 통해 볼때 성능적인 면으로는 문제없을것 같다. 그렇다면 한번 실행해보자!
4) 실제 구동기
개발자가 데모를 제공하고 있으니 실행해보았다.
다만 초기 설정으로 실행하려하였을때는 메모리 부족 에러가 생겼다..
높은 정확도를 위해서는 학습 횟수와 layer를 많이 만드는 것이 좋지만, 일단은 데모 실행을 목적으로 하기 때문에 config를 바꾸었다.
단.. 너무 낮춰버리면 실제 답을 찾지 못하는 경우가 많으니 적당한 학습은 실행시켜주는 것이 좋다.
GENSIM = 'iter': 2000 # 임베딩 학습 횟수
INTENT = 'epochs': 100,
'd_model': 512,
'd_loss': 16, # 인텐트 로스의 차원
ENTITY = 'epochs': 100, # 엔티티 학습 횟수
'd_model': 512, # 엔티티 모델의 차원
이처럼 바꿔 학습 시켰을때 아래는 실행 결과이다.
3. 결론
잘만들어진 오픈소스 챗봇이 나왔다. 문서도 정말 잘 만들어 놓았다.
작업하는데 많은 시간이 들었을 것이고, 문서 작성에도 너무 많은 공을 들였을 텐데 오픈소스로 무료로 제공해주니 개발자에게는 너무나도 감사할 따름이다.
앞으로 보완해야할 것도 많이 있겠고 실제 rasa 처럼 구현하기엔 많은 세부사항들이 필요하겠지만, 앞으로 더 많은 발전이 기대되는 프로그램이다.
혹시 수정사항이나 피드백이 필요한 부분이 있다면 알려주세요~
소스 공개 깃헙 : github.com/hyunwoongko/kochat
2021.03.10 - [Bigdata, AI/NLP] - 잘 만들어진 오픈소스 챗봇 KoChat !! - 구현하기
'Bigdata, AI > NLP' 카테고리의 다른 글
잘 만들어진 오픈소스 챗봇 KoChat !! - 구현하기 (116) | 2021.03.10 |
---|---|
WHAT IS TORCH.NN REALLY? (0) | 2020.08.26 |
예제로 배우는 파이토치3. 마지막. (0) | 2020.08.25 |
예제로 배우는 파이토치2 (0) | 2020.08.25 |
예제로 배우는 파이토치! (0) | 2020.08.24 |
댓글