Lecture 18 - Constituency Parsing and Tree Recursive Neural Networks

Tobig's 1415 Textseminar·2021년 6월 23일
1
post-thumbnail
post-custom-banner

작성자 : 건국대학교 응용통계학과 정재윤

Constituency Parsing

그림 1

컴퓨터가 자연어를 이해하기 위해 필요한 과정인 parsing은 이미 이전의 강의에서 여러번 다뤘으니 깊게 설명하지는 않겠습니다. 위의 이미지는 parsing의 종류에 대해서 직관적으로 이해할 수 있게 cs224n에서 제공하는 이미지입니다. 왼쪽이 Bag of word를 표현하는 것입니다. 오른쪽은 언어학자들이 표현하는 parsing 방식으로 오늘 다룰 내용입니다.

그림 2

본격적으로 설명하기에 앞서 Compositionality의 의미에 대해서 먼저 알아보겠습니다. 사전적인 뜻으로는 '구성'을 의미합니다. 그림과 같이 작은 부품들이 모여서 하나의 새로운 것을 만든다는 것을 내포하는 단어인거죠. 이는 언어적인 측면에서도 보입니다. 즉, 여러 개의 단어들을 이용하여 하나의 문장 혹은 새로운 단어로 표현 가능하게 됩니다. 반대로 생각한다면 컴퓨터는 모르는 단어를 자신이 아는 단어로 표현하여 읽어낼 수 있다로 볼 수 있습니다.

그림 3

대표적인 예시가 위의 그림인데요. snowboarder와 A person on a snowboard는 같은 의미임에도 불구하고 후자는 여러개의 단어들을 사용해서 하나의 단어로 표현한 것을 알 수 있습니다.

그림 4

즉, 언어를 단어의 조각들로 파악하고 이러한 구조를 세워 그 의미를 찾아보자는 것이 이번 강의의 주내용인 것입니다. (사족으로 하나 알아두셨으면 하는 점은 언어가 재귀적으로 가능하냐에 대한 것인데요. 인간의 언어라고 하는 것이 무한할 수 없기에 불가능하다 가능하다로 이야기가 많다고 합니다.)

그림 5

이제 구체적으로 어떻게 문장을 vector space에 맵핑하는지 알아봅시다. 각 단어들을 Tree RNN에 넣어서 일련의 과정을 통해 문장의 의미를 추출하여 최종 벡터를 구하게 됩니다. 규칙은 그림과 같습니다. 이러한 Tree RNN 구조는 RNN구조보다 의미파악에 있어서 훨씬 유용합니다.

그림 6

RNN의 경우, Tree RNN과는 달리 단어들을 합친 문장의 의미를 파악하는데에는 한계를 가집니다. RNN은 여러 layer를 거친 뒤, 최종 벡터를 파악하는 데에 중점을 두고 있기 때문이죠. 반면 Tree RNN의 구조는 마지막에 집중하는 것이 아닌 관계에 집중하고 있는 구조입니다.

Simple Tree RNN

구체적으로 Tree RNN에 대해서 이야기해보겠습니다. 우선 Tree RNN을 진행하기 위해서는 크게 2가지가 선행되어야 합니다. 첫 째로 단어의 의미를 알고 있어야하고, 둘 째로 단어들이 결합하는 방식에 대해서 알아야 합니다.

그림 8

단어를 모두 안다는 가정하에 규칙에 대해서 알아봅시다. 우선 두 벡터를 NN에 태워서 (8,3)이라는 부모 벡터와 1.3이라는 score를 구합니다. 여기서 부모 벡터는 c1과 c2를 concat하여 공식과 같은 방식으로 구하게 됩니다. 이 때 중요한 건 어떤 부모 벡터를 구하든 모두 같은 W를 사용한다는 점입니다.

score는 조합할 단어를 선택할 때 반영하는 값입니다. 즉, 단어를 선택하는 기준으로 해당 단어가 얼마나 말이 되는지를 평가합니다.
그림 9
우선 인접한 단어들의 조합을 통해 부모 벡터와 score를 greedily하게 모두 구합니다. 그리고 score가 높은 단어들로 다음 부모 벡터와 score값을 계산합니다. 이렇게 되면 아래와 같은 그림이 나오게 됩니다.
그림 10
이 과정을 부모벡터가 가장 위에 하나만 남을 때까지 계속해서 반복하게 됩니다. 즉, 아래의 그림과 같이 나올 때까지 계속 진행하는 것입니다.
그림 11
이러한 모델의 backpropagation은 일반적인 backpropagation과 크게 차이가 없습니다. 이런 과정을 거치면 simple Tree RNN은 그렇게 성능이 떨어지지는 않지만, 앞서 W가 모든 노드에서 동일하다는 단점을 가집니다. 즉, 언어가 복잡하고 고차 구성이며 긴 문장으로 들어오면 적절하지 못하다는 것이죠. 또한 인풋 단어간 상호작용이 없다는 점과 조합 함수가 모든 경우에 대해서 동일 하기 때문에 다양성이 떨어지게 됩니다.

