Node2Vec 모델 응용 : GraphSAGE 성능 향상

강하예진(Erica)·2023년 4월 7일
0

Graph Neural Network

목록 보기
1/10
post-thumbnail

본 포스팅에서는 GraphNN 모델을 연계해 성능을 향상시키는 방법에 대해 다룬다.
정확히는 Node2Vec 모델과 GraphSAGE 모델을 함께 사용해 Graph 정보를 모델에 더욱 효과적으로 전달하는 방법론을 이론적으로 설명한다.


Node2Vec과 GraphSAGE?

node2vec과 GraphSAGE 모델을 연계해서 사용하면, 그래프 Node들에 대한 표현력을 향상시키는 데 도움이 된다.

node2vec은 무작위 경로를 기반으로 Node 간 유사성을 보존하는 방식을 통해 그래프에서 Node 임베딩을 학습하는 알고리즘이고, Node간의 국부적인 구조와 이웃 정보를 포착하여 각 Node에 대한 밀도 기반 임베딩을 생성한다.
반면 GraphSAGE는 인접 Node들의 특징 벡터를 집계하는 과정을 통해 Node 임베딩을 학습하는 알고리즘이다. 이 모델은 Node의 속성 정보와 구조적 정보를 함께 사용하여 더 다양한 정보를 인코딩한다.

Node2vec & GraphSAGE 앙상블

이 두 모델을 결합하는 방법에는 여러 가지가 있지만, 이 포스팅에서 다룰 내용은 node2vec 모델로부터 얻은 Embedding을 GraphSAGE 모델의 input으로 사용하는 것이다. 그렇게 하면 GraphSAGE는 node2vec에서 얻은 국부적인 구조 정보를 기반으로 더욱 풍부한 Node 임베딩을 학습할 수 있다.
다시 말해, GraphSAGE 모델에 node2vec embedding을 input으로 사용하는 경우, node2vec에서 학습한 Node 임베딩이 GraphSAGE 모델의 초기 Node Feature로 사용되는 것이다.

  • 위 방법을 통해 결과적으로는 다음과 같은 이점이 생긴다.
  1. Node 간의 구조적 정보와 속성 정보를 통합하여 더 풍부한 Node 임베딩을 생성할 수 있다. 이는 Node 분류, 링크 예측, 클러스터링 등의 작업에 도움이 된다.
  2. Node2vec 모델이 학습한 국부적인 구조 정보를 바탕으로 GraphSAGE가 Node 간의 관계를 더 잘 이해할 수 있게 도와준다.

GraphSAGE input

이렇게 앙상블할 경우 따로 features를 구성할 필요는 없지만, 기존의 Node 피처를 함께 사용할 수도 있다. node2vec 임베딩과 기존 data의 Node 피처를 연결(concatenate, 혹은 두 벡터를 더하거나, 가중 평균)하여 새로운 피처 벡터를 만들고 이를 GraphSAGE의 입력으로 사용하는 것이다.
예를 들어, node2vec 임베딩 벡터의 차원이 d이고 기존 Node 피처 벡터의 차원이 f라면, 두 벡터를 연결하여 차원이 d+f인 새로운 벡터를 만들 수 있다. (두 벡터를 결합하여 새로운 벡터를 생성한다고 보면 된다.) 다시 말해 각 Node에 대해 node2vec으로 학습한 임베딩 벡터와 기존 Node에 대한 Feature 벡터를 함께 사용하는 것이다.

여기서 '기존 Node feature'란 데이터셋에서 제공되는 각 Node의 속성(attribute)이나 특성(feature)을 의미한다. 이러한 피처는 Node의 고유한 정보로서, 예를 들어 Node가 특정 유형의 객체를 나타내는 경우 해당 객체의 특성을 나타낼 수 있다.

예를 들어, 상품에 대한 그래프에서 Node는 각각의 상품을 나타내며, Node 피처는 상품의 고유 ID, 색상, 판매 횟수, 상품 카테고리 등과 같은 상품의 특성을 나타낼 수 있다.

