세상의 변화에 대해 관심이 많은 이들의 Tech Blog search

금리 상승기에 주목해야 하는 ETF, Vanguard Financials ETF (VFH)

|

본 글은 2021년 4월에 작성되었으며, 시간이 지남에 따라 본 글에 포함된 정보에는 변동이 발생한다는 점을 꼭 염두에 두시기 바랍니다.

인덱스 펀드의 창시자 존 보글이 창립한 Vanguard의 ETF 중 하나인 VFH ETF는 대표적인 미국의 금융주 ETF이다.

최근 몇 달 간 미 국채 금리의 상승과 장단기 금리차 확대, 그리고 경기 회복에 대한 기대감등이 맞물리면서 본 ETF는 큰 조정 없이 꾸준한 상승을 기록하였다.

사실 지금 시기에 VFH 혹은 VFH에 포함된 종목들을 매수하는 것이 아주 현명한 판단인지에 대해서는 확답을 내리기 어렵다. 코로나19 이전의 주가를 넘어 사상 최고치를 경신하고 있는 경우도 발생하고 있는데, 과연 이것이 적절한 기대감의 반영인지, 과도한 선 반영인지는 시간이 지난 다음에야 정확히 알 수 있을 것이다.

사실 현재의 주가 상승은 적어도 작년 말 백신 개발 소식 이후 더욱 본격적으로 리플레이션 트레이딩이 대두되기 시작 했을 때에는 본 종목을 매수한 투자자들이 누려야 할 이익이지, 이제 와서 매수를 고려할 단계는 아니라고 주장하는 전문가들도 많고, 필자도 이에 대해 상당 부분 동의하는 바이다.

그럼에도 불구하고 이 ETF와 그에 속한 종목들에 대해 다시 한 번 짚고 넘어가야하는 이유는 다음과 같다.

1) 디플레이션 압박의 강도에 따라 상황이 바뀔 수는 있지만, 현재로서는 당분간 금리의 상승과 장단기 금리차의 확대가 지속될 가능성이 높고, 이에 따라 금융주들의 수익성은 더욱 향상될 가능성이 높다.
2) 지금 당장은 크게 영향을 받지 않겠지만, 코로나19 기간 동안 Square, Social Finance, Lemonade와 같은 새로운 형태의 금융 기업들이 큰 주목을 받았는데 이러한 기업들과의 관계에 대해 앞으로도 지속적으로 주목해보아야 한다.

VFH는 미국 기업만을 포함하고 있으며 주요 기업들의 목록은 아래와 같다.

은행, 보험, 투자은행 회사들이 주류를 이루고 있으며, TOP 10의 회사들의 점유율은 41.5%에 달한다. JP모건, 버크셔 해서웨이, 뱅크오브아메리카 등 미국의 굵직한 전통 금융사들을 담은 ETF라고 할 수 있다.

2021년 4월 4일 기준 배당률은 약 1.9% 정도이며, ETF에 대한 보다 상세한 정보를 알고 싶다면 아래 페이지들을 참조하길 바란다.

ETF닷컴, Seeking Alpha

유동성 장세에서 실적 장세로 넘어가고 있는 지금, 실적 장세의 길이에 대한 의견은 상당히 분분한 편이다. 강세장의 초입이라고 주장하는 전문가들은 실적이 우수한 기업들의 경우 앞으로 좋은 주가 흐름을 보일 것이라고 예상하고 있고, 강세장의 후기라고 주장하는 전문가들이나 버블을 경고하는 전문가들은 실적 장세가 그리 오래 가지 않을 수도 있다고 이야기하고 있다.

어떤 의견이 정확히 들어 맞을지 확신하기는 어려우나, 본 ETF에 포함된 주요 종목들은 2021년 미국의 경기 회복과 더불어 좋은 실적을 발표할 가능성이 높은 기업들에 해당한다. 따라서 드라마틱한 수익률을 기대할 수는 없겠지만, 최근 흐름을 살펴볼 때 단기, 중기적으로 포트폴리오에 포함하는 것을 고려해볼 수 있지 않을까 생각해본다.

그리고 더 나아가서, 이러한 전통 금융주들이 앞으로 어떻게 경쟁력을 강화해 나갈 수 있을 지에 대한 공부도 지속하면 좋을 것이다. 이들의 오랜 역사와 경력, 시장에서의 영향력이 굉장히 큰 것은 사실이다. 그러나 특히 전통 은행들의 경우 그 규모가 큰 만큼 혁신의 속도는 시대를 따라가지 못할 가능성이 있다. 따라서 단순히 금리 상승이라는 이유만으로 이들에 대한 매수를 고려하기 보다는, 전반적인 경제 상황과 각 기업의 경쟁력을 분석해보고 투자의 기간을 결정하는 것이 현명할 것이다.

Comment  Read more

PinSAGE (Graph Convolutional Neural Networks for Web-Scale Recommender Systems) 설명

|

본 글에서는 2018년에 발표된 Graph Convolutional Neural Networks for Web-Scale Recommender Systems란 논문에 대한 Review를 진행할 것이다. 본 논문은 Graph 구조의 신경망을 Pinterest의 추천 시스템에 어떻게 적용하였는지에 대한 내용을 담고 있으며 이전 글에 설명하였던 GraphSAGE의 후속편으로 이해해도 좋을 것 같다.


Graph Convolutional Neural Networks for Web-Scale Recommender Systems 리뷰

1. Introduction

(전략)

본 논문에서는 굉장히 확장 가능성이 높은 GCN 프레임워크를 소개할 것이고, 이는 Pinterest에서 상용화되었다. PinSAGE라고 이름 붙인 Random-Walk 기반의 GCN은 일반적인 GCN의 적용 사례보다 훨씬 더 큰, 3B Node, 18B Edege 크기의 대형 그래프에 적용되었다. 즉 PinSAGE는 몇몇 주요 인사이트를 활용하여 GCN의 확장 가능성을 크게 개선한 것이라고 볼 수 있다.

본 알고리즘은 크게 2가지 측면에서 개선이 이루어졌다. 먼저, 펀더멘탈 측면에서 보자.

1) On-the-fly Convolutions
첫 번째로 기존 GCN 알고리즘들이 전체 그래프 라플라시안을 이용하여 변수 행렬을 곱했던 형식을 적용한 것과 달리 PinSAGE은 Node 주변의 이웃들을 Sampling하고 이에 대해 합성곱을 적용한 방식을 사용하였다. 이는 GraphSAGE에서의 방식과 유사하다.

2) Producer-consumer minibatch construction
CPU-bound producer는 효율적으로 Node 주변의 이웃을 추출하고 합성곱에 필요한 변수들을 준비해놓는다. 반면 GPU-bound Tensorflow Model은 미리 정의된 계산 그래프에서 효율적인 Stochastic Gradient Descent를 수행하게 된다.

3) Efficient MapReduce Inference
반복적 연산은 최소화하면서 학습된 모델이 수많은 Node에 대해 임베딩을 빠르게 생성할 수 있도록 하였다.

다음으로는 새로운 학습 테크닉에 대해 간단히 살펴보겠다.

1) Constructing Convolutions via Random Walks
앞서 이웃을 Sampling 한다고 하였는데 단순히 무작위 추출은 효율적이지 못하다. 본 논문에서는 연산 그래프를 추출하기 위해 작은 Random Walk를 활용하는 테크닉을 적용하였다. 각 Node는 Importance Score를 갖고 있고 이는 Pooling/Aggregation 단계에서 활용된다.

2) Importance Pooling
Random Walk 유사성 측정에 기반하여 Aggregation 단계에서 Node Feature의 중요도에 따라 가중치를 부여하는 방식을 적용하여 46%의 성능 향상을 이끌어내었다.

3) Curriculum Training
학습이 지속될 수록 더 어려운 학습셋을 제공하는 방식을 통해 12%의 성능 향상을 이끌어내었다.

PinSAGE는 Pinterest의 여러 추천 task에 활용되었다. 온라인 컨텐츠의 시각적 북마크라고 할 수 있는 Pin을 고객들에게 맞춤식으로 제공하는 것이 대표적이다. 고객들은 이러한 Pin들 중 유사한 것들을 모아 Board를 통해 집합적으로 구성하게 된다. 결국 Pinterest가 제공하는 것은, 2B가 넘는 Pin과 1B가 넘는 Borad로 이루어진, 세계에서 가장 큰 고객 맞춤형 이미지 그래프인 것이다.


논문을 직접 참고하길 바란다. 한 가지만 언급하자면, PinSAGE은 전체 Graph를 GPU 메모리에 저장할 필요가 없게 만듦으로써 GraphSAGE를 개선하였다.


3. Method

3.1. Problem Setup

Pin과 Board에 대해서는 앞서 설명하였다. Pinterest의 목적은 Pin에 대한 고품질의 Embedding 혹은 Representation을 얻는 것이다. 이를 위해서는 우리는 Pinterest 환경을 이분 그래프 형태로 모델링하였다. 이 때 Node의 종류로는 $I$ (Pin)와 $C$ (Board)가 있을 것이다. 다만 본 논문에서는 $I$ 는 Item의 집합으로 간주하였고, $C$ 는 고객을 정의하는 Context의 집합으로 보았다. 즉 일반적으로 생각하는 User-Item 구조가 아닌 것이다.

Pin(Item)은 어떤 실수 attribute인 $x_u \in \mathbb(R)^d$ 와 관련되어 있는 것으로 가정하였다. 이것은 Raw Feature를 의미하는데 Item에 대한 메타데이터나 컨텐츠 정보를 의미하게 될 것이다.

최종적으로 만들어진 Embedding은 Nearest Neighbor Lookup을 통해 Candidate Generation 형태로 활용되거나 Candidate에 랭킹을 매키는 머신러닝 시스템에서 Feature의 형태로 활용될 것이다.

본 논문에서는 전체 그래프의 Node Set을 $\mathcal{V} = \mathcal{I} \cup \mathcal{C}$ 라 표기할 것이다. 이는 Pin과 Board를 명시적으로 구분하지 않음을 뜻한다. 이러한 Setting은 Pinterest의 시스템 하에서 가능한 것이고, 일반적인 User-Item 추천 시스템에서는 변형이 필요할 것이다.

3.2. Model Architecture

Input Node Feature가 주어지면 그래프 구조를 통해 Node Embedding을 계산하도록 변형&통합하는 신경망을 통과하게 된다.

Node $u$ 에 대해 Embedding $z_u$ 를 얻는 과정은 아래와 같다.

기본적인 전개는 GraphSAGE와 유사하니 생략하고 달라진 부분에 대해서만 정리하도록 하겠다.

위 과정에서 $\gamma$ 는 원소평균 또는 가중합 함수를 의미한다. $u$ 의 지역 이웃은 $n_u$ 로, $u$ 의 현재 Hidden Representation은 $h_u$ 로 표기한다.

Importance-based Pooling에 대해 설명할 차례이다. 이전 GCN 알고리즘들은 단순히 k-hop 이웃을 확인하였다면, PinSAGE의 경우 이웃을 무작위로 선별하지 않는다. Node $u$ 에 대해 가장 큰 영향을 미치는 $T$ 개의 Sample을 추출하는 방법을 사용할 것이다. 구체적으로, Node $u$ 로부터 시작하여 Random Walk를 수행한 후, 이 Random Walk에서 만나게 되는 Nodes의 만남 횟수를 기록하고 이에 L1 정규화를 적용하게 된다. Node $u$ 의 이웃은 이렇게 기록된 정규화된 방문 횟수가 가장 높은 $T$ 개의 Node들로 정의되게 된다.

이러한 방법은 메모리를 절약하고 중요도를 고려한 이웃을 추출할 수 있다는 장점을 지닌다.

파라미터에 대해 정리해보겠다. 위 알고르짐에서 학습 가능한 파라미터는 $\mathbf{Q, q, W, w}$ 이다. 그리고 이들은 어떤 k번째 Layer이냐에 따라 독립적으로 학습된다. 즉 $\mathbf{Q^{(1)}, Q^{(2)}}$ 가 존재한다는 것이다. 이 또한 GraphSAGE와 같은 설정이다. 각 합성곱 Layer를 통과한 Hidden Representation 벡터의 길이는 $d$ 이며, 최종 임베딩 벡터의 길이 또한 $d$ 이다.

3.3. Model Training

본 논문에서 PinSAGEMax-margin Ranking Loss를 통해 학습되었다. 라벨링된 아이템 쌍 집합인 $\mathcal{L}$ 을 갖고 있다고 하자, 이 때 Item 쌍 $(q, i) \in \mathcal{L}$ 은 서로 관련이 있다고 정의된다. 이 때 $q$ 는 query item을 뜻하는데 위와 같은 표기는 Item $i$ 가 query item $q$ 에 좋은 추천이 된다는 뜻이다. 예를 들어 어떤 사람이 $q$ 라는 Item을 과거에 이용한 적이 있다면 이 사람에게 $i$ 라는 Item을 추천해줄 수 있을 것이다.

학습 과정의 목표는 라벨링된 $(q, i) \in \mathcal{L}$ 쌍의 최종 Embedding이 유사한 값을 갖게 만드는 것이다. 이제 학습 과정 상의 주요 포인트들에 대해 알아보자.

Loss Function
Positive Example 사이의 내적 값은 크게 하고, Negative Example 사이의 내적 값은 작게 만드는 것이 이 손실 함수의 기본적인 생각이다. 식은 아래와 같다.

