기간: 22년 12월 22일 ~ 23년 1월 5일
12월 22일 전
팀원들과 주제를 정하고 어떤 데이터를 사용할지를 정했다. 그리고 추천시스템 분야는 우리가 수업시간에 깊게 다루지 못하여 많은 공부가 필요했고 각자 공부를 해오는 시간을 가졌었다.
12월 22일 ~ 1월 4일
프로젝트 목표
처음에는 사용자가 성별, 나이, 키워드 등의 세부적인 정보를 입력하면 그에 맞는 도서들을 추천해주는 시스템을 구상하였다. 하지만 부족했던 데이터들로 인해 우리가 목표로 했던 결과에서 조금 타협을 보고 키워드 기반의 도서를 추천해주는 것을 이번 프로젝트의 목표로 정했다.
데이터 수집
처음에는 문화 빅데이터 플랫폼(https://www.bigdata-culture.kr/bigdata/user/main.do) 이라는 공공 데이터 플랫폼에서 정제된 데이터를 사용하기로 했다. 이 플랫폼에는 다양한 데이터들이 있는데 도서분야에서는 인기대출도서, 도서세부사항, 공공도서관 대출 정보 등이 있었다. 이 안에 컬럼들은 성별, 나이, 순위 등 다양한 값들이 있었지만 아쉽게도 21년까지의 데이터만 존재하여 우리가 원하는 최신 도서들은 추천하기가 힘들었다. 그래서 yes24와 교보문고 홈페이지와 같은 온라인 서점에 있는 최신 도서 목록들을 가져오기로 했다. 도서 목록 수집 범위는 각 카테고리별 인기 도서 상위 80권씩을 가져왔다. 온라인 서점에서의 데이터에는 컬럼값이 나이와 성별과 같은 세부적인 정보가 없어서 아쉬웠다. 그래서 있는 데이터를 사용하여 도서를 추천해주는 방향으로 잡았다. 리뷰 데이터도 수집하여 협업필터링 추천도 같이 하고 싶었지만 리뷰 데이터에 유저 정보가 마스킹 되어있어 그 부분은 아쉽게 못하였다.
데이터 전처리
토큰화
우리는 책 설명을 토픽모델링으로 돌려 키워드를 뽑고 싶었기에 책 설명을 토픽모델링으로 돌리기 위해 전처리하는 과정을 거쳤다. 우선 중복 책들을 모두 제거해 주었고 okt 형태소 분석기를 사용하여 토큰화를 진행하였다.
불용어 처리
이상태로 토픽모델링을 진행하면 불필요한 용어들이 많이 나온다.(ex. 합니다, 입니다, 있다 등..) 그래서 여러번 돌려보면서 불용어를 하나씩 추가하여 우리가 불필요한 단어들을 제거해나가는 과정을 거쳤다.
다음은 도서 추천 시스템을 만들었을 때 시각적으로 보기 좋은 ui를 만들기 위해 네이버 도서 api를 활용하여 도서 image를 가져와 기존의 데이터에 추가시켰다.
LDA Topic Modeling
우리가 사용할 추천 기반은 LDA를 활용한 토픽 기반 추천이다. 토픽 모델링 api는 gensim, sklearn, tomotopy를 사용하여 비교해보고 더 좋은 성능인 tomotopy api를 사용하기로 정하였고 좋은 토픽을 뽑기 위해 위에 전처리 과정을 계속해서 반복하고 min_df(최소 단어 갯수 지정), min_cf(최소 장서 빈도 갯수) 등의 하이퍼파라미터를 조정하여 결과를 정하였다.
추천 시스템
토픽모델링을 통해 나온 토픽들 간의 유사도를 측정하여 책 한권을 선택했을 경우 비슷한 토픽의 책들을 추천해주는 시스템을 만들었다. 이때 유사도 선정은 코사인 유사도와 피어슨 유사도를 고민 끝에 피어슨 유사도를 선택하였다.(별로 좋지 못한 선택이었다..). 이것을 활용하여 토픽기반 추천 시스템을 만들었고 스트림릿을 이용하여 ui를 만들고 인터넷에 배포하는 과정까지 진행해보았다.
2023년 1월 5일
발표를 마치고 평가단 분들께 피드백을 받았다. 총평에 대해서는 쓴 소리들을 많이 들었다. 사실 어느정도 예상했던 부분들이라 다음 프로젝트때는 이런 점들을 보완해야겠다는 생각을 했다.
평가단 총평
코딩만 함. 공부를 열심히 해서 내가 뭘 쓴 건지에 대해 누구보다 잘 설명할 수 있어야 함. 그걸 할 수 없으면 모델을 안 쓰느니만 못한 것. 모델링에 대한 이해 없이 가져다 쓴 게 많아서 미흡하게 느껴짐.
개인 회고
다양한 기술 활용보다는 높은 완성도를 목표로 시작했던 프로젝트였다. 하지만 우리가 수업 때 배운 내용을 활용할 수 있는 프로젝트가 아닌 새로운 기술들을 공부해서 적용시켜보는 프로젝트였다. 그렇기에 내용을 깊이있게 공부하기가 힘들었지만 전체적인 구현 과정을 알아갈 수 있었던 시간이었다. 프로젝트를 진행하면서 좋은 프로젝트를 만들기 위해선 기술 선택에 대한 정당성이 필요하며 그러기 위해선 많은 시간 투자와 노력(공부)이 필요하다는 것을 알았다. 프로젝트라는 것이 무엇인지 많은 것을 배울 수 있어서 좋았던 시간이었고 아직 많이 부족한 내 자신을 알 수 있었다. 이것을 바탕으로 다음 프로젝트 때는 기본을 잘 다져서 더욱 완성도 있는 프로젝트를 해야겠다.
'멋사 AI SCHOOL에서' 카테고리의 다른 글
[AI SCHOOL] Mini_Project_6 : CNN 이미지 분류 (0) | 2022.12.09 |
---|---|
[AI SCHOOL] Mini_Project_3 (주제: 신용카드 사용자 연체 예측) (1) | 2022.11.05 |
[AI SCHOOL] Mid Project (19일 ~23일) (0) | 2022.10.24 |
[AI SCHOOL] Mini_Project_2 (주제: 서울시 편의점 데이터 분석) (0) | 2022.10.18 |
[AI SCHOOL] Mini_Project_1 (주제:국내 프랜차이즈 카페 전국 매장 정보) (0) | 2022.10.08 |