Syntactically-United RNN

simple Tree RNN은 이러한 단점을 가지기에 사람들은 더 나은 모델을 고안했습니다. 그 모델이 바로 Syntactically-United RNN이라는 모델입니다. 이전의 simple Tree RNN과 가장 큰 차이점은 모든 조합에서 똑같이 사용되었던 행렬 W를 각기 다르게 설정한다는 점입니다.
그림 12
그러나 이런 방식으로 진행할 때의 문제는 바로 speed입니다. 아무래도 각 matrix를 찾아야하기에 학습에 시간이 오래걸리게 됩니다. 이에 대한 해결법으로 나온 것이 바로 PCFG방식입니다. PCFG란 한 문장에 k개의 문장 구조를 만들고 적절한 문장 구조를 바탕으로 학습을 진행하는 방식입니다. 즉, 만든 문장 구조를 바탕으로 Tree RNN에 적용하는 방식입니다.

Recursive Matrix - Vector RNN

그림 14

그림과 같이 연산을 진행하는 모델이 바로 MV-RNN이다. MV-RNN에서 중요한 점은 단어에 대한 정보를 단순히 벡터에 국한하지 않았다는 점입니다. 단어의 Matrix를 만들어 정보의 손실을 줄이는 방법을 선택하여 문장의 의미를 더 담을 수 있게 만들었습니다.

과정은 이러합니다. 우선 각 단어의 벡터와 행렬을 준비합니다. 한 단어의 벡터와 다른 단어의 행렬을 연산을 통해 값을 구해줍니다. 그리고 나온 벡터값을 일련의 함수처리를 통해 최종값을 구해줍니다.

RNTN

RNTN에 대해서 설명하려면 감성분석에 대해서 잠깐 언급해야 합니다. 전통적으로 감성분석은 꾸준히 발전했습니다. 따라서 굳이 새로운 모델을 만들지 않아도 love, great과 같은 단어를 찾아서 의미를 부여하면 꽤나 높은 성능을 갖기 때문입니다. 하지만 아래와 같이 조롱이 섞인 문장의 경우, 그 안의 감성을 잘못 찾았습니다.

그림 15

이러한 문제는 MV-RNN에서도 계속해서 발견되면서 이를 분석하기 위한 새로운 모델이 필요했습니다. 그래서 제시된 모델이 바로 RNTN입니다.

그림 16

오른쪽의 그림이 RNTN의 구조입니다. 즉, 핵심은 계속된 행렬의 계산이 아닌 Tensor(3차원)으로 연산을 진행하면서 정보의 양은 동일하면서 파라미터를 줄여 연산 속도를 줄이는 것입니다.

그림 17

이렇게 만들어진 RNTN은 일반적인 데이터셋에서는 큰 효과를 못 얻었지만 TreeBank에 관한 데이터셋에서는 큰 Accuracy를 얻었습니다.

Limitation

지금까지 여러 TreeRNN에 대해서 알아봤습니다. 굉장히 좋은 것 같으나 현재 저희들의 인식에서는 조금 생소한 개념이었던 것 같습니다. 그 이유는 현실적으로 TreeRNN을 사용하기 어렵기 때문입니다. 대표적인 이유는 GPU연산이 힘들기 때문입니다. 동일하게 병렬적 연산이 진행되는 것이 아닌 연산의 구조나 Tree모델이 다르다는 점 때문입니다. 또한 데이터 구축이 일반 데이터보다 훨씬 어렵기 때문입니다.

Reference

  1. CS224n lecture 18
  2. https://www.youtube.com/watch?v=TcNvkPoaXas
  3. https://ratsgo.github.io/deep%20learning/2017/06/24/RNTN/
  4. https://velog.io/@tobigs-text1314/CS224n-Lecture-18-Constituency-Parsing-TreeRNNS
  5. https://jeongukjae.github.io/posts/cs224n-lecture-18-constituency-parsing-and-tree-recursion-neural-networks/
post-custom-banner

7개의 댓글

comment-user-thumbnail
2021년 6월 25일