[J_{\mathcal{G}} (z_q z_i) = \mathbb{E}{n_k \sim P_n (q)} max( 0, z_q * z{n_k} - z_z * z_i + \Delta )]

이 때 $P_n(q)$ 는 item $q$ 를 위한 Negative Example의 분포를 의미하며, $\Delta$ 는 Margin Hyper-parameter이다.

Multi-GPU training with large minibathces
각 미니 배치를 같은 크기로 나눈다. 각 GPU는 미니배치의 한 부분씩을 담당하게 되고 같은 파라미터셋으로 연산을 수행한다. 역전파가 수행될 때 모든 GPU에 존재하는 각 파라미터들의 Gradient는 공유되며 동기식 SGD가 수행된다. 배치의 크기는 512 ~ 4096 사이의 숫자를 사용한다.

Producer-consumer minibatch constructions
(전략)
GPU는 모델 계산을, CPU는 Feature를 추출하고 재색인을 수행하며, Negative Sampling의 역할을 맡는다.

Sampling Negative Items
본 논문에서는 한 미니 배치에서 500개의 Negative Item이 공유되도록 설정하였다. 그런데 이 500개를 전체 Item 집합에서 무작위 추출을 통해 뽑는다면, 학습은 너무 쉬울 것이다. 왜냐하면 무작위로 뽑은 500개의 Item과 Query Item과의 내적 값은 Positive Example과의 내적 값에 비해 작을 확률이 매우 크기 때문이다. 따라서 본 논문에서는 다른 방법을 도입하였다.

각 Positive Training Example에 어려운 Negative Example을 추가하였다. 즉, Query Item과 어느 정도 관련은 있지만 Positive Example 만큼 관련있지는 않은 Item을 추가한 것이다.

이러한 어려운 Negative Example은 Query Item에 대한 개인화된 PageRank Score에 따라 그래프에서 Item에 대한 순위를 매김으로써 생성되며 2000~5000위 사이의 Item을 어려운 Negative Example라고 정의하였다.

이러한 학습 방식을 적용하였을 때, 그렇지 않았을 때에 비하여 2배의 Epoch이 필요하다. 본 논문에서는 수렴을 위해 Curriculumn Training 방식을 도입하였다. 1 Epoch에서는 어려운 Negative Example을 추가하지 않고 학습을 시킨다. 이후에서는 각 Query Item 마다 1개의 어려운 Negative Example을 추가한다. Epoch이 하나씩 지날 수록 이 어려운 Negative Example은 1개씩 더 추가된다.

3.4. Node Embeddings via MapReduce

학습이 끝난 후 Embedding을 생성하는 것도 굉장한 연산량을 요하는 작업이다. 본 논문에서는 이러한 연산을 효율적으로 수행하는 방식을 소개한다. 이 방식은 반복적 연산 없이 모델의 추론을 가능하게 한다. 아래 그림은 Pinterest의 Pin-to-Board 이분 그래프의 데이터 흐름을 잘 나타내고 있다.

본 논문에서 소개하는 MapReduce 파이프라인은 다음과 같이 2개의 주요 요소를 갖는다.

(1) 하나의 MapReduce는 모든 pin을 Aggregation 연산이 수행되는 저차원 잠재 공간에 투사한다.

(2) 다른 MapReduce는 결과 Representation과 그 Representation이 발생한 Board의 ID를 결합하고, Board Embedding은 Sampling된 이웃의 Feature를 Pooling함으로써 계산된다.

이러한 방식을 도입하면 각 Node의 잠재 벡터는 단 한 번만에 계산되게 된다.

3.5. Efficient Nearest-neighbor Lookups

PinSAGE의 결과물로 형성된 Embedding은 많은 곳에 적용될 수 있지만 가장 직접적인 활용은 바로 이러한 Embedding의 근접 이웃 벡터를 찾아 추천에 활용하는 방법이 될 것이다.

Locality Sensitive Hashing을 통해 근사적인 KNN이 효율적으로 수행될 수 있다. Hash 함수가 계산되고 난 후 Item을 얻는 것은 Weak AND 연산자에 기반한 2단계 retrieval 과정에 의해 실현될 것이다.


4. Experiments

(후략)


References

1) 논문 원본

Comment  Read more

BLEURT - Learning Robust Metrics for Text Generation(BLEU 개선 버전, BLEURT 논문 설명)

|

이 글에서는 2020년 ACL에 Google Research 팀의 Thibault Sellam 등이 게재한 BLEURT: Learning Robust Metrics for Text Generation를 살펴보도록 한다.

구글 AI 블로그에서 이 논문에 대한 설명을 볼 수 있다.

중요한 부분만 적을 예정이므로 전체가 궁금하면 원 논문을 찾아 읽어보면 된다.


BLEURT: Learning Robust Metrics for Text Generation

논문 링크: BLEURT: Learning Robust Metrics for Text Generation

홈페이지: 구글 AI 블로그

Tensorflow code: Official Code

초록(Abstract)

텍스트 생성은 지난 몇 년간 상당한 발전을 이루었다. 그러나 아직 그 평가 방법은 매우 뒤떨어져 있는데, 가장 자주 사용되는 BLEU나 ROUGE는 사람의 판단과는 낮은 연관성을 갖는다(즉, 사람이 보기에 별로 적절치 않다). 이 논문에서는 BLEURT라는 새 평가 방법을 제안하는데, BERT에 기반한 학습된 평가방법으로 수천 개 정도의 학습 예시만으로도 사람의 판단 방식을 모델링할 수 있다. 이 접근법의 핵심은 수백만 개의 합성된 예시를 모델을 일반화하기 위해 사용하는 새로운 사전학습 방식이라는 것이다. BLEURT는 WMT Metrics와 WebNLG Competition 데이터셋에서 state-of-the-art 결과를 얻었다. 바닐라 BERT 기반 방식과는 다르게, BLEURT는 학습 데이터가 드물고 기존 분포에서 벗어나도 훌륭한 결과를 보여준다.


1. 서론(Introduction)

지난 몇 년간, 자연어생성 분야에서의 연구는 번역, 요약, 구조화된 데이터 → 텍스트 생성, 대화 및 이미지 캡션 등을 포함한 많은 문제에서 encoder-decoder 신경망을 통해 상당한 발전을 이루었다. 하지만, 평가 방법의 부족으로 인해 발전이 적지 않게 지연되었다.

인간 평가(Human Evaluation)는 시스템의 품질을 측정하는 데 있어서 종종 최선의 지표가 되지만, 이는 매우 비싸며 상당히 시간이 많이 소요되는 작업으로 매일 모델 개발의 pipeline에 넣을 수는 없다. 그래서, NLG 연구자들은 보통 계산이 빠르고 그럭저럭 괜찮은 품질의 결과를 주는 자동 평가방법(automatic evaluation metrics)을 사용해 왔다. 이 논문에서는 문장 수준의, 참조 기반 평가 방법으로, 어떤 후보 문장이 참조 문장과 얼마나 비슷한지를 측정하는 방법을 제시한다.

1세대 평가방법은 문장 간의 표면적 유사도를 측정하기 위해 수동으로 만들어졌다. BLEU와 ROUGE라는 두 개의 방법이 N-gram 중첩(overlap)에 기반하여 만들어졌다. 이러한 평가방법은 오직 어휘의 변화에만 민감하며, 의미적 또는 문법적인 측면의 변화는 제대로 측정하지 못하였다. 따라서, 이러한 방식은 사람의 판단과는 거리가 멀었으며, 특히 비교할 시스템이 비슷한 정확도를 가질 때 더욱 그렇다.

NLG 연구자들은 이 문제를 학습된 구성 요소를 이 평가방법에 집어넣음으로써 다뤄 왔다. WMR Metrics Shard Task라는, 번역 평가에서 자주 사용되는 평가방법이 있다. 최근 2년간은 신경망에 기반한 RUSE, YiSi, ESIM이 많이 사용되었다. 최근의 방법들은 다음 가지로 나뉜다:

  1. 완전히 학습된 평가방법.
    • BEER, RUSE, ESIM
    • 일반적으로 end-to-end 방식으로 학습되었으며, 보통 수동으로 만든 feature나 학습된 embedding에 의존한다.
    • 훌륭한 표현능력(expressivity)를 가진다.
    • 유창성, 충실함, 문법, 스타일 등 task-specific한 속성을 가지도록 튜닝할 수 있다.
  2. Hybrid 평가방법.
    • YiSi, BERTscore
    • 학습된 요소(contextual embeddings)를 수동으로 만든 논리(token alignment 규칙)와 결합한다.
    • 강건성(Robustness)를 확보할 수 있다.
    • 학습 데이터가 적거나 없는 상황에서 좋은 결과를 얻을 수 있다.
    • train/test 데이터가 같은 분포에 존재한다는 가정을 하지 않는다.

사실, IID 가정은 domain drift 문제에 의해 NLG 평가에서 특히 문제가 되었다. 이는 평가방법의 주 목적이지만, quality drift 때문이기도 하다: NLG 시스템은 시간이 지남에 따라 더 좋아지는 경향을 보이며, 따라서 2015년에 rating data로 학습한 모델은 2019년의 최신 모델을 구별하지 못할 수 있다(특히 더 최근 것일수록). 이상적인 학습된 평가방법은 학습을 위해 이용가능한 rating data를 완전히 활용하고, 분포의 이탈(drift)에 강간한 것을 모두 확보하는 것이다. 즉 추론extrapolate할 수 있어야 한다.

이 논문에서 통찰한 바는 표현능력과 강건성을 인간 rating에 미세조정하기 전 대량의 합성 데이터에서 사전학습하는 방식으로 결합하는 것이 가능하다는 것이다.
여기서 BERT에 기반한 텍스트 생성 평가방법으로 BLEURT를 제안한다. 핵심은 새로운 사전학습 방법으로, 어휘적 그리고 의미적으로 다양한 감독 signal(supervision signals)를 얻을 수 있는 다양한 Wikipedia 문장에서 임의의 변화(perturbation)을 준 문장들을 사용하는 방법이다.

BLEURT를 영어에서 학습하고 다른 일반화 영역에서 테스트한다. 먼저 WMT Metrics Shared task의 모든 연도에서 state-of-the-art 결과를 보인다. 그리고 스트레스 테스트를 하여 WMT 2017에 기반한 종합평가에서 품질 이탈에 대처하는 능력을 측정한다. 마지막으로, data-to-text 데이터셋인 WebNLG 2017으로부터 얻는 3개의 task에서 다른 도메인으로 쉽게 조정할 수 있음을 보인다. Ablation 연구는 이 종합 사전학습 방법이 IID 세팅에서 그 성능을 증가시키며, 특히 학습 데이터가 편향되어 있거나, 부족하거나, 도메인을 벗어나는 경우에 더 강건함을 보인다.

코드와 사전학습 모델은 온라인에서 볼 수 있다.


2. 서두(Preliminaries)

$x = (x_1, …, x_r)$는 $r$개의 token을 갖는 참조 문장이며 $\tilde{x} = (\tilde{x}_1, …, \tilde{x}_p)$는 길이 $p$의 예측 문장이다. $y$가 예측 문장이 참조 문장과 관련하여 얼마나 좋은지를 사람이 정한 값이라 할 때 크기 $N$의 학습 데이터셋은 다음과 같이 쓴다.

[\lbrace (x_i, \tilde{x}i, y_i) \rbrace^N{n=1}]

학습 데이터가 주어지면, 우리의 목표는 사람의 평가를 예측하는 함수 $f : (x, \tilde{x}) \rightarrow y$를 학습하는 것이다.


3. 품질 평가를 위한 미세조정 BERT(Fine-Tuning BERT for Quality Evaluation)

적은 양의 rating(rating) 데이터가 주어졌을 때, 이 task를 위해 비지도 표현을 사용하는 것이 자연스럽다. 이 모델에서는 텍스트 문장의 문맥화된 표현을 학습하는 BERT를 사용하였다. $x$와 $\tilde{x}$가 주어지면, BERT는 문맥화된 벡터의 sequence를 반환하는 Transformer이다:

[v_{[\text{CLS}]}, v_{x_1}, …, v_{x_r}, v_1, …, v_{\tilde{x}_p} = \text{BERT}(x, \tilde{x})]

$ v_{[\text{CLS}]}$는 특수 토큰 $\text{[CLS]}$의 표현이다. 여기서 rating를 예측하기 위해 $\text{[CLS]}$ 벡터에 선형 레이어를 하나 추가했다:

[\hat{y} = f(x, \tilde{x}) = W\tilde{v}_{[\text{CLS}]} + b]

$W$와 $b$는 각각 weight matrix와 bias이다. 위의 선형 레이어와 BERT parameter는 대략 수천 개의 예시를 사용하여 미세조정(fine-tuned)된다. Regression Loss로 다음을 쓴다.

[l_{\text{supervised}} = \frac{1}{N} \Sigma^N_{n=1}\Vert y_i - \hat{y}\Vert^2]

이 접근법은 상당히 간단하지만, Section 5에서 WMT Metrics Shared Task 17-19에서 state-of-the-art 결과를 얻을 수 있음을 보인다. 하지만, 미세조정 BERT는 많은 양의 IID data를 필요로 하며, 이는 다양한 task와 모델의 변형에 일반화할 수 있는 평가 방법으로는 아주 이상적이지는 않다.


