
이번 주제는 Tree Recursive NN, Constituency Parsing, and Sentiment 입니다.
Tree Recursive NN 은 실제로 매닝 교수님이 2010년 ~ 2015년에 걸쳐 연구한 주제라고 합니다.
이렇게 강의 후반에 하게 된 이유는, 이전에 우리가 배운 LSTM, transformers 에 비해 더 나은 결과를 보이는 것이 아니어서 일종의 Motivation 만 가져가는 형식으로 오늘 강의를 진행하신다고 합니다.


왼쪽 그림은 카네기 멜론 대학의 설치미술이라고 합니다.
Bag of Words 에서 떨어진 많은 stopwords (the, us) 이 보입니다.
우측의 전통적인 언어학의 구조적인 면과는 굉장히 상반되는 모습입니다.

이러한 차이점을 여기서 언급하는 이유는,
bag of words 와 구조적인 언어학의 중간 어딘가에서 우리가 얻을 점들이 있다는 것입니다.
예를 들어 위의 2개의 예문을 보면
snowborder 와 person on a snowboard 는 같은 뜻입니다. 서로 다른 사이즈로 같은 의미를 담고 있는 단어에 대해서는어떻게 처리하면 좋을까요?
이것이 첫번째 Motivation 입니다.
우리는 더 작은 요소들의 의미적 구성(semantic composition)을 통해 더 큰 텍스트 단위 (엔티티, 설명 용어, 사실, 주장, 이야기)의 의미를 해석합니다.
compositionality. 즉 구성성은 NLP 뿐만 아니라
기계 등에 있어서도 하위구성요소를 알기 위해 필요한 특질입니다.
다양한 subcomponent 들이 어떻게 구성되고 결합하는지를 이해하면 전체적인 이해를 할 수 있게 됩니다.
vision 분야에서도 마찬가지로 하위구성요소를 뜯어서 살피고, 전체 이미지를 이해할 수 있습니다.

과학자이자 언어학자이자 철학자 등등등인 촘스키가 발표한 논문에 따르면,
인간과, 인간의 지능에 준하는 동물들과의 중요한 차이점은
"인간은 재귀를 모델링하는 능력이 있다" 는 것입니다.
인간은 새로운 언어를 만들때 작은 부분에서 큰것을 만들 수 있는 능력이 있고, 그것은 재귀적인 방식이라는 것입니다.
정말 언어는 재귀적인지 좀 더 들여다 보는 페이지입니다.
Cognitively somewhat debatable (need to head to infinity)
위 말은 인지적으로는 약간의 논쟁의 여지가 있다. (무한대로 향해야 함) 이라는 해석인데, 이건 무슨 의미인지는 모르겠습니다.
이 말은 우리의 언어가 한계가 없이 재귀적으로 쪼개지는 것은 아니기 때문에 진정으로 recursive 라고 말할 수 없다는 것 같은데, 뭐 어느정도의 제한은 있겠지만 우리의 언어는 기본적으로 구조적이고, 한계가 있는 재귀적이다 라고 이해하면 될 것 같습니다.
[The person standing next to [the man from [the company that purchased [the firm that you used to work at]]]]
위 문장 자체가 큰 NP (Noun Phrase, 명사구) 이고 쪼개보면 큰 NP 안에 또, 또 (작은) NP 가 있는 구조입니다.
the firm that you used to work at 도 더 들어가보면 you 라는 NP 로 구분할 수 있습니다.
우측에 보이는 Penn Tree bank 의 한 예를 보시면 이것을 dependency parsing 에서도 보기는 했는데,
이것을 언어학자들은 구문구조문법(Phrase Structure Grammar-PSG)이라고도 하고 우리는 NLP 관점에서 앞으로 Constituency grammar (구성 문법) 라고 부를 것입니다.

그럼 이제, 이 트리 구조를 신경망 구조에서 어떻게 학습하면 될지 알아봅니다.
구성요소의(constituents) 의미적 유사성을 알아내기 위해 우리는 학기 초에 배운 워드 벡터 공간뿐 아니라
더 큰 구성요소인 명사구에도 의미를 부여하고 싶습니다.
And so it seems like what we'd like to do is have a method of computing the meaning of any phrase in a compositional manner, such that the end result is also that these phrases could be stuck inside our vector space models.
그래서 우리가 하고 싶은 것은 어떤 구문의 의미를 구성적으로 계산하는 방법을 가지고 있는 것처럼 보입니다. 그래서 최종 결과는 이 구문이 벡터 공간 모델 안에 들어갈 수 있다는 것입니다.
우리는 구문의 의미를 구성적으로 계산하는 방법을 구하여 최종적으로 구문이 벡터 공간 모델 안에 들어가게 하고 싶습니다.
어떻게 해야 할까요?

지금까지 우리가 얘기한 것 과 같은 맥락으로 설명을 해보자면
큰 구성요소는 작은 단위의 하위 구성요소로 쪼갤 수 있습니다.
결국 principle of compositionality 을 이용하면,
1. 각각의 단어들의 의미를 찾고
2. 그들을 합치면
구문의 vector representation 을 얻을 수 있다고 설명합니다.
여기서 소개하는 모델은 parse tree 와 compositional vector representation 을 같이 학습하게 됩니다.
이렇게 모델을 만들기 위해 우리는
문장의 올바른 구조를 알아내기 위해 구문 분석 (parsing) 을 하고,
이 문장의 representation 을 얻기 위해 meaning computation 을 수행합니다.