투빅스 14기 강재영

  • RNN의 경우, 최종 벡터에만 중점들 두기 때문에 단어들을 합친 문장의 의미를 파악하기 어렵다는 한계점을 가지고 있다.
  • 반면에 Tree RNN은 최종벡터에만 중점을 두는 것이 아닌 관계에 집중하는 구조이다.
  • 하지만 Tree RNN은 가중치(W)가 모든 노드에서 동일하다는 단점을 가지기 때문에 고차원적 구성이나 긴 문장을 적절하게 반영하지 못한다. 또한 인풋 단어 사이의 상호작용이 없고 조합 함수가 모든 경우에 대해서 동일하기 때문에 다양성 또한 떨어진다.
  • 이러한 단점을 보완하기 위해 고안한 모델이 Syntactically-United RNN 입니다. 이전과 다르게 모든 조합에서 사용했던 행렬(W)를 다르게 설정한다는 것이다. 하지만 학습시간이 길어졌다는 단점이 생겼다.
  • 기존의 감성분석 모델에서는 조롱이 섞인 문장의 경우, 감성을 잘못 찾는다는 경우가 많았다. 이러한 문제를 해결하기 위해 제시된 모델이 RNTN이다.
  • RNTN의 핵심은 행렬의 계산이 아닌 텐서(3차원)으로 연산을 진행하면서 정보의 양은 유지한 채 파라미터를 줄여서 연산속도를 빠르게 만들었습니다.
답글 달기
comment-user-thumbnail
2021년 6월 26일

투빅스 14기 한유진

  • 최종벡터 파악에 집중하고있어 단어들을 합친 문장 의미파악에 한계가 있는 RNN과 달리 관계에 집중하고자 한것이 Tree RNN입니다. Tree RNN이 성능이 나쁘지 않지만 모든 노드에서 가중치가 동일하다는 단점이 있어 언어가 복잡하고 긴 문장일때는 적절하지 않습니다.
  • Syntactically-United RNN은 모든 노드에서의 가중치 행렬을 다르게 설정하여 Tree RNN의 단점을 극복하였습니다. 하지만, 학습시간이 오래걸려 PCFG방식이 등장하였습니다. 한 문장에 k개의 문장 구조를 만들고 적절한 문장 구조를 바탕으로 학습을 진행합니다.
  • Tree RNN은 GPU연산이 힘들고, 동일하게 병렬적 연산 진행이 불가, 데이터 구축의 어려움 때문에 현실적으로 사용하기 어렵습니다.

Tree RNN과 이어 발전된 모델들을 잘 설명해주셔서 좋았습니다. 좋은 강의감사합니다!

답글 달기
comment-user-thumbnail
2021년 6월 28일

투빅스 15기 이수민

  • TreeRNN을 활용하여 compositionality를 표현, 즉 구조적으로 문장을 나누고 그 단어들의 조합이 나타내는 의미를 파악하여 전체 문장의 의미를 알아내는 것에 대한 강의였습니다.
  • 다만 Simple Tree RNN을 사용하면 고차 구성 및 긴 문장에 대한 처리가 어렵고 인풋 단어 간 상호작용이 없으며, 조합 함수가 동일하기 떄문에 다양성이 떨어진다는 단점이 있습니다.
  • 이러한 Simple RNN의 한계점을 개선한 Syntactically-United RNN은 모든 조합에서 똑같이 사용되었던 행렬 W를 각기 다르게 설정한다는 점에서 차이를 보입니다.
  • Matrix-Vector RNN은 단어의 벡터 정보만 가지고 있는 것이 아니라 단어 matrix를 통해 정보의 손실을 줄이는 방법을 활용하여 문장의 의미를 더 잘 파악할 수 있도록 했습니다.
  • 이후 Matrix-Vector RNN을 개선한 RNTN 모델에서는 행렬 연산 대신 tensor 연산을 진행하면서 동일한 정보의 양에 대해서 연산 속도 및 cost를 줄일 수 있게 되었습니다.
답글 달기
comment-user-thumbnail
2021년 6월 29일

