brunch

You can make anything
by writing

C.S.Lewis

by TOBESOFT Ai Lab Nov 12. 2020

인공지능 도서추천 시스템 구축하기(1)

LlightFM과 NLP를 이용한 책 추천 시스템 구축 과정에 관하여

[INDEX]

1. 추천 시스템이란?

2. 데이터셋 탐색 및 정제

3. 추천 모델 개발

4. 최종 상품 추천 및 결과 분석

5. 마무리




안녕하세요. 투비소프트 융합기술개발팀 이동희입니다. 

저희는 사내 인공지능(AI) 기술을 연구하는 팀으로 이미지나 영상 데이터에서 특징을 이해하는 컴퓨터 비전(Computer Vision) 분야, 인간의 언어를 이해하기 위한 자연어 처리(NLP) 분야, 다양한 알고리즘과 산업 및 과학적 배경 지식 등을 동원하여 정형/비정형 데이터로부터 지식과 인사이트를 도출하는 데이터 사이언스(Data Science) 분야를 연구하고 있습니다.


이번 글에서는 데이터 사이언스의 한 분야인 '추천 시스템'에 관한 이야기를 다뤄보려고 합니다. 저희는 지난 2018년부터 한국산업기술진흥원에서 시행하는 World Class 300 R&D 정부 사업 과제를 수행해왔는데, 당시 구축했던 '책 추천 시스템' 에 대해 소개하겠습니다. 






추천 시스템(Recommendation System) 이란?


추천 시스템은 정보 필터링 기술의 일종으로, 특정 고객이 관심을 가질만한 정보를 추천하는 시스템입니다. 


우리는 온라인에서 특정 물품이나 콘텐츠를 소비하려고 할때 사이트나 플랫폼에서 

"이런 상품 어떠세요?" "OO님에게 어울리는 스타일링" "OO에 어울리는 추천음악" 이라는 배너나 알림을 받아본 경험이 있을 것입니다. 


이렇게 영화, 음악, 책, 뉴스, 이미지, 웹 페이지 등을 추천해주는 초기 서비스를 넘어 현재는 쇼핑, 광고, 검색어, SNS 등에도 추천 시스템이 적용되어 있습니다. 이러한 추천 시스템은 고객이 원하는 콘텐츠를 매번 검색하는 수고를 덜어주고, 심지어 취향에 따라 생각하지 못했던 콘텐츠를 접할 수 있는 기회도 제안하며 맞춤형 경험(Customized Experience)을 제공합니다.




- 추천 시스템의 분류


추천 시스템은 산업 환경마다 사용하는 추천 알고리즘이 조금씩 다르기 때문에 명확하게 분류하기가 어렵습니다. 그럼에도 추천 시스템은 몇 가지 기반 알고리즘을 토대로 각 산업 특성에 맞게끔 변형되거나 새로운 기술이 추가된 형태이기 때문에 기반 알고리즘에 따라 분류할 수 있습니다.


개인적으로 참조 사이트에서 추천 시스템을 '연관성 규칙 분석(장바구니 알고리즘, Association Rules)', '협업 필터링(Collaborative Filtering)', '콘텐츠 기반 필터링(Contents-based Filtering)', '하이브리드(Hybird)'로 분류한 방식이 기반 알고리즘에 따라 명확하게 분류한 것이라 생각했습니다. 각 추천 알고리즘을 간단히 설명하면 다음과 같습니다. 



1) 연관성 규칙 분석 추천

고객의 장바구니에 함께 담긴 상품들이 서로 연관성이 있다고 판단하여 이를 토대로 추천하는 방법입니다. '특정 상품과 함께 구매한 상품을 추천한다'라고 이해할 수 있습니다. 



2)협업 필터링 추천

고객의 상품에 대한 행동(클릭, 구매, 평점 부여 등)과 유사한 행동 패턴을 보이는 다른 고객의 상품을 추천하거나(User-based CF) 고객들에 의해 유사한 행동(클릭, 구매, 평점 부여 등)이 시도된 상품을 추천(Item-based CF)하는 방법입니다. 협업 필터링은 기존에 쌓여있는 데이터를 기반으로 추천하기 때문에 신규 고객 또는 신규 상품에 대해서는 추천이 어려운 cold start 문제가 있습니다.



