irecipe bot

50
IRECIPE BOT 워드임베딩과 인공신경망을 이용한 개인 맞춤형 레시피 추천 숭실대 경영 김성동 연세대 응용통계 박소현 동덕여대 정보통계 김수연 한양대 응용수학 노우영 건국대 응용통계 박소영 고려대 통계 이지원

Upload: kim-sungdong

Post on 22-Jan-2018

863 views

Category:

Data & Analytics


0 download

TRANSCRIPT

IRECIPE BOT워드임베딩과 인공신경망을 이용한

개인 맞춤형 레시피 추천

숭실대 경영김성동

연세대 응용통계박소현

동덕여대 정보통계김수연

한양대 응용수학노우영

건국대 응용통계박소영

고려대 통계이지원

Contents 01. Introduction

03. IRECIPE

- Data- Architecture- Feature Extraction- Recommendation- Some Issues

02. Cold Start

- Offline Model- Online Model

04. Conclusion- Evaluation- Challenges- Conclusion

01. IntroductionMain Idea

하루에 적어도 한번은 하는 고민.. 뭐 먹지?

내 취향과 요리실력 등을 아주 잘 알고 있는 전문가가 요리를 추천해준다면 ?

01. IntroductionHypothesis

하지만 개인의 특정 음식에 대한 선호를 예측하는 하는 것은 매우 어렵다!

+ 입맛은 미묘한데다 그날 그날 땡기는 음식도 다 다르다!

+ 웬만해서는 싫어할 수 없는 음식들.. 치킨, 삼겹살 등

그럼에도 불구하고! 우리의 가정

개인마다 각자의 선호하는 음식의 맛, 향, 색감, 분위기, 목적 등이 있을 것이다.

이러한 요인들을 추출하고 학습하여 개인별 추천을 한다!

01. IntroductionIRECIPEBOT

Related Services

Recipe Monster

01. Introduction

CJ The Kitchen

Related Services

Recipe Monster

01. Introduction

CJ The Kitchen

IRECIPE

02. Cold StartOffline Model

추천! 하면 떠오르는 대표적 알고리즘 '협업 필터링'

메인 아이디어 :

유저 A와 유저 B의 유사도가 높을 때유저 A에게 유저 B가 구매한 물건을 추천하면 유저 A도 좋아할 것이다!

유사도 계산을 하기 위해서는 Rating Matrix 가 필요

02. Cold Start

추천! 하면 떠오르는 대표적 알고리즘 '협업 필터링'

메인 아이디어 :

유저 A와 유저 B의 유사도가 높을 때유저 A에게 유저 B가 구매한 물건을 추천하면 유저 A도 좋아할 것이다!

유사도 계산을 하기 위해서는 Rating Matrix 가 필요

허허허

우리가 가진거라곤… 오직 레시피뿐…

Offline Model

02. Cold StartOnline Model

Cold Start Problem을 해결하는 방법

Rating matrix? 필요없어!! 실시간으로 배운다. Online Model

ICML'11 Tutorial on Machine Learning for Large Scale Recommender SystemsDeepak Agarwal and Bee-Chung Chen

02. Cold StartOnline Model

가장 ‘인간스러운’ 방법!

나를 정말 잘 알고 있는 가족, 친구, 애인 모두 처음부터 나를 잘 알았던 것은아니다!! 나와 오랜 시간 함께 하다 보니 자연스레 학습!

서서히 알아간다 (봇 인터페이스를 채택한 이유가 여기에..)

[Realtime Data Mining] chap1.2 Realtime Analytics System

유저 선호도의 변화를자연스럽게 적용

데이터 저장 비용 감소

03. IRECIPEArchitecture

Recommendations using Deep learning

Deep Neural Networks for Youtube Recommendations (Paul Covington et al, 2016)

03. IRECIPEArchitecture

레시피에 대한 쿼리 (요청)

Feature Extractor(Word2Vec)

Scoring(Neural Network)

InformationRetrieval

BotInterface

𝑖 recipes

쿼리를 만족하는 i개의 레시피

𝒌번째 레시피의 특징 추출(𝒌 ∈ 𝒊) 유저 j가 레시피 k를 좋아할지 판단

유저의 피드백을 분류기에 반영

User j

𝑝𝑘𝑗 = 𝑝 𝑥𝑗 𝑐𝑘

j개의 레시피의 점수로랭킹을 매겨 추천

유저 j가 레시피 k를 좋아할지 판단

03. IRECIPEArchitecture

레시피에 대한 쿼리 (요청)

Feature Extractor(Word2Vec)

Scoring(Neural Network)

InformationRetrieval

BotInterface

𝑖 recipes

쿼리를 만족하는 i개의 레시피

𝒌번째 레시피의 특징 추출(𝒌 ∈ 𝒊)

User j

𝑝𝑘𝑗 = 𝑝 𝑥𝑗 𝑐𝑘

유저의 피드백을 분류기에 반영

j개의 레시피의 점수로랭킹을 매겨 추천

유저 j가 레시피 k를 좋아할지 판단

03. IRECIPEArchitecture

레시피에 대한 쿼리 (요청)

Feature Extractor(Word2Vec)

Scoring(Neural Network)

InformationRetrieval

BotInterface

𝑖 recipes

쿼리를 만족하는 i개의 레시피

𝒌번째 레시피의 특징 추출(𝒌 ∈ 𝒊)

User j

𝑝𝑘𝑗 = 𝑝 𝑥𝑗 𝑐𝑘

유저의 피드백을 분류기에 반영

j개의 레시피의 점수로랭킹을 매겨 추천

03. IRECIPEData

그 전에! 데이터 소개부터..

`만개의 레시피` 로부터* 약 2만 개의 레시피 크롤링* 숫자와 문장부호 등 필터링 24.6M

3919317 개의 토큰

24142 개의 토큰셋

파이썬 + 셀레니움으로 한땀한땀 (약 20일 걸림..)

03. IRECIPEData

레시피라는 텍스트 데이터의 특징

제목 : 등갈비찜주재료 : 등갈비 1kg, 청양고추 2개, 떡 2줌, 물 7컵, 청주 ½컵부재료 : 양파 ½개, 대파 ½뿌리, 후추양 : 2인분칼로리 : 250난이도 : 중

다진마늘이 듬뿍 들어간 매콤한 등갈비찜입니다. 우선 등갈비는 찬물에 담가 반나절 정도 핏물을 제거합니다. 그리고 핏물을 뺀 등갈비와 육수재료를 넣고 물 1컵, 청주 1컵을부어 센불로 끓입니다. 그 동안 넣을 떡 1줌도 준비하고 매콤한 청양고추 2개는 어슷 썰어 고춧가루, 간장, 다진마늘, 매실액, 참기름, 맛술, 과일즙, 소금, 후춧가루 위 재료대로섞어 양념장을 만들고……

요리에 대한 메타 데이터가 주어지고 요리 만드는 과정이 텍스트로 주어짐. 이 과정 속엔메타 데이터로 주어진 주재료와 부재료 간의 쓰임새, 맛, 식감에 대한 표현, 목적 등이 녹아있음

이러한 의미들의 차이를 학습할 수 있다면?

03. IRECIPEFeature Extraction

컴퓨터에게 단어의 의미적 차이를 어떻게 가르치면 좋을까?

이건 사과고 이건 바나나야이 둘은 과일이라는 공통점이 있지만 색깔도 다르고 맛도 달라. 블라블라…….

u'\uc0ac\uacfc'u'\ubc14\ub098\ub098‘

?!

컴퓨터는 단지 유니코드의 조합으로서 문자를 인식할 뿐, 두 단어의 의미적 차이를알지 못한다!!

03. IRECIPEFeature 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 )

03. IRECIPEFeature Extraction

Word2Vec Models

Skip-gram현재 단어로부터 주변 단어들 예측

u – outside vectorv – center vector

03. IRECIPEFeature Extraction

Word2Vec Models

tensorflow.org/tutorial/word2vec

03. IRECIPEFeature Extraction

우리가 가진 것은 텍스트뿐... 해본다!!

이름 하여 Ingredient2Vec!!

레시피 2만개로 구축한레시피 코퍼스

Tokenize,POS Tagging

Ingredient2VecModel 훈련

Konlpy gensim

Skip-gramDimension : 100Window : 5min_count : 5

03. IRECIPEFeature Extraction

레시피 재료들의 벡터들을 다 더해서 레시피의 벡터를 만든 후그 벡터 상에서 가까운 레시피들을 잘 찾는지 본다!

Word2Vec 모델의 성능 검증그래서 만든 함수 Similar_Recipe

03. IRECIPEFeature Extraction

오오오.. 잘 찾는다.

즉, 레시피들의 특징을 구분한다!

Word2Vec 모델의 성능 검증그래서 만든 함수 Similar_Recipe

03. IRECIPEFeature Extraction

레시피의 Feature만을 이용해도Item-Item based 추천이 가능

이 레시피와유사한 Top 5

유저 j가 레시피 k를 좋아할지 판단

03. IRECIPEArchitecture

레시피에 대한 쿼리 (요청)

Feature Extractor(Word2Vec)

Scoring (Neural Network)

InformationRetrieval

BotInterface

𝑖 recipes

쿼리를 만족하는 i개의 레시피

𝒌번째 레시피의 특징 추출(𝒌 ∈ 𝒊)

User j

𝑝𝑘𝑗 = 𝑝 𝑥𝑗 𝑐𝑘

유저의 피드백을 분류기에 반영

j개의 레시피의 점수로랭킹을 매겨 추천

이제 특징 추출은 했고 추천을 해야 하는데 Online model..? 뭐였더라..

03. IRECIPE

레시피의 특징들을 살펴보고 특정 유저 j가 좋아할지 말지병아리 감별사 마냥 가려내는 분류기를 훈련시킨다!

+ 유저와 실시간으로 상호작용하며

Recommendation

쉽게 말해서

03. IRECIPE

레시피의 특징들을 살펴보고 특정 유저 j가 좋아할지 말지병아리 감별사 마냥 가려내는 분류기를 훈련시킨다!

+ 유저와 실시간으로 상호작용하며

Recommendation

쉽게 말해서

1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.2. 유저로부터 피드백을 받을 수 있어야 한다.3. 피드백을 훈련에 반영할 수 있어야 한다.4. +a

그러려면..

03. IRECIPERecommendation

1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.2. 유저로부터 피드백을 받을 수 있어야 한다.3. 피드백을 훈련에 반영할 수 있어야 한다.4. +a

레시피 특징 벡터(100차원)(Sum of Ingredient vectors)

복잡 미묘한 입맛을 비선형으로 선호유무와맵핑하기 위해 인공신경망 사용!

마지막 Output Layer에Sigmoid Unit 사용 -> Score(Prob)

히든 레이어 1개히든 노드 400개활성화 함수 ReLu

떡볶이 어때요?!

03. IRECIPERecommendation

1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.

2. 유저로부터 피드백을 받을 수 있어야 한다.3. 피드백을 훈련에 반영할 수 있어야 한다.4. +a

떡볶이 어때요?!

노노.. 별로다른거 없어?

아.. (유저 j는떡볶이를 안

좋아하는구나..)

챗봇 인터페이스를 이용해 피드백을 받는다.

ℎ 𝑥 = 0.76(𝑝떡볶이𝑗)

𝑨𝒄𝒕𝒖𝒂𝒍 = 𝟎

Cost 발생!

03. IRECIPERecommendation

1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.2. 유저로부터 피드백을 받을 수 있어야 한다.

3. 피드백을 훈련에 반영할 수 있어야 한다.4. +a

Backpropagation에 필요한 정보를 따로 저장해뒀다피드백이 들어오면 Gradient Descent로 파라미터 업데이트

ℎ 𝑥 = 0.76(𝑝떡볶이𝑗)

𝐴𝑐𝑡𝑢𝑎𝑙 = 0

Cost 발생!RecommendationLog DB

03. IRECIPERecommendation

1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.2. 유저로부터 피드백을 받을 수 있어야 한다.

3. 피드백을 훈련에 반영할 수 있어야 한다.4. +a

Backpropagation에 필요한 정보를 따로 저장해뒀다피드백이 들어오면 Gradient Descent로 파라미터 업데이트

ℎ 𝑥 = 0.76(𝑝떡볶이𝑗)

𝐴𝑐𝑡𝑢𝑎𝑙 = 0

Cost 발생!RecommendationLog DB

N

Log_pk user_fk recipe_fk prob hidden actual

… … … … … …

… … … … … …

03. IRECIPERecommendation

1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.2. 유저로부터 피드백을 받을 수 있어야 한다.

3. 피드백을 훈련에 반영할 수 있어야 한다.4. +a

Backpropagation에 필요한 정보를 따로 저장해뒀다피드백이 들어오면 Gradient Descent로 파라미터 업데이트

ℎ 𝑥 = 0.76(𝑝떡볶이𝑗)

𝐴𝑐𝑡𝑢𝑎𝑙 = 0

Cost 발생!RecommendationLog DB

N

Log_pk user_fk recipe_fk prob hidden actual

0 J k (떡볶이) 0.76 Binary None

… … … … … …

Forward Propagation

Forward propagation

03. IRECIPERecommendation

1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.2. 유저로부터 피드백을 받을 수 있어야 한다.

3. 피드백을 훈련에 반영할 수 있어야 한다.4. +a

Backpropagation에 필요한 정보를 따로 저장해뒀다피드백이 들어오면 Gradient Descent로 파라미터 업데이트

ℎ 𝑥 = 0.76(𝑝떡볶이𝑗)

𝐴𝑐𝑡𝑢𝑎𝑙 = 0

Cost 발생!RecommendationLog DB

N

Log_pk user_fk recipe_fk prob hidden actual

0 J k (떡볶이) 0.76 Binary 0

… … … … … …

Forward Propagation

Feedback(label)

03. IRECIPERecommendation

1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.2. 유저로부터 피드백을 받을 수 있어야 한다.

3. 피드백을 훈련에 반영할 수 있어야 한다.4. +a

Backpropagation에 필요한 정보를 따로 저장해뒀다피드백이 들어오면 Gradient Descent로 파라미터 업데이트

ℎ 𝑥 = 0.76(𝑝떡볶이𝑗)

𝐴𝑐𝑡𝑢𝑎𝑙 = 0

Cost 발생!RecommendationLog 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

03. IRECIPERecommendation

1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.2. 유저로부터 피드백을 받을 수 있어야 한다.3. 피드백을 훈련에 반영할 수 있어야 한다.

4. +a

Underfitting

하지만 실제 추천 서비스를 하기 위해 고민해봐야 할 두 가지 문제

Overfitting

햄버거어때요?

별로

자장면은요?

아 싫어;;

치킨이요!!

ㅡㅡ

김치찜어때요?

다른거 없어?

김치찌개는요?

장난하니

김치전이요!!

ㅡㅡ

03. IRECIPERecommendation

1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.2. 유저로부터 피드백을 받을 수 있어야 한다.3. 피드백을 훈련에 반영할 수 있어야 한다.

4. +a

Underfitting

하지만 실제 추천 서비스를 하기 위해 고민해봐야 할 두 가지 문제

Overfitting

햄버거어때요?

별로

자장면은요?