이렇게 하면 node2vec의 구조적 정보와 기존 Node 피처의 속성 정보를 동시에 활용하여 더 풍부한 Node 임베딩을 학습할 수 있다.
하지만 이때 주의해야 할 점이 있다. node2vec 임베딩과 기존 Node 피처의 차원이 크게 다를 경우, 차원 축소나 표준화와 같은 전처리 작업이 필요할 수 있다. 이렇게 함으로써 모델이 두 가지 정보를 더 잘 조합하고, 과적합을 방지할 수 있다.

  • 헷갈리지 말기 :
    'edge 데이터'는 Node 피처와는 다르다. edge 데이터는 Node 간의 연결 관계를 나타내는 정보로, Node 피처와는 다르다. 그러나 edge 데이터를 사용하여 그래프의 구조를 분석하고 node2vec 임베딩을 학습하는 과정에서 Node 간의 연결 관계를 고려할 수 있다.

embedding과 Feature

그렇다면 node2vec 임베딩과 기존 Node 피처를 연결할 때, 무엇을 기준으로 concatenate 해야 할까? 아무렇게나 이어 붙인다면 학습이 엉망으로 될 것이기 때문에, 명확하고 합리적인 기준을 세워야 할 것이다.
이 경우에는 각 Node에 대해 node2vec 임베딩 벡터와 해당 Node의 기존 피처 벡터를 차례로 결합해야만 한다. 그래야 각 Node의 정보가 올바르게 유지되며, Node 정보가 뒤섞이지 않는다.

예를 들어, 데이터셋에 3개의 Node가 있고 각 Node에 대한 node2vec 임베딩 벡터와 기존 피처 벡터가 있다고 가정해보자. 이 경우 다음과 같은 순서로 두 벡터를 연결할 수 있다.

Node 1: node2vec 임베딩 벡터 + 기존 Node 1의 피처 벡터
Node 2: node2vec 임베딩 벡터 + 기존 Node 2의 피처 벡터
Node 3: node2vec 임베딩 벡터 + 기존 Node 3의 피처 벡터

그럼 조금 더 구체적으로, 두 벡터의 순서를 일치시키려면 어떻게 해야 할까? 여기엔 3가지 정도의 방법이 있다.

    1. 인덱싱: Node ID와 같은 고유한 식별자를 사용하여 데이터셋에서 Node를 인덱싱할 수 있다.
    1. 데이터 구조 사용: 특정 데이터 구조(예: 딕셔너리)를 사용하여 Node 임베딩과 기존 Node 피처를 저장할 수 있다. 이를 통해 Node ID를 키로 사용하여 Node 임베딩과 기존 Node 피처를 쉽게 매칭할 수 있다.
    1. 정렬: Node 임베딩과 기존 Node 피처를 동일한 기준(예: Node ID)에 따라 정렬할 수 있다. 이렇게 하면 두 벡터 간의 순서가 일치하게 된다.

이 작업을 진행할 때 알아두면 좋을 점은, 데이터셋의 item ID가 고유하고 일관된 식별자로 작동한다면, 이를 그래프 구조에서 Node ID로 사용할 수 있다는 점이다.

성능 향상

GraphSAGE는 이웃 노드의 정보를 집계하여 노드 임베딩을 생성하는 방식으로 작동하므로, Node2Vec로 미리 학습된 임베딩을 사용하면 GraphSAGE는 더 긴 범위의 이웃 및 구조적 패턴을 고려할 수 있게 된다. 즉, Node2Vec 임베딩은 GraphSAGE 모델이 더욱 풍부한 정보를 활용하여 추론을 수행하는 데 도움을 준다. 이런 지점이 성능 향상에 도움이 된다는 것이다.

만약 Node2Vec 모델을 학습할 때 edge_index를 아이템 간의 관계만으로 구성하면, 그래프 embedding에는 아이템 간의 구조적 정보가 주로 반영된다. 이렇게 학습된 Node2Vec embedding을 GraphSAGE 모델의 입력으로 사용하면, 아이템 간의 구조적 정보를 기반으로 GraphSAGE 모델이 학습되하게 된다.
그러나 그렇게 했을 시에 주의할 점도 있다. Node2Vec이 사용자 정보를 고려하지 않기 때문에, 사용자-아이템 상호 작용이 중요한 추천 시스템과 같은 경우에는 이 접근 방식이 제한적이라는 것이다. 따라서 해당 경우에는 사용자 및 아이템 간의 관계를 모두 포함하는 그래프를 구성하고, 이를 기반으로 Node2Vec와 GraphSAGE 모델을 학습시키는 것이 더 효과적일 것이다.


reference

node2vec Explained | Papers With Code
node2vec: Scalable Feature Learning for Networks

profile
Recommend System & BackEnd Engineering

0개의 댓글