금년도 포트폴리오로 준비한 챗봇입니다. 한 해마다 공부한 기술로 꼭 하나의 서비스를 만들어야겠다는 다짐을 했었기에 올해도 무언가를 만들어봐야겠다 생각을 하던 중 '내 경력을 누가 대답해줬으면 좋겠다'고 생각이 들어 만들었습니다. 1. PHP 라라벨에 제트스트림을 통해 로그인관련 모듈을 제공받고 livewire를 통해 UI 컴포넌트를 서버사이드로 렌더링하도록 했습니다. 2. 내부의 자연어처리모델은 Bert모델을 사용했습니다. 이를 위해서 python + Flask서버를 Gunicorn을 통해 열어둡니다. Model로드할 때 서버 메모리가 바로 바사삭 되긴 합니다만 Model이 로드되고 나면 그럭저럭 대답하는 속도를 보여줍니다... GPU가 없는 싸구려 서버를 돌리는 저로서는 고작 요정도 서버 스펙에 Gunicorn하나 phpFpm하나도 벅차더라구요... 3. 젠킨스는 executor를 1개로 줄였는데도 불구하고 service를 꺼놓지 않으면 메모리가 30%나 날아가기에 빌드 후 jenkins를 꺼두도록 설정했습니다... 4. 대략적인 챗봇의 사용순서는 다음과 같습니다. -> 챗봇 생성 -> 챗봇이 응답할 질문과 응답 등록 -> 질의응답이 준비되면 데이터셋 추출(csv) -> csv를 데이터셋으로 질문(key)에 대한 답(value)를 Embeding 후 Vector화 (이 부분을 학습이라 칭함) -> 학습된 결과를 토대로 Bertmodel을 통해 질문에 대한 자연어처리를 통해 질문(key)과의 유사도 비교 -> 가장 유사하거나 유사도(similarity)가 비슷한 질문을 찾고 해당 Key에 맞는 Value를 찾아 리턴 -> 사용자에게 답변 ※ 만약 유사도(similarity)가 너무 낮거나 아예 찾을 수 없는 질문을 물어볼 경우 '미답변'으로 분류하여 따로 DB에 저장하고 이전에 등록한 비슷한 질의응답 항목을 연결하거나 아예 새로운 질의응답을 작성한 후 다시 학습시켜 다음에는 대답할 수 있도록 한다. * 나의 자기소개용 챗봇 https://simchat.aimor.site/msg?c_key=a8228927-9bbb-448f-886b-9ed41997b192 * 이 서비스에서 챗봇 혹시 만들어보실 생각 있으신 분은 https://simchat.aimor.site/
로그인 후 모든 글을 볼 수 있습니다.