4. 합성 데이터에서 사전학습(Pre-Training on Synthetic Data)

이 접근법의 핵심 부분은 rating data에 미세조정하기 전 BERT를 “warm up”하기 위해 사전학습 기술을 사용했다는 것이다. 많은 양의 참조-후보 쌍 $(z, \tilde{z})$을 생성하여, 여러 어휘적 & 의미적 수준의 감독 signal를 multi-task loss를 사용하여 BERT를 학습시켰다. 실험이 보여주듯이, BLEURT는 이 단계 이후로 매우 성능이 좋아지며, 특히 데이터가 부족할 때에 더욱 그렇다.

어떤 사전학습 접근법이든지 데이터셋과 사전학습 task 뭉치가 필요하다. 이상적으로, 이러한 구조는 최종 NLG 평가 task(i.e., 문장 쌍은 비슷하게 분포되어야 하고 사전학습 signal는 사람의 판단과 연관되어 있어야 한다)와 비슷할 수밖에 없다. 안타깝게도, 우리는 우리가 미래에 평가할 NLG 모델에 접근할 수 없다.
따라서, 우리는 일반성을 위해 방법을 다음 3가지 요구사항으로 최적화했다:

  1. 참조 문장 집합은 반드시 크고 다양성을 가져야 하며, 이는 BLEURT가 다양한 NLG domain과 task를 처리할 수 있을 만큼 충분해야 한다.
  2. 문장 쌍은 매우 다양한 의미적, 구문론적, 의미적 차이점을 포함해야 한다.
  3. 사전학습 objective는 BLEURT가 식별할 수 있을 만큼 효과적으로 그 현상들을 잡아내야 한다.

아래 섹션들에서 상세히 설명한다.

4.1. 문장 쌍 생성(Generating Sentence Pairs)

BLEURT를 매우 다양한 문장에 노출시키기 위한 하나의 방법은 존재하는 문장 쌍 데이터셋(Bowman et al., 2015; Williams et al., 2018; Wang et al., 2019)을 사용하는 것이다. 이 데이터셋들은 다양한 출처의 연관된 문장들을 포함하지만 NLG 시스템이 만드는 오류와 변형을 잡아내지 못할 수 있다(생략, 반복, 터무니없는 대체 등). 대신 자동적 접근법을 선택하여, 이는 임의로 늘일 수 있고 또한 적은 비용으로 실행할 수 있다: 우리는 합성 문장 쌍 $(z, \tilde{z})$를 Wikipedia에서 가져온 문장에 180만 개의 부분 perturbing을 수행하여 얻었다. 여기서는 BERT에서 mask-filling, 역 번역, 단어를 임의로 빼는 세 가지 기술이 사용되었다. 이를 살펴보자.

Mask-filling with BERT:

BERT의 초기 학습 task는 토큰화된 문장에서 masked 토큰을 채우는 task이다. 이 기술은 Wikipedia 문장의 임의의 위치에 mask를 삽입한 후 언어 모델로 이를 채우는 과정이다. 따라서, 문장의 유창성을 유지하면서 어휘적 변형을 모델에 소개하였다. Masking 전략은 두 가지가 있는데, 문장의 임의의 위치에 mask를 만들거나, masked 토큰에 근접한 문장을 만드는 것이다. 더 자세한 내용은 부록 참조.

Backtranslation:

역 번역을 통해 문단과 문장 동요(perturbation)을 생성하였고, 이는 번역 모델을 사용하여 영어를 다른 언어로 번역했다가 다시 영어로 바꾸는 왕복 과정이다. 주 목표는 의미를 유지하는 참조 문장에 변형을 추가하는 것이다. 추가적으로, 역 번역 모델의 예측 실패한 것을 현실적 변형의 출처로 사용하였다.

Dropping words:

위의 합성 예시에서 단어를 무작위로 삭제하여 다른 예시를 만드는 것이 실험에서 유용하다는 것을 알아내었다. 이 방법은 BLEURT가 “병적인” 행동이나 NLG 시스템: 의미없는 예측, 문장 절단 등에 대비할 수 있게 한다.

4.2. 사전학습 signal(Pre-Training Signals)

다음 단계는 각 문장 쌍 $(z, \tilde{z})$과 사전학습 signal 집합 $\lbrace \tau_k \rbrace$ 을 늘리는 것이다. $\tau_k$는 사적학습 task $k$의 목표 벡터이다. 좋은 사전학습 signal는 매우 다양한 어휘적, 의미적 차이점을 잡아내야 한다. 이는 또한 얻기 쉬워야 하며, 따라서 이 접근법은 대량의 합성 데이터에도 크기를 늘려 사용할 수 있어야 한다. 다음 섹션에서는 표 1에 요약한 9가지 학습 task를 소개한다. 추가 구현 세부는 부록을 참조한다.

Automatic Metrics:

문장 BLEU, ROUGE, BERTscore와 연관하여 3가지 signal $\tau_{\text{BLEU}}$, $\tau_{\text{ROUGE}}$, $\tau_{\text{BERTscore}}$를 만들었다. precision을 사용하며 뒤의 2개는 recall과 F-score를 사용한다.

Backtranslation Likelihood:

이 signal의 아이디어는 존재하는 번역 모델을 의미적 동등을 측정하는 도구로 사용하는 것이다. 문장 쌍 $(z, \tilde{z})$이 주어지면, 이 학습 signal은 $\tilde{z}$가 그 length로 정규화되었을 때 $z$의 역 번역일 확률 $P(\tilde{z}\vert z)$를 측정한다.

아래 식의 첫 번째 항을 영어 문장 $z$을 조건으로 하여 프랑스어 문장 $z_{fr}$일 확률을 할당하는 번역 모델이라 하자.
두 번째 항은 프랑스어 $\rightarrow$ 영어에 대한 번역 모델이다.

[P_{en \rightarrow fr}(z_{fr} \vert z) , P_{fr \rightarrow en}(z \vert z_{fr})]

만약 $\vert \tilde{z} \vert$가 $\tilde{z}$ 안의 토큰의 수라면, 점수를 다음과 같이 정의한다.

[\tau_{en-fr, \tilde{z} \vert z} = \frac{\log P(\tilde{z} \vert z)}{\vert \tilde{z} \vert} , P(\tilde{z} \vert z) = \sum_{z_{fr}} P_{fr \rightarrow en}(z \vert z_{fr}) \ P_{en \rightarrow fr}(z_{fr} \vert z)]

모든 가능한 프랑스어 문장에 대해 합을 계산하는 것은 불가능하기 때문에, 합은 다음과 같이 근사한다:

[\text{assume}: P_{en \rightarrow fr}(z_{fr} \vert z) \approx 1]

[P(\tilde{z} \vert z) \approx P_{fr \rightarrow en}(\tilde{z} \vert z^_{fr}) , where \ z^{fr} = \text{argmax} P{en \rightarrow fr}(z_{fr} \vert z)]

$P(z \vert \tilde{z})$를 계산하는 것은 자명하게도 과정을 역으로만 하면 되므로 영어 $\leftrightarrow$ 독일어와 영어 $\leftrightarrow$ 프랑스어 간 다음 4개의 사전학습 signal을 만들었다.

[\tau_{\text{en-fr}, z \vert \tilde{z}}, \ \tau_{\text{en-fr}, \tilde{z} \vert z}, \ \tau_{\text{en-de}, z \vert \tilde{z}}, \ \tau_{\text{en-de}, \tilde{z} \vert z}]

Textual Entailment:

signal $\tau_{\text{entail}}$은 $z$가 $\tilde{z}$를 수반하는지 혹은 상충하는지를 분류기를 통해 표현한다. 이와 관련하여 수반 데이터셋 MNLI에서 미세조정된 BERT를 사용하여 가능성을 수반(Entail), 모순(Contradict), 중립(Neutral)으로 분류하였다.

Backtranslation flag:

signal $\tau_{\text{backtran_flag}}$는 perturbation이 역 번역에 의해 생성되었는지 혹은 mask-filling에 의해 생성되었는지를 나타내는 Boolean 값이다.

4.3. 모델링(Modeling)

각 사전학습 task에서, 모델은 회귀 또는 분류 loss를 사용한다. 그리고 task 수준의 loss의 가중합을 구한다.

$\tau_k$를 각 task에 대한 목표 벡터라 하자(Entail, Contradict, Neutral, precision, recall, ROUGE F-score 등).

만약 $\tau_k$가 회귀 task이면, loss는 $\vert \tau_k \vert $가 $\tau_k$의 차원이고 $\vert \hat{\tau}_k\vert$가 [CLS] embedding에 선형 레이어를 붙여 계산한 것이라면 $\ell_2$ loss는 다음과 같다.

[\ell_k = \Vert\tau_k - \hat{\tau}k \Vert^2_2 / \vert \tau_k \vert \quad \text{where} \ \hat{\tau}_k = W{\tau_k}\tilde{v}{[\text{CLS}]} + b{\tau_k}]

만약 $\tau_k$가 분류 task이면, 각 class $c$에 대한 logit을 예측하기 위한 선형 레이어를 분리하였고 multi-class cross-entropy loss를 사용하였다. 사전학습 손실함수는 다음과 같다.

\(\ell_{\text{pre-training}} = \frac{1}{M} \sum^M_{m=1} \sum^K_{k=1} \gamma_k \ell_k (\tau^m_k, \hat{\tau}^m_k)\) \(\text{where} \ \hat{\tau}_{kc} = W_{\tau_{kc}}\tilde{v}_{[\text{CLS}]} + b_{\tau_{kc}}\)

  • $\tau^m_k$: 예시 $m$에 대한 목표 벡터
  • $M$: 합성 예시의 숫자
  • $\gamma_k$: grid search로 얻은 초모수 가중치(hyper-parameter weights)

보다 자세한 것은 부록을 참조한다.

Examples

5. 실험(Experiments)

번역과 data $\to$text task에서 실험 결과를 적는다. 먼저, BLEURT를 이미 존재하는 텍스트 생성 평가방법과 WMT Metrics Shared Task의 최근 3년간에 대해 평가한다. 그리고 WMT17에 기반한 일련의 합성 데이터에 따라 움직이는 품질 이탈(drifts)에 대한 BLEURT의 강건성을 평가한다. 또 WebNLG 2017 Challenge Dataset와 다른 task에 적용시키는 BLEURT의 능력을 평가한다. 마지막으로, ablation을 통해 각 사전학습 task이 기여하는 바를 측정한다.

Our Models:

모든 BLEURT 모델은 다음 3단계를 거친다:

  1. BERT 모델의 기본 사전학습
  2. 합성 데이터에 대한 사전학습
  3. task-specific rating에 대한 미세조정(번역 그리고/혹은 data $\to$ text)

BLEURT는 2가지 버전이 있다.

  1. BLEURT: BERT-Large uncased 기반(24 layer, 1024 hidden units, 16 heads)
  2. BLEURTbase: BERT-Base uncased 기반(12 layer, 768 hidden units, 12 heads)

batch size는 32, learning rate는 1e-5, 사전학습에 80만 step, 미세조정에 4만 step을 적용하였다. 더 자세한 사항은 부록 참조.

5.1. WMT Metrics Shared Task

Datasets and Metrics:

WMT Metrics Shared Task의 2017-2019년, to-English 언어 쌍 데이터를 사용하였다. 각 연도에 대해, 공식 WMT test set(사람의 평가와 같이 뉴스 도메인에서 얻은 수천 개의 문장 쌍으로 구성)을 사용하였다.
training set은 5360, 9482, 147691개의 예시가 있다. 2018년과 2019년의 test set은 더 noise가 많은데, 좀 더 낮은 상관관계를 보인다.

자동화된 평가 방법과 인간 평가와 일치하는 정도를 평가한다. 각 연도에 대해, Kendall’s Tau $\tau$(실험 간 일관성을 위해)와 공식 WMT 평가(완전성을 위해)를 둘 다 사용하였다. 공식 WMT 평가방법은 Pearson’s correlation이나 DARR라 불리는 Kendall’s Tau의 강건한 변형이며, 부록에서 볼 수 있다. 모든 숫자는 벤치마크의 구현에서 가져왔다. 결과는 전체적으로 공식 결과와 일관되지만 2018년과 2019년에서 약간의 차이를 발견하였고, 표에서 확인할 수 있다.

Models:

4가지 버전이 있다: BLEURT, BLEURTbase, BLEURT -pre, BLEURTbase -pre. 첫 2개는 BERT-large와 BERT-base에 기반하였다. 뒤 2개는 사전학습 단계를 생략하고 바로 WMT ratings에 미세조정한 것이다. WMT shared task의 각 연도의 작년 test set을 training과 validation set으로 사용하였다. 이는 부록에서 더 자세히 설명한다.

BLEURT를 shared task의 다른 후보 데이터와 자동화된 평가방법과 비교하였다. 전자의 경우에는 각 연도의 최고 성능 평가방법인 chrF++, BEER, Meteor++, RUSE, Yisil, ESIM, Yisil-SRL를 사용하였다. 모든 후보는 같은 WMT 학습 데이터와 추가적으로 존재하는 문장 또는 token embedding을 사용하였다. 후자의 경우에는 Moses sentenceBLEU, BERTscore, MoverScore를 사용하였다. BERTscore에 대해서는 공정성을 위해 BERT-large uncased 모델을, 완전성을 위해 roBERTa를 사용하였다. MoverScore는 WMT 2017의 scripts를 사용하여 평가하였다.