3)콘텐츠 기반 필터링 추천

상품의 특성만을 비교하여 가장 비슷한 상품을 추천하는 방법입니다. 상품의 특성만을 고려하여 추천하기 때문에 신규 고객 또는 신규 상품에 대한 cold start 현상이 없습니다.


출처: https://needjarvis.tistory.com/451



4)하이브리드 추천

일반적으로 협업 필터링과 콘텐츠 기반 필터링 방식을 조합하여 상호 보완하는 방식으로 추천하는 방법입니다. 협업 필터링의 cold start 문제를 해결하기 위해 콘텐츠 기반 필터링 기술로 분석하고, 충분한 데이터가 쌓이면 협업 필터링으로 추천 정확성을 높이는 방식입니다. 

 





데이터셋 탐색 및 정제


추천 시스템 모델링을 위해 사용한 데이터셋은 Book-crossing 데이터셋입니다. 해당 데이터셋은 독일 프라이부르크 대학교 컴퓨터 사이언스 Cai-Nicolas Ziegler 교수가 Book-crossing 사이트를 크롤링하여 데이터를 쌓은 후에 배포되었습니다.




- 데이터셋 탐색


Book-crossing 데이터셋은 기본적으로 '고객 정보 데이터', '책 정보 데이터', '평점 정보 데이터'를 포함하고 있습니다.


1) 고객 정보 데이터

고객 정보 데이터를 통해 고객 ID(User-ID), 거주지(Location), 나이(Age) 정보를 알 수 있으며, 해당 데이터는 약 27만 건으로 구성되어 있습니다. 특별히 결측 데이터(nan) 처리가 필요한 Age 칼럼을 확인할 수 있었습니다.


고객 정보 데이터



2)책 정보 데이터

책 정보 데이터를 통해 국제 표준 도서 번호(ISBN), 책 제목(Book-Title), 저자명(Book-Author), 출판 연도(Year-Of-Publication), 출판사명(Publisher), 책 이미지 파일 경로 (Image-URL-S, Image-URL-M, Image-URL-L) 정보를 알 수 있으며, 해당 데이터는 약 27만 건으로 구성되어 있습니다. 


책 정보 데이터



3)평점 정보 데이터

평점 정보 데이터를 통해 고객 ID(User-ID), 국제 표준 도서 번호(ISBN), 고객이 책에 부여한 평점(Book-Rating) 정보를 알 수 있으며, 해당 데이터는 약 110만 건으로 구성되어 있습니다. 또한, 평점(Book-Rating) 데이터는 0~10점으로 분포되어 있음을 알 수 있었습니다.


 평점 정보 데이터



4)결론

간단한 데이터셋 탐색을 통해 '평점 정보 데이터'는 '고객 기반 협업 필터링(User-based CF)' 방식으로'상품 정보 데이터'는 '콘텐츠 기반 필터링(Contents based Filtering)' 방식으로 적용하고, 이들을 결합하여 '하이브리드(Hybrid)' 추천 시스템 구축이 가능하다는 것을 알수 있었습니다. 


추가로 하단에서 설명할 LightFM이라는 추천 모델은 '고객 정보 데이터' 역시도 학습에 사용할 수 있는데, 이를 통해 신규 고객에 대한 상품 추천도 수행할 수 있었습니다. 


하지만 이번 글에서 설명할 책 추천 시스템은 위 사실을 온전히 인지하지 못한 채 진행하여 '평점 정보 데이터', '상품 정보 데이터', '고객 정보 데이터'를 모두 사용하여 학습을 수행하지만, 신규 고객이 아닌 사전에 평점을 부여한 기록이 있는 고객에게만 상품을 추천하는 방식(warm start)의 추천 시스템을 구축하였습니다. 


대신 다음 포스팅에서 신규 고객 및 신규 상품에 대하여 추천이 가능한 온전한 LightFM '하이브리드' 추천 방식 시스템을 구축한 내용을 작성할 예정입니다.





