본문 바로가기
공부/실전문제연구단

[실전문제연구단] GREET 코드 뜯어보기 - 1. data 확인

by 박영귤 2024. 1. 12.

GREET을 소개한 논문에서 graph convolution을 더 잘 하기 위해서 edge가 heterophily한지 homophily한지 판별하는 판별기를 제시했다. 이 부분을 조금 자세히 볼 예정이다.


먼저 데이터 부분이다. cora 데이터를 로드하면 어떤 것이 프로그램 변수로 할당되는지 알아보았다.

https://docs.dgl.ai/generated/dgl.data.CoraGraphDataset.html#dgl.data.CoraGraphDataset  

cora 데이터셋의 공식 문서를 보며 비교해보자.

def load_data(dataset_name):

    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), '.', 'data', dataset_name)

    if dataset_name in ['cora', 'citeseer', 'pubmed']:
        dataset = Planetoid(path, dataset_name)
    elif dataset_name in ['chameleon']:
		...

    data = dataset[0]

데이터는 위와 같이 할당된다. data를 가지고 이것저것 출력해보았다.

Data(x=[2708, 1433], edge_index=[2, 10556], y=[2708], train_mask=[2708], val_mask=[2708], test_mask=[2708])

데이터는 위와 같이 x, edge_index, y, train_mask, val_mask, test_mask로 이루어져있다.

x :
tensor([[0., 0., 0.,  ..., 0., 0., 0.],
        [0., 0., 0.,  ..., 0., 0., 0.],
        [0., 0., 0.,  ..., 0., 0., 0.],
        ...,
        [0., 0., 0.,  ..., 0., 0., 0.],
        [0., 0., 0.,  ..., 0., 0., 0.],
        [0., 0., 0.,  ..., 0., 0., 0.]])

edge_index :
tensor([[   0,    0,    0,  ..., 2707, 2707, 2707],
        [ 633, 1862, 2582,  ...,  598, 1473, 2706]])

y :
tensor([3, 4, 4,  ..., 3, 3, 3])

train_mask :
tensor([ True,  True,  True,  ..., False, False, False])

val_mask :
tensor([False, False, False,  ..., False, False, False])

test_mask :
tensor([False, False, False,  ...,  True,  True,  True])

x는 r각 노드의 feature벡터이다. 2708개 노드에 1433개의 feature가 저장되어있는 모습인 것 같다.

edge_index는 첫 번째가 시작점, 두 번째가 끝점인 것 같다. 10556개의 엣지마다 시작점, 끝점을 표시해둔 모습이다.

y는 각 노드의 0~6까지 7개의 클래스를 나타내주는 label이다.

xxx_mask는 노드가 xxx에 쓰이는지를 나타낸다. (예를들어 train_mask는 해당 노드가 train에 쓰이는지 표시함.)

 

또한 그래프 데이터셋을 보면 structural encoding이라는 것을 종종 볼 수 있을 것이다. 이는 노드의 feature vector랑 다르게, 노드 고유의 특성이 아닌 노드의 구조적인 특성을 나타낸다. 즉, 그래프 구조를 기반으로 하여 노드를 표현한 것이다. 이를 제공하는 파일이 있는 경우도 있고, 없다면 데이터셋마다 다른 방식으로 계산하는 것이 아니라 같은 수식을 이용해서 계산하는 것 같다. (행렬계산, random walk)


Reference

논문 - https://arxiv.org/pdf/2211.14065.pdf

github - https://github.com/yixinliu233/GREET