Results:

Examples
Examples

표 2~4에서 볼 수 있다. 2017년과 2018년에서는 BLEURT-based 평가가 각 언어 쌍에서 다른 벤치마크를 압도한다. 2019년에서도 Kendall’s Tau에서 모든 언어 쌍에 대해 최고의 결과를, DARR에서 7개 중 3개에서 최고의 결과를 냈다는 점에서 BLEURT와 BLEURTbase 역시 경쟁력이 있다.
기대한 대로, BLEURT는 대부분의 경우 BLEURTbase를 압도한다. 사전학습은 일관되게 BLEURT와 BLEURTbase의 성능을 높인다.

2017년에서 가장 큰 효과는 BLEURTbase(zh-en)에서 7.4 Kendall Tau 점수를 더 얻었다는 것이다. 이 효과는 2018년과 2019년에서는 더 약하다(tr-en, 2018년에서 2.1점). 이 차이는 2017년에 사용된 학습 데이터는 이후 연도보다 더 적기 때문이며, 사전학습이 더 도움이 되었기 때문이라 설명할 수 있다. 일반적으로 사전학습은 BERT-large보다 BERT-base에서 더 큰 효과를 가지는데, 사실, 사전학습을 포함한 BLEURTbase는 포함하지 않을 때 BLEURT보다 더 좋은 경우도 있었다.

Takeaways:

사전학습은 일관적으로 성능 향상을 가져다주며, 특히 BLEURT-base에서 그렇다. BLEURT는 WMT Metrics Shared task의 모든 연도에서 가장 좋은 성능을 보인다.

5.2 Robustness to Quality Drift

사전학습이 품질 이탈(quality drift)에 대한 BLEURT의 강건성을 증가시킨다는 것은 추론 비중이 증가하는 일련의 task를 구성함으로써 평가하였다. 모든 실험은 WMT Metrics Shared Task 2017에 기반하였다. 이 rating이 특별히 믿을 만하기 때문이다.

Methodology:

WMT Metrics shared task의 예시들을 부차표본추출하여 저평가된 번역을 학습으로 고평가된 번역을 테스트로 하여 난이도가 점점 높아지는 데이터셋들을 생성하였다. 중요한 parameter는 skew factor $\alpha$인데 이는 학습 데이터가 얼마나 좌편향되었고 테스트 데이터가 얼마나 우편향되었는지를 측정한다. 학습 데이터는 $\alpha$가 커질수록 줄어든다. 가장 극단적인 경우인 $\alpha=3.0$의 경우 학습 데이터로는 전체(5344개)의 11.9%만 사용한다. 더 자세한 건 부록 참조.

BLEURT는 사전학습을 한 것과 안 한 것으로 나누어 Moses sentBLEU와 BERTscore와 비교한다. BERT-large uncased를 기본으로 사용한다.

Results:

Examples

그림 2는 학습/테스트 데이터의 skew를 독립적으로 변화시키면서 측정한 BLEURT의 성능을 보여준다. 첫 번째 관찰할 점은 test skew가 증가할수록 모든 평가방법의 일치성이 하락한다는 것이다. 이 효과는 2019 WMT Metrics 보고서에서도 이미 보고되었다. 일반적인 설명은 rating이 가까워질수록 task가 어려워진다는 것이고, “good* 시스템을 그냥 평가하는 것보다 “good”과 “bad”를 구별하는 것이 더 쉽다는 것이다.

학습 skew는 사전학습이 없는 BLEURT에 치명적인 효과를 가진다: $\alpha=1.0$에서 BERTscore보다 낮으며, $\alpha \ge 1.5$인 경우에는 sentBLEU보다 낮다. 사전학습된 BLEURT는 훨씬 더 강건하다: 유일하게 낮아지는 때는 가장 극단적인 drift(학섭 데이터는 부정확한 번역, 테스트할 때에는 훌륭한 번역)가 존재하는 $\alpha=3.0$일 때 뿐이다.

Takeaways:

사전학습은 BLEURT의 quality drift에 대한 강건성을 크게 증가시킨다.

5.3 WebNLG Experiments

이 섹션에서는, data $\to$ text 데이터셋(WebNLG Challenge 2017)에서 나온 3가지 task에 대한 BLEURT의 성능을 평가한다. 목표는 학습 데이터가 제한되었을 때 BLEURT의 새로운 task에 대한 적응능력을 평가하는 것이다.

Dataset and Evaluation Tasks:

WebNLG challenge 벤치마크 시스템은 1~5개의 RDF triple 집합의 객체(예: 빌딩, 도시, 예술가 등)에 대한 자연어 설명을 생성한다. 223개의 입력에 대해 9개의 시스템에 인간 평가를 수행하여 4677 문장 쌍에 대한 데이터가 있다. 각 입력당 1~3개의 참조 설명이 있다. 각 제출은 의미, 문법, 유창성 측면에서 평가된다. ratings의 각 종류는 독립된 모델링 task로 여겨진다.
데이터는 train/test 집합 사이에 자연스러운 구분이 없으므로 여러 전략을 통해 실험하였다. 학습에는 0~50%의 데이터를 사용하고, 다른 일반화 가능 범위를 평가하기 위해 평가할 시스템과 RDF 입력을 모두 분리하였다.

Systems and Baselines:

BLEURT -pre -wmt는 WebNLG ratings에서 직접 학습된 일반적인 BERT-large uncased이며, BLEURT -wmt는 합성 데이터에서 처음 사전학습되어 WebNLG 데이터에서 미세조정된 것이다. BLEURT는 1) 합성 데이터, 2) WMT 데이터, 3) WebNLG 데이터에서 차례로 학습된다. 어떤 샘플이 여러 참조에서 올 때, BLEURT를 각 참조에서 실행시켜서 가장 높은 점수만을 기록한다.

4가지의 기준 모델은 각각 BLEU, TER, Meteor, BERTscore이다. 첫 3개는 WebNLG competition organizers에 의해 계산된다. 마지막 하나는 공정한 비교를 위해 BERT-large uncased 모델을 사용해 직접 평가하였다.

Results:

Examples

그림 3은 학습에 할당되는 데이터의 비율의 변화에 따라 평가방법과 인간 평가 사이의 상관관계를 보여준다. 더 많이 사전학습된 BLEURT가 더 잘 적응함을 볼 수 있다. vanilla BERT 접근법인 BLEURT -pre -wmt는 대부분의 task에서 기준 모델을 압도하려면 WebNLG 데이터의 1/3이 필요하며, 그러고도 의미론적인 측면에서 여전히 뒤처진다.
이와 대조적으로, BLEURT -wmt는 836개 정도의 샘플을 사용한 경우에 경쟁력이 있으며, BLEURT는 미세조정을 하지 않았을 때 BERTscore와 비교할 만하다.

Takeaways:

사전학습 덕분에 BLEURT는 새로운 task에 빠르게 적응할 수 있다. BLEURT는 합성 데이터와 WMT 데이터에 총 2번 사전학습 함으로써 학습 데이터 없이도 모든 task에서 괜찮은 결과를 보여 준다.

5.4 Ablation Experiments

Examples

그림 4는 WMT 2017에 진행한 ablation 실험을 보여주며, 각 사전학습 task의 상대적 중요성을 보여준다. 왼쪽에서는 BLEURT이 하나의 task에 대해 사전학습된 것과 아닌 것의 차이를 보여준다. 오른쪽은 full BLEURT와 하나를 제외한 모든 task에 사전학습된 BLEURT를 비교한다. BERTscore, entailment, 역 벅역 score에 사전학습하는 것은 성능 향상을 이끌어낸다(비슷하게, 이를 없애는 것은 BLEURT의 성능을 낮춘다). 반대로, BLEU와 ROUGE는 음의 영향력을 갖는다. 높은 품질의 signal 하에서 사전학습하는 것은 BLEURT에 도움이 되지만, 사람의 평가와 낮은 상관관계를 갖는 평가방법은 모델의 성능을 떨어뜨릴 수 있다.


6. 관련 연구(Related Work)

WMT shared metrics competition은 많은 학습된 평가방법의 생성에 영감을 주었다. 최근 MoverScore와 같은 다른 평가방법도 소개되었는데, 이는 문맥적 embedding과 Earth Mover’s Distance를 결합한 것이다. 우리는 head-to-head 실험을 제공하여 실험과 최고 성능의 평가방법을 비교하였다. 다른 접근법은 품질을 직접 추정하지는 않지만, 추출이나 질답을 대안으로 쓸 수 있다. 이는 이 연구에 상호 보완을 할 수 있다.

평가를 위해 BERT를 사용하는 최근 연구들이 있다. BERTScore는 BLEU의 hard n-gram overlap을 BERT embedding을 사용하여 soft-overlap으로 대체하였다. 이는 본 연구 전체에서 사용되었다. Bertr과 YiSi는 유사성을 잡아내기 위해 역시 BERT embedding을 사용하였다. SumQE는 품질 추정을 위해 BERT를 미세조정했다.
이 논문의 초점은 다르다$-$이 논문에서는 전통적인 IID 실험 setup에서 state-of-the-art뿐만 아니라 학습 데이터가 분포를 벗어나거나 부족한 경우에서도 평가방법을 학습시켰다. NLG 문맥에서 사전학습과 추론의 영역을 탐사하였다.

이전 연구들은 참조가 없는 평가를 위해 noising을 사용하였다. Noisy한 사전학습은 의역과 같은 다른 task를 위해 제안되었지만 일반적으로 합성 데이터에는 그렇지 않았다. 의역과 perturbation으로 합성 데이터를 생성하는 것은 일반적으로 적대적 예시를 생성하는 데 사용되며, 이는 (이) 연구의 파향선이다.


7. 결론(Conclusion)

영어를 위한 참조 기반 텍스트 생성 평가방법인 BLEURT를 제안하였다. 이 평가방법은 end-to-end 방식이미 때문에, BLEURT는 높은 정확도로 인간 평가를 모델링할 수 있다. 더욱이, 사전학습은 특히 도메인과 품질 이탈이 있는 경우에도 강건성을 가진다. 추후 연구 방향은 다중 언어 NLG 평가를 포함하며, 사람과 분류기 모두를 포함하는 혼합 방식이 될 것이다.

Acknowledgements

언제나 있는 감사의 인사


Refenrences

논문 참조. 많은 레퍼런스가 있다.


Appendix A Implementation Details of the Pre-Training Phase

이 섹션에서는 본문에서 기술된 사전학습 기술에 대한 상세를 설명한다.

A.1. Data Generation

Random Masking:

2개의 masking 전략을 사용했다. 두 경우 모두 15개의 mask를 생성한다.

  1. 문장에서 임의의 단어를 선택하여 mask(각 토큰당 1개)로 대체한다. 따라서 mask가 문장에 산재되어 있다.
  2. 두 번째 전략은 연속적인 sequence를 생성한다: 처음 위치 $s$에서 길이 $l$만큼을 균등분포로 선택하여 그 안의 모든 token을 mask로 대체한다.

언어모델을 한 번 실행시키고 각 위치에서 가장 (원래 단어였을 것 같은) token을 선택하는 대신, 크기 8의 beam search를 사용했다. 이는 , , ,와 같은 반복적인 sequence를 피하고 일관성을 갖도록 강제한다.

Backtranslation:

영어-프랑스어를 고려한다.

정방향 번역 모델과 역방향 번역 모델이 주어졌을 때, $\tilde{z}$를 다음과 같이 생성한다:

[\tilde{z} = \text{argmax}{z{en}} P_{fr \to en}(z_{en} \vert z^*_{fr})]

[where \ z^*{fr} = \text{argmax} P{fr \rightarrow en}(z_{fr} \vert z)]

[\text{forward translation model: } P_{en \rightarrow fr}(z_{fr} \vert z_{en})]

[\text{backward translation model: } P_{fr \rightarrow en}(z_{en} \vert z_{fr})]

번역 모델로는 tensor2rensor framework로 영어-독일어를 사용하여 학습된 Transformer를 사용했다.

Word dropping:

합성 예시 $(z, \tilde{z})$가 주어질 때 $\tilde{z}$에서 임의로 단어들을 빼서 $(z, \tilde{z}^{‘})$ 쌍을 생성한다. 탈락시키는 단어의 수는 문장 길이를 최대치로 균등하게 정했다. 이러한 변형을 이전 방법과 같이 생성된 데이터의 30%에 적용하였다.

A.2 Pre-Training Tasks

이제 사전학습을 위해 사용한 signal의 상세를 살펴본다.

Automatic Metrics:

표에서 보았듯이, BLEU, ROUGE, BERTscore 3가지 signal을 사용하였다.

  • BLEU에 대해서는, 원본 Moses SENTENCEBLEU 구현을 사용, Moses tokenizer와 기본 parameter를 사용하였다.
  • ROUGE에 대해서는, ROUGE-N의 seq2seq 구현을 사용하였다.
  • BERTscore는 BERT-large uncased에 기반한 custom 구현을 사용하였다.

ROUGE와 BERTscore는 precision, recall, F-score 3개의 점수를 반환한다. 이 3가지를 모두 사용한다.

Backtranslation Likelihood:

