안녕하세요. 빅데이터센터 AI Lab 박호림입니다.
저희 AI Lab에서는 리멤버 유저들에게 WoW한 경험을 주기 위해 Recommendation System, Ranking Model, Document Understanding, NLP, GNN 등 다양한 연구를 진행하고 있습니다.
오늘은 지식그래프 기반의 모델인 KGAT(Knowledge graph attention network)을 이용한 인재 추천 시스템 연구에 대한 경험을 공유드리고자 합니다.
1장과 2장에서는 추천시스템과 지식그래프의 배경지식에 대해 설명드리고, 3장과 4장에서는 저희 데이터를 이용해 user-item, knowledge graph 생성한 경험과 이를 이용한 KGAT 학습 결과를 공유드리도록 하겠습니다.
1. Introduction
1.1 추천시스템이란?
유저의 행동, 선호 등 다양한 이력을 기반으로, user-item 간의 관계를 찾아 선호 아이템을 예측하는 것을 말합니다. 저희 드라마앤컴퍼니에서도 리멤버를 사용하는 유저의 행동과 로그 기반으로한 광고 추천시스템, 리쿠르터가 찾는 적합한 인재을 추천하는 시스템을 연구하고 개발하고 있습니다. 다음 두 가지 방법은 전통적인 추천시스템 알고리즘입니다. 일반적으로 각각 사용 가능한 데이터의 형태나 사용 목적에 따라 적합한 방법론을 선택하여 추천시스템을 만듭니다.
1.2 Collaborative Filtering
Collaborative Filtering(CF, 협업 필터링)[1] 은 많은 유저들로부터 모은 선호 정보들을 기반으로 다른 사람의 선호를 예측하는 방법으로, 유저 A가 유저 B와 어떠한 이슈에 대해 비슷한 의견을 갖는다면, 다른 이슈에 대해서도 비슷한 의견을 가질 확률이 높을 것이라는 가정에 기반을 둡니다. 집단 지성을 기반으로 예측하는 것으로 볼 수 있습니다.
그림1. Example of Collaborative Filtering[2]
CF의 가장 기본적인 개념을 그림 1을 보며 간략히 설명드리겠습니다. 왼쪽 그림의 유저 기반 CF의 경우 user 1이 item 1, 3, 4를 선호하고 user 3이 item 3, 4를 선호한다면, user 3은 item 1도 선호할 것이다라는 가정으로 추천이 이루어집니다. 오른쪽 그림의 아이템 기반 CF의 경우 item 3을 user 1, 3이 선호한다면, user 3 기준으로 동일한 아이템을 선호한 사용자인 user 1은 item 1도 선호하므로, user 3 또한 item 1도 선호할 것이다라는 가정으로 추천이 이루어집니다.
1.3 Content-based Filtering
그림2. Example of Content-based Filtering
유저가 특정 아이템을 선호할 경우 그 아이템과 비슷한 컨텐츠를 가지는 다른 아이템을 추천해주는 방법입니다. 유저의 다른 정보, 특징을 제외하고 오로지 아이템의 특징만으로 추천하는 방법입니다. 그림 2를 보며 설명드리자면, user A는 Movie A를, user B와 C는 Movie B를 선호합니다. user A는 Movie A를 선호하기에 같은 장르인 Movie C를 선호할 것이다라는 가정으로 추천이 이루어집니다. Content-Based Filtering을 위해서는 필수적으로 Item에 대한 특징, 정보 등의 데이터가 필요합니다.
2. Recommendation based Knowledge graph
2.1 GNN
GPU 및 하드웨어의 성능 향상으로 인한 머신러닝, 딥러닝의 발전이 추천시스템에도 적용되기 시작하였고 위 방법론 이후 하이브리드, 머신러닝, 딥러닝 등을 활용한 방법론들이 제안되고 있습니다. 그 중 최근 들어 Graph Neural Network (GNN)[3] 을 통한 추천시스템이 주목받고 발전하고 있으며, 많은 벤치마크 데이터셋을 기준으로 새로운 SOTA 성능을 보여주고 있습니다. GNN은 대표적인 귀납식 임베딩으로 연결 관계와 neighborhood node들의 상태를 이용해 각 node의 상태를 업데이트하는, node들을 벡터로 표현하는 Node Embedding입니다[4]. 즉 그래프를 표현하는 node들을 임베딩하기 위해 한 node에 대한 neighborhood node들의 정보, 상태를 aggregation하는 과정을 거치고 이를 모델에 적용하는 방식입니다.
graph는 node와 edge로 연결되있는 구조로 edge를 통해 node 간의 관계를 파악할 수 있습니다. 이러한 특징으로 인해 소셜 네트워크, 분자구조, user-item 간 관계 등의 구조를 표현하는데 용이한 구조로 볼 수 있습니다.
2.2 Knowledge graph
그림3. Example of Knowledge graph
서로 관계가 있는 대상(entity)들 사이의 관계(relation)를 모아 놓으면 이것이 지식(knowledge)이 되는데, 이를 컴퓨터 과학에서 말하는 graph구조로 표현한 것이 knowledge graph라고 할 수 있을 것입니다. 기존 그래프와 비교를 해보면 node와 edge가 각각 entity, relation으로 바꾸어 생각하시면 됩니다. 따라서 각 relation이 triple 구조 (head entity, relation, tail entity)의 형태로 표현되어 head와 tail간의 특정 관계를 암시 합니다. 위 그림3으로 예시를 들면 ‘소크라테스는 플라톤에게 영향을 주었다는 관계를 (socrates, influenced, plato) 구조로 표현할 수 있습니다. 그래프로 표현함으로써 대상 간의 관계와 의미를 구조적으로 표현할 수 있습니다. 지식그래프를 임베딩화하고 추천시스템에 적용하면, user나 item에 대한 side information을 포함할 수 있고, 각 entity별로 많은 표현력을 가질 수 있어 추천 시스템의 성능 향상에 도움이 된다고 알려져 있습니다.
2.3 Recommendation and Knowledge graph
지식 그래프라는 개념을 추천시스템에 도입하게 되면 기존의 Collaborative Filtering, Content based Filtering의 단점들을 보완한 추천시스템을 탄생시킬 수 있습니다. CF는 user-item 관계를 사용하고, Content based Filtering은 item-attribute 관계만을 사용하여 추천을 합니다. 지식 그래프는 이 두가지 관계를 모두 표현이 가능하기에 지식그래프 임베딩을 활용한 추천시스템으로 두가지 단점을 모두 보완한 추천시스템 개발이 가능합니다. 지식그래프를 활용한 딥러닝 추천 모델 중 대표적인 모델로는 KGCN(Knowledge graph Convolutional Networks)[6], KGAT(Knowledge Graph Attention Netowrk)[7], RippleNet[8] 등이 존재합니다.
다음 챕터에서는 저희가 실험한 지식그래프 기반 추천 모델 중 하나인 KGAT(Knowledge Graph Attention Netowrk)을 소개하고자 합니다.
3. KGAT
KGAT(Knowledge Graph Attention Network)은 graph기반 추천시스템에서 Knowledge graph와 Attention 메커니즘을 적용시킨 모델입니다.
그림4. Example of Knowledge graph
Collaborative Filtering 은 현재 많은 산업에서 효율적이고 강력한 추천 성능을 제공하지만 user’s feature, context 등의 부가적인 정보를 모델링할 수 없는 단점이 존재합니다. 그래서 KGAT에서는 CF에 KG를 적용하여 이를 해결하고자 하였습니다. 위 그림4은 CKG에 대한 예시 그림이며, user-item 간의 edge가 존재하며, item에 대한 entity들이 KG로 표현되고 있습니다. 즉 KG와 user-item graph와의 하이브리드 구조를 갖으며 이를 CKG(Collaborative Knowledge graph)라고 합니다.
3.1 Methodology
그림5. KGAT 모델 전체 구조
위 그림5와 같이, KGAT의 모델 학습은 1) Embedding, 2) Attention, 3) Prediction 세 단계로 구성됩니다. 1) Embedding layer에서 TranR 방법론을 사용하여 entity와 relation을 백터로 표현하는 pre-train이 이루어집니다. 2) 다음 Attention Embedding Propagation layer에서는 자신과 주변 neighborhood node를 기반으로 각 node의 임베딩을 새로 학습하며, 이 과정에서 Attention 메커니즘을 통해 각 이웃들을 정보를 어느정도의 가중치로 가져올지 정합니다. 모든 neighborhood node를 대상으로 attention score를 계산하고 neighborhood node로부터 information propagation을 진행합니다. 그리고 high-order propagation을 위해 aggregation을 반복해서 진행합니다. 3) 최종적으로 high-order를 통해 나온 여러 개의 벡터들을 concat 후 user vector, item vector의 내적으로 user와 item의 유사도를 구할 수 있게 됩니다.
4. Experiment
4.1 Knowledge graph, user-item graph Generation
저희의 인재 추천 방식 중 하나는 리쿠르터가 관심을 보인 인재와 유사한 인재를 추천해주는 방식입니다. 이를 위해 인재와 인재가 재직한 회사의 관계를 기존의 CF 모델에서 사용하는 user-item graph로 표현했습니다. 그런데 유저와 회사는 부가적인 정보, 특징을 가지고 있기 때문에 이러한 정보를 활용한다면 더 좋은 추천이 될 것이라 가정하였고, 이를 추천에 활용하기에 KGAT이 적절할 것으로 판단하였습니다. 따라서 인재를 유저 node로, 회사를 아이템 node로 구성하였으며, 인재의 경력에 해당하는 회사를 user-item graph로 구성하었습니다. 인재의 속성인 전공, 업무 스킬, 학력 등을 해당 유저의 relation으로 연결하였고, 회사의 속성인 기업 구분, 산업 분야, 티어 등을 해당 회사의 relation으로 연결하여 knowledge graph를 생성하였습니다. 이러한 구조로 생성하여 리쿠르터가 원하는 인재와 비슷한 경력을 가진 인재를 리크루터에게 추천해주기 위함입니다.
그림6. 인재 추천을 위한 지식그래프, user-item 설계
4.2 Result
학습데이터와 테스트데이터를 나누는 방법으로는 user-Item graph에서 랜덤하게 임의의 edge를 삭제하여 테스트 데이터를 준비하였습니다. 이에 대한 metric으로 Recall을 사용하였으며, 모델이 특정 유저의 경력인 회사를 예측하는 것에 대한 Recall metric을 측정하였습니다. Recall을 사용한 이유는 리쿠르터에게 추천하는 인재가 잘못된 인재를 추천해주면 리쿠르터에게 모델의 신뢰도는 크게 하락할 것이기에 해당 metric으로 평가를 진행하였습니다.
밑의 그림 7을 보시면 첫번째 시도한 학습 결과입니다. Recall의 최대 값이 0.01 정도에 못미치는 값이며, 학습이 제대로 진행되지 않는 모습을 볼 수 있습니다. 이러한 결과를 분석한 결과, 두가지 주요 문제점이 존재했습니다. 첫째는 user-item graph와 knowledge graph의 imbalance입니다. 저희가 추천을 적용하는 직무 카테고리가 19개 이상 존재하는데, 직무에 따른 스킬, 전공 등 너무 많은 entity들이 존재하며, user-item 그래프에 비해 불균형한 CKG를 형성되어 있습니다. 두번째로는 user-item graph 데이터 자체가 작아 sparsity한 문제를 피해갈 수 없었습니다.
그림7. 1차 학습 결과 Recall
그림 8은 직무 카테고리별로 모델을 나누어 학습한 결과입니다. 여러 논문에서 벤치마크로 사용되는 movielens나 yelp 등 public dataset과 다르게, CKG로 표현 시 저희 데이터는 user-item에 대한 interaction은 더 적고, item-attribute에 대한 interaction은 더 많은 부분에 대한 불균형한 문제가 존재했습니다 . 이러한 문제로 인한 영향을 완화하기 위해, 직무 칵테고리별로 모델을 나누어 학습을 진행하였습니다. 보유하고 있는 프로필들의 직무별 데이터 크기에 따라 모델의 성능이 각기 다르지만 주요 직무들에 대한 모델의 성능들은 Recall 값으로 0.8 이상 결과를 얻었습니다.
그림8. 2차 학습 결과 Recall, nDCG
5. Conclusion
이번 포스팅을 통해 간략하게 전반적인 추천시스템 방법론과, GNN, 지식그래프 기반 추천 모델을 살펴보았습니다. 그리고 KGAT 모델을 학습해보고 결과를 확인해보았습니다. 저희 데이터가 KG로 표현될 수 있고, 이 KG를 인재 추천 문제 해결에 적용하기에 KGAT이 이론적으로 적합한 것 같습니다. 다만 graph로 표현할 시 data imbalance, sparsity 문제가 존재하며, 추가적으로 꽤나 많은 GPU resource를 필요로 합니다.
추가적으로 드라마앤컴퍼니는 꾸준히 최신연구를 활용하여 인재 추천 서비스, 광고 추천 서비스, 명함 인식 등 다양한 연구를 수행하고 있습니다. 차후 AI Lab 에서 연구하는 다른 분야를 소개하고 공유하며 찾아뵙도록 하겠습니다.
궁금하신 사항은 댓글을 통해 문의해주시면 감사합니다. 긴 글 읽어주셔서 감사합니다.
Reference
[1] Schafer, J. Ben, et al. “Collaborative filtering recommender systems.” The adaptive web . Springer, Berlin, Heidelberg, 2007. 291-324.
[2] https://www.themarketingtechnologist.co/building-a-recommendation-engine-for-geek-setting-up-the-prerequisites-13/
[3] Scarselli, Franco, et al. “The graph neural network model.” IEEE transactions on neural networks 20.1 (2008): 61-80.
[4] https://towardsdatascience.com/an-introduction-to-graph-neural-network-gnn-for-analysing-structured-data-afce79f4cfdc
[5] Ehrlinger, Lisa, and Wolfram Wöß. “Towards a definition of knowledge graphs.” SEMANTiCS (Posters, Demos, SuCCESS) 48.1-4 (2016): 2.APA
[6] Wang, Hongwei, et al. “Knowledge graph convolutional networks for recommender systems.” The world wide web conference. 2019.
[7] Wang, Xiang, et al. “Kgat: Knowledge graph attention network for recommendation.” Proceedings of the 25th ACM SIGKDD international conference on knowledge discovery & data mining. 2019.
[8] Wang, Hongwei, et al. “Ripplenet: Propagating user preferences on the knowledge graph for recommender systems.” Proceedings of the 27th ACM international conference on information and knowledge management. 2018.