- 데이터셋 정제


데이터셋 정제 과정에는 오기입 된 데이터 수정, 결측 데이터 처리, NLP 등을 수행했는데, 특별히 주요한 과정이었던 NLP(자연어 처리)와 이에 속하는 Stemming(어간 추출) 적용 과정에 대해서만 다룰 예정입니다. 



1)NLP (자연어 처리)

먼저 NLP란 문자 그대로 해석하면 자연어 처리를 뜻하는데, 인간의 언어를 컴퓨터가 이해하여 사용할 수 있도록 연구하는 인공지능의 한 분야입니다. NLP 기술은 기본적으로 '토큰화(Tokenizer)', '불용어 처리(Stop-word)', '어간 추출(Stemming)', '형태소 분석(POS)'으로 분류할 수 있습니다. 


토큰화(Tokenizer): 코퍼스를 토큰 단위(의미 있는 단위)로 나누는 작업

불용어 처리(Stop-word): 불필요한 단어(조사, 접미사, 이외 불필요하다고 판단되는 명사, 형용사 등) 제거

     - 기본적으로 NLTK(자연어 툴킷)는 영어의 조사, 접미사 등을 불용어로 패키지 내에서 미리 정의하고 있음

     - 한국어 불용어는 NLTK에 미리 정의되어 있지 않기에 직접 불용어를 정의하여 사용해야 함

어간 추출(Stemming): 변형된 단어에서 어미를 제거하고, 어간(단어의 원래 형태)을 추출하는 것

형태소 분석(POS): 형태소(뜻을 가진 가장 작은 단위)로 문장 분석


NLP 기술의 분류



2) NLP Stemming 적용

Stemming은 단어의 어미를 제거하고 어간(단어의 원래 형태)만 추출하는 것입니다. 예를 들어 'working, works, worked' 3개의 단어에 Stemming을 적용하면 'work'라는 어간을 추출하는 것입니다. 

NLP Stemming을 최종 선택한 이유는 위에서 설명한 4가지 NLP 기술들과 N-gram을 조합하여 소요 시간과 평가 지표(AUC)를 측정했을 때, Stemming만 사용할 때, 처리 속도가 다소 느리긴 했지만 구축하려는 시스템이 빠른 속도가 요구되는 것이 아니었으며, 보다 정확한 예측이 중요했기 때문에 평가 지표(AUC) 값이 가장 높았던 Stemming을 채택하였습니다. 


또한, NLTK 패키지는 Stemming을 수행할 수 있는 다양한 Stemmer를 제공하는데, Stemming을 처리하기 위한 데이터가 영어 문자열이었기에 이를 처리할 때 좋은 성능을 발휘하는 'PorterStemmer'를 채택하였습니다. 


아래와 같이 책 정보 데이터의 'itemName' 칼럼 데이터를 Stemming 처리하여 'new_itemName' 칼럼 데이터를 생성할 때, 'Classical', 'Classics', 'Classic' 낱말이 모두 'classic' 어간으로 변환되었음을 알 수 있습니다. 


Stemming을 통해 Classical, Classics, Classic을 classic으로 변환


추후 모델 학습 시에 Stemming 처리한 데이터를 CounterVectorizer를 통해 특징 벡터를 생성하는 데, 'Classical', 'Classics', 'Classic'을 동일한 어간인 'classic'으로 변환했기 때문에 특징 벡터의 동일한 인덱스로 취급됩니다. 이를 통해 학습 Loss를 줄일 수 있습니다.



이어서..






출처


1. https://towardsdatascience.com/if-you-cant-measure-it-you-can-t-improve-it-5c059014faad

2. https://towardsdatascience.com/my-journey-to-building-book-recommendation-system-5ec959c41847

3. https://needjarvis.tistory.com/451

4. http://www2.informatik.uni-freiburg.de/~cziegler/BX/

5.  https://nittaku.tistory.com/297




작가의 이전글 신용카드 이용금액 예측모델 개발하기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari