3. 이 문서는 전혀 새로운 내용이 아닙니다.
인터넷에 친절하게 설명된 한글!자료를 읽고,
나름대로 순서를 잡아 풀어냈을 뿐이죠.
저의 이해를 도와주신 모든 분들께 감사드립니다. ^^
주로 참고한 싸이트 … 이외에도 자잘하게 많을거 같네요. ㅎㅎ
• https://brunch.co.kr/@cordiallys/7
• 개인화/맞춤형 서비스의 한계와 포텐셜 (블로그)
• http://rosaec.snu.ac.kr/meet/file/20120728b.pdf
• 추천시스템 - 협업시스템 중심 (KAIST ROSAEC 워크샵 발표자료)
• http://readme.skplanet.com/?p=2509
• MapReduce 기반 대용량 추천 알고리즘 (SK planet 기술 블로그)
• https://www.slideshare.net/deview/261-52784785
• 실시간 추천엔진 노트북에서 돌아가게..(DEVIEW 2015 하용호님 발표자료)
4. 내가 고민하는 추천 시스템의 대상은 무엇인가요?
내용을 더 잘 이해하기 위해서
하나의 앱 또는 시스템을 머릿속에 담고 따라가 보시길 추천합니다.
이 아이콘이 등장할때마다 잠깐 멈춰서 답을 고민해보시구요.
6. 큐레이션
Curation
Old :
미술관에서 기획자들이 우수한
작품을 뽑아 전시하는 행위
Now :
모든 분야에서 양질의 콘텐츠
를 선별, 조합해 특별한 의미를
부여하고 가치를 재창출하는
행위
빅뱅의 탑은 요즘 큐레이터로도 활동하고 있다네요
7. 개인화
Personalization
판매자가 소비자의 이름, 관심사,
과거 구매이력 등을 기반으로 시
장에 전달할 메시지를 조정하여
특정 고객에 맞는 마케팅 메시지
를 만들어내는 것
https://brunch.co.kr/@cordiallys/7
페이스북은 개인화의 대표적 사례입니다.
친구들의 싸이월드 미니홈피를 방문하던 시절과 비교해보세요.
11. 추천을 위한 접근 방법
사람을 바탕으로 하는
Collaborative Filtering
내용을 바탕으로 하는
Content-based Filtering
?
collaborative
item_based
Filtering
이건 정확히 어느쪽인지 잘 모르겠더군요.
정리하신 분마다 조금씩 달라서…
12. 사람을 바탕으로 하는
Collaborative Filtering
내용을 바탕으로 하는
Content-based Filtering
유사도
Similarity
결국 알아내야 하는건
얼마나 비슷하냐는…
13. 내용을 바탕으로 하는
Content-based Filtering
텍스트 위주의 문서인 경우 유사도 계산을 위해 보통 TF-IDF를 사용
방법은
1. 한 문서 안에서 여러번 등장하는 단어는 적게 등장하는 단어보다
중요(Term Frequency)
2. 여러 문서에서 전체적으로 드물게 등장하는 단어는 자주 등장하는
단어보다 중요 (Inverse Document Frequency)
3. 짧은 문서가 긴 문서보다 더 중요 (Normalization)
의 기준으로 처리한 숫자를 가지고 문서간 유사도를 추정
14. 키워드를 추출해
수식에 입력 유사도
계산
하지만 TF-IDF 외에도
누가 콘텐츠를 들여다 보고
정보를 뽑아내느냐에 따라 방법은 수만가지…
기계 유저
A,B 콘텐츠를 모두 좋
아하는 유저가
많을수록 높은 유사도
사람이 직접 보고
태깅하거나 분류
관리자
내용을 바탕으로 하는
Content-based Filtering
15. • 내가 고민하는 추천 시스템에는 어떤 방식이 좋을까요?
기계 유저
키워드를 추출해
수식에 입력 유사도
계산
A,B 콘텐츠를 모두 좋
아하는 유저가
많을수록 높은 유사도
사람이 직접 보고
태깅하거나 분류
관리자
아래 화살표 중 어딘가… 또는 완전히 새로운 어떤 방법…
16. • 다른 사용자의 정보나 평가 내역이 없이 사용가능
• (아직 평가되지 않은) 새로 추가된 항목도 무리없이 추천 가능
내용을 바탕으로 하는
Content-based Filtering
관리자나 유저가 입력하는 방식은 collaborative filtering의 item-based 방식과 유사한 장단점을 가집니다.
그 내용은 뒤에 나와요~~~
(기계가 콘텐츠의 특징과 유사도를 추출하는 방식을 쓰는 경우)
• 명시적으로 표현된 특징만 다룰 수 있고 질적인 부분을 포착하지 못함
• 추천항목이 비슷한 항목 내에만 머무르는 한계가 있음
17. 내가 고민하는 시스템에 Content-based Filtering을 적용한다면?
• 새로운 콘텐츠가 빠르게, 많이 유입되는 경우라면?
•사용자가 반응한 이력이 쌓여 처리하지 않고 빠르게 추천 하기 위해서,
content-based filtering이 꼭 필요할 듯
• 콘텐츠의 특징을 자동으로 추출하는 것이 가능한지?
• 텍스트가 아닌 이미지나 동영상 콘텐츠가 많다면 이들의 특징을 추출하는
방법에 대해 연구가 필요할 듯
• 현재, 태그를 관리자가 입력하고 있다면?
• 관리자의 업무 량을 줄이기 위해서, 자동적으로 특징을 1차 추출한 후 관리
자가 검수하는 방식으로 개선할 수 있을 듯
이런것들을 고민해볼 수 있을것 같아요.
18. 사람을 바탕으로 하는
Collaborative Filtering
사람기반으로 하면 - User Based CF
상품기반으로 하면 - Item Based CF 인데 이건 Content-Based와 겹침
사람기반이란?
• 유사한 행동 패턴을 가진 사용자를 찾아 그들의 패턴을 예측정보로 제공
수집하는 수위에 따라
1. 구매 결정, 평점 정보 등 명확하고 능동적인 행위만 수집
2. 콘텐츠를 들여다 본(=머무른)시간, 본 횟수 등 유저가 인지하기 어려
운 정보도 (몰래몰래!) 수집
분류 자체는 제 입장에선 중요하지 않아서 이 정도로 스킵 합니다. ^^;;;
19. • 사람이 실 생활의 문제를 고민해서 공급한 정보이므로 정확도 높음
• 여러 사람의 평가가 쌓이므로 집단지성이라 할 수 있음
사람을 바탕으로 하는
Collaborative Filtering
• 완전 자동화의 경우, 아이템이 무엇에 관한 것인지 왜 추천되는지
전혀 알지 못하는 상태에서 추천이 이루어지는 위험을 안고 있음
• 신규 유저는 성향이 파악되지 않아 추천할 수 없는 상황(Cold
Start Problem)이, 오래된 유저는 너무 많이 구매해서 선호가 분산
되므로 추천하기 어려운 상황 발생
• 새로 추가된 상품은 평가가 없어서 추천되지 않는 상황(First Rater
Problem) 발생
20. 내가 고민하는 시스템에게 Collaborative user-based Filtering이란?
• 유저X상품 행렬의 크기는?
• 대부분 일정 규모 이상이 되기 때문에 계산을 줄일 수 있는 방법을 (사전
클러스터링 등) 고려
• 얼마나 자주 계산해야 할지?
• 실시간 처리의 수준을 고민
• 인기가 없거나 새로 등록된 콘텐츠에 대한 처리는?
• 일부는 content-base filtering을 쓰거나, 적절한 초기값을 세팅하는 방
법을 고민
이런것들을 고민해볼 수 있을것 같아요.
21. 잠시, 추천 시스템하면 떠오르는 watcha 보고 가실께요.
• 선평가 후추천
(‘평가늘리기’ 메뉴)
• 추천 이유 공개
• 추천 영화 pool 관리
(reload시 다른 영화)
! 추천 이유를 공개하면 효과가 더 높다고…
! 사용자가 관심없어하는 추천 영화를
집요하게 추천하지 않도록, 풀관리를 꼭 해야…
22. 여기서 잠깐!
왓차는 Collaborative Filtering 일까요?
아니면 Content-based Filtering일까요?
저도 정확히 모르지만,
당연히 어느쪽 하나만 쓰진 않을거에요.
적당히 잘 섞어서 쓰고 있을 겁니다요~~~ 호호호
개념을 정리하는 차원에서 고민 해보시라도 드린 질문입니다.
25. Content-based Filtering 구현
TF-IDF 방식의 계산은…
그 용어가 그 문서에서
얼마나 자주 등장한 놈인지 점수를 매기고,
일반적으로 아무 문서에나 자주 나오는
놈이라면 점수를 깍고,
1 이하의 값이 되도록 조정해서,
비교할 두 문서에 등장한 모든 용어별 W값을
이용해서 유사도를 계산 하는 거에요.
d는 document t는 term 인데,
26. 수식하나 알았다고 끝이 아닌것이,
TF-IDF 방식이든 다른 방식이든간에,
콘텐츠를 잘 표현할 수 있도록 용어(term)를 잘 분리해내고
뭐가 키워드이고 뭐가 아닌지를 골라내는 작업이 관건인거지,
뭐 수식은 컴퓨터가 잘 계산 해 줄거니까…
그럼 아예 콘텐츠의 키워드를 사람이 골라내면 쉬운…?
하지만, 관리자 한 사람이 태깅하는데는 한계가 있어.
유저의 집단지성을 이용하자니 초기값이 필요하고…
이러지도 저러지도…
27. User-based CF 구현
나와 구매 이력이 비슷한 사용자들을 찾아, 그들이 많이 산 아이템을 추천
사용자#1의 상품 #1에 대한 추천 점수는요~
= SUM( 사용자 #N 과의 유사도 * 사용자#N의 구매여부)
= 0.67 * 0 + 0 * 1 = 0
http://readme.skplanet.com/?p=2509
상품#1 상품#2 상품#3 상품#4
사용자#1 0 1 0 1
사용자#2 0 1 1 1
사용자#3 1 0 1 0
• 사용자#1과 사용자#2의 유사도는
= 교집합 원소수 / 합집합 원소수 = 2/3 = 0.67
• 사용자#2와 사용자#3 = 1/4 = 0.25
• 사용자#1과 사용자#3 = 0/4 = 0
28. User-based CF 구현
그런데 매트릭스가 엄청 커지면? 계산 불가…
그래서 미리 그룹핑(pre-clustering)을 약간해서 처리
1st Map: 각 사용자별 구매 로그 기반 Minhash key 계산
1st Reduce: Group ID별 사용자 모으기
2nd Map: 사용자별 grouping을 위해 다시 각 사용자를 key로 해서 emit.
29. User-based CF 구현
minHash는 뭔데? 어떻게 미리 그룹핑이 가능한거지?
앞에서 설명한 유사도 계산 방식
• 사용자#1과 사용자#2의 유사도는
= 교집합 원소수 / 합집합 원소수 = 2/3 = 0.67
• 사용자#2와 사용자#3 = 1/4 = 0.25
• 사용자#1과 사용자#3 = 0/4 = 0
랜덤한 순서를 가지는 hash함수를 선언
hash1 = 상품#2 > 3 > 1> 4
hash2 = 상품#3 > 1 > 4 > 2 의 순으로 보다가 첫번째로 1이 나오는게 몇번째인지 구함
hash#1 hash#2
사용자#1 1 3
사용자#2 1 1
사용자#3 2 1
• 사용자#1과 사용자#2의 유사도는
= 같은 숫자의 비율 = 1/2 = 0.5
• 사용자#2와 사용자#3 = 1/2 = 0.5
• 사용자#1과 사용자#3 = 0/2 = 0
상품#1 상품#2 상품#3 상품#4
사용자#1 0 1 0 1
사용자#2 0 1 1 1
사용자#3 1 0 1 0
위 결과를 보고, 또 로직을 생각해보면 ‘대략’ 비슷한 놈을 찾아 준다는 걸 알 수 있다.
물론 이후로도 더 생각해야 할 구현의 문제는 많지만, 너무 많고 난 잘 모르니 일단 여기까지만… ^^;
https://www.slideshare.net/deview/261-52784785