custom Transformer 모델을 사용하여 tensor2tensor framework를 사용, 영어$\leftrightarrow$프랑스어에서 학습시켜 모든 loss를 계산하였다.

Normalization:

모든 회귀 label은 학습 전 정규화되었다.

A.3 Modeling

Setting the weights of the pre-training tasks:

BLEURT의 성능을 WMT 17의 validation set에서 최적화하는 $\gamma_k$를 grid search로 찾아 정했다. grid의 크기를 줄이기 위해 같은 weight를 공유하는 다음 사전학습 그룹을 만들었다.

[\tau_{\text{BLEU}}, \tau_{\text{ROUGE}}, \tau_{\text{BERTscore}}]

[\tau_{\text{en-fr}, z \vert \tilde{z}}, \ \tau_{\text{en-fr}, \tilde{z} \vert z}, \ \tau_{\text{en-de}, z \vert \tilde{z}}, \ \tau_{\text{en-de}, \tilde{z} \vert z}]

[\tau_{\text{entail}}, \tau_{\text{backtran_flag}}]

Appendix B Experiments–Supplementary Material

B.1 Training Setup for All Experiments

BERT’s의 기본 설정을 따라 Adam optimizer, learning rate 1e-5, batch size 32를 사용했다. 다른 설정은

  • 8만 training step
  • 4만 step의 미세조정

학습과 평가를 병행하여 매 1500 step마다 checkpoint를 저장, 가장 괜찮은 validation 결과를 보인 것을 최종 선택한다.

하드웨어는 학습에 Google Cloud TPUs v2, 평가에는 Nvidia Tesla V100 가속기를 사용했다. 코드는 Python 2.7과 Tensorflow 1.15 버전이다.

B.2 WMT Metric Shared Task

Metrics.

평가방법은 여러 연도에 걸쳐서 평가 시스템을 비교하는 데 사용된다. organizer는 2017년의 모든 부분에 대해 정규화된 인간 평가와 연관한 Pearson’s correlation을 사용한다. 그리고 “DARR”이라 칭하는 Kendall’s Tau의 개조 버전을 2018년과 2019년의 인간 평가와의 연관성을 비교한다.
organizer는 같은 참조 부분에 대한 모든 번역을 모아서 가능한 모든 쌍 조합을 찾아(translation1, translation2) 100점 만점에 25점 이하인 “비슷한” 점수를 가진 모든 쌍을 제거했다.
그리고 남은 쌍에 대해, 번역이 인간 평가와 후보 평가방법 모두에서 최고점을 갖는 것을 제일 좋은 번역이라 한다.

|Concordant|를 NLG 평가방법이 ‘agree’하는 쌍의 수라 하고 |Discordant|를 ‘disagree’하는 쌍의 수라 할 때 점수는 다음과 같다.

[ \text{Concordant} - \text{Discordant} \over \text{Concordant} + \text{Discordant} ]

25점 필터의 아이디어는 WMT 2018과 2019의 평가 데이터가 noisy하기 때문에 평가를 좀 더 강건하게 하는 것이다.
Kendall’s Tau는 이상적이지만, 필터를 사용하지 않는다.

Training setup.

train/validation set을 분리하기 위해 데이터셋에 누수가 없는 고정 비율을 쓰는 방법을 사용했다(train, validation 예시는 같은 출처를 공요한다). 2017년과 2018년의 validation의 10%를, 2019년의 5%를 사용했다.
여기서 모든 validation data에서 가장 높은 Kendall Tau 점수를 낸 모델을 결과로 표시하였다. 각 사전학습 task에 연관된 weights는 WMT 2017년의 train/validation setup을 사용하여 grid search를 통해 설정하였다.

Baselines.

3개의 평가방법(sentenceBLEU의 Moses 구현, BERTscore, MoverScore)을 사용하였고 이는 모두 온라인으로 사용 가능하다. sentenceBLEU를 계산하기 전 Moses tokenizer를 참조와 후보 segment에서 실행하였다.

B.3 Robustness to Quality Drift

Data Re-sampling Methodology:

training/test set을 분리하여 샘플링하였다. 10개의 동일한 크기의 bin으로 데이터를 나누고, train/test 에 대해 각각 $1\over B^{\alpha}$와 $1\over (11-B)^{\alpha}$의 확률로 샘플링하였다. $B$는 1~10의 bin 번호, $\alpha$는 미리 정의된 skew factor로 drift를 조절한다. 0은 아무 영향이 없고(ratings은 0을 중심으로 함), 3.0은 극단적인 차이(difference)를 만든다. $\alpha$가 증가함에 따라 데이터셋의 크기는 줄어든다: 5344개의 training 샘플에 대해 각각 다음과 같은 설정으로 실험하였다.

alpha dataset ratio
0.5 50.7%
1.0 30.3%
1.5 20.4%
3.0 11.9%

B.4 Ablation Experiment–How Much Pre-Training Time is Necessary?

사전학습 시간과 downstream 정확도의 관계를 이해하기 위해, 사전학습 횟수가 다른 여러 버전의 BLEURT를 학습시켜 WMT17 데이터에 미세조정시켰다. 아래 그림이 그 결과를 보여준다. 첫 40만 step에서 가장 많은 발전이 있고, 이는 합성 데이터셋의 2 epoch에 해당한다.

Examples

Comment  Read more

GraphSAGE (Inductive Representation Learning on Large Graphs) 설명

|

본 글에서는 2017년에 발표된 Inductive Representation Learning on Large Graphs란 논문에 대한 Review를 진행할 것이다.

torch_geomectric을 이용하여 GraphSAGE를 사용하는 방법에 대해서 간단하게 Github에 올려두었으니 참고해도 좋을 것이다.


Inductive Representation Learning on Large Graphs Paper Review

1. Introduction

큰 Graph에서 Node의 저차원 벡터 임베딩은 다양한 예측 및 Graph 분석 과제를 위한 Feature Input으로 굉장히 유용하다는 것이 증명되어 왔다. Node 임베딩의 기본적인 아이디어는 Node의 Graph 이웃에 대한 고차원적 정보를 Dense한 벡터 임베딩으로 만드는 차원 축소 기법을 사용하는 것이다. 이러한 Node 임베딩은 Downstream 머신러닝 시스템에 적용될 수 있고 Node 분류, 클러스터링, Link 예측 등의 문제에 도움이 될 수 있다.

하지만 이전의 연구들은 고정된 단일 Graph로부터 Node를 임베딩하는 것에 집중하였는데 실제 현실에서는 새로운 Node와 (sub) Graph가 빠르게 생성되는 것이 일반적이다. (Youtube를 생각해보라!) 고정된 Graph에서 추론을 행하는 것을 transductive한 경우라고 부르고 틀에서 벗어나 새로운 Node에 대해서도 합리적인 추론을 행할 수 있는 경우를 inductive라고 부른다. Node 임베딩을 생성하기 위한 inductive한 접근은 또한 같은 형태의 feature가 존재할 때 Graph 전체에 대해 일반화된 결과를 제공하게 된다.

이러한 inductive Node 임베딩 문제는 굉장히 어렵다. 왜냐하면 지금껏 본 적이 없는 Node에 대해 일반화를 하는 것은 이미 알고리즘이 최적화한 Node 임베딩에 대해 새롭게 관측된 subgraph를 맞추는 (align) 작업이 필요하기 때문이다. inductive 프레임워크는 반드시 Node의 Graph 내에서의 지역적인 역할과 글로벌한 위치 모두를 정의할 수 있는 Node의 이웃의 구조적인 특성을 학습해야 한다.

Node 임베딩을 생성하기 위한 대부분의 기존 접근은 본질적으로 transductive하다. 다수의 이러한 접근 방법들은 행렬 분해 기반의 목적함수를 사용하여 각 Node에 대해 임베딩을 직접적으로 최적화하고 관측되지 않은 데이터를 일반화하지 않는다. 왜냐하면 이러한 방법들은 고정된 단일 Graph에 대해 예측하기 때문이다.

이러한 접근법들은 inductive한 방법에서 작동하도록 수정될 수 있는데, 이를 위해서는 굉장한 연산량이 수반되고 새로운 예측이 만들어지기 전에 추가적인 Gradient Descent 단계를 필요로 한다. 최근에는 Graph Convolution 연산을 이용한 방법들이 논의되었다. 지금까지는 Graph Convolutional Network 또한 transductive한 환경에서만 적용되었다. 본 논문에서 우리는 이 GCN을 inductive unsupervised learning으로 확장하고 단순한 합성곱 이상의 학습 가능한 Aggregation 함수를 사용하여 GCN을 일반화하는 프레임워크를 제안할 것이다.

본 논문에서는 Inductive Node Embedding을 위해 일반화된 프레임워크, Graph Sage를 제안한다. 이름은 SAmple과 aggreGatE를 결합하였다. 좀 끼워 맞춘 느낌이 들긴 하다. 행렬 분해에 기반한 임베딩 접근법과 달리 관측되지 않은 Node에서도 일반화할 수 있는 임베딩 함수를 학습하기 위해 Node Feature(텍스트, Node 프로필 정보, Node degree 등)를 Leverage한다. 학습 알고리즘에 Node Feature를 통합함으로써 우리는 이웃한 Node Feature의 분포와 각 Node의 이웃에 대한 위상적인 구조를 동시에 학습할 수 있다. 풍부한 Feature를 가진 Graph에 집중하여 우리의 접근법은 또한 (Node Degree와 같이) 모든 Graph에 존재하는 구조적인 Feature를 활용할 수 있다. 따라서 본 논문의 알고리즘은 Node Feature가 존재하지 않는 Graph에도 적용될 수 있다.

각 Node에 대한 고유의 임베딩 벡터를 학습하는 대신에, 우리는 Node의 지역 이웃으로부터 Feature 정보를 규합하는 Aggregator Function의 집합을 학습한다. 중요한 포인트이다. 왜냐하면 이 컨셉을 통해 각 Node에 귀속된 임베딩 벡터의 한계를 돌파할 수 있기 때문이다.


논문 참조


3. Proposed method: GraphSAGE

우리의 접근법의 가장 중요한 아이디어는 Node의 지역 이웃으로부터 Feature Information을 통합하는 방법에 대해 학습한다는 것이다. 먼저 1.3.1에서는 GraphSAGE 모델의 파라미터가 이미 학습되어 있다고 가정하고 GraphSAGE의 임베딩 생성 알고리즘에 대해 설명할 것이다. 이후 1.3.2에서는 Stochastic Gradient DescentBackpropagation 기술을 통해 모델이 어떻게 학습되는지 설명할 것이다.

3.1. Embedding Generation (i.e. forward propagation) Algorithm

본 섹션에서는 일단 모델의 파라미터가 모드 학습되었고 고정되어 있다고 가정하고 Embedding Generation 혹은 Propgation 알고리즘에 대해 설명할 것이다. 일단 2종류의 파라미터가 있다.

첫 번째는 $K$ 개의 Aggregator Function으로, $AGGREGATE_k, \forall k \in {1, …, K}$ 라고 표현되며, 이 함수는 Node 이웃으로부터 정보를 통합하는 역할을 수행한다.

두 번째는 Weight Matrices의 집합으로, $\mathbf{W}^k, \forall k \in {1, …, K}$ 라고 표현되며, 이들은 모델의 다른 layer나 search depth 사이에서 정보를 전달하는데 사용된다. 다음은 파라미터 학습 과정을 나타낸 것이다.

위에서 확인할 수 있는 직관은 각 iteration 혹은 search depth에서 Node는 그의 지역 이웃으로부터 정보들을 모으고, 이러한 과정이 반복되면서 Node는 Graph의 더 깊은 곳으로부터 정보를 증가시키면서 얻게 된다는 것이다.

알고리즘1은 Graph 구조와 Node Features가 Input으로 주어졌을 때의 임베딩 생성 과정에 대해 기술하고 있다. 아래에서는 Mini-batch 환경에서 어떻게 일반화할 수 있을지 설명할 것이다. 알고리즘1의 바깥 Loop의 각 단계를 살펴보면, $\mathbf{h}^k$ 는 그 단계에서의 Node의 Representation을 의미한다.

첫 번째로, 각 Node $v$ 는 그것의 바로 이웃(Immediate Neighborhood)에 속하는 Node들의 Representation을 하나의 벡터 $\mathbf{h}_{\mathcal{N}(v)}^{k-1}$ 로 합산한다. 이 때 이 합산 단계는 바깥 Loop의 이전 반복 단계(k-1)에서 생성된 Representation에 의존하고 $k=0$ 일 때는 Input Node Feature가 Base Representation의 역할을 하게 된다.

이웃한 Feature 벡터들을 모두 통합한 다음, 모델은 Node의 현재 Representation과 통합된 이웃 벡터를 결합한 뒤 비선형 활성화 함수를 통과시킨다.

[\mathbf{h}v^{k-1}, \mathbf{h}{\mathcal{N}(v)}^{k-1}]

최종적으로 depth $K$ 에 도달하였을 때의 Representation은 아래와 같이 표현할 수 있다.

[\mathbf{z}_v = \mathbf{h}_v^K, \forall v \in \mathcal{V}]

사실 Aggregator Function은 다양하게 변형될 수 있으며, 여러 방법에 대해서는 1.3.3에서 다루도록 하겠다.

알고리즘1을 Mini-batch 환경으로 확장하기 위해서는 우리는 먼저 depth $K$ 까지 필요한 이웃 집합을 추출해야 한다. 이후 안쪽 Loop(알고리즘1의 3번째 줄)를 실행하는데, 이 때 모든 Node를 반복하는 것이 아니라 각 depth에서의 반복(recursion)을 만족하는데 필요한 Represention에 대해서만 계산한다. (Appendix A 참조)

Relation to the Weisfeiler-Lehman Isomorphism Test
GraphSAGE 알고리즘은 개념적으로 Graph Isomorphism(동형 이성)을 테스트하는 고전적일 알고리즘에서 영감을 얻어 만들어졌다. 만약 위에서 확인한 알고리즘1에서 $K= \vert \mathcal{V} \vert$ 로 세팅하고 Weight Matrices를 단위 행렬로 설정하고 비선형적이지 않은 적절한 Hash 함수를 Aggregator로 사용한다면, 알고리즘1은 Naive Vertex Refinement라고 불리는 Weisfeiler-Lehman: WL Isomorphism Test의 Instance라고 생각할 수 있다.

이 테스트는 몇몇 경우에는 들어맞지 않지만, 여러 종류의 Graph에서는 유효하다. GraphSAGE는 Hash 함수를 학습 가능한 신경망 Aggregator로 대체한 WL Test의 연속형 근사에 해당한다. 물론 GraphSAGE는 Graph Isomorphism을 테스트하기 위해서 만들어진 것이 아니라 유용한 Node 표현을 생성하기 위함이다. 그럼에도 불구하고 GraphSAGE와 고전적인 WL Test 사이의 연결성은 Node 이웃들의 위상적인 구조를 학습하기 위한 본 알고리즘의 디자인의 기저에 깔려 있는 이론적 문맥을 이해하는 데에 있어 큰 도움을 준다.

Neighborhood Definition
본 연구에서 우리는 알고리즘1에서 기술한 것처럼 모든 이웃 집합을 사용하지 않고 고정된 크기의 이웃 집합을 샘플링하여 사용하였다. 이렇게 함으로써 각 Batch의 계산량을 동일하게 유지할 수 있었다.

다시 말해, $\mathcal{N}(v)$ 을 집합 ${u \in \mathcal{V}: (u, v) \in \mathcal{E}}$ 에서 각 반복 $k$ 에서 고정된 크기로 균일하게 뽑은 Sample이라고 정의할 수 있다.

이러한 샘플링 과정이 없으며, 각 Batch의 메모리와 실행 시간은 예측하기 힘들며 계산량 또한 엄청나다.

GraphSAGE의 per-batch space와 time complexity는 $O(\prod_{i=1}^K S_i)$ 로 고정되어 있으며, $S_i, i \in {1, …, K}$와 $K$ 는 User-specified 상수이다.

실제 적용할 때, $K=2$ 와 $S_1 * S_2 <= 500$ 으로 했을 때 좋은 성능을 보였다. (자세한 사항은 1.4.4를 참조)

3.2. Learning the Paremeters of GraphSAGE

완전한 비지도 학습 상황에서 유용하고 예측 능력이 있는 Representation을 학습하기 위해 우리는 Graph 기반의 Loss 함수를 $\mathbf{z}_u, \forall u \in \mathcal{V}$ 라는 Output Represnetation에 적용하고, Weight Matrices $\mathbf{W}^k, \forall k \in {1, …, K}$ 및 Stochastic Gradient Descent를 통해 Aggregator Funciton의 파라미터를 튜닝해야 한다.

Graph 기반의 Loss 함수는 인접한 Node들이 유사한 Representation을 갖도록 하게 하고 서로 멀리 떨어져 있는 Node들은 다른 Representation을 갖게 만든다.

[J_{\mathcal{G}} = \log (\sigma (\mathbf{z}u^T \mathbf{z}_v)) - Q \cdot \mathbb{E}{v_n \sim P_n(v)} \log (\sigma (\mathbf{z}u^T \mathbf{z}{v_n}))]

이 때 $v$ 는 고정된 길이의 Random Walk 에서 $u$ 근처에서 동시에 발생한 Node를 의미한다. $P_n$ 은 Negative Sampling Distribution을 $Q$ 는 Negative Sample의 개수를 의미한다.

중요한 것은 이전의 여러 임베딩 방법론에서와는 다르게, Loss 함수에 집어넣는 Representation $\mathbf{z}_u$ 가 Embedding Look-up을 통해 각 Node를 위한 고유의 Embedding을 학습하는 방식으로 형성되지 않는다. Node의 지역 이웃 안에서 포함된 feature로 부터 생성된다. (the representations z are generated from the features contained within a node’s local neighborhood)

이러한 비지도 학습 세팅은 Node Feature가 서비스 혹은 정적인 Repository에 있는 downstream 머신러닝 application에 적용될 때의 상황을 모방하게 된다. 위에서 설명한 Representation이 특정한, 구체적인 downstream task에 이용되어야 할 경우, 앞서 보았던 비지도 Loss는 그 일에 더욱 적합한 (예: cross-entropy loss) 목적함수로 대체되거나 변형될 수 있을 것이다.

3.3. Aggregator Architectures

N차원의 격자 구조 데이터를 이용한 머신러닝 예(텍스트, 이미지 등)들과 달리, Node의 이웃들은 자연적인 어떤 순서를 갖고 있지 않다. 따라서 알고리즘1에서 보았던 Aggregator Function은 반드시 순서가 정해져있지 않은 벡터의 집합에 대해 연산을 수행해야 한다.

이상적으로는 Aggregator Function이 여전히 학습이 가능하고 수준 높은 Representational Capacity를 갖고 있으면서도 대칭적인 형태를 띠고 있으면 좋을 것이다. Input이 순서를 바꿔도 상관 없게 말이다.

Aggregator Funcion의 대칭성은 우리의 신경망 모델이 임의의 순서를 갖고 있는 Node 이웃 feature 집합에도 학습/적용될 수 있게 한다. 본 논문은 이에 대해 3가지 후보를 검증해 보았다.

1) Mean Aggregator
단지 $h_u^{k-1}, \forall u \in \mathcal{N}(v)$ 에 있는 벡터의 원소 평균을 취한 함수이다.

Mean Aggregator는 Transductive GCN 프레임워크에서 사용되는 합성곱 순전파 규칙을 거의 따른다. 특히 우리는 알고리즘의 4~5줄을 다음과 같이 변형하면 GCN의 inductive한 변형 버전을 만들어낼 수 있다.

[h_v^k \leftarrow \sigma ( \mathbf{W} \cdot mean( { h_v^{k-1} } \cup { h_u^{k-1} } ),]

[\forall u \in \mathcal{N}(v)]

우리는 위 식이 Localized Spectral Convolution의 개략적인 선형 근사이기 때문에 이를 수정된 평균 기반 Aggregator Convolutional이라고 부를 것이다. (Modified Mean-based Aggregator Convolutional)

2) LSTM Aggregator
앞서 확인한 형태에 비해 조금 더 복잡한 형태의 함수이다. LSTM의 경우 표현력에 있어서 장점을 지니지만 본질적으로 대칭적이지 않기 때문에 permutation invariant 하지 않다.

따라서 본 논문에서는 LSTM을 Node의 이웃의 Random Permutation에 적용함으로써 순서가 없는 벡터 집합에 대해서도 LSTM이 잘 동작하도록 하였다.

3) Pooling Aggregator
Pooling Aggregator는 대칭적이면서도 학습 가능하다. 각 이웃의 벡터는 독립적으로 fully-connected된 신경망에 투입된다. 이후 이웃 집합에 Elementwise max-pooling 연산이 적용되어 정보를 통합한다.

[AGGREGATE^{pool}k = max({ \sigma (\mathbf{W}{pool} \mathbf{h}_{u_i}^k + \mathbf{b}) })]

[\forall u_i \in \mathcal{N}(v)]

이론 상으로 max-pooling 이전에 여러 겹의 layer를 쌓을 수도 있지만, 본 논문에서는 간단히 1개의 layer 만을 사용하였는데, 이 방법은 효율성 측면에서 더 나은 모습을 보여준다.

계산된 각 피쳐에 대해 max-pooling 연산을 적용함으로써 모델은 이웃 집합의 다른 측면을 효과적으로 잡아내게 된다. 물론 이 때 어떠한 대칭 벡터 함수든지 max 연산자 대신 사용할 수 있다.

본 논문에서는 max-pooling과 mean-pooling 사이에 있어 큰 차이를 발견하지 못하였고 이후 논문에서는 max-pooling을 적용하는 것으로 과정을 통일하였다.


4. Experiments

본 논문에서 GraphSAGE의 성능은 총 3가지의 벤치마크 task에서 평가되었다.

(1) Web of Science citation 데이터셋을 활용하여 학술 논문을 여러 다른 분류하는 것

(2) Reddit에 있는 게시물들이 속한 커뮤니티를 구분하는 것

(3) 다양한 생물학적 Protein-protein interaction 그래프 속에서 protein 함수를 구별하는 것

본 챕터의 경우 논문을 직접 참고하길 바라며, 몇 가지 포인트에 대해서만 정리를 하도록 하겠다.

일단, GraphSAGE의 비교 군으로 총 4가지 방법론이 사용되었다. 완전 무작위, 그래프 구조를 고려하지 않고 raw feature만을 사용한 로지스틱 회귀, DeepWalk 그리고 마지막으로 DeepWalk + raw features, 이렇게 4가지이다.

GraphSAGE도 총 4가지 스타일을 실험하였다. GCN구조, mean aggregator 구조, LSTM aggregator 구조, pooling aggregator 구조 이렇게 4가지이다. vanilla Gradient Descent Optimizer를 사용한 DeepWalk를 제외하고는 모두 Adam Opimizer를 적용하였다. 또한 공평한 비교를 위해 모든 모델은 동일한 미니배치 환경에서 작동하였다.

아래는 테스트 결과이다.

LSTM, Pooling 기반의 Aggregator가 가장 좋은 성능을 보여주었다. K=2로 설정하는 것이 효율성 측면에서 좋은 모습을 보여주었고, 이웃 개체들을 sub-sampling하는 것은 비록 분산을 크게 만들지만 시간을 크게 단축되기 때문에 꼭 필요한 단계라고 할 수 있겠다.


5. Theoretical Analysis

본 Chapter에서는 어떻게 GraphSAGE가 내재적으로는 feature에 의존하면서도 Graph 구조에 대해 학습할 수 있는지에 대해 설명하도록 하겠다.

케이스 스터디의 일환으로, 본 논문에서는 GraphSAGE가 Node의 Clustering Coefficient를 예측할 수 있는지에 대해 알아보았다. Clustering Coefficient는 Node의 지역 이웃들이 얼마나 잘 모여있는지를 측정하는 기준이며 더욱 복잡한 구조적 모티프를위한 토대 역할을 한다.

우리는 GraphSAGE의 임베딩 생성 알고리즘(1.3.1의 알고리즘1)이 Clustering Coefficient를 근사할 수 있음을 증명할 수 있다.

Theorem 1
$x_v$ 가 알고리즘1에서의 feature input을 의미한다고 하자. 모든 Node 쌍에 대해 아래와 같은 조건을 만족하는 고정된 양의 상수 $C$ 가 존재한다고 가정한다.

[C \in \mathbb{R}^+, \Vert x_v - x_{v^{‘}} \Vert_2 > C]

$K = 4$ 반복 후에 알고리즘1에 대한 파라미터 학습이 이루어졌을 때 $\forall \epsilon > 0$ 에 대해 아래 식이 존재한다.

[\vert z_v - c_v \vert < \epsilon, \forall v \in \mathcal{V}]

이 때 $z_v$ 는 알고리즘1에 의해 생성된 최종 아웃풋 벡터, 즉 Embedding 벡터이고 $c_v$ 는 Clustering Coefficient을 의미한다.

위 정리는, 만약 모든 Node의 feature가 고유한 값을 가질 때, Graph 속에서 Clustering Coefficient을 근사할 수 있는 파라미터 세팅이 존재함을 의미한다. 이에 대한 증명은 Appendix에서 확인할 수 있다.

증명의 기본적인 아이디어는, 각 Node가 고유한 feature representation을 갖고 있다면 우리는 Node를 indicator 벡터로 연결시키고 이 Node의 이웃을 찾는 방법에 대해 학습할 수 있다는 것이다. 또한 이 증명을 통해 위 정리는 Pooling Aggregator의 몇몇 특징에 의존적임을 밝혔는데, 이를 통해 Pooling을 이용한 GraphSAGE가 다른 GCN이나 Mean-based Aggregator에 비해 더 좋은 성능을 보여준다는 인사이트를 얻을 수 있다.


6. Conclusion

GraphSAGE는 directed 혹은 multi-model graph를 통합하는 것과 같이 무궁무진한 발전 가능성이 있는 모델이다. 최적화를 위해 Non-uniform Neighborhood Sampling 함수를 연구해보는 것과 같이 굉장히 흥미로운 주제들도 남아있다.


Reference

1) 논문 원본
2) 논문 원본 내 참고 사이트
3) 논문 저자 깃헙

Comment  Read more

Graph Convolutional Matrix Completion (GCMC) 설명

|

본 글은 2017년에 발표된 Graph Convolutional Matrix Completion에 대한 리뷰를 담은 글이다. Graph Neural Network에 대해서는 최근 수 년간 여러 연구가 이루어져 왔으며, 이 방법론은 다양한 분야에서 기존과는 사뭇 다른 새로운 해결 방안에 대해 제시하고 있다.

본 논문은 이러한 Graph 구조의 방법론을 추천 시스템, 그 중에서도 Matrix Factorization에 투영시킨 과정에 대해 설명하고 있다. 비록 적용에 있어 일부 한계점이 존재하기도 하지만, 추가적인 개선이 이루어진다면 여러 추천 시스템에서 참고할만한 중요한 인사이트들을 담고 있다고 할 수 있다. 먼저 논문 리뷰를 진행해보자.


1. Introduction

본 논문에서 우리는 Matrix Completion을 Graph에서의 Link 예측 문제라고 바라보고 있다. Collaborative Filtering에서의 상호작용 데이터는 Link로 표현되는 평점/구매 기록 그리고 User와 Item Node 사이의 Bipartite Graph (이분 그래프)로 표현된다. 컨텐츠 정보는 Node Feature로서 표현될 수 있다. 이제 평점을 예측하는 문제는 이분 User-Item Graph에서 라벨이 존재하는 Link를 예측하는 문제로 귀결된다.

본 논문에서는 Graph에 대한 최근 딥러닝 발전 과정 속에서 설계한, Matrix Completion을 위한 Graph-based Auto-encoder 프레임워크인 Graph Convolutional Matrix Completion: GCMC를 제안한다. 이 때 Auto-encoder는 User와 Item Node의 잠재 벡터를 생성하는데, 이는 이분 상호작용 그래프에서느 Message Passing의 형태로 구현된다. 이 User와 Item (잠재) 표현은 Bilinear Decoder를 통해 평점 Link를 재구성(Reconstruct)하는데 이용된다.

추천 시스템에서 일반적으로 사업자는 특정 User에게 Item Pool에서 이 User에게 잘 어울린다고 생각하는 특정 Item를 골라서 제시하게 된다. 그런데 이러한 논리의 기저에는 유사한 User들은 유사한 Item들을 좋아할 것이라는, 그 User와 Item가 갖고 있는 근본적인 특성의 동질성이 취향에 발현될 것이라는 전제가 깔려있다. 이전의 Matrix Factorization 기반 방법론들은 User/Item Feature의 잠재벡터의 내적 계산을 통해 이러한 철학을 구현하였다.

본 논문에서 제시한 GCMC도 이러한 철학을 계승하고 있다. Graph 구조라고 해서 이 틀을 벗어나지는 않는 것이다. 가장 큰 차이는 바로 위 단락에서 언급한 Message Passing이 될 것인데, 이에 대해서는 추후에 자세히 설명할 것이다.

Matrix Completion 문제를 이분 그래프에서의 Link 예측 문제로 형상화하는 것은 추천 그래프가 구조화된 외부 정보(예: Social Network)를 동반할 때 더욱 빛을 발하게 된다. 이렇게 외부 정보를 추가하는 것은 Cold Start 문제를 완화하는데 도움을 준다.


평점 행렬 $M$ 은 $N_u, N_v$ 의 크기를 가졌고, 행과 열의 수는 각각 User/Item의 수를 의미한다. 평점 행렬의 원소인 $M_{ij}$ 는 관측된 평점 값을 의미하는데, 이 값은 이산적인 (예: 1 ~ 5점) 값이고 미관측된 값은 0으로 처리한다. 최종 목적은 관측되지 않은 값을 예측하는 것이다.

Graph Network의 핵심 중 하나는 이러한 상호작용 데이터를 Undirected Graph (비방향성 그래프)로 표현한다는 것인데, 기호로 나타내자면 아래와 같다.

[G = (\mathcal{W}, \mathcal{E}, \mathcal{R}),]

[\mathcal{W} = \mathcal{U} \cup \mathcal{V},]

[(u_i, r, v_j) \in \mathcal{E},]

[r \in [1, …, R] = \mathcal{R}]

$\mathcal{W}, \mathcal{E}, \mathcal{R}$ 은 차례 대로, User/Item 집합, Edge 집합, Rating 집합을 의미한다. 즉, Graph라는 존재는 이와 같이 Node, Edge, Link로 이루어져 있다는 것을 의미한다.

2.1. Graph Auto-encoders

Graph Auto-encoder는 크게 2가지로 구성된다. 첫 번째는 Graph Encoder 모델로, $Z=f(X, A)$ 라고 정의할 수 있겠다. 이 때 각각의 Shape은 아래와 같다.

행렬 역할 Shape
$Z$ Node Embedding Matrix $N, E$
$X$ 원본 Feature Matrix $N, D$
$A$ Graph Adjacency Matrix $N, N$

$D$ 는 모든 변수의 개수를 의미하며, $N$ 은 $N_u + N_v$ 를 의미한다.

두 번째는 Pairwise Decoder 모델로 $\hat{A} = g(Z) $ 로 정의할 수 있으며 Node Embedding 쌍 $(z_i, z_j)$ 를 Input으로 받아 Adjacency Matrix의 원소인 $\hat{A}_{ij}$ 를 예측하는 역할을 수행하게 된다.

$X$ 는 원본 Feature를 의미하고 이 행렬의 Shape은 $(N=N_u + N_v, D)$ 이다. 한 가지 궁금할 수 있는 부분은 이와 같은 표기에서는 User Feature의 변수의 수와 Item Feature의 변수의 수가 $D$ 로 동일한 것처럼 보이는데, 다음 Chapter를 보면 그렇게 만들 필요는 없다고 설명이 나온다. 처음부터 설명해주는 친절함은 조금 부족했던 것 같다. 어찌 되었든 여기에서의 $D$ 는 편의를 위해 통일 된 것으로 생각하면 좋을 것 같다.

$A$ 는 Adjacency Matrix (인접 행렬)를 의미하는데, 평점 데이터를 기반으로 설명하자면 이 $A$ 는 여러 조각으로 나뉠 수 있다. 즉, 1점의 평점을 준 Link를 모두 모은 인접 행렬을 $M_1$ 이라고 하고, R점의 평점을 준 Link를 모두 모은 인접 행렬을 $M_R$ 이라고 한다면, 우리는 Encoder 모델의 함수를 다음과 같이 달리 표현할 수 있을 것이다.

[Z = f(X, M_1, …, M_R)]

$Z$ 는 $[U, V]$ 로 표현되는데, User Embedding Matrix와 Item Embedding Matrix를 쌓아놓은 형태이다.

최종적으로 해결해야 하는 문제는 예상하는 그대로이다. Decoder $g(U, V)$ 는 $\hat{M}$ 이라는 평점에 대한 예측 값을 생성하게 되고, 이 행렬의 Shape은 당연히 기존 $M$ 과 동일한 $(N_u, N_v)$ 이다.

예측 행렬 $\hat{M}$ 과 관측된 Ground-Truth 행렬 $M$ 사이의 Reconstruction Error 를 줄이는 것이 본 모델의 목적이다.

2.2. Graph Convolutional Encoder

지금부터는 조금 더 진보된 형태의 Encoder 모델을 소개할 것이다. 이 모델은 Graph에서 location에 대한 효율적인 Weight Sharing을 특징으로 한다. 또한 이 모델은 각 평점 종류(Edge Type)에 대해 별도의 Processing Channel을 만든다. 즉 각각의 평점 종류(1점인지, 2점인지)에 따라 (형식은 같지만) 다른 처리 과정이 존재한다는 것이다.

Weight Sharing의 형식은 Graph 구조의 데이터에 직접적으로 작동하는 최근 CNN class에 영감을 받았는데, Graph Convolutional Layer가 Node의 1차 이웃만을 고려하여 지역 연산을 수행하면, 같은 Transformation이 Graph에 있는 모든 위치에서 수행된다는 것이다.

Graph 구조의 모델에 대해 처음 설명을 듣는다면 위 단락이 잘 이해가 되지 않을 수도 있다. 잠시 그림을 살펴보자.

User 1이 존재한다. 이 User는 총 3개의 Item에 대해 평점을 남겼는데, 이렇게 User 1이 평점을 남긴 Item을 우리는 1차 이웃이라고 부른다. 즉 User 1과 직접적인 관계를 맺고 있는 Node라고 할 수 있다. 그렇다면 2차 이웃은 무엇일까? User 1이 평점을 남긴 1차 이웃 Item이 직접적인 관계를 맺고 있는 User 집합이라고 할 수 있는데, 이들은 그림 상에서 초록색 원형으로 표시되었다. 3차 이웃은 이제 감이 올 것이다. 2차 이웃 User가 직접적으로 관계를 맺고 있는 Item 집합을 의미한다. 이렇게 차수를 높여감에 따라 우리가 알고 싶은 User 1의 관계의 깊이가 점점 깊어진다는 것을 알 수 있다. 더 깊게 알고 싶을 수록 연산량이 늘어나는 것은 당연한 숙제가 될 것이다.

그렇다면 하나 더, 위 그림에서 추론할 수 있는 것은 무엇일까? 간단하게 말해서 User 1은 파란색 상자로 표현한 Item 1, 2, 4 중에서 Item 1과 2에 대해서는 아주 좋은 평점을 남기지는 않았는데, User 2도 이와 유사한 평점을 남겼다. 그렇다면, 오직 이 Graph만 보았을 때는 User 1과 User 2가 나름 취향이 비슷할 수도 있을 것이다. 이 때 평점이 몇 점인지도 중요하지만 어떤 Item에 대해 평점을 남겼는지도 중요하다. 그 User의 행동 반경을 정의하는 단서가 되기 때문이다. 반대로 User 3은 User 1이 좋아했던 Item 4에 대해 안 좋은 평점을 남겼다. 어쩌면 이 두 User는 상극일지도 모른다.

다시 논문으로 돌아오겠다.

Local Graph Convolution은 Vector 값으로 만들어진 Message가 Graph의 모든 Edge를 타고 전달 및 변형되는 일종의 Message Passing의 형태로 볼 수 있다. 본 논문에서는 각 평점에 따라 별도의 Transformation을 행했다. Item j가 User i에게 주는 Edge-type Specific Message는 아래와 같은 형식으로 표현할 수 있다.

[\mu_{j \rightarrow i, r} = \frac {1} {c_{ij}} W_r x_j]

여기서 $c_{ij}$ 는 정규화 상수인데, 만드는 방법에는 2가지가 있다. Left Normalization을 택할 경우, $\vert{\mathcal{N}_i}\vert$ 을, Symmetric Normaliztion을 선택할 경우 $\vert{\mathcal{N}_i}\vert \vert \mathcal{N_j} \vert$ 로 택할 수 있다.

$\mathcal{N_i}$ 는 Node $i$ 의 이웃들의 집합을 의미한다. 따라서 위 기호는 그 이웃 집합의 길이를 의미하게 될 것이다. $W_r$ 은 Edge-type Specific Parameter를 의미한다. 참고로 뒤에 나올 $W$ 행렬과는 별개의 것이다. 논문에서 다소 혼란스럽게 적어 놓았으니 구별하길 바란다. $x_j$ 는 Node $j$ 의 (Initial) Feature 벡터를 의미한다. 이 예시에서는 Node $j$ 가 Item 이지만, 반대의 경우도 당연히 성립한다.

이렇게 $r$ 이라는 평점에서 Node $j$ 에서 Node $i$ 로 향하는 Message Passing을 정의하는 단계가 끝나면, 이제 $r$ 이라는 평점 하의 모든 이웃 $\mathcal{N_{i, r}}$ 의 입수되는 모든 Message를 규합해야 한다. 그렇게 합쳐서 아래와 같이 하나의 벡터 표현을 만들게 된다. 아래 벡터를 반드는 층을 Graph Convolution Layer라고 명명하겠다.

[h_i = \sigma [accum (\Sigma_{j \in \mathcal{N_{i, 1}}} \mu_{j \rightarrow i, 1}, …, \Sigma_{j \in \mathcal{N_{i, R}}} \mu_{j \rightarrow i, R}) ]]

평점의 종류가 총 $R$ 개라고 할 때 위 식은 모든 평점의 종류에 대해 Node $i$ 의 1차 이웃에 속하는 Item Node $j$ 들에 대해 모든 Message를 합치는 과정으로 설명할 수 있다. 합친다는 것을 의미하는 $accum$은 Stacking으로 생각할 수도 있고, Sum으로 생각할 수도 있는데, Sum이 좀 더 구현하기 편리하니 Sum으로 일단 생각해두자.

이제 최종적으로 Node $i$ 의 Embedding Vector를 생성하면 된다. 아래와 같이 만들 수 있다. 최종 Embedding Vector를 생성하는 아래 층은 Dense Layer라고 명명하겠다.

[u_i = \sigma(W h_i)]

Item Embedding Vector $v_j$ 역시 같은 Paramter 행렬 $W$ 에 의해 유사한 방식으로 생성된다. 만약 User, Item에 대한 Side Information, 즉 별개의 Feature Vector를 사용할 경우 이 Parameter 행렬 $W$ 는 User, Item에 따라 별도로 구성해야 할 것이다. ( $W_{user}, W_{item}$ )

여러 층을 추가하여 더욱 깊은 모델을 만들 수도 있고, Message Passing 구성을 위와 같이 하는 대신 새로운 신경망이나 Attention 모델을 통해 구성하는 방안도 생각해볼 수 있다. 그러나 본 논문에 따르면 위와 같이 구성하는 방법이 가장 효율적인 것으로 나타났다.

