본문 바로가기

Paper Review

Joint Many-Task(JMT) Model 관련 paper 리뷰

A Joint Many-Task Model:

Growing a Neural Network for Multiple NLP Tasks

Kazuma Hashimoto, caiming Xiong, Yoshimasa Tsuruoka, and Richard Socher

The University of Tokyo

EMNLP 2017 Accepted


이번에 EMNLP 2017에 올라온 논문들을 살펴보다가, Growing Neural Network Multiple NLP Tasks라는 키워드에 이끌려 읽게 되었다. 살펴보면 5개의 Task(POS tagging, Chunking, Dependency Parsing, Relatedness, Textual Entailment)에서 굉장히 간단한 Network Model을 이용해 기존 state-of-the-art 한 성능을 내었던 접근법들과 비교해 competitive하거나 좀 더 뛰어난 성능을 냈다고 나와 있어 꽤 흥미로웠다. 뭐... 물론 읽다 보니까 여러 방법들을 사용했는데 도대체 왜 이런방법을 사용했는지에 대한 자세한 설명이 좀 부족해 아쉽긴 했지만, Model이 간단한만큼 이해하기도 쉬워 리뷰를 한번 해보려고한다.


[arxiv] [My Presentation]


Overview of the joint many-task model prediction different linguistic outputs at successively deeper layers.Overview of the joint many-task model prediction different linguistic outputs at successively deeper layers.

일단 위의 구조가 본 논문에서 주장하는 JMT Model의 architecture인데, POS tagging, Chunking, Dependency Parsing, Relatedness, Entailment로 이루어진 총 5개의 Task에 대해서 train/test를 진행하며 이를 stack을 쌓듯이 하나하나 쌓아서 jointly로 학습한다는 내용이다. 또한 이러한 방식으로 학습을하게 될 경우, low-level(POS tagging, Chunking, Dependency Parsing)에서도 성능을 향상시킬 수 있고, high-level(Relatedness, Textual Entailment)에서도 성능을 향상시킬 수 있다고 주장하고있다.


먼저 그림을 보고 간단하게 설명을 하자면, 각각의 Task는 별개로 동작할 수 있으며, 이를 stack을 하여 다시 jointly train을 하는 방식이다. 논문에 정확히 나오지 않아 내가 논문을 읽으며 생각했던 Train Step에 대해서 적어보도록 하겠다.


Train Step

1. 수집한 dataset에서 단어들을 추출해 embedding layer를 pre-train 한다.

- 해당 논문에서는 POS tagging, Chunking, Dependency Parsing에는 WSJ(Wall Street Journal) dataset을 사용했고, Relatedness와 Entailment에서는 SICK dataset을 사용했다고 나온다.

- Word Embedding 방법에는 Skip-gramN-gram character embedding(왜?)을 사용했다고 나온다.

2. POS Tagging Task의 Input으로 문장에서 각 단어들이 Word2Vec을 통해 embedding 되어 layer로 들어간다. 그 후 layer의 output으로 각 단어별로 나온 softmax classifier with ReLU layer를 통해 각 tag로 분류한다.

- POS tagging layer는 Bi-directional LSTM layer 1개로 이루어져있다.

3. Chunking Task의 Input으로 (의 embedding vector)와 POS tagging에서 나온 hidden state  그리고 Parameter Embedding     Vector(아마 빨간선)이 들어가고 마찬가지로 softmax classifier with ReLU layer를 통해 분류된다.

4. Dependency Task의 Input으로 위의 Task들과 마찬가지로 이 되고, 각 단어 의 parent node candidate를 match function 을 통해 구하고 선택된 parent node 를 dependency label을 한다.

5. Relatedness Entailment를 구하는 방식은 굉장히 유사한데, 먼저 input으로 이전 Task의 hidden state가 전부 들어가고, 여기서 나온 각 단어 별 hidden state인 를 구한 후 이를 Max Pooling을 하여 문장 에 대한 representation을 구한다. 이렇게 구해진 에 대한 representation 를 함수를 이용해 계산하고 마찬가지로 softmax classifier with ReLU layer를 통과시켜 분류한다.



전체적으로 보면 위와 같은 Step을 통해 학습을 하는 것 같고, POS Tagging을 먼저 학습하고 이 weight 상태를 fix 하지 않은 상태에서 Chunking layer를 쌓아서 jointly training하고, 또 fix 하지 않은 상태에서 Dependency Parsing layer를 쌓고 training 하고... 이걸 반복 하는 것 같다.


개인적인 의견으로, training을 할 때 weighted label embedding이란게 있는데 형태의 수식이다... 이걸 보면 는 단순히 VP, NP 와 같은 tag들을 one-hot vector를 한 것 같고(정확히 나오진 않지만...) 그러면 이 one-hot vector에 각 확률 값을 곱하고, element-wise addition을 통해 vector를 만들게 되는 것 같은데... 단순히 모든 tag 에 대한 확률 값을 뭐 이렇게 수식을 정해서 까지 했는지 의문이다.


또한 Relatedness와 Textual Entailment 계산 시 함수를 너무 심플하게 만든게 아닌지 좀 의문이다. 물론 성능은 잘 나오는 것 같다.


실험은 JMT Model내에서 single layer만 사용할 경우와 POS tagging, Chunking layer만 사용할 경우, Relatedness와 Textual Entailment만 사용할 경우 등 각 layer를 어떻게 구성하는지에 대한 실험 내용이 있고, 그 외에 기존 state-of-the-art 한 방법과 비교를 해 놨는데 모든 Task에서 더 뛰어난 성능을 발휘한 건 아니지만 꽤 괜찮은 성능을 내었다.


논문에서 말하기를 아직 다른 Task를 추가한다든지 혹은 몇몇 function을 바꾸는 등 많은 발전 가능성이 있는 Model이라는 얘기를 하고 있다.






휴... MarkDown Editor를 이용안하고 오랜만에 Tistory 자체 Editor를 사용해봤는데 너무 안좋은것 같다...