그럼 여기서, 우리가 이전에 배운 RNN 과 여기서 말하는 Recursive 가 어떻게 다른지를 알아보겠습니다.
RNN 을 통해서 우리는 최종 state 에서 문장에 대한 하나의 representation 을 얻을 수 있었습니다.
페이지의 내용을 그대로 번역한 것입니다.
- Recursive neural nets require a tree structure
- 재귀 신경망에는 트리 구조가 필요합니다
문법적으로, 의미론적으로 합쳐져 있어야 할 필요가 있는 문구에 대한 의미표현을 연구합니다.
- Recurrent neural nets cannot capture phrases without prefix context and often capture too much of last words in final vector
- 반복 신경망은 앞 부분 없이 구문을 캡처 할 수 없으며 (항상 전체 문장에 대한 표현을 가짐) 종종 최종 벡터에서 너무 많은 마지막 단어의 상태가 많이 반영되어있습니다.
on 의 representation vector 와 the mat 의 phrase representation vector 를 얻었다고 가정합니다.
이 두 개 표현을 가진 child 를 NN 에 넣었을 때 두가지 output 이 나오도록 설계합니다.
1. The semantic representation if the two nodes are merged.: 두 개 node 를 합친 의미표현
2. Score of how plausible the new node would be.: 새 노드가 얼마나 그럴듯한 지에 대한 점수
우측과 같이 계산합니다.
p, parent 값은 두 개 child 의 vector 에 대해 가중치 행렬(이 때 모든 노드에 동일 가중치 행렬을 곱합니다.)을 곱하고 bias 를 추가하고 tanh 를 씌워 비선형성을 갖게 합니다.
연구시기가 오래되어 지금이라면 relu 를 적용할 수도 있겠죠. 그렇지만 이 모델은 완벽하다고는 할 수 없으며 뒤에서 더 복잡한 모델이 나옵니다.
그리고 score 는 p 값에 어떤 벡터를 곱하여 하나의 scala 값을 갖습니다. 그럴 듯 할 수록 더 높은 값을 갖습니다.
이렇게 비교적 간단한 구현을 하고 우리는 greedy parser 모델을 수행했습니다.
가장 높은 score 를 가진 의미표현을 commit 하도록 greedy 하게 설계한다면
1. the cat
2. the mat
3. on the mat
.. 순으로 합쳐(commit)질 것입니다.
이것이 tree recursive neural network 의 첫번째 모델입니다.
몇가지 세부사항을 살펴보자면,
최적화를 하기 위해 우리는 Max-margin loss 를 사용합니다.
잘못 선택할 때마다 loss 가 커집니다.
각 지점에서 최선의 score 를 가지는 곳을 찾고, 합치고 계속 진행합니다.
여기서, 좀 더 나은 결과를 얻으려면 greedy 한 방법 대신 beam search 를 사용할 수 있습니다.
beam search 는 전에도 배운 것처럼 모든 케이스에 대해서 탐색하여 계산량을 많이 쓰는 대신,
확률이 높은 것들만 가져가는 방식을 택하는 것입니다.
실제로 이 간단한 모델을 vision 에 적용한 사례입니다.
작은 단위의 이미지에서 시작하여 건물, 하늘, 도로 등을 인식하는 task 를 수행했을 때,
실제로 Recursive NN 의 정확도가 높은 것을 볼 수 있었습니다.

Tree Recursive NN 에서의 Forward/Backward Propagation 은 이것이 tree 구조인 것 말고는 다른게 없습니다.
역전파 시에 각 노드로 보내던 것 과 똑같이 각 child 에 값을 전파하는 구조입니다.
그래서 관련 페이지는 skip 하겠습니다.

- 이 모델은 꽤 괜찮은 결과를 보였지만, 이런 단순한 구조에서는 몇가지 단점이 존재했습니다.
- 단일 가중치 행렬 TreeRNN은 일부 현상을 포착 할 수는 있지만 더 복잡하고 고차원적으로 구성되거나 긴 문장을 구문 분석하는 데는 적합하지 않았습니다.
- input 간에 interaction 이 실제로 없다.
가중치 행렬 W 에 반은 C1 을 곱하고, 반은 C2 를 곱할 뿐, 실제로 상호작용을 하는 부분은 없게 설계되었으므로 좀 더 복잡한 NN 을 만들어야 했습니다.
- composition function 이 모든 구문 범주, 구두점 등에 대해 동일하게 적용되었습니다.
각 구문의 의미에 상관없이 동일 W 를 갖는 것 자체가 언어학 적으로 가능하지 않은 설계였습니다.
다음으로는 이 단점을 개선한 모델을 알아봅니다.
그 전에, Tree RNN 에서 조금 더 개선된 모델 하나를 더 보고 가겠습니다.

방금전 simple 한 Tree Recursive NN 에서의 단점은 모든 node 에 동일 가중치를 구성한다는 것이었습니다.
여기서는 가중치를 B,C 에 대해 계산한 값, 그리고 그 값을 A 와 계산한 값으로 하여 계산 시에 서로 다른 가중치를 가질 수 있도록 합니다.
예를 들어 형용사와 명사라면 각 카테고리 별로 가중치를 달리하여 합한 것이 해당 노드를 합친 표현을 계산할 때 적용됩니다.
이것은 의미론적으로 더 나은 결과를 냅니다.

그럼 여기서 저 가중치 행렬의 값은 어떻게 빨리 구할 수 있냐 하면,
Beam search 를 통해 확률이 낮은 후보들을 가지치기 하여 속도를 높였고,
각 beam 후보군들에 대해 문법적인 카테고리를 제공하였습니다.
이것이 바로 확률적 context free grammae 와 TreeRNN 을 합한 구성 백터 문법입니다.
제일 좋은 결과라고는 볼 수 없지만,
CVG 의 RNN 모델에서 SU-RNN 모델의 결과가 많이 개선된것을 발견했습니다.
댓글