논문에서는 이렇게 소 Chapter를 마무리하는데, 보충 설명을 하도록 하겠다.

Message Passing 단위는 $\mu_{j \rightarrow i, r}$ 라는 벡터이다. 예시를 들어보자. 만약 평점이 1점, 2점 이렇게 2종류만 존재한다고 해보자. 그리고 User Node $i$ 가 1점을 준 Item Node는 $1, 2$ 이렇게 2가지가 있고, 2점을 준 Item Node는 $3$ 이렇게 1가지만 존재한다고 해보자.

그렇다면 User Node $i$ 의 이웃은 아래와 같이 구성할 수 있다.

위 그림과 같은 구조에서 우리는 다음과 같은 Message Passing 벡터를 얻을 수 있다.

[\mu_{1 \rightarrow i, 1}, \mu_{2 \rightarrow i, 1}, \mu_{3 \rightarrow i, 2}]

위 벡터들의 의미는 무엇일까? 위 3개의 벡터 중 첫 번째를 예시로 들어보자. $1$ 이라는 Item Node가 User $i$ 에게 미치는 영향으로 해석가능하다. 이 때 어떻게 영향을 미칠 것인가에 대해서는 $W_1$ Parameter 행렬이 역할을 수행하게 될 것이다. 그런데 User $i$ 에게 1점의 관계를 맺고 있는 Item Node는 총 2개이다. 따라서 앞서 보았던 $c_{ij}$라는 정규화 상수를 통해 영향의 크기를 분산시켜주는 것이다.

이렇게 만들어진 단위 벡터들은 Graph Convolution Layer에서 합쳐지고 최종적으로 User, Item Embedding Vector을 형성하게 된다.

2.3. Bilinear Decoder

행렬 분해를 기반으로 하는 추천 시스템에 대해 한 번이라고 공부를 해보았다면, 이전 Chapter에서 언급한 임베딩 벡터의 의미를 알아챘을 것이다. 가장 Classic하게 평점을 예측하는 방법은 User 임베딩 벡터와 Item 임베딩 벡터를 바로 내적 계산하는 것이다.

[\hat{y}_{ij} = u_i \cdot v_j]

본 논문에서는 이러한 역할을 수행하기 위해 Bilinear Decoder라는 형태를 제안한다. 이 때 각 평점 종류 마다 다른 Parameter Update를 수행한다는 점에 주의하기 바란다. ( $Q_1, Q_2, …, Q_R$ )

$M$ 평점 행렬의 한 원소를 예측하는 과정은 아래와 같이 Softmax 함수에 의해 Bilinear 연산을 가능한 평점 종류에 대해 수행하고 이에 대한 확률 분포를 생성하는 방식으로 이루어진다.

[p(\hat{M}{ij}) = \frac {e^{u_i^T Q_r v_j}} {\Sigma{s \in R} e^{u_i^T Q_s v_j}}]

여기서 $Q_r$ 은 학습 가능한 Parameter 행렬로, $(E, E)$ 의 Shape을 지녔다. 물론 여기서 $E$ 는 Embedding 차원을 의미한다. 최종적으로 평점 예측은 아래 식으로 계산된다.

[\hat{M}{ij} = g(u_i, v_j) = \mathbf{E}{p(\hat{M}{ij = r}} [r] = \Sigma{r \in R} r * p(\hat{M}_{ij})]

식을 보면 평점의 종류에 따라 확률이 가중 평균됨을 알 수 있다.

2.4. Model Training

논문의 흥미로운 내용만큼이나 학습시키는 것은 상당히 까다롭다. 어떻게 진행되는지 알아보자.

Loss Function은 다음과 같은 Negative Log Likelihood로 설정된다.

[\mathcal{L} = \Sigma_{i, j; \Omega_{i,j} = 1} \Sigma_{r=1}^R I[r=M_{ij}] logp(\hat{M_{ij}} = r)]

여기서 $I$ 함수는 Indicator Function으로 $[]$ 안이 참일 때 1, 그렇지 않을 때 0의 값을 가지게 된다. 이는 일종의 Mask 역할을 수항하게 되는데, 왜냐하면 오직 평점 기록이 존재하는 Link에 대해서만 Loss를 계산한다는 의미가 되기 대문이다.

Node Dropout
관측되지 않은 평점에 대해 모델이 잘 일반화하기 위해서는 또다른 장치가 필요하다. 특정 Node에 대해 $p_{dropout}$ 확률로 밖으로 나가는 모든 Message를 무작위로 drop out하는 방식으로 학습하는 것을 Node Dropout이라고 한다.

Message는 Dropout 단계 이후에 Rescaled된다. Node Dropout을 적용한 결과 임베딩 결과물이 특정 User나 Item에 좀 더 독립적이 된 것을 확인할 수 있었다. 추가적으로 Hidden Layer Unit에 Regular Dropout 역시 적용하였다.

Mini-batching
미니 배치는 User-Item Pair 총합에서 오직 고정된 수의 Contribution 만을 추출하여 학습에 사용한다는 것을 의미한다. 이렇게 함으로써 현재 Batch에서 존재하지 않는, 각 평점 Class의 User/Item 행을 제거할 수 있다.

이러한 과정은 또한 효율적인 정규화의 수단으로 기능하며 모델을 학습시키기 위해 필요한 메모리 역시 경감시키는 효과를 발휘한다.

2.5. Vector Implementation

실제로 코드를 구현하여 모델을 학습할 때, 지금까지 설명한 것처럼 일일히 벡터를 하나씩 구하는 것은 정말 어리석은 행위일 것이다. 간단히 (사실 간단하지 않다) 행렬을 활용하여 수많은 연산을 좀 더 효율적으로 수행해보자.

User Feature와 Item Feature의 수가 $D$ 로 같다고 가정해보자. 이 때 Embedding 행렬은 아래와 같이 구할 수 있다.

[\begin{bmatrix} U \ V \end{bmatrix} = f(X, M_1, …, M_R) = \sigma( \begin{bmatrix} H_u \ H_v \end{bmatrix} W^T )]

[with \begin{bmatrix} H_u \ H_v \end{bmatrix} = \sigma(\Sigma_{r=1}^R D^{-1} \mathcal{M}_r X W_r^T),]

[\mathcal{M}_r = \begin{bmatrix} 0 M_r \ M_r^T 0 \end{bmatrix}]

이 때 $D$ 는 대각행렬이며, 대각원소 $D_{ii} = \vert \mathcal{N}_i \vert$ 을 의미한다.

각 행렬의 크기는 아래와 같다.

행렬 역할 Shape
$\begin{bmatrix} U \ V \ \end{bmatrix}$ Node Embedding Matrix $N+M, E$
$\begin{bmatrix} H_u \ H_v \ \end{bmatrix}$ Hidden Matrix $N+M, E$
$W^T$ Weight Matrix $E, E$
$D^{-1}$ Normalization Matrix $N+M, N+M$
$A$ Graph Adjacency Matrix $N+M, N+M$
$X$ Feature Matrix $N+M, D$
$W_r^T$ Edge-type Specific Weight Matrix $D, E$

위와 같이 Encoder에서 벡터화한 방식을 그대로 Decoder에 적용하면 된다. 그리고 이러한 방식은 오직 관측된 원소를 평가할 때만 필요할 것이다.

2.6. Input Feature Representation and Side Information

컨텐츠 정보와 같이 각 Node에 대한 정보를 담고 있는 Feature는 Feature Matrix $X$ 라는 형태로 Input 레벨에서부터 투입될 수 있다. 그러나 만약 그러한 정보가 다른 User(Item)나 그들의 관심 사항을 제대로 구분할만한 충분한 정보를 갖고 있지 못하다면, 이 정보를 처음부터 Graph Convolutional Layer에 집어 넣으면 심각한 정보 병목현상이 발생할 수도 있다.

이러한 경우에는 Side Information으로 활용하는 방안을 생각해볼 수 있다. Node $i$ 에 대해 User/Item Feature Vector $x_i^f$ 를 만들고, 이를 Dense Hidden Layer에 독립적인 채널을 통해 직접적으로 투입하는 것이다.

[u_i = \sigma(W h_i + W_2^f f_i),]

[f_i = \sigma(W_1^f x_i^f + b)]

이 때 $W_1^f, W_2^f$ 는 학습 가능한 Weight 행렬이며, User Weight Matrix와 Item Weight Matrix는 구분된다. Graph Convolutional Layer를 위한 Node Feature를 담고 있는 Input Feature Matrix $X$ 는 Graph에 있는 모든 Node에 대한 고유한 One-Hot 벡터와 함께 Identity Matrix로 선택된다. 본 논문에서 사용된 데이터셋에 한해서는, User/Item Content 정보는 제한적인 크기를 갖고 있고 따라서 본 논문에서는 이들을 Side Information으로 이용하고자 한다.

Side Information은 꼭 Per-Node Feature 벡터의 형태일 필요는 없다. 사실 그래프 구조여도 되고, NLP 혹은 이미지 데이터일수도 있다. 물론 이 경우 위에서 보았던 식은 미분 가능한 적절한 다른 모듈로 대체되어야 할 것이다. RNN, CNN, GNN 같은 형태로 말이다.

논문에서의 이 부분은 기술적으로 다루기가 좀 어려운 부분이 있을 수는 있지만, 적절히 설계된다면 GCMC의 확장성에 관한 기술로 생각해볼 수 있으며 우리에게 주어진 Task에 유연하게 적용해볼 수도 있을 것이다.

2.7. Weight Sharing

One-Hot 벡터가 Input으로 주어지는 Collaborative Filtering 환경에서, Weight 행렬 $W_r$ 의 열은 특정 평점 값 $r$ 에 대해 독립적인 Node의 잠재 요인으로서의 역할을 갖게 된다. 참고로 $W_r$ 의 Shape은 $(E, D)$ 인데, 논문에서 말한 의 의미를 생각해보면 Weight 행렬을 $W_r^T$ 로 전치하여 $(D, E)$ 의 Shape을 갖고 있다고 생각하고 바라보는 것이 좀 더 편할 것이다.

어쨌든 이 잠재 변수들은 Message Passing이라는 형태를 통해 연결된 User/Item Node로 전달된다. 그러나 모든 User와 Item이 각 평점 레벨에서 갖은 수의 평점을 갖고 있지는 않을 것이다. 이 말은, $W_r$의 특정 열은 다른 열들에 비해 상대적으로 덜 최적화되는 결과를 야기할 수도 있다는 것이다.

따라서 이러한 최적화 문제를 해결하기 위해 다른 평점 class $r$ 에 대해 $W_r$ 에 대한 어떤 형태의 Weight Sharing이 필요하다. 다음과 같은 식을 보자.

[W_r = \Sigma_{s=1}^r T_s]

본 논문에서는 위와 같은 방식의 Weight SharingOrdinal Weight Sharing이라고 명명한다. 왜냐하면 높은 평점 레벨에는 더 많은 Weight 행렬이 들어가기 때문이다.

[W_1 = T_1]

[W_2 = T_1 + T_2]

[W_3 = T_1 + T_2 + T_3]

Pairwise Bilinear Decoder의 효과적인 정규화 수단으로 Basis Weight 행렬 $P_s$ 의 집합의 선형 결합의 형태로 Weight Sharing을 정의할 수 있겠다.

[Q_r = \Sigma_{s=1}^{n_b} a_{rs} P_s]

이 때 $n_b$ 는 기본 Basis Weight 행렬의 개수를 의미한다. $a_{rs}$ 는 학습 가능한 계수로, 각 Decoder Weight 행렬 $Q_r$ 의 선형 결합을 결정한다. 과적합을 피하고 파라미터의 수를 줄이기 위해 $n_b$ 는 평점 Class의 수보다는 작아야 할 것이다.

(중략)


5. Conclusions

Encoder는 Graph Convolutional Layer를 포함하는데, 이 layer는 User-Item 상호작용 Graph에서 오가는 Message 속에서 User/Item Embedding을 구성하게 된다. Bilinear Decoder와 결합하여 새 평점은 labeled edge의 형태로 예측되게 된다.

본 논문에서 제안한 모델은 여러 Benchmark 모델을 능가하는 결과를 보여주었다. 또한 본 논문에서는 확률적 미니배치를 통해 더 큰 데이터셋에서 학습될 수 있다는 것을 보여준다.

미래에 이 모델을 더욱 크고 Multi-modal 형태의 데이터 (Text, Image, Graph-based Information으로 구성된)에도 적용할 수 있기를 바란다. 이러한 세팅에서는 GCMC 모델은 Recurrent 또는 Convolutional Neural Network와 결합하여 사용될 수 있을 것이다.

더욱 확장하기 위해서는 효율적인 근사 방법이 필요한데, 예를 들어 Local Neighborhood를 Sub-sampling하는 방법이 그 예가 될 수 있을 것이다. 이 방법에 대해서는 Inductive Representation Learning on Large Graphs라는 논문을 참고하길 바란다. 이 논문에 대한 리뷰는 곧 블로그에 업데이트될 것이다.

마지막으로 Attention Mechanism은 이러한 종류의 모델의 성능을 더욱 향상시키는 방법이 될 수 있을 것이다.


Reference

1) 논문 원본
2) 리뷰 블로그

Comment  Read more