데이터 과학 유망주의 매일 글쓰기 — 스물 일곱 번째 토요일

배우는 자(Learner Of Life)
9 min readMar 20, 2021

--

자연어처리에서의 그래프 신경망(GNN)

# GNN, # 자연어처리

자연어처리에서는 그래프 신경망(GNN)이 어떻게 사용될 수 있을까? (1)

오늘 한일:

첫 번째 프로젝트가 끝나고 오랜만에 평화로운 주말이 찾아왔다. 하지만 바로 다음 프로젝트를 월요일 부터 시작하기 때문에, 이번에는 무슨 프로젝트를 할지 생각을 해보았다. 나는 요즘 최근에 알게된 그래프신경망(GNN)을 배우면서, 이를 자연어처리에 활용할 수 있는 방법에 대해 구상하고 있다. 나의 바로 다음 프로젝트 역시 자연어처리 프로젝트가 될 것인데, 이번에는 그래프에 바탕을 둔 딥러닝 기술을 활용해보고 싶기 때문이다.

그래프는 자연어처리(NLP) 분야에서 매우 유용하게 활용되는 데이터 구조다. 기계번역부터, 지식그래프(knowledge graph)기반 질의응답 어플리케이션, 상식적인 추론을 통한 추상적 의미 도출 등 여러 분야에서 활용된다고 볼 수 있다.

그동안 자연어처리 학계에서는 BERT, GPT-3 등의 Transformer 기반 모델이 등장한 이후 혁신적인 기술이 나오지 않아, 그 어떤 최첨단 모델도 더 이상 큰 발전을 이루지 못할 것이라는 전망이 나오기까지 했다.

하지만 그래프를 활용한 그래프 신경망인 GNN이 등장하면서, 자연어처리관련 연구원들도 이 기술을 통해 새로운 가능성을 엿보기 시작했다. 데이터 구조로써의 그래프는 이미 자연어처리 분야에서 널리 활용되고 있으니, 그래프에 기반한 신경망 역시 자연어처리에서 역할이 있을것이라는 믿음 때문이었다.

그렇다면 자연어처리에서 GNN이 어떻게 활용될 수 있을까? 이 기술이 자연어처리 분야에서 어느 정도의 전망을 가지고 있을까? 오늘 블로그는 데이터 구조로써의 그래프를 설명하기 보다, 이 구조를 활용한 신경망이 어떤식으로 자연어처리에서 활용될 수 있는지를 조명한다.

자연어처리(NLP)에서의 그래프신경망(GNN)

문법(Syntax) 및 의미(Semantic) Parsing Graph

Spacy의 Tagging 기능을 활용해, 문장내 서로 다른 단어들 간의 의미를 연관짓는 그래프를 그려볼 수 있다. 각 단어를 노드로 볼 수 있고, 각 단어 사이의 의존성(dependency) parsing을 보여주는 각 tag가 Edge로 표현될 수 있다. 모든 단어는 Tag를 속성으로 가질 수 있다.

한 문장에서 서로 다른 단어들의 관계를 그래프로 표현할 수 있다. (1)

물론, Attention을 통해서도 충분히 문법(syntax)및 의미(semantic) 관계를 자동으로 조명할 수 있다고 이야기할 수 있다. 하지만, 예를 들어, 각 특성에 대한 감정을 찾는 감정 분석 문제를 해결해야한다고 하자. 만약 ZARA라는 브랜드에 대한 고객의 감정을 분석한다고 하면, 옷의 품질, 배송 시기, 옷의 사이즈 등등에 다양한 방면에서 고객이 이 브랜드에 갖는 관념이 다를 수 있다.) 만약 “사이즈는 정말 딱 맞고 옷의 무게도 적당하다.”라는 문장이 있다면, Attention 기법은 “적당하다"라는 단어를 옷의 “무게"가 아닌 “사이즈"와 연관시킬 수 있다는 문제점이있다. He et al.은 Attention 기법이 이러한 문법적(syntax)에러가 날 수 있다는 점을 지적하며 가중치를 배분하는 것에 대한 제한(constraints)을 두는 방법을 제안하기도 했다.

