본문 바로가기

Data Science/추천시스템과 NLP

(13)
[추천시스템] 딥러닝과 FM, Deep FM(Factorization Machine) 이번 포스팅에서는 FM(Factorization Machine)에 딥러닝을 적용한 Deep FM에 대해 알아보려고 한다. FM에 대한 사전지식이 필요하므로 FM에 대해 모른다면 여기를 읽어보고 오자. Deep FM은 FM에 딥러닝을 적용했다고 문두에서 소개했지만 구체적으로 말하면 직전 포스팅에서 배운 Wide & Deep Learning 추천시스템과 FM을 결합한 것이라고 할 수 있다. 결국 두 모델의 장점만을 갖고와서 만든 것이 Deep FM이라는 것인데, 두 모델의 장점만 알고 있다면 Deep FM에 대한 이해는 매우 수월할 것이다. 1. Wide를 FM으로 바꾸면 Deep FM! 직전 포스팅에서 배웠던 Wide & Deep Learning 추천 시스템을 다시 상기시켜보자. Wide, Deep 각각의..
[추천시스템] 딥러닝과 추천시스템, Wide & Deep Learning 이번 포스팅에서는 추천 시스템에 딥러닝을 적용한 또 하나의 모델인 Wide & Deep Learning 추천 시스템에 대해 알아보려고 한다. 저번 포스팅에서 추천 시스템에 딥러닝을 적용한 첫 번째 모델인 Neural CF에 대해 알아보았다. 이번엔 또 다른 모델인 Wide & Deep Learning 추천 시스템에 대해 알아보고 말미에는 Neural CF와 어떤 차이점이 있는지에 대해서도 살펴보자. 이번에 소개할 Wide & Deep Learning 모델은 이름에서도 추측할 수 있다시피 Wide 구성요소와 Deep 구성요소로 구성되어 있다. 먼저 Wide & Deep Learning 모델의 개괄적인 구조는 아래와 같다. 이제 각각의 구성요소가 하는 역할이 무엇인지 살펴보자. 1. Wide Componen..
[추천시스템] FM(Factorization Machine) 이번 포스팅에서는 추천 시스템 종류 중 하나인 Factorization Machine 이른바 FM이라 불리는 모델에 대해 알아보려고 한다. 참고로 이 FM 모델에 딥러닝을 적용한 모델이 Deep FM이라는 추천 시스템이고 이에 대해서는 추후에 다루어 보려고 한다. 우선 FM이라는 구조에 대해 이해가 선행되어야 나중에 배울 Deep FM에 대한 이해도 수월할 것이다. FM에 대해 처음 소개된 논문은 여기를 참고하자. Factorization은 추천 시스템에 있어서 행렬 분해라는 것은 익히 들었을 것이다. 기존에 배웠던 협업 필터링 추천 시스템에서 잠재 요인 기반이라는 추천 시스템은 SVD, PCA같은 행렬 분해 기법을 사용했었다. 그렇다면 앞으로 소개할 FM은 어떤 것을 '분해' 한다는 것일까? 1. FM..
[추천시스템] 딥러닝과 추천시스템, Neural CF(Collaborative Filtering) 이번 포스팅에서는 추천시스템의 협업 필터링에 딥러닝을 적용한 모델인 Neural Collaborative Filtering인 이른바 Neural CF에 대해 배워보려고 한다. 해당 포스팅을 이해하는 데 있어서 추천 시스템의 협업 필터링에 대한 이해가 필요할 수 있어 협업 필터링에 대한 포스팅은 여기를 참고하자. 1. 추천시스템에 딥러닝이 등장한 이유 딥러닝이 등장한 이유는 어떻게 보면 항상 당연한 이유로부터 출발하는 듯하다. 바로 주어진 데이터가 선형의 관계로 설명될 수 없을 때이다. 즉, 선형회귀, 의사결정나무 같은 선형 함수로 구현되는 머신러닝 모델들로 풀 수 없는 문제는 그동안 분야를 불문하고 모두 딥러닝이 적용되어 왔다. 왜냐하면 딥러닝이 주어진 데이터의 비선형 관계를 파악할 수 있었기 때문이었다..
[추천시스템] Cold Start 문제는 어떻게 해결할까? 🔊 이번 포스팅에서는 추천시스템의 고질적인 문제점이라고 할 수 있는 Cold Start 문제가 무엇이고 어떤 원인으로 발생하며 이에 대한 해결책들도 몇가지 소개해보려 한다. 해당 글에서는 코드로 구현되는 실용적인 내용이 아닌 주로 이론적인 내용을 소개하려고 한다. 참고로 이 글을 작성하기 위해서 Cold Start에 대한 Wikipedia 문서를 나만의 방법으로 해석하여 한국인들이 이해하기 쉽도록 하기 위해 작성되었다. 기타 참고 문헌은 글의 하단에 첨부했다. 목차는 다음과 같다. 1. Cold Start란? 2. Cold Start가 발생하는 3가지 원인 3. Cold Start를 해결하는 방법 1. Cold Start란? Cold Start란, 추천 시스템이 새로운 또는 어떤 유저들에 대한 충분한 정..
[추천시스템] 추천 시스템의 성능은 어떻게 평가할까? 이번 포스팅에서는 추천 시스템(Recommend System)의 성능을 평가하는 여러가지 메트릭들에 대해 소개하려고 한다. 이 포스팅을 보다 깊게 이해하기 위해서 개인적으로 추천 시스템에 대한 종류와 개념을 우선적으로 숙지하는 것을 제안한다. 이전에 추천 시스템의 종류와 간단하게 Python으로 구현하는 방법에 대한 포스팅들을 게시한 적이 있다. 참고하려면 여기를 클릭하자. 추천 시스템을 평가하기 위한 메트릭들에 대해 소개하기에 앞서 간단하게 추천 시스템에 대한 개념을 짚고 넘어가자. 추천 시스템이란, 특정 제품들에 대한 사용자의 평가 또는 리뷰 등과 같은 데이터를 기반으로 이 사용자에게 비슷한 다른 제품을 추천해주는 것을 말한다. 기존의 추천 시스템들은 머신러닝 모델처럼 하나의 label를 결과값으로 ..
[NLP] Surprise library를 활용한 추천시스템 구현하기 저번 포스팅까지 추천 시스템의 여러가지 종류와 각각의 추천 알고리즘이 어떻게 구현되는지에 대해 자세히 알아보았다. 이번 포스팅에서는 이전까지 소개해왔던 추천 알고리즘을 간편한 API로 제공하는 Surprise 라이브러리에 대해 알아보고 이를 활용해 추천시스템을 구현해보는 시간을 가지려고 한다. 우선 Surprise 라이브러리란, Python에 기반하며 Scikit-learn API와 비슷한 형태로 제공을 하여 추천 시스템 구현을 도와주는 편리한 라이브러리이다. Surprise 라이브러리에 대해 더 자세히 알고 싶다면 공식문서를 참고하자. Surprise 라이브러리가 구현되는 프로세스와 주요 메소드 그리고 예시 데이터셋을 사용해 Surprise를 활용한 추천시스템을 직접 구현해보자. 참고로 Surprise..
[NLP] Collaborative Filtering(Recommendation) 이번 포스팅에서는 저번 시간의 컨텐츠 기반 필터링(추천) 방법과는 다른 추천 알고리즘인 협업 필터링(Collaborative Filtering)에 대해 알아보고 코드로 구현하는 방법에 대해 알아본다. 협업 필터링은 사용자 또는 아이템(컨텐츠) 기반인 최근접 이웃 필터링과 잠재(Latent)요인 기반 필터링으로 나뉘어 진다. 그러므로 각 개념을 설명하면서 코드로 구현하는 방법 순으로 전개된다. 목차는 다음과 같다. 1. 협업 필터링의 종류 2. 최근접 이웃(Nearest-Neighbor) 기반 필터링 3 최근접 이웃 기반 필터링 구현하기 4. 잠재(Latent)요인 기반 필터링 5. 잠재요인 기반 필터링 구현하기 1. 협업 필터링의 종류 먼저 협업 필터링(Collaborative Filtering)은 다음..
[NLP] Contents-based Recommendation(컨텐츠 기반 추천) 이번에 다룰 주제는 2개의 포스팅으로 분리해서 작성해 볼 예정이다. 바로 자연어 처리(NLP)를 활용한 추천 시스템 구현이다. 추천 시스템은 우리의 일상에 매우 가까이에서 적용되고 있다. 대표적으로 YouTube나 Netflix와 같은 영상 컨텐츠를 담은 기업뿐만 아니라 국내외 E-commerce 기업에서도 추천 알고리즘을 상당히 효과적으로 활용하고 있다. YouTube에서의 '맞춤 동영상' 이나 E-commerce 홈페이지의 "이 A라는 상품을 구매한 고객들은 B라는 상품도 함께 구매합니다" 라는 문구를 보았을 것이다. 이런 것들이 바로 추천 알고리즘을 적용한 예시이다. 추천 알고리즘에도 종류가 몇 가지 존재한다. 크게 '컨텐츠 기반 필터링' 과 '협업 필터링'으로 나뉘어 진다. '협업 필터링'에서는 ..
[NLP] 문서 군집화(Clustering)와 문서간 유사도(Similarity) 측정하기 이번 포스팅에서는 여러가지의 문서들을 군집화시켜보고 특정 하나의 문서가 다른 문서들간의 유사도를 측정해보는 방법에 대해서 알아보려고 한다. 군집분석은 비지도 학습으로 비슷한 데이터들끼리 서로 군집을 이루는 것을 말한다. 이러한 방법은 텍스트로 이루어진 문서 데이터에도 적용이 된다. 단어 발생 빈도수에 기반하는 BOW(Bag Of Words) 방식을 이용해 Feature(문서들을 이루고 있는 단어들)를 벡터화시키거나 단어들간의 의미 관계 즉, 단어 벡터들간의 방향을 고려해 Word embedding을 통해 벡터화 시킨다. 이번 포스팅에서는 BOW에 기반한 Tf-idf 방법을 사용한다. 다른 BOW 방식인 Count Vectorizer는 단순히 그저 단어 발생 빈도수에만 초점을 맞추기 때문에 여러가지 문서들..
[NLP] LDA를 활용한 Topic Modeling 구현하기 이번 포스팅에서는 주어진 수많은 단어들을 기반으로 토픽(Topic) 별 단어들의 분포를 확인하고 또 문서(Document)별 토픽들의 분포를 계산해서 문서들의 주제가 무엇인지 예측하는 Topic Modeling에 대해 다루려고 한다. 해당 포스팅은 토픽모델링에 대한 개념적인 깊이보다 파이썬으로 구현하는 내용에 초점이 맞추어져 있으므로 토픽 모델링, 그중에서도 LDA(Latent Dirichlet Allocation)의 이론에 대해 알고 싶다면 여기를 참고하자. 목차는 다음과 같다. 1. Topic Modeling의 종류 2. Python으로 LDA 구현해보기 1. Topic Modeling의 종류 토픽 모델링은 크게 확률에 기반한 모델과 행렬분해에 기반한 모델 2가지로 나뉘어 진다. 간단하게 종류에 대해..
[NLP] 텍스트 분류와 감성(Sentiment)분석 구현하기 이번 포스팅에서는 sklearn의 내장된 데이터와 Kaggle 데이터를 활용해 뉴스 기사 데이터들의 카테고리를 분석하는 텍스트 분류, 그리고 Review의 감성(긍정, 부정)을 분류해보는 실습내용에 대해 소개하려고 한다. 텍스트 데이터 분석, 모델링 과정 프로세스에 대해서는 여기를 참고하자. 목차는 다음과 같다. 1. 뉴스 카테고리 분류하기 2. 리뷰 감성 분류하기 1. 뉴스 카테고리 분류하기 네이버, 다음, 그리고 여러 종류의 언론사 각각의 홈페이지를 방문해 보면 다양한 카테고리의 뉴스가 존재하는 것을 알 수 있다. 그리고 각 뉴스 기사의 카테고리를 지정하는 기준은 해당 뉴스의 내용이 기반이 된다. 그렇다면 뉴스 내용의 텍스트를 기반으로 해당 뉴스의 카테고리를 예측할 수 있지 않을까? 이러한 예시 이외..
[NLP] 텍스트를 이용한 머신러닝 프로세스에 대한 이해 새로운 포스팅 카테고리를 추가했다. 주제는 NLP(Natural Language Processing)이라고 불리는 '자연어 처리'이다. 자연어 처리는 텍스트 분류, 감성분석, 텍스트 요약, 텍스트 군집화 또는 유사도 측정과 같이 여러가지 분야에서 널리 사용되고 있다. 필자는 자연어 처리에 대한 기본적인 사전 지식이 없었기 때문에 개인적인 기회를 통해서 공부해야 했다. 그리고 우연히 마주했던 Google Assistant NLP팀의 언어학자로 일하시는 박지호님의 NLP Tutorial을 통해서 자연어처리를 입문했다. 해당 블로그를 꾸준히 구독하고 있고 글을 읽으면서 습득한 내용을 따로 기록하고 있다. 추후에 자연어처리의 기본에 대한 내용을 꼭 내 블로그에도 포스팅할 예정이다. 이번 글에서는 텍스트 형식의 ..