[KT AIVLE School 3기] 6차 미니 프로젝트 후기
3주간 진행되던 프로젝트 주간의 마지막 프로젝트도 마무리했다. 4월은 내내 프로젝트하느라 정신없이 정말 빠르게 지나갔던 것 같다! 6차 미니 프로젝트는 2일간의 짧은 프로젝트 두 개로 나누어져 진행되었다. 월~화는 자연어 처리를 주제로 진행되었고, 수~목은 시계열 데이터를 이용한 프로젝트를 진행하였다. 이번 프로젝트가 월~금의 5일 일정이 아닌 4일짜리 일정으로 진행된 이유는 금요일에는 AICE Associate 자격증 시험과 첫 번째 AIVLE DAY가 진행되기 때문이다! 당장 금요일에 자격증 시험이 있기 때문에, 이번주 프로젝트의 난이도도 무난하게 조절한 듯하다. 근데 자연어 처리는 아직도 너무 어려워요 (´•̥̥̥‸•̥̥̥`)
미니 프로젝트 6차 ① : Aivle School 지원 질문, 답변 챗봇 만들기
1일차 : 데이터 탐색 및 전처리
자연어 처리라는 주제로 진행될 6차 미니프로젝트의 첫 번째 주제는 챗봇 만들기이다! 챗봇이라고 해서 듣자마자 지레 겁먹었는데 생각보다 복잡한 걸 요하지는 않았다. AIVLE School의 Q&A를 바탕으로 만든 텍스트 데이터를 통해 질문에 알맞은 대답을 출력할 수 있도록 하는 것이 이번 프로젝트의 목표였다. 문의 사항이 있을 때 상담자나 담당자와 직접 소통하는 것이 편리하기는 하지만, 상담사의 수는 제한되어 있고 상담사들도 본인의 주요 상담분야가 아니면 자세히 모를 때도 있다. 그렇기에 챗봇이 잘 구현되어 있다면 이용자는 시간, 장소에 상관없이 자신이 원하는 정보를 잘 얻을 수 있다. 이미 국내에서 다양한 회사들이 챗봇을 도입했다. 대부분의 1 금융권 은행들은 어플을 통해 챗봇 상담을 제공하고 있고, 우리가 가장 많이 사용하는 메신저인 카카오톡의 플러스 친구 속에서 챗봇을 활용하는 것을 많이 봐왔을 것이다. 에이블 스쿨과 같은 교육 과정에 대해서도 지원 기간이면 지원 관련 문의가 쏟아질 텐데 이 중에는 단순 질문이나 중복되는 질문도 많기 때문에 이런 상황 속에 챗봇을 도입하면 상담자와 질문자 모두에게 편리함을 제공할 수 있을 것이다. 따라서 이런 챗봇을 구현하기 위해, 일상적인 대화들과 에이블 스쿨 관련 질문들을 모아 텍스트 데이터로 만들고, 텍스트의 질문 유형을 학습한 후 새로운 데이터가 들어왔을 때 유형을 구분하고, 그 유형과 질문에 맞는 대답을 출력할 수 있도록 하였다. 사실 이번 프로젝트를 완벽하게 마무리하지는 못했다 •́︿•̀ 。 그래서 우선 내가 했던 거 위주로 정리하고, 주말에 다시 공부하면서 코드를 완성해보려고 한다!
▶ 1일차 일정 : 개별 실습
1일차의 주어진 목표는 데이터 탐색 및 전처리이다. 우선 대화 데이터는 크게 일상 대화와 에이블 스쿨 관련 문의로 나눌 수 있고, 각 카테고리마다 약 50개의 intent로 소분류되어 있다. 대부분의 대화 데이터는 평균적으로 50 단어를 넘지 않았지만, 일상 대화가 문의 대화보다는 짧은 편이었다. 그 후 각각의 질문을 형태소 분석기를 통해 나누어 저장하며 기본적인 데이터 전처리를 마쳤다.
그다음 목표는 Word2Vec 모델을 만들어 임베딩 벡터를 생성하기였다. 처음으로 자연어 처리라는 주제를 다뤘던 4차 미니 프로젝트 때 데이터 전처리 때 선택 사항으로 Word2Vec도 나와 있었긴 했는데 그땐 N-gram이랑 Sequence 데이터 변환하는 것만으로도 너무 정신없어서 시도를 못해봐서 이번에 처음 해보게 되었다. Word2Vec 모델이 뭔지 찾아보기만 해도 시간이 너무 잘 갔다..!! 그래서 이 부분을 다 마치지는 못하고 강사님의 설명을 들었다. 설명을 들어도 한 번에 다 이해가 가는 게 아니어서 우선 내용만 쭉 들었다! 자연어처리.. 넘 어렵습니다...
2일차 : 모델링
▶ 2일차 일정 : 개별 실습 → 프로젝트 해설
2일차는 남은 데이터 전처리를 진행하고 분류 모델링과 챗봇을 만드는 게 주어진 목표였다. 결론적으로 나는 챗봇 만들기는 끝내지 못했다 (ᐢ._.ᐢ;)՞ ՞ Word2Vec Pretrain Model을 통해 알아서 문장들을 임베딩 시켜준 후, 여러 머신러닝 모델을 사용해 분류를 진행해 보았다. 분류를 진행해도 단순히 계산돼서 나오는 accuracy score도 썩 좋진 않았다 ㅋ 그 후 챗봇 구성... 은 코드를 짜기보다 챗봇을 만드는데 필요한 과정들을 이해하고 공부하는 시간을 가졌다. Embedding Layer에 대해서도 아직 확실하게 이해하지는 못했던 것 같고, 코사인 유사도라는 개념을 처음 들어보게 되어 이에 대해서도 알아봤다. 사람이라면 단어 간의 연관성을 쉽게 이해할 수 있지만, 기계에게도 이런 연관성을 학습시킨다는 게 정말 신기한 것 같다. 임베딩을 통해서 벡터로 변환한 단어들을 두 벡터의 내적을 각 벡터의 크기의 곱으로 나누어 계산하면 코사인 유사도를 구할 수 있다. 이 유사도는 -1에서 1 사이의 값을 가지고 두 벡터가 일치하면 1, 서로 직교하면 0, 반대 방향을 가리키면 -1이 된다고 한다. 인공지능에 대해서 잘 익히기 위해서는 항상 수학적 지식도 중요하다는 걸 한번 더 느낀다! 그리도 두 번째 챗봇을 만들 때는 FastText를 사용하도록 하였는데, FastText에 대해서는 완전히 다 살펴보지 못하였다. 주말에 시간 내서 다시 공부해야겠다! 그리고 강사님의 코드 해설을 보는데, 코드가 너무 깔끔해서 감탄스러웠다.. 이렇게 얼레벌레 자연어 처리 두 번째 프로젝트도 끝! 근데 너무 엉망진창으로 해서 반드시 꼭 다시 살펴봐야겠다 ( •︠ˍ•︡ )
미니 프로젝트 6차 ② : 장애인 이동권 개선을 위한 장애인 콜택시 대기시간 예측
3일차 : 데이터 전처리 및 탐색적 데이터 분석
두번째 프로젝트의 주제는 장애인 콜택시 대기시간 예측이다! 개인적으로 이 주제 너무너무 마음에 들었다.. 최근 전장연의 장애인 이동권 개선을 위한 시위가 계속되면서 자연스럽게 이 주제를 많이 접했기에 배경 이해를 하기 쉬웠던 것 같다. 평소에는 장애인의 이동 불편에 대해 생각해 본 적이 없었는데, 미국에 다녀왔을 때 장애인 관련 시설들이 잘되어 있는 것을 보면서 많은 것을 느꼈다. 대부분의 건물 입구는 장애인들의 출입이 원활하게 될 수 있는 자동문으로 되어 있었다. 버스들은 대부분 저상버스였고, 횡단보도는 초록불로 바뀌어 있는 동안 항상 소리가 났다. 하지만 우리나라에서는 시각장애인을 위한 보도 블럭조차 미관상 안 좋다며 갈아엎는 일도 계속 발생하고 있다. 우리나라의 통계에 따르면 전체 인구 중 등록된 장애인의 비율은 약 5% 정도 된다. 그렇다면 주변 사람 20명 중 한 명은 장애인이라는 건데, 나는 실생활에서 장애인을 본적이 거의 없다. 특히 신체적 장애인은 더더욱..!! 장애인들도 사회생활을 안 하는 것이 아닌데 난 왜 평소에 많이 보지 못했을까? 아무래도 장애인의 대중교통 이용이 어려운 것도 굉장히 큰 부분을 차지하는 것 같다. 나는 수원에 살지만, 대부분의 마을버스는 계단으로 승하차하게 되어 있어 휠체어를 탄 장애인은 이용할 수가 없다. 간혹 저상버스가 다니는데, 저상버스면 버스 정류장의 버스 현황 모니터에 '저상'이라고 표시될 정도로 아직은 널리 보급은 안되었다. 경기도 내 지하철은 그래도 대부분 엘리베이터가 설치되어 있고, 장애인용 개찰구도 있지만 지하철 탑승이 가장 어려운 것 같다. 지하철과 승강장이 완벽히 붙어있지 않아 그냥 탑승하기는 쉽지 않고 비장애인에 비하면 탑승 시간이 길게 소요된다. 또한 휠체어의 공간 차지가 많다 보니 사람이 많다면 승하차조차 힘들 것이다. 기차는 더 열악하다. 최근 4월 15일에, 수원역에서 장애인 전용 좌석을 예약한 사람이 입석 손님이 너무 많아서 기차 탑승 거부를 당했다. 멀쩡히 돈 내고 예약한 사람을 입석 손님이 많아 장애인 휠체어를 태우기 어렵다는 이유가 전부였다. 이렇기에 아직까지 대중교통을 이용하기에는 부족한 점이 너무 많아 보인다. 하지만 장애인들이 직접 운전을 할 수 없는 경우가 많기 때문에 이동할 일이 생긴다면 필연적으로 최우선책으로 택시를 찾을 것 같다. 그렇기 때문에 장애인 콜택시를 운영하고 있지만 차량 및 택시기사 수는 한정되어 있고 택시를 호출해도 배차 및 대기 시간도 너무 길거나 예상할 수 없기에 이동이 쉽지 않다. 그래서 이를 개선하기 위해 콜택시의 수를 늘리기도 하는 등 여러 가지 노력을 하고 있지만 쉽지 않다. 이런 것들을 보면서 장애인을 위한 사회 기반 시설 마련이 굉장히 중요하다고 느꼈다. 이야기가 엄청 길어진 것 같은데 그래서 이번 주제가 정말 흥미롭고 더더욱 열정을 갖고 할 수 있게 되었다!
▶ 3일차 일정 : 개별 실습 → 조별 토의 및 실습
이번 프로젝트에서는 장애인 콜택시의 여러 운행 정보를 바탕으로, 콜택시의 평균대기시간을 예측하는 것이다. 이 과정에서 날씨 정보도 같이 활용하였다. 첫날은 데이터 분석 및 전처리를 진행하고 둘째 날은 모델링 구현을 진행하였다. 이번 데이터는 2015년부터 2022년까지의 일별 데이터들이 다 들어있는 시계열 데이터이다. 시계열 데이터로 프로젝트를 진행하게 되는 건 처음이라서 많이 떨렸지만, 특별하게 복잡하고 어렵기보다 날짜, 요일 이런 특성들로 한 번 더 데이터를 검토할 수 있어서 오히려 프로젝트를 진행하는데 많은 도움이 되었다. 일/월/요일/년도 별로 데이터를 분석하다 보니, 콜택시의 운영 및 수요가 평일과 주말이 확연히 차이가 있는 것이 가장 두드러졌다. 프로젝트 ipynb 파일에서 이번에는 시각화나 정보 확인을 엄청 많이 해서 사실상 거의 노가다 하느라 실습 시간이 다 지나갔던 것 같다.
4일차 : 모델링
▶ 4일차 일정 : 개별 실습 → 조별 토의 및 실습
오늘은 어제 못다 한 데이터 분석 및 전처리 후 모델링을 진행하였다. 각 숫자형, 범주형 변수와 실제 target이 어떤 관계가 있는지 heatmap으로 상관관계를 시각화하기도 하고, scatter plot을 그리기도 하고 분산분석도 진행하였다. 의외였던 것은 날씨 데이터가 생각보다 실제 타겟이랑 큰 관련이 없는 것으로 보였다! 특히 강수 여부와 같은 날씨가 영향을 줄줄 알았는데 아닌 것 같다 ㅇ0ㅇ 그리고 머신러닝, 딥러닝 모델링을 진행하였다! 그래도 워낙 주어진 데이터도 깔끔한 편이어서 별다른 전처리 없이도 성능이 나쁘지 않게 나왔다. 나는 모든 날씨 변수와 일부 날짜 관련 데이터를 제거하고, 따로 스케일링은 적용하지 않고 회귀 모델에 적용시켰다. 머신러닝 모델 중에서는 RandomForestRegressor를 사용했을 때 MAE가 가장 작게 나왔다. 딥러닝 모델은 그냥 Dense 레이어만 이용해서 짜보았는데, 층을 적당히 조절하니까 MAE가 3.9까지 작아졌다. 그래서 여기서 끝내고 오후는 AICE Associate 공부...를 빙자한 자유시간을 가졌다 (〜^∇^)〜 사담 조금 하자면 점심에는 회사 앞 중국집에 다녀왔는데 양도 낭낭하구 4명이서 먹으러 간 거라서 탕수육도 하나 시켰는데 춘권 서비스를 얹어주셨다!!!!!! 거기에 음료수 서비스까지 주고 진짜 배 터질뻔했다 이날 저녁까지 배 안 고팠음 ^__^ 진짜 지금까지 한 프로젝트 중에서 가장 여유로웠고, 대면으로 교육장 온 날 중에 가장 활발하고 재밌었다 ㅎㅎ 근데 오늘 같은 날.. 앞으로는 절대 안 오지 않을까 싶다 ㅎ
총평
에이블 교육과정에서 자연어 처리를 짧게 다루고 넘어간게 좀 아쉽긴 하다. 5일 정도 배우고 당장 프로젝트에 적용하려니 내 마음같이 안 되는 부분이 많은데, 추가로 공부해서 바로 따라잡기에는 나한테 빠듯하다고 변명 아닌 변명을... 쉬운 분야가 절대 아니기에 앞으로도 계속 꾸준히 혼자 공부를 더 해야 되지 않을까 생각이 든다!
두번째 프로젝트를 진행하면서 개인적으로 사회적 약자에 대한 관심을 항상 두고, 나중에 기술력을 갖춰서 사회적 불편함을 개선하는데 내가 기여했으면 좋겠다. 그러기 위해서는 기술 관련된 스택들도 당연히 잘 쌓아두는 것도 중요하지만, 생활 속 다양한 불편함을 캐치하고 개선하는 방법을 스스로 생각해 보는 습관을 들이는 것도 중요할 것 같다.
거의 두 달째 쉴틈없이 달려온 것 같은데, 여유로웠던 프로젝트 덕분에 한 숨 돌리기도 했다. 하지만 반대로 생각해 보면 벌써 교육과정의 반정도가 끝나가는데 아직 내가 얼마나 성장했는지는 크게 와닿지는 않지만, 점점 조별 토론 시간에 졸지 않고 내가 한 것들에 대해서 설명할 수 있는 걸 보니 위축되어 있을 필요는 없는 것 같다! 기자단 활동을 신청한 이유도 이렇게 공식적으로 활동한다고 선전포고(?) 해놓으면 뭐라도 더 열심히 할 것 같아서였는데 신청하길 잘한 것 같다! 앞으로는 이런 후기 말고도 공부한 것들을 틈틈이 남길 수 있도록 더 노력해야겠다! 이번주도 고생한 나 자신 기특하다 ( •̀ω•́ )و✧