Kaggle의 랭커들의 전략을 보면, 많이들 CRF layer를 활용했다. 사용자가 설정한 모델에 CRF layer을 추가적으로 붙이는 것은 'from keras_contrib.layers import CRF로 한 줄이면 활용하면 간단하게 끝나지만, 이 CRF가 왜 다양한 NLP문제에서 활용되고 있는지, 왜 이 CRF layer가 효과적인지 평소에 궁금하여 이번 포스팅에 다루게 되었다.
CRF(Conditional Random Field) 는 Sequence tagging task를 위한 graphical model 중 하나이다. Sequence tagging task에서 가장 널리 알려진 개체명인식 문제 NER(Name Entity Recognition)에 CRF는 자주 적용되고 있기도 하다. CRF는 데이터 X가 주어졌을 때 레이블 Y가 나타날 확률을 직접적으로 계산하기 때문에 Discriminative model이다. CRF의 모델 파라미터들은 실제의 P(Y|X)를 최대화 시키는 쪽으로 학습하게 된다. P(X)를 genrate하지 않아도 된다.
CRF는 현재 tag를 예측하는데 있어서주변 이웃 tag 정보를 활용할 수 있는 방식 중에 하나이다. 예측 당시에 token 위치에 초점을 맞추는 것이 아니라 문장 단에서 집중하는 것이다. CRF의 네트워크는 LSTM, bi-LSTM과 달리 input과 output 노드가 직접적으로 연결되어 있다(undirected graph).
출처: Bidirectional LSTM-CRF Models for Sequence Tagging의 논문 그림/ Linear chain CRF
Maximum Entropy Markov model(MEMM)과 많이 비교되며, Maximum Entropy Markov model과 달리 x와 y를 연결하는 에지의 방향이 정해져 있지 않다. (수식을 살펴보면, HEMM보다 normalization이 sequence에 속한 모든 토큰과 y label들을 고려하여 분산 정규화 과정이 일어나기 때문에, 계산이 더 복잡하다. 이에 HEMM보다 자연스럽게 학습속도가 조금 더 걸린다. 이와 다르게, HEMM는 각 토큰 시점별 국지적인 정규화를 거친다.