4주차(1) - End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF

2019. 2. 10. 16:16풀잎스쿨 NLP Bootcamp

논문링크: https://arxiv.org/abs/1603.01354

참고자료: (ratsgo님 자료)End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF.pdf


Abstract

지금에서야 Self-Attention이니 BERT니 하는 하는 여러 기법들을 NLP에서 사용하지만 이 당시만해도 Self-Attention에 대한 개념이 나오기 전이었다. 때문에 Sequence Labeling을 위해서 여러가지 기법이 사용되었는데, 이중 하나인 CRF(Conditional Random Field)를 통해 현재의 State뿐만이 아닌 바로 이전의 State도 고려하고자 한다.

하지만 CRF와 방법을 도입하기 위해서는 수작업을 통한 Feature Engineering이 필요하다. 이는 시간과 노력이 매우 많이 소요되는 작업이다. 때문에 이러한 작업을 보다 쉽게 적용하기 위해 Character-level Embedding으로 뽑은 Feature와 Word Embedding을 결합하는 과정을 도입하게 된다.

이러한 과정을 통해 수작업(Hand-crafted Feature Engineering)이 전혀 필요없는 End-to-end모델을 제안한 점이 이 논문의 주요 Contribution이 될 것이다.

Contribution

Model Description

우선, 모델에 대해 설명하는 그림만 보면 Word Embedding이 Character-level Representation으로 변환되었다고 착각하기 쉽기 때문에 혼동하지 말아야 할 것이다. 이 그림에서 Bi-directional LSTM에 들어가는 Input은 Character-level Representation과 Word Embedding이 Concatenate된 결과물이다. (여기서 Character-level Embedding은 각 단어를 Character-level로 쪼개서 만들어진 Embedding이다.) 그 이후 Bidirectional LSTM(Bi-LSTM)을 거친 Output이 CRF Layer의 입력으로 들어가는 방식이다.


Dropout은 CNN의 Input부분, LSTM의 Input과 Output부분에만 적용된다.


위 그림을 통해 Character-Level Representation이 어떻게 이루어지는가 조금 더 상세하게 알 수 있다. 여기서는 Kernel Size 3을 사용했으며, Dropout이 적용되면서 랜덤한 확률로 Size 3의 Kernel 중 몇가지가 랜덤하게 빠지는 방식으로 이해할 수 있다.


전 논문들에서 Character-Level Embedding이 어떻게 작동하는가, Bi-LSTM방식이 어떤 방식으로 동작하는가에 대해 설명했으므로 이러한 기본적인 부분에 대해서는 넘어가도록 한다. 자세한 Hyperparameter는 아래 표를 따른다.


Conditional Random Field

CRF에 대해서 알기 위해 몇가지 개념을 알고 가야한다. 일단 Bayes Rule을 설명하고자 한다.

위와 같은 공식을 통해 보통 표현이 된다. (P(x, y)는 P(x|y)P(y)로 바꿀 수 있다.) 여기서 Output이 Continuous하지 않고 Discriminative하다고 가정한다면, 다음과 같은 공식을 통해 나타낼 수 있다.

우리가 원하는 Prediction이 Generative한지, Discriminative한지는 어떤 모델을 사용하는가에 달렸다. 일반적으로는 직접적인 방식을 통한 Prediction을 할 경우에 Discriminative하고, 간접적인 방식을 통한 Prediction을 할 경우에는 Generative하다. 이를 이해하기 쉽게 나타낸 것이 아래 그림이다.


다시 Prediction에 대한 이야기로 돌아와보자. 일단, argmax_y p(y|x)부분을 Bayes Rule을 통해 p(y|x)를 변환할 수 있는 것을 위에서 언급했다. 이를 수식으로 풀어보자면 다음과 같다.