투빅스 15기 김동현

  • Structure prediction with simple Tree RNN:
    vector space에 word vector를 뿌려놓으면서, 그냥 바로 같은 vector space에 넣습니다. 그럼 recursive한 구조는 tree structure를 구성해주어야 한다는 어려움이 따르고, rnn을 통한 구조는 phrase를 prefix context없이 잡아내지도 못하고, 마지막 결과 vector가 마지막 단어에 좌우된다는 단점이 있습니다.

  • Syntactically-United RNN:
    기본적인 syntactic structure를 위해서는 symbolic Context-Free Grammar (CFG) backbone이 좋았습니다. 그리고 discrete syntactic category를 사용했고, 다른 syntactic environment에서는 다른 composition matrix를 사용하게 해주는 것이 훨씬 좋은 결과를 내었습니다. 그리고 더 좋은 semantic의 결과를 볼 수 있었습니다.

  • Recursion Neural Tensor Network RNTN:
    일반적으로 sentiment analysis는 단어들을 잘 뽑아내는 것으로 잘 동작합니다. 긴 document에 대해서도 detection accuracy는 90% 수준으로 높습니다. 하지만, the movie should have been funnier and more entertaining같은 문장은 negative meaning이지만, funnier, entertaining과 같은 단어들만 본다면 positive하게 분류할 가능성이 있습니다. hard negation과 같은 문장들은 부정확하여 이를 해결하기 위해 더 좋은 모델이 필요했습니다.
    attention을 뽑을 때 1 x n, n x n, n x 1의 vector 두개 (주로 단어들의 vector)와 matrix 하나를 중간에 끼워서 쓰는데, 이걸 다르게 생각해서 matrix가 아닌 3-dim tensor를 끼워서 사용합니다. 그래서 많은 정보를 잘 interact해서 잡아내도록 합니다.

답글 달기

투빅스 15기 조효원

  • 언어의 단위는 단어만 있는 것이 아니라, 직접적인 관계를 맺는 하나의 덩어리인 constituent 단위가 존재한다. 통사론의 기본 목적은 이런 문장 내 구성을 찾아내는 것이며, 언어 트리 형태로 표현한다.
  • 이러한 아이디어에서 출발한 것이 TreeRNN이다. 이는 언어의 구조를 고려한 모델로, 관계에 집중하는 모델이다.
  • TReeRNN은 모든 노드에서 가중치가 동일하다는 단점이 있다. 이 때문에 긴 문장에 잘 대응하지 못한다.
  • Synatically-Uniterd RNN은 가중치를 다르게 설정함으로써 TreeRNN의 단점을 보완한다.
  • 하지만 언급된 모든 모델들은 사실상 연산이 힘들기 때문에 사용되지 않는다.
답글 달기
comment-user-thumbnail
2021년 6월 29일

투빅스 15기 조준혁

  • Tree RNN은 단어의 의미를 알고 단어의 결합 방식을 안다는 전제하에 진행됩니다. Simple Tree RNN은 성능이 낮지는 않지만, 모든 노드가 동일한 Weight를 가진다는 단점이 있습니다. 언어가 복잡하고 고차 구성, 긴 문장이면 적절한 방식이 아닙니다.
  • Syntactically-United RNN은 각 노드의 Weight를 다르게 가져가며 앞서 언급한 Simple Tree RNN의 단점을 극복합니다. 하지만 각 Weight를 찾아줘야하기에 속도가 늦어집니다.
  • 여러 감성이 복합적으로 담긴 경우 문장 내에 감성을 잘 찾아내지 못하는 단점이 MV-RNN에서도 발견되며 이를 극복하기 위한 RNTN 모델이 제안되었습니다. 행렬의 계산이 아닌 3차원 Tensor의 연산을 진행하며 정보의 양은 동일하게 가져가되 파라미터를 줄여 연산 속도를 줄이는 것입니다.
답글 달기
comment-user-thumbnail
2021년 6월 29일

투빅스 14기 이정은

  • 기존 RNN은 최종 벡터를 파악하는 데에 중점을 두고 있기 때문에 이전 정보가 손실되고 의미 파악에 한계가 있습니다. Tree RNN은 최종 벡터가 아닌 전체 관계에 집중한 구조로, 의미 파악에 있어 더 유용합니다.
  • Tree RNN은 가중치가 모든 노드에서 동일하게 사용되어 언어가 복잡하고 문장이 길어질수록 의미를 제대로 잡지 못하며, 또한 input 단어와 상호작용이 없어 의미의 다양성도 적게 나타난다는 단점을 가집니다.
  • Syntactically-united RNN은 위 단점을 해결하기 위해 각각 다른 가중치 행렬을 사용합니다. 이는 가중치를 계속 새로 계산해야해서 학습 속도가 오래 걸리는 문제를 가집니다. 특히 감정분석에서는 비꼬는 문장의 감성을 잘못 판단하는 경우가 발생합니다.
  • 이 단점을 보완하기 위해 나온 RNTN은 행렬 연산이 아닌 3차원 텐서 연산을 진행하여 동일한 정보를 가지지만 파라미터를 줄여 연산 속도를 향상시킵니다.
  • 다만, Tree RNN은 GPU 연산이 불가능하고 데이터 구축에 어려움이 있어 현실적으로 사용하기에는 어려움이 있습니다.

처음 접해보는 Tree RNN에 대해 알 수 있던 강의였습니다. 감사합니다! : )

답글 달기