자연어처리 어플리케이션에서, 이 문제를 해결하기 위한 방법 중 하나가 위 그림에서 보여주는 의존성 parsing 그래프라고 할 수 있다.

지식 그래프(Knowledge Graph)

지식그래프는 실제 세계에서 존재하는 객체(object), 이벤트, 상황, 또는 추상적 개념들 사이에 존재하는 연관성을 보여주는 표현 기법이다. 각 노드는 이러한 실제 세계에 존재하는 유형/무형적 객체나 개념을 나타내고, Edge는 각 노드들 사이의 관계를 나타낸다. 자연어처리에서 가장 널리 활용되는 지식그래프 모듈은 Dbpedia, WikiData, ConceptNet등이 있다.

서로 다른 객체나 개념 사이의 연관성을 보여주는 지식 그래프(Knowledge Graph) (1)

사실기반 질의응답은 자연어처리 분야에서 전혀 새로운 개념이 아니지만, 데이터베이스에서 확실하게 나타난 사실에 국한에서만 분석할 수 있다는 단점이 있었다. 그러나 GraphSage(Hamilton et al.) 등에서 발표한 기술을 통해, 데이터베이스에 숨겨진 잠재적 정보들을 끌어내 새로운 노드를 생성해 일반화할 수 있게 되었다. 실제로 최근 ACL에서 발표한 논문(Saxena et al.)에 따르면, 새로운 노드들에 대해, 다수의 hop(multi-hop) QA를 통해 모델을 일반화 할 수 있게 되었다. 이제 그래프 신경망의 범용성이 훨씬 더 넓어졌다고 할 수 있다.

일시적 그래프(Temporal Graph)

LSTM은 장거리 의존성(long-range dependencies)에 매우 취약한 것으로 알려져있다. 하지만 그래프 신경망을 활용하여 단어와 문서들을 Edge로 연결해 시간 정보를 표현할 수 있다면, 이 문제를 해결 할 수 있다. 그래프 신경망을 통해 더 많은 정보를 내포한 효율적인 데이터 Embedding이 가능하다.

그래프 신경망으로 시간정보를 표현하면, LSTM의 문제를 해결할 수 있다. (1)

비지도 학습에서 그래프를 활용하는 이유

그래프의 노드와 Edge를 만들기 위해서는 답을 알고 있어야 하는데, 그렇지 않은 비지도학습에서는 어떻게 활용될 수 있는지 의문을 가질 수 있다. 하지만 이의문에 대해서는 몇가지 전제를 분명하게 할 필요가 있다.

첫째로, 인간의 언어는 그 어떤 정보도 존재하지 않는 “무의 상태”에서 학습하는 것이 불가능하다. 우리는 태어날 때부터 언어를 활용할 수 있는 능력을 가지고 있다고 주장하는 과학자들도 있다. 하지만, 인간의 정형화된 언어는 “문자"가 발달하면서 진화해왔고, “문자"가 없었다면 언어를 다음 세대로 전달하거나 말을 할 수 없는 상태에서는 정보를 전달하는 것이 훨씬 더 힘들어진다. 그래프의 각 노드가 문자화 되어야한다는 것을 감안하고, 단 하나도 아무 정보를 갖지 않은채로 존재할 수 없다는 것을 생각한다면, 근본적으로 “비지도학습”인 문제에서 그래프를 활용한다는 개념은 성립하지 않는다.

또 하나는, 비지도 학습에서 텍스트만을 가지고 특정한 인사이트를 얻으려는 연구는 활발히 진행 되어 왔기 때문에, 비지도 학습에서의 자연어처리 기법은 다른 곳에서 얼마든지 찾을 수 있다. 또한, 텍스트는 수직적인 구조를 가지고 있다. 즉, 특정한 문장에서 단어들을 중요도에 따라 정렬할 수 있으며, 이들을 가지고 완전한 문장을 만들 수 있다. 따라서, 단어들 사이에 존재하는 중요성도 연관지을 수 있다. 상대적으로 중요도가 떨어지는 단어는 중요도가 높은 단어와의 연결성이 떨어지지만, 높은 중요도를 가진 단어일수록 관련성이 짙어진다. 그만큼 각 단어를 노드화 시키고, 각 단어들 사이를 Edge를 통해 상대적 연결성을 보여주기가 용이하다.

