4. 01. Introduction
Hypothesis
하지만 개인의 특정 음식에 대한 선호를 예측하는 하는 것은 매우 어렵다!
+ 입맛은 미묘한데다 그날 그날 땡기는 음식도 다 다르다!
+ 웬만해서는 싫어할 수 없는 음식들.. 치킨, 삼겹살 등
그럼에도 불구하고! 우리의 가정
개인마다 각자의 선호하는 음식의 맛, 향, 색감, 분위기, 목적 등이 있을 것이다.
이러한 요인들을 추출하고 학습하여 개인별 추천을 한다!
8. 02. Cold Start
Offline Model
추천! 하면 떠오르는 대표적 알고리즘 '협업 필터링'
메인 아이디어 :
유저 A와 유저 B의 유사도가 높을 때
유저 A에게 유저 B가 구매한 물건을 추천하면 유저 A도 좋아할 것이다!
유사도 계산을 하기 위해서는 Rating Matrix 가 필요
9. 02. Cold Start
추천! 하면 떠오르는 대표적 알고리즘 '협업 필터링'
메인 아이디어 :
유저 A와 유저 B의 유사도가 높을 때
유저 A에게 유저 B가 구매한 물건을 추천하면 유저 A도 좋아할 것이다!
유사도 계산을 하기 위해서는 Rating Matrix 가 필요
허허허
우리가 가진거라곤… 오직 레시피뿐…
Offline Model
10. 02. Cold Start
Online Model
Cold Start Problem을 해결하는 방법
Rating matrix? 필요없어!! 실시간으로 배운다. Online Model
ICML'11 Tutorial on Machine Learning for Large Scale Recommender Systems
Deepak Agarwal and Bee-Chung Chen
11. 02. Cold Start
Online Model
가장 ‘인간스러운’ 방법!
나를 정말 잘 알고 있는 가족, 친구, 애인 모두 처음부터 나를 잘 알았던 것은
아니다!! 나와 오랜 시간 함께 하다 보니 자연스레 학습!
서서히 알아간다 (봇 인터페이스를 채택한 이유가 여기에..)
[Realtime Data Mining] chap1.2 Realtime Analytics System
유저 선호도의 변화를
자연스럽게 적용
데이터 저장 비용 감소
13. 03. IRECIPE
Architecture
레시피에 대한 쿼리 (요청)
Feature Extractor
(Word2Vec)
Scoring
(Neural Network)
Information
Retrieval
Bot
Interface
𝑖 recipes
쿼리를 만족하는 i개의 레시피
𝒌 번째 레시피의 특징 추출(𝒌 ∈ 𝒊) 유저 j가 레시피 k를 좋아할지 판단
유저의 피드백을 분류기에 반영
User j
𝑝 𝑘𝑗 = 𝑝 𝑥𝑗 𝑐 𝑘
j개의 레시피의 점수로
랭킹을 매겨 추천
14. 유저 j가 레시피 k를 좋아할지 판단
03. IRECIPE
Architecture
레시피에 대한 쿼리 (요청)
Feature Extractor
(Word2Vec)
Scoring
(Neural Network)
Information
Retrieval
Bot
Interface
𝑖 recipes
쿼리를 만족하는 i개의 레시피
𝒌 번째 레시피의 특징 추출(𝒌 ∈ 𝒊)
User j
𝑝 𝑘𝑗 = 𝑝 𝑥𝑗 𝑐 𝑘
유저의 피드백을 분류기에 반영
j개의 레시피의 점수로
랭킹을 매겨 추천
15. 유저 j가 레시피 k를 좋아할지 판단
03. IRECIPE
Architecture
레시피에 대한 쿼리 (요청)
Feature Extractor
(Word2Vec)
Scoring
(Neural Network)
Information
Retrieval
Bot
Interface
𝑖 recipes
쿼리를 만족하는 i개의 레시피
𝒌 번째 레시피의 특징 추출(𝒌 ∈ 𝒊)
User j
𝑝 𝑘𝑗 = 𝑝 𝑥𝑗 𝑐 𝑘
유저의 피드백을 분류기에 반영
j개의 레시피의 점수로
랭킹을 매겨 추천
16. 03. IRECIPE
Data
그 전에! 데이터 소개부터..
`만개의 레시피` 로부터
* 약 2만 개의 레시피 크롤링
* 숫자와 문장부호 등 필터링 24.6M
3919317 개의 토큰
24142 개의 토큰셋
파이썬 + 셀레니움으로 한땀한땀 (약 20일 걸림..)
17. 03. IRECIPE
Data
레시피라는 텍스트 데이터의 특징
제목 : 등갈비찜
주재료 : 등갈비 1kg, 청양고추 2개, 떡 2줌, 물 7컵, 청주 ½컵
부재료 : 양파 ½개, 대파 ½뿌리, 후추
양 : 2인분
칼로리 : 250
난이도 : 중
다진마늘이 듬뿍 들어간 매콤한 등갈비찜입니다. 우선 등갈비는 찬물에 담가 반나절 정
도 핏물을 제거합니다. 그리고 핏물을 뺀 등갈비와 육수재료를 넣고 물 1컵, 청주 1컵을
부어 센불로 끓입니다. 그 동안 넣을 떡 1줌도 준비하고 매콤한 청양고추 2개는 어슷 썰
어 고춧가루, 간장, 다진마늘, 매실액, 참기름, 맛술, 과일즙, 소금, 후춧가루 위 재료대로
섞어 양념장을 만들고……
요리에 대한 메타 데이터가 주어지고 요리 만드
는 과정이 텍스트로 주어짐. 이 과정 속엔
메타 데이터로 주어진 주재료와 부재료 간의 쓰
임새, 맛, 식감에 대한 표현, 목적 등이 녹아있음
이러한 의미들의 차이를 학습할 수 있다면?
18. 03. IRECIPE
Feature Extraction
컴퓨터에게 단어의 의미적 차이를 어떻게 가르치면 좋을까?
이건 사과고 이건 바나나야
이 둘은 과일이라는 공통점이 있지만 색깔
도 다르고 맛도 달라. 블라블라…….
u'uc0acuacfc'
u'ubc14ub098ub098
‘
?!
컴퓨터는 단지 유니코드의 조합으로서 문
자를 인식할 뿐, 두 단어의 의미적 차이를
알지 못한다!!
19. 03. IRECIPE
Feature Extraction
컴퓨터에게 단어의 의미적 차이를 어떻게 가르치면 좋을까?
많은 방법들이 있었지만..!
• …
• A neural probabilistic language model ( Bengio et al, 2003)
• NLP (almost) from scratch(Collobert & Weston, 2008)
• Efficient Estimation of Word Representation in Vector space(Mikolov et al, 2013)
특정 단어 주변에 같이 나타날 주변 단어들을 예측하는 방식으로 고정된 차원의 벡터로 만들자!
Word2Vec( Simpler and faster model )
28. 03. IRECIPE
레시피의 특징들을 살펴보고 특정 유저 j가 좋아할지 말지
병아리 감별사 마냥 가려내는 분류기를 훈련시킨다!
+ 유저와 실시간으로 상호작용하며
Recommendation
쉽게 말해서
1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.
2. 유저로부터 피드백을 받을 수 있어야 한다.
3. 피드백을 훈련에 반영할 수 있어야 한다.
4. +a
그러려면..
29. 03. IRECIPE
Recommendation
1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.
2. 유저로부터 피드백을 받을 수 있어야 한다.
3. 피드백을 훈련에 반영할 수 있어야 한다.
4. +a
레시피 특징 벡터(100차원)
(Sum of Ingredient vectors)
복잡 미묘한 입맛을 비선형으로 선호유무와
맵핑하기 위해 인공신경망 사용!
마지막 Output Layer에
Sigmoid Unit 사용 -> Score(Prob)
히든 레이어 1개
히든 노드 400개
활성화 함수 ReLu
떡볶이 어때요?!
30. 03. IRECIPE
Recommendation
1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.
2. 유저로부터 피드백을 받을 수 있어야 한다.
3. 피드백을 훈련에 반영할 수 있어야 한다.
4. +a
떡볶이 어때요?!
노노.. 별로
다른거 없어?
아.. (유저 j는
떡볶이를 안
좋아하는구나..)
챗봇 인터페이스를 이용해 피드백을 받는다.
ℎ 𝑥 = 0.76(𝑝떡볶이 𝑗
)
𝑨𝒄𝒕𝒖𝒂𝒍 = 𝟎
Cost 발생!
31. 03. IRECIPE
Recommendation
1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.
2. 유저로부터 피드백을 받을 수 있어야 한다.
3. 피드백을 훈련에 반영할 수 있어야 한다.
4. +a
Backpropagation에 필요한 정보를 따로 저장해뒀다
피드백이 들어오면 Gradient Descent로 파라미터 업데이트
ℎ 𝑥 = 0.76(𝑝떡볶이 𝑗
)
𝐴𝑐𝑡𝑢𝑎𝑙 = 0
Cost 발생!Recommendation
Log DB
32. 03. IRECIPE
Recommendation
1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.
2. 유저로부터 피드백을 받을 수 있어야 한다.
3. 피드백을 훈련에 반영할 수 있어야 한다.
4. +a
Backpropagation에 필요한 정보를 따로 저장해뒀다
피드백이 들어오면 Gradient Descent로 파라미터 업데이트
ℎ 𝑥 = 0.76(𝑝떡볶이 𝑗
)
𝐴𝑐𝑡𝑢𝑎𝑙 = 0
Cost 발생!Recommendation
Log DB
N
Log_pk user_fk recipe_fk prob hidden actual
… … … … … …
… … … … … …
33. 03. IRECIPE
Recommendation
1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.
2. 유저로부터 피드백을 받을 수 있어야 한다.
3. 피드백을 훈련에 반영할 수 있어야 한다.
4. +a
Backpropagation에 필요한 정보를 따로 저장해뒀다
피드백이 들어오면 Gradient Descent로 파라미터 업데이트
ℎ 𝑥 = 0.76(𝑝떡볶이 𝑗
)
𝐴𝑐𝑡𝑢𝑎𝑙 = 0
Cost 발생!Recommendation
Log DB
N
Log_pk user_fk recipe_fk prob hidden actual
0 J k (떡볶이) 0.76 Binary None
… … … … … …
Forward Propagation
Forward propagation
34. 03. IRECIPE
Recommendation
1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.
2. 유저로부터 피드백을 받을 수 있어야 한다.
3. 피드백을 훈련에 반영할 수 있어야 한다.
4. +a
Backpropagation에 필요한 정보를 따로 저장해뒀다
피드백이 들어오면 Gradient Descent로 파라미터 업데이트
ℎ 𝑥 = 0.76(𝑝떡볶이 𝑗
)
𝐴𝑐𝑡𝑢𝑎𝑙 = 0
Cost 발생!Recommendation
Log DB
N
Log_pk user_fk recipe_fk prob hidden actual
0 J k (떡볶이) 0.76 Binary 0
… … … … … …
Forward Propagation
Feedback(label)
35. 03. IRECIPE
Recommendation
1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.
2. 유저로부터 피드백을 받을 수 있어야 한다.
3. 피드백을 훈련에 반영할 수 있어야 한다.
4. +a
Backpropagation에 필요한 정보를 따로 저장해뒀다
피드백이 들어오면 Gradient Descent로 파라미터 업데이트
ℎ 𝑥 = 0.76(𝑝떡볶이 𝑗
)
𝐴𝑐𝑡𝑢𝑎𝑙 = 0
Cost 발생!Recommendation
Log DB
N
Log_pk user_fk recipe_fk prob hidden actual
0 J k (떡볶이) 0.76 Binary 0
… … … … … …
Forward Propagation
Feedback(label)
Backpropagation
Gradient Descent를
이용한 Parameter Update
36. 03. IRECIPE
Recommendation
1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.
2. 유저로부터 피드백을 받을 수 있어야 한다.
3. 피드백을 훈련에 반영할 수 있어야 한다.
4. +a
Underfitting
하지만 실제 추천 서비스를 하기 위해 고민해봐야 할 두 가지 문제
Overfitting
햄버거
어때요?
별로
자장면은요?
아 싫어;;
치킨이요!!
ㅡㅡ
김치찜
어때요?
다른거 없어?
김치찌개는
요?
장난하니
김치전이요!!
ㅡㅡ
37. 03. IRECIPE
Recommendation
1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.
2. 유저로부터 피드백을 받을 수 있어야 한다.
3. 피드백을 훈련에 반영할 수 있어야 한다.
4. +a
Underfitting
하지만 실제 추천 서비스를 하기 위해 고민해봐야 할 두 가지 문제
Overfitting
햄버거
어때요?
별로
자장면은요?
아 싫어;
치킨이요!!
ㅡㅡ
김치찜
어때요?
별로
김치찌개는
요?
아 싫어;
김치전이요!!
ㅡㅡ
N
서비스 초기에 겪을 수 있는 문제로
충분한 훈련을 받지 못해서 발생
Pre-training을 통한
Parameter Initialization!
=> 초기 추천의 적중률이 올라가며
더 빠르게 수렴한다.
38. 03. IRECIPE
Recommendation
1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.
2. 유저로부터 피드백을 받을 수 있어야 한다.
3. 피드백을 훈련에 반영할 수 있어야 한다.
4. +a
Underfitting
하지만 실제 추천 서비스를 하기 위해 고민해봐야 할 두 가지 문제
Overfitting
떡볶이
어때요?
별로
자장면은요?
아 싫어;
치킨이요!!
ㅡㅡ
김치찜
어때요?
별로
김치찌개는
요?
아 싫어;
김치전이요!!
ㅡㅡ
N
인공신경망이 유저의 선호를 과적합 될
정도로 학습했을 경우 발생
일정 확률로 유저의 선호를
탐색(탐색과 활용)
=> 과적합을 피해 유저의 또 다른
선호를 학습할 수 있음
(일종의 Serendipity)
39. 03. IRECIPE
Pre-training
초기 적중률을 높이기 위한 Pre-Training
1. 태그의 조합에 따라 다른 트레이닝 셋을 구성하여
미리 Scoring Network를 훈련
2. 회원가입 시 기초적인 태그 정보 입력
3. 해당 모델로 초기화
But, 트레이닝셋을 어떻게 구성하느냐에 따라 그 결과가 천차만별..
얼마나 훈련을 시켜둬야 하는지도 애매한 문제가 있음.
40. 03. IRECIPE
Randomness
과적합을 줄이고 Serendipity를 제공하기 위한 Randomness
같은 쿼리가 들어와도 어느 정도의 Randomness가 작용하여
유저의 취향을 탐색(Exploration)한다.
41. 04. Conclusion
Evaluation
Offline Metrics : MSE, RMSE, Precision, Recall, F1 Score, ROC, AUC, MAP, Ranking loss 등
Online Metrics : CTR based A/B test
Our model...?! (threshold가 없고.. Negative를 제시하지 않음)
=> Precision : 유저 당 추천해준 아이템 중 양의 피드백을 받은 아이템의 비율
32명의 인원을 상대로 약 5일 간의 베타 테스트 결과
약 42%....
46. 04. Conclusion
Challenges
Wide and Deep learning for
Search Engine(also Recom)
https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html
Wide Model(Memorization) Deep Model(Generalization)
47. 04. Conclusion
Challenges
Wide and Deep learning for
Search Engine(also Recom)
Wide and Deep model (Generalization & Memorization)
https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html
48. 04. Conclusion
Conclusion
추천 시스템의 Cold Start Problem을
해결하기 위해, 인공신경망을 이용해 아이
템의 특징을 추출한 후, 함수 근사를 통해
유저의 선호를 예측하고 실시간으로 학습
하는 방식의 Online Model을 제시함.
Django를 이용해 실제 모델이 동작하는
프로토타입 구현
추후 지속적인 개선과 서비스 런칭 상의
이슈를 보완하여 실제 서비스에 투입하여
사용할 수 있을 것으로 기대 됨.
1.
2.
3.
49. Some issues
References
[1] Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean
Efficient Estimation of Word Representations in Vector Space, 2013
[2] Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, Jeffrey Dean
Distributed Representations of Words and Phrases and their Compositionality,
2013
[3] Deep Neural Networks for Youtube Recommendations (Paul Covington et
al, 2016)
[4] Heng-Tze Cheng, Levent Koc, Jeremiah Harmsen, Tal Shaked, Tushar
Chandra, et al. Wide & Deep Learning for Recommender Systems, 2016
[5] Gabriel Dulac-Arnold, Richard Evans, Hado van Hasselt, Peter Sunehag,
el al. Deep Reinforcement Learning in Large Discrete Action Spaces, 2015