Bayes Rule을 사용해서 공식을 풀면 위와 같은 방식으로 표현할 수 있는데, p(x)부분은 동일한 조건 내에서 다른 요소에 대한 확률을 계산하더라도 동일하게 계산되는 부분이므로 편의성을 위해 생략할 수 있다. (자세한 설명은 https://www.quantumdl.com/entry/Language-Model-Naive-Bayes에서 설명해놓았다.)


그럼 이번에는 기존의 NLP에서 Language Model에 사용되었던 방법인 HMM(Hidden Markov Model)을 살펴보자. 이 방식은 Time t의 POS에서 t+1의 특정 POS로 넘어가는 확률인 Transition Probability와 특정 POS에서 단어가 나올 확률인 Emission Probabillity를 통해 Sequence 내에서 Recursive하게 Prediction을 하고자 하는 방법이다.



위 그림을 통해 조금 더 쉽게 이해를 해보자. 우리가 race라는 단어를 예측한다고 가정했을때, HMM에서는 다음 확률을 모두 곱하는 것 중 가장 큰 값을 찾는 방식으로 계산할 수 있을 것이다.

  1. 시작 토큰에서 NNP로 넘어갈 확률 (Transition)

  2. NNP에서 Secretariat이라는 단어가 나올 확률 (Emission)

  3. NNP에서 VBZ라는 POS로 넘어갈 확률 (Transition)

  4. VBZ에서 expected라는 단어가 나올 확률 (Emission)

  5. VBZ에서 TO라는 POS로 넘어갈 확률 (Transition)

  6. TO에서 to라는 단어가 나올 확률 (Emission)

  7. TO에서 VB라는 POS로 넘어갈 확률 (Transition)

이 확률들을 모두 고려한 후, race라는 단어가 가장 높은 확률을 가진다면 올바른 Prediction이 나오고 있다는 말이 될 것이다. 이 확률을 계산하는 방식을 일반화된 수식으로 나타내면 아래와 같다.

이 방식이 가능한 이유는 Markov Property때문에 가능하다. 이 Markov Property는 현재 Hidden State는 이전의 Hidden State에만 의존한다라는 정의를 가진다. 이 부분에 대해 좀더 자세하게 알고 싶다면 https://norman3.github.io/rl/docs/chapter04.html를 참고하도록 하자.


다시 수식으로 돌아와서 형태를 POS(여기서는 Y_i, Y_i-1)가 주어지고 다음 단어를 예측하는 방식이다. (POS to Word) 하지만 Learning이라는 방식의 특성상 처음부터 모든 예측이 올바르게 진행될 수는 없다. 따라서 학습을 위해서는 EM 알고리즘이 사용된다. 때문에 Statistical하다는 특징을 가지게 되며, Matrix 형태의 Output을 가지게 된다. 여기서 다시 EM 알고리즘에 대해 설명하려면 많은 부분이 할당되므로, 이 부분에 대해 더 궁금하다면 http://norman3.github.io/prml/docs/chapter09/4.html를 참고하도록 하자.


HMM은 현재의 POS 정보를 기반으로 해서 Word를 예측하는 방식이었다. 하지만 NER과 같은 Sequence Labeling을 위해서는 Word 정보를 기반으로 POS를 예측하는 방식이 필요하다. 이와 같은 점을 해결하기 위해서 나온 방식이 MEMM(Maximum Entropy Markov Model)이라는 방식이다.


간단한 설명을 하자면, 현재의 POS를 계산하기 위해 전 Time step(t)의 Hidden State와 현재의 Feature(단어의 Feature를 말하며, 여기서는 단어만이 아닌 단어의 대소문자, 글자 수, 단어의 마지막 알파벳, 등등 과 같은 여러가지 Feature를 모두 고려한다)를 정보로 주고 현재의 POS를 계산하는 방식이다. 여기서 Word Feature는 Observation, POS 정보는 Hidden State로 정의한다. 다시 수식으로 풀어보면 아래와 같다.

HMM 공식에서 달라진 부분은 exponential에 들어가는 들어가는 부분이 X_i (현재의 단어에 대한 모든 Feature), 그리고 Y_i-1(t-1의 Hidden State)라는 점이다. 이 방식은 CRF가 작동하는 방식의 베이스가 된다.


그렇다면 여기서 들어갈 Word Feature에 대한 데이터는 어떻게 확보하는 것일까? 바로 이 부분이 수작업이 필요한 부분이다.


그렇다면 MEMM방식은 문제없이 잘 돌아가는 부분일까? 그렇지 않다. MEMM에서도 HMM과 마찬가지로 현재의 State만을 고려하기 때문에 전체 Sequence의 확률이 높음에도 현재의 확률만 고려하여 가장 높은 것을 고를 때 정답이 아닐 위험성을 가진다는 문제점이 있다. 이는 Label Bias라는 문제로 귀결되는데, 이를 해결하기 위해 나온 방식이 바로 CRF(Conditional Random Field)이다.


일단 Label Bias문제를 살펴보자.

일단 <Observation 1>에서 State 1을 기준으로 가장 높은 확률은 State 1 → State 2(0.6)이다. 그럼 <Observation 2>에서 가장 높은 확률인 State 2을 기준으로 가장 높은 확률은 State 2 → State 2(0.3)이다. 동일한 방식으로 <Observation 3>도 State 3(0.3)이 선택된다.


하지만 정작 확률을 계산해보면 State 1 - State 1 - State 1가 가장 높은 확률이다. (0.4 * 0.45 * 0.5) 왜 이런 결과가 나왔을까? 우리는 가장 높은 확률만을 골라서 골랐지만, 정작 Sequence 전체를 볼 경우에는 최적의 확률이 다를 수 있다는 이야기이다. 바로 이 점에 대한 문제가 Label Bias이다.


우리는 위 그림과 같이 현재의 Hidden State만을 고려하여 가장 높은 확률을 계산해 나갔다. 이는 전체 확률에 대해 계산할 경우, 다른 결과가 나올 수 있다는 위험성을 가진다. 왜 이러한 결과가 나올까? State 1에서의 경우의 수는 State 1, State2 두가지의 경우밖에 없기 때문이다. 발표에 의하면 이렇게 경우의 수가 2가지로 한정되는 문제가 Dataset 내에서 Observation 1 - State 1에 대한 케이스가 많이 없기 때문이 아닌, 구조 자체의 문제로 정의한다. 바로 이와 같은 점 때문에 Global Normalize라는 방법이 필요하다.



이 경우, 각 Sequence에 대한 확률을 구함으로써 Label Bias가 일어날 경우를 제외할 수 있다. 또한 이렇게 Sequence에 대한 확률을 구할 때, Observation의 처음부터 끝까지 연결되는 경우만 고려하는 방식인 Viterbi Decoding을 통해 완전한 Sequence가 되는 경우만 고려함으로써 계산량을 조금이라도 더 줄일 수 있게 된다. 이 방식은 기존 HMM과 같은 방식에 비해 Sequence 전체에 대한 정보를 모두 고려한다는 장점을 가지게 된다.


하지만, 이러한 방식을 계산할 경우, 매우 많은 경우의 수가 나오게 된다. 때문에, 메모리에 모두 담아내기 힘든 정도의 정보량이 존재할 수 있다. 바로 이를 위해 사용되는 방식이 논문에서 제안하는 방식인 RNN(LSTM)을 이용하여 CRF를 계산하는 방식이다. 조금 더 자세한 설명에 대해 알아보고 싶다면 맨 위에 있는 참고자료 PDF를 참조하자.

(정말 상세한 설명이 포함되어있으니 참고하실 분들은 꼭 보시길)

Conclusion & Result

Result

우선 각 모델별 성능이다. 여기서는 각각의 Task인 POS와 NER에 대해 모두 개선된 성능을 보이고 있다. 다만 POS의 경우 기존의 성능 자체가 좋아서 그런지는 몰라도 크게 개선된 점은 보이지 않는다. NER의 경우에는 기존의 성능에 비해 많이 나아진 결과를 보이는데, 논문의 제목인 LSTM-CNN-CRF 모델 대신 'BRNN'-CNN-CRF라는 점이 살짝 걸린다. 아마 LSTM을 사용했을때는 성능이 그렇게 많이 개선이 되지 않았거나 오히려 떨어지는 결과가 나오지 않았을까고 예상된다.


Character-Level Embedding에 Concatenate되는 Word Embedding의 데이터 셋이 어디에 기반하느냐에 따른 성능 차이를 나타낸다. 논문에서는 기존 방식에서는 Senna가 제일 성능이 잘 나왔었다고 언급한다. (실제 결과도 그렇게 나오는 것으로 보인다) 역시 POS Task에 대해서는 그렇게 많은 성능 개선이 이루어 졌다고 보기 힘들다고 판단된다.


Dropout을 적용 했을때와 하지 않았을때의 성능 차이를 나타낸다. POS/NER 두 경우 모두 Dropout을 사용했을 때 성능 개선이 이루어졌다. 논문에서는 Significant improvement라고 소개하고 있다.


Vocabulary에 포함되는지 또는 되지 않는지에 따른 성능 차이를 보여주는 표이다. 각 용어는 다음과 같다.

  • IV - in vocabulary. Model에 들어가는 데이터셋과 Word Embedding에 사용된 데이터셋 둘다 단어가 존재
  • OOTV - Out-of-training vocabulary words. Model에 들어가는 데이터셋에만 단어가 없는 경우.
  • OOEV - Out-of-embedding vocabulary words. Pretrained Word Embedding 데이터셋에 단어가 없는 경우.
  • OOBV - Out-of-both-vocabulary words. 두 데이터셋에 모두 단어가 존재하지 않는 경우
위 표를 기준으로는 CRF를 사용했을 때 POS Task의 OOTV를 제외하고 모두 성능개선이 이루어진 것을 확인할 수 있다.

Conclusion

이 논문에서는 LSTM-CNN-CRF를 사용하여 Character-Level Embedding과 Word Embedding을 모두 포함한 정보를 가지고 LSTM-CRF를 통해 Sequence Labeling 모델을 제시함으로써 기존 방식에 비해 성능을 개선하고자 했다. 사실 POS Tagging에 대한 Task에서는 성능 차이가 그렇게 많이 보이지 않는다는점이 마음에 걸리긴 하지만, NER에 대해서는 성능의 개선이 이루어 졌다는 점에서 조금은 의미가 있을 것이다.

하지만 CRF를 위해 LSTM을 사용한다는 점은 성능 개선이 그렇게 크게 필요하지 않은 Task에 대해서는 굳이 이 모델을 사용할 필요가 없을 듯 하다. 따라서 NER과 같은 Task에 대해서 이 모델을 제시한다면 어느정도의 성능 개선을 꾀할 수 있을 것이라고 이해할 수 있겠다. (다만 현재는 Self-Attention과 같은 방식들이 출현함으로써 CRF는 잘 쓰이지 않는 방법이 되었다)