아 싫어;

치킨이요!!

ㅡㅡ

김치찜어때요?

별로

김치찌개는요?

아 싫어;

김치전이요!!

ㅡㅡ

N

서비스 초기에 겪을 수 있는 문제로충분한 훈련을 받지 못해서 발생

Pre-training을 통한Parameter Initialization!

=> 초기 추천의 적중률이 올라가며더 빠르게 수렴한다.

03. IRECIPERecommendation

1. 레시피의 특징을 보고 선호 유무를 판별할 수 있어야 한다.2. 유저로부터 피드백을 받을 수 있어야 한다.3. 피드백을 훈련에 반영할 수 있어야 한다.

4. +a

Underfitting

하지만 실제 추천 서비스를 하기 위해 고민해봐야 할 두 가지 문제

Overfitting

떡볶이어때요?

별로

자장면은요?

아 싫어;

치킨이요!!

ㅡㅡ

김치찜어때요?

별로

김치찌개는요?

아 싫어;

김치전이요!!

ㅡㅡ

N

인공신경망이 유저의 선호를 과적합 될정도로 학습했을 경우 발생

일정 확률로 유저의 선호를탐색(탐색과 활용)

=> 과적합을 피해 유저의 또 다른선호를 학습할 수 있음(일종의 Serendipity)

03. IRECIPEPre-training

초기 적중률을 높이기 위한 Pre-Training

1. 태그의 조합에 따라 다른 트레이닝 셋을 구성하여미리 Scoring Network를 훈련

2. 회원가입 시 기초적인 태그 정보 입력

3. 해당 모델로 초기화

But,트레이닝셋을 어떻게 구성하느냐에 따라 그 결과가 천차만별..

얼마나 훈련을 시켜둬야 하는지도 애매한 문제가 있음.

03. IRECIPERandomness

과적합을 줄이고 Serendipity를 제공하기 위한 Randomness

같은 쿼리가 들어와도 어느 정도의 Randomness가 작용하여유저의 취향을 탐색(Exploration)한다.

04. ConclusionEvaluation

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%....

04. ConclusionChallenges 베타 테스트 후 피드백 中...

04. ConclusionChallenges

레시피에 대한 쿼리 (요청)

Feature Extractor(Word2Vec)

Scoring(Neural Network)

InformationRetrieval

BotInterface

𝑖 recipes

쿼리를 만족하는 i개의 레시피

𝒌번째 레시피의 특징 추출(𝒌 ∈ 𝒊) 유저 j가 레시피 k를 좋아할지 판단

유저의 피드백을 분류기에 반영

User j

j개의 레시피의 점수로랭킹을 매겨 추천

N

우리가 간과한 몇 가지...

1. 추천과 검색은 쌍둥이다.(검색이 후보군을 적절하게 생성하지 못하면 추

천의 적중률이 매우 떨어지게 된다.)

2. 허술한 Bot Engine(유저와 유연하게 상호작용하기엔 역부족)

Rule-basedKeyword matching

04. ConclusionChallenges

크리스피 치킨

후라이드 치킨

치킨 볶음밥

04. ConclusionChallenges

크리스피 치킨

후라이드 치킨

치킨 볶음밥

04. ConclusionChallenges

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)

04. ConclusionChallenges

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

04. ConclusionConclusion

추천 시스템의 Cold Start Problem을해결하기 위해, 인공신경망을 이용해 아이템의 특징을 추출한 후, 함수 근사를 통해유저의 선호를 예측하고 실시간으로 학습하는 방식의 Online Model을 제시함.

Django를 이용해 실제 모델이 동작하는프로토타입 구현

추후 지속적인 개선과 서비스 런칭 상의이슈를 보완하여 실제 서비스에 투입하여사용할 수 있을 것으로 기대 됨.

1.

2.

3.

Some issuesReferences

[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 DeanDistributed 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, TusharChandra, 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

Some issues

Thank you