마지막으로, 다수의 Mode(Multi-modal)를 가진 그래프 및 지식그래프는 다수의 이미지, 단어, 문서를 가진 Multi-modal 그래프로 확장될 수 있다. Multi-modal 그래프란, 다수의 정보 채널을 가진 그래프를 말하며, 정보를 더 효율적으로 처리할 수 있다. 따라서, 자연어처리에서 그래프를 사용하는 것은 매우 효과적인 정보 처리를 가능하게 한다. 또한 ConceptNet과 같은 그래프 신경망 모듈을 활용하면 비지도 및 반지도(semi-supervised) 상황에서 그래프를 활용해 개념을 학습하는 것이 가능하다. 즉, 비지도 상황에서 완전히 사용할 수 없는 것은 아니다.

앞으로 할일:

오늘은 자연어처리에서 그래프신경망이 어떻게 활용될 수 있는지에 대해 알아보았다. 이렇게 조사를 해 보니, 다음 프로젝트를 어떤 것을 할지 떠오르기 시작했다. 뉴스 데이터를 통해 서로 다른 개념간의 관련성을 한눈에 볼 수 있는 지식그래프를 시각화하는 프로젝트를 진행해보면 어떨까하는 생각을 하게된다. 어쩌면, 딥러닝 뿐만아니라, 그래프라는 컴퓨터의 핵심 데이터 구조를 조금 더 깊게 활용하고 이해해볼 수 있는 기회가 될지도 모른다는 생각이든다.

부트캠프도 이제는 거의 끝을 향해 달려가고 있다. 지난 5개월간 수업을 하는 동안은 정말 힘들었지만, 프로젝트는 생각보다 그렇게 힘들었다는 생각이 들지는 않는다. 무엇보다도 내가 흥미를 가지고 있던 주제를 좀 더 깊게 학습할 수 있고, 매일 몇시까지 제출해야하는 과제에 대한 압력도 없었기 때문인 것 같다. 또한, 매주 긴장하던 자가 점검 시간도 이제는 없기 때문이다.

하지만, 그렇게 반년간 스스로 끊임없는 노력을 하면서, 데이터 분석 뿐만 아니라 컴퓨터 공학의 기초도 꽤 탄탄히 다질 수 있었다. 물론 그 시간이 그리 긴 시간은 아니라고 볼 수도 있지만, 그동안 다져왔던 기본기와 학습에 대한 열정과 태도는, 내 삶의 그 어떤 시기보다 내게 값진 선물을 주었다. 그 어느 때보다도 열심히 공부했고, 나의 잠재력을 끌어올릴 수 있는 소중한 태도를 얻었다. 그것은 무엇이든 꾸준히 해나가는 것이다.

나도 이 세상의 주인공이 되는 그날까지 이 꾸준함을 잃지 않고 싶다. 지난번 프로젝트의 경험을 잘 기억하여, 기획서도 꼼꼼히 잘 쓰려 노력하고, 프로젝트를 위해 세워야할 가설도 충분히 설득력 있는 것을 선정할 수 있어야겠다. 설득력있는 가설을 세운다는 것은 쉬운일은 아니지만, 계속 시도하다보면 언젠가는 되지 않을까? 나의 경험이 더 많아질수록 데이터 분석이 더 쉬워지는 것처럼, 언젠가는 그 어떤 가설도 논리적이고 설득력있게, 또 너무 힘들지 않게 세울 수 있는 그날까지 계속 공부하고 노력해야겠다.

참조:

(1) https://medium.com/neuralspace/graphs-neural-networks-in-nlp-dc475eb089de

--

--

배우는 자(Learner Of Life)
배우는 자(Learner Of Life)

Written by 배우는 자(Learner Of Life)

배움은 죽을 때까지 끝이 없다. 어쩌면 그게 우리가 살아있다는 증거일지도 모른다. 배움을 멈추는 순간, 혹은 배움의 기회가 더 이상 존재하지 않는 순간, 우리의 삶은 어쩌면 거기서 끝나는 것은 아닐까? 나는 배운다 그러므로 나는 존재한다. 배울 수 있음에, 그래서 살아 있음에 감사한다.

No responses yet