개인 프로젝트: 나처럼 말하는 봇을 만들어보자! - 1

남승우·2020년 9월 11일
0

project

목록 보기
1/2
post-thumbnail

이번 포스트에는 제가 현재 진행하고 있는 개인 프로젝트에 대한 글을 써볼까 합니다. 비록 진행중인 프로젝트이고, 어떻게 될지는 확신할 수 없지만 개인적으로 매우 만들어보고 싶은 프로젝트이기 때문에, 정기적으로 근황처럼 글을 써볼까 합니다.
그럼, 시작하겠습니다.

프로젝트 개요

이번 프로젝트는 제목에서 알 수 있다시피 간단하게 저처럼 채팅을 치며 대화하는 챗봇입니다.
저는 디스코드 챗봇 개발 팀 팀 크레센도에서 활동하고 있습니다. 자연스럽게 챗봇에 관심을 가지게 되었고, 마침 제 분야가 NLP인 만큼 "한 번 해보자"는 생각을 하게 되었습니다.

솔직히 저처럼 말하는 봇을 만든다고 해봤자 딱히 도움이 될 건 없습니다. 하지만, 뭔가 재밌잖아요? 나처럼 말하고, 나처럼 채팅을 하며 대화를 하는 챗봇을 만든다는건 무척 흥미를 자극하는 일입니다. 딱히 취업에 도움이 되지 않는다고 하더라도 한번쯤은 만들어보고 싶었습니다.
한마디로 표현하자면, 이렇게 말할 수 있겠네요.

재밌어보이니까!

데이터 준비하기

NLP 태스크는 딥러닝 방식을 사용합니다. 딥러닝이든 머신러닝이든, 필수적인 요소는 바로 데이터겠죠? 데이터를 준비하는 과정을 간단하게 확인해보겠습니다.

데이터 확보하기

대화를 하는 모델인 만큼, 데이터에는 대화 데이터가 필요합니다. 거기에 프로젝트가 나처럼 말하는 모델이니 범위는 저 자신의 대화 데이터로 한정되지요.
여기선 제가 가장 많이 사용하는 메신저인 카카오톡의 대화 데이터를 사용하기로 했습니다. 가장 많이 쓰는 메신저인 만큼 데이터 양도 많을테고, 카카오톡의 대화 내보내기 기능을 이용하면 데이터를 모으는 것도 용이하기 때문입니다.

그런데, 시작부터 난관에 봉착했습니다. 저는 쓰지 않거나 자주 대화하지 않는 대화방은 나가버리는 성격입니다. 평소에는 깔끔하다고 생각하며 좋게 생각했으나... 이번 프로젝트에는 아닌 모양입니다. 데이터가 없어요! 고민 끝에, 저와 대화를 자주 하는 친구들에게 부탁해보기로 했습니다.


데이터좀 주세요...

그런 처절한 몸부림 끝에... 얼마 안되는 데이터를 획득하게 되었습니다. 이래도 데이터가 너무 부족한 상황이라, 계속해서 방법을 강구하고 있습니다ㅠㅠ

전처리하기

아무튼 적게나마 데이터를 얻었으니, 이제 전처리를 진행해야겠지요.

처리하기 쉽게 저장하기

대화 내보내기 기능을 통해 확보된 데이터는 .txt 파일로 저장됩니다.


윈도우 기준, 텍스트 파일은 위와 같은 포맷으로 구성됩니다.

해당 파일은 뭐든 하기 힘들어보입니다. 이를 편하게 사용할 수 있도록 .csv로 저장했습니다.


작성시간과 작성자, 내용을 저장합니다.

작성시간을 저장한 이유는 작성 시간에 따라 대화가 이어지느냐, 이어지지 않느냐를 판단하기 위해서입니다. 타인과 대화를 하다 제가 마지막으로 말을 하며 대화가 마쳐졌습니다. 그러다 며칠 후에 제가 먼저 대화를 시작한다면, 며칠전에 한 발화와 방금 작성한 발화는 이어지지 않습니다. 이를 판단하기 위해 작성 시간을 저장하였습니다.

쓸데없는 말들 없애기

위의 사진을 보시면 알겠지만, 카카오톡에서 이모티콘, 사진 등은 이미지 파일이 아닌 이모티콘, 사진 등으로 저장됩니다. 또한 메세지를 삭제하면 발화가 사라지는 것이 아니라 해당 발화가 삭제된 메세지입니다로 남게 되죠. 이 외에도 파일, 링크, 반복되는 말(ex: ㅋㅋㅋㅋㅋㅋㅋ...) 등은 대화에 도움이 되지 않는다고 판단하여 삭제하였습니다.

하지만 예외적으로 이모티콘과 사진, 동영상은 제거하지 않았습니다. 제가 계획하는 모델은 단순히 이전의 발화 하나만 보는것이 아니라 이전 N개의 발화를 확인하는 멀티 턴Mult-Turn 학습을 목표로 하고 있습니다. 이전의 발화를 통해 사진이나 영상등이 어떤 영상인지를 추측할 수 있는것이죠!

너무 짧은 말들 없애기

데이터가 너무 짧거나, 반대로 너무 긴 경우에는 모델의 학습에 독이 됩니다. 2글자 미만의 너무 짧은 발화들은 제거하였습니다. 2글자도 너무 짧은게 아닌가 생각하신 분도 계실겁니다. 하지만 해당 데이터는 대화체인데다가, 오타나 줄임말, 신조어 등이 많이 포함된 채팅 대화체입니다.
ㅇㅇ 라는 발화도 충분히 짧지만, 이는 상당히 많이 쓰이기 때문에 짧아도 충분히 모델의 성능에 영향을 줄 수 있다고 판단했습니다.

마치며

이렇게 간단하게 데이터 전처리를 진행해보았습니다. 그리 어렵지 않은 간단한 작업이지만 이렇게 조금씩 시간을 내서 프로젝트 진행도 하고, 간간히 이렇게 글도 쓸 예정입니다.

조언하실 말씀이나 글에 문제가 있다면 언제든 댓글로 알려주시면 감사하겠습니다!

profile
NLP 엔지니어로 재직중인 주니어 개발자 남승우 입니다 :)

0개의 댓글