[챗봇] 1. 사람을 위로하는 인공지능 "오복이"

jongmin-oh·2023년 5월 1일

위로 챗봇 개발기

목록 보기
1/3

인공지능 위로 챗봇 오복이

history

오복이는 대학교 4학년 졸업작품 수업에 의해 탄생하게 되었다.
개인 프로젝트로 진행했는데, 기왕이면 재미있고 비개발자도 이용해 볼 수 있는 서비스를 만들고 싶었고 회사에서 만드는 챗봇 말고 내가 만든 챗봇 서비스를 배포해보고 싶었다.

이렇게 오복이 v1.0 이 탄생하게된다.
그 후 졸업을 한 뒤에도 나는 이 프로젝트를 계속 이어가고있다...

"오복이"소개

이름 : 오복이
직업 : 심리상담사
종류? : 물범

TMI : 오복이는 이름 지을 당시 고깃집에서 "오복 가위"를 들고있어서 탄생하게 되었다.

소개글 :
"위로봇 오복이"는 인공지능 비서가 아닙니다.
오복이는 내가 한 질문에 대해 위로로 답변해주는 감성 대화 챗봇입니다.

오복이는 정해진 시나리오로 답변하지 않습니다.(룰 기반이 아닙니다)
(직접구현한 API를 통해 답변합니다.)
직접 구현한 API + Generative AI 를 통해 답변합니다.

오복이의 기본 알고리즘은 검색을 통해 질문과 가장 유사한 질문을 찾아
그의 해당하는 답변을 해줍니다

캐릭터 이미지는 Open-AI의 인공지능 “DALL-E”가 생성한 이미지입니다.
다른이미지를 쓰려다 저작권 문제가 있어 직접생성한 이미지를 사용했습니다.

카카오톡 채널 & 오픈빌더

  • 프론트엔드 플랫폼으로 카카오톡 채널을 이용했습니다.
  • 벡엔드와 인공지능 알고리즘에 좀 더 집중하기 위해서 사용했습니다.
  • 실제 프로젝트가 끝나고도 계속 유지보수 할 계획이기 때문에 사용자 접근성이 쉬운 카카오톡 채널을 이용했습니다.
  • 카카오톡 채널 챗봇은 얼마전 무료화를 선언 과금에 대한 부담이 없어 사용하였습니다.

위로봇 : 카카오톡 채널 홈
http://pf.kakao.com/_BNZRb

클라우드 서버

  • 배포를 하려면 서버가 필요한데 일단 구글 클라우드 플랫폼(GCP)의 무료 3개월 크리딧을 사용했습니다.
  • 인스턴스 : e2-medium
    CPU : 2-core , 메모리 : 4GB

2023.03.29 AWS 예약 인스턴스로 교체
*계속 서비스할 생각으로 예약 인스턴스(1년치)를 사비로 구매하였습니다.
33만원 비용발생 ㅠㅠ

EC2 인스턴스 : t3a-medium
CPU : 2-core , 메모리 : 4GB
Storage(EBS) : 20GB
OS : Amazon Linux

웹 프레임워크

  • FastAPI

선정 이유 :
1. Python 기반 웹 프레임 워크
2. 다른 프레임워크에 비해 속도가 가장빠른(Python 기준)
3. 회사에서 사용하기 때문에 익숙함.
4. ORM 지원


오복이 개발 로그

최종 수정일 2023.05.01

  • 오복이 v1.0 배포 ( 2022.11.30 )
    : 엘라스틱 서치 기반 키워드 검색 알고리즘
    : nori 형태소 분석기 사용
    : 10만개의 답변 후보 사용

  • Pingpong API 연동 (2022.12.10)
    : 스캐터랩의 pingpong 챗봇 빌더를 만들어 오복이 패르소나 연결
    : 일상적인 질문을 대체함
    : 10만개에서 찾지못한 질문은 핑퐁AI가 처리하도록 설계

  • 오복이 v2.0 배포 (2023.02.10)
    : 엘라스틱 서치 -> 딥러닝 기반(Sbert) 검색으로 변경
    : Sparse Vector -> Dense vector
    : 키워드 기반 검색 알고리즘에서 문장 임베딩 기반 검색 알고리즘으로 변경
    : klue/roberta-base 의 korSTS/NLI를 파인튜닝한 sbert 모델

  • 임베딩 모델 변경 (2023.03.05)
    : klue/roberta-base -> snunlp/KR-SBERT-V40K-klueNLI-augSTS
    : 데이터 증량기법을 사용해 재학습한 모델로 변경

  • 인스턴스 내 RDB PostgreSQL 구축 (2023.03.06)
    : csv 데이터를 Pandas로 불러와서 답변을 찾는 방식에서 PostgreSQL RDBMS 를 통해 답변 Table을 만들어 fetch 해서 사용하게 변경 - 시간이 조금 늘어나지만 메모리 절약(답변 DB를 메모리에서 계속 들어있지 않음)
    : 사용자가 질문한 내용과 "오복이"가 답변한 답변 로그를 DB에 수집

  • Top-K sampling 적용(2023.03.11)

  • AWS 예약 인스턴스로 교체(2023.03.29)
    : GCP 3개월 무료 크레딧 만료 -> AWS 예약 인스턴스 구매

  • 벡터 검색 최적화(2023.04.10)
    (1).Faiss 유사도 검색 알고리즘 적용
    (2).Faiss PQ 벡터 양자화 적용
    : 임베딩 벡터 메모리 1/4로 감소
    : 유사도 계산 속도 향상
    (3). 핑퐁 답변 유무의 따른 임계치 때문에 유클리디언 거리가 아닌 벡터의 내적으로 계산함.

  • 임베딩 모델 최적화(2023.04.10)
    (1). Torch 모델에서 -> ONNX 모델 uint8 양자화 모델로 변경
    : 임베딩 속도 7배 향상
    : 모델 크기 1/4로 감소
    : 서버 CPU 부하 감소
    : 정확도 차이 거의 없음 dot score +- 0.02 이하

  • 생성 AI 도입(2023.05.01)
    : Naver Hyper Clova API 연동
    : Open AI ChatGPT 연동 *카카오톡 채널 적용 불가

profile
Technical Problem Solver (기술로 문제를 해결하는 사람)

0개의 댓글