#DEVIEW#DEVIEW2021 knowledge graph를 활용한 네이버영화추천시스템
후기
- 내가 진행했던 프로젝트인 영화추천 서비스와 어떻게 다를지, 알고리즘은 어떻게 구성했는지 모델링은 어떻게 했는지 등 궁금한게 생겨서 보게 되었다.
- 나는 기본적인 장고와 파이썬을 기반으로 나름대로의 알고리즘을 짜고 ORM 을 조작해서 구조화했다.
- 네이버 영화취향은 보다 고도화된 알고리즘을 사용했고, 장르를 기반으로 한다.
- 아직은 어렵지만, 내가 프로젝트를 해보고 이 영상을 보니 이해되는 부분도 많고 일부는 구현해볼 수 있겠는데? 하는 생각도 든다. :) !!
알고리즘 구조
- 네이버 영화취향은 Knowledge Graph 를 사용하는데, 사회연결망 그래프라고 보면된다.
그 중 Page Rank Centrality 를 사용한다.
각 노드들이 릴래이션십을 기반으로 중요도를 공유하였을때 결과적으로 얼만큼의 영향력을 가지게 되는가?
데이터 클리닝
1. 메인장르와 서브장르 구분
적절한 결과를 위한 데이터 처리
-> 특정 메인 장르는 삭제한다. (메인장르 중 영화수가 너무 작은 것은 삭제) 여기선 아마도 미스터리이지 않을까?
2. 인물 데이터 분석
너무 많은 노드와 연결되면 관계성 파악이 어려워진다.
-> 기준값을 정해서 해당 값 이하의 인물만 연결되도록 한다.
취향 장르 추출하면, 그 장르를 다시 추천영화 모델이 입력하여
취향 장르에 알맞는 영화를 추천한다.
v 취향장르 추출모델
v (장르기반) 추천영화 모델
이걸 연결할 때(?) 취향장르 가중치 비율이 조정되면 추천영화도 바뀌도록
페이지랭크 점수를 입력받는 취향 장르별로 기록한다.
추가적으로 관심도 반영
시스템 구조
=> 이 연산에 시간이 너무 많이 걸려서....
미리 만들어놓음.
영화 장르는 한정적이니까, 공통계산과 계산점수를 미리 저장
모델연산은 neo4j, 그 결과를 redis에 key-value 데이터로 저장
1. 정기 업데이트를 진행 -> 영화리스트 선택 조합을 모두 생성해서 연산결과를 레디스에 저장
2. 취향 리스트를 레디스에 저장
3. 정보 기반으로 취향뽑고, 그걸로 다시 추천영화뽑음
1. 처음 선택시 -> 취향(장르) 저장
2. 취향별 추천 -> 추천영화 저장 (키값은 사용자의 고유키)
3. 조회시 앞의 연산 생략하고 추천영화만 보여줌