[Paper Review] Recent Trends in Deep Learning Based Natural Language Processing (2017)
- -
데이터의 계층적인 표현을 학습하는 다층 레이어를 사용하는 딥러닝 기법은 많은 도메인에서 state-of-the-art 결과를 내고 있다. 본 논문은 수많은 NLP 과제에 적용된 딥러닝 모델들과 기법을 살펴보고 비교함으로써 NLP의 과거,현재,미래를 이해해보고자 한다.
Ⅰ. Introduction
NLP는 인간 언어의 분석과 표현을 자동화하기 위한 계산 기법이다.
지난 수십년간, 머신러닝은 NLP 문제를 풀기위해 고차원이면서 sparse한 feature들을 학습한 얕은 모델(shallow models: SVM, logistic regression, etc..)을 사용했었다. 그리고 최근 수년간, dense vector representation에 기반한 뉴럴 네트워크가 NLP 문제에서 뛰어난 성능을 보여주었다. 이러한 트렌드는 워드 임베딩과 딥러닝 기법의 성공에 의해 시작된 것이다. 전통적인 머신러닝 기법에 기반한 NLP는 사람이 직접 추출한 feature에 대한 의존도가 높고, 이러한 피쳐들을 추출하는데 많은 시간이 소요되고 불완전한 경우도 많지만 딥러닝은 자동화된 피쳐 추출이 가능하다.
Ⅱ. Distributed Representation
통계기반 NLP는 복잡한 자연어를 모델링하는데 기본 옵션으로 등장했다. 하지만 언어 모델은 결합 확률 함수(joint probability function)을 학습해야 했기 때문에 차원의 저주 문제를 맞닥뜨렸다. 이 문제로 인해 저차원에 존재하는 단어의 distributed representation을 학습하고자 하게 되었다.
A. Word Embeddings
Sparse Embedding: One-hot Encoding
Text Corpus내에 중복을 제외한 모든 단어들을 가지고 Vocab Dictionary를 구축한다.Vocab Dictionary에 있는 각 단어들은 고유한 index를 갖게 되고 이 index에 해당하는 부분에는 1, 나머지는 0으로 채운 One-hot vector를 생성한다.
One-hot vector의 차원은 Vocab Dictionary의 단어 수와 같은데 단어 수가 늘어날 수록 차원이 증가하게 되어 지나치게 큰 연산 비용을 초래한다는 문제점이 있다. 또한 어떤 두 단어를 선택하던지 간에 두 단어 벡터의 내적값은 0이 되어 단어 간의 유사도 같은 관계를 파악할 수 없다. → Sparsity Problem(희소성 문제)
Dense Embedding
Dense Embedding 방법론들은 단어의 분산 표현(Distributed Representation)을 생성하는 것이 목적이다.
분산 표현은 기본적으로 분포 가정(distributional hypothesis)이라는 가정 하에 만들어진 표현 방법으로, 분포 가정은 '비슷한 의미의 단어는 비슷한 문맥에서 등장하는 경향이 있다'라는 가정이다. 따라서 분산 표현으로 된 벡터(Distrubutional Vector)는 이웃한 단어들 간의 특징을 잡아내고자 한다. 이런 분산표현으로 된 벡터는 단어 간 유사성을 갖고 있다는 것이 장점이다.
워드 임베딩은 딥러닝 모델의 첫번째 data processing layer에 사용된다. 일반적으로 워드 임베딩은 레이블이 없는 거대한 말뭉치에서 보조적인 목적함수를 최적화함으로써 사전 학습된다. 워드 임베딩은 문맥 유사도를 구하는데 효과적이고 임베딩 벡터의 차원이 작기 때문에 계산이 빠르고 효율적이다.
워드 임베딩은 주로 문맥(context)을 통해 학습된다. 1990년대에는 분산의미론(distributional semantics)연구의 기초를 세웠다. 이후 발전은 토픽 모델과 언어모델(language model)의 발전을 이끌었다. 이러한 발전들은 표현학습(representation learning)의 토대를 마련했다. Bengio는 단어의 distribution learning을 학습하는 neural language model을 제안하였다.
▮Neural Language Model (Bengio et al, 2003)
언어 모델(Language Model)은 미리 설정한 window size 내 단어를 통해 그 다음에 위치할 단어를 예측하는 task를 수행한다. 이전까지는 n-gram과 같은 통계기반 언어모델을 task를 적용하였으나 해당 논문은 최초로 딥러닝 네트워크 기반 구조로 언어모델에 적용하였다.
그러나 window size를 설정하기 때문에 입력 길이가 고정되어 모든 단어를 고려할 수 없다는 한계점이 있다.
B. Word2Vec
Neural Languae Model과는 달리 불필요한 파라미터를 사용하지 않기 위해 임베딩 행렬만 포함시킨 은닉층이 하나인 간단한 네트워크 구조를 사용한다.
+ Word2Vec은 딥러닝 모델은 아니다. 딥러닝은 은닉층이 여러개 존재하고 은닉층마다 활성화함수들이 존재하지만, Word2Vec은 임베딩 행렬(lookup table)만 갖고있는 하나의 은닉층이 존재하고 활성화함수는 존재하지 않기 때문이다.
또한 NLM의 경우 이전 단어들을 참고하여 다음 단어를 예측하지만, Word2Vec은 전/후 주변 단어를 통해 중심 단어의 조건부확률을 계산한다.
Word2Vec은 크게 CBOW(Continuous Bag of Words)와 Skip-gram 방식으로 나뉜다.
▮CBOW(Continuous Bag of Words)
CBOW는 window size 내 주변 단어(context words)로 중심 단어를 예측한다.'먹어봤는데' 라는 단어를 중심 단어로 보고 window size = 2로 설정한다면 이전 2개 단어, 이후 2개 단어에 해당하는 단어 3개의 One-hot 벡터들을 input layer에 넣는다. 각각 단어들의 One-hot 벡터는 모든 단어들이 공유하는 가중치 행렬인 W와 선형결합 연산을 진행하고 이렇게 나온 embedding 벡터들의 값을 평균내어 동일한 차원의 단일 벡터를 생성한다. 해당 단일 벡터는 은닉층의 input값으로 사용되어 또 다른 가중치 행렬 W'와 만나 Output 벡터를 반환한다. 정답 벡터에 해당하는 One-hot 벡터와의 Cross Entropy 연산을 통해 parameter를 업데이트한다.
▮Skip-gram
Skip-gram은 CBOW와는 정반대의 task를 수행한다. 중심단어가 주어졌을 때 window size 내 주변 단어를 예측하는 방식이다.
중심단어인 '먹어봤는데'의 One-hot 벡터가 input layer에 들어가게 되면 가중치 행렬 W(VxN)와 선형결합으로 N 차원의 임베딩 벡터를 생성한다. 해당 임베딩 벡터와 또 다른 가중치 행렬 W'와 만나 각각의 output 벡터들을 반환한다.
중심단어가 주어졌을 때, 주변 단어가 나타날 확률값은 아래와 같이 나타낼 수 있다.
이 값이 최대화가 되는 방향으로 학습이 진행된다.
분자의 경우 주변단어의 벡터와 중심단어의 벡터를 exp 취한 값으로 주변 단어와 중심 단어의 유사도를 높이는 쪽으로 학습 진행되고 분모의 경우 window size 내에 포함되지 않는 단어까지 포함하여 계산한 유사도값이 작아지도록 학습된다.
보통 Skip-gram이 CBOW보다 성능이 좋은데 그 이유는 CBOW는 backpropagation을 할 때 gradient flow가 주변 정보가 분산이 되게 흐르는 반면, Skip-gram은 output layer에 해당하는 주변 단어들이 하나의 중심단어로 gradient를 흘려보내고 있기 때문에 gradient가 합산되기 때문이다.
개별 단어 임베딩의 한계는 두 개 이상의 단어("hot potato"같은 숙어, "Boston Globe"같은 개체명) 조합이 개별 단어 벡터의 조합으로 표현될 수 없다는 것이다. 이 문제를 해결하는 방법은 Mikolov et al(2013)에서 살펴본 것과 같이 동시등장단어에 기반한 구문을 식별하고 이들을 별도로 학습시키는 것이다. 그 이후에 등장한 기법으로는 레이블이 없는 데이터로부터 n-gram 임베딩을 직접적으로 학습시키는 방법이다.
또 다른 한계는 주변 단어의 작은 윈도우에만 기반한 임베딩을 학습하는데서 비롯된다. 'good'과 'bad'같은 상반된 극성을 갖는 단어가 거의 같은 임베딩을 공유하는 경우가 있는데 이는 감성분석 task에서는 문제가 될 수 있다. Tang et al(2014)는 sentiment specific word embedding(SSWE)을 통해 문제를 해결하는 방법을 제안했다. 이 방법은 임베딩을 학습하는 동안 손실함수에 정답 극성도를 포함시켰다.
단어 임베딩의 일반적인 주의사항은 임베딩이 사용된 어플리케이션에 크게 의존한다는 것이다. Labutov and Lipson(2013)은 현재 task에 맞추기 위해 단어 임베딩을 재학습하는 task specific embedding을 제안했다. 아무런 사전지식없이 임베딩을 학습시키는 것은 많은 시간과 리소스를 필요로 하기 때문에 이는 매우 중요하다. Mikolov et al(2013)은 Word2Vec을 학습하는 과정에서 Negative Sampling을 하는 방법을 제안했다.
Negative Sampling
기존의 Word2Vec모델은 모든 단어 집합에 대해 소프트맥스 함수를 수행하고 역전파를 수행함으로서 주변 단어와 전혀 상관없는 단어들까지도 워드 임베딩 조정 작업을 수행한다는 것이다. 즉, "메이플스토리", "로스트아크"같은 단어에 집중하고 있다면 Word2Vec는 "부트캠프"와 같은 연관 관계가 없는 단어의 임베딩을 조정할 필요가 없다. 따라서 "메이플스토리", "로스트아크", "게임"과 같은 주변 단어들을 positive로 두고 "부트캠프"와 같은 주변 단어가 아닌 상관없는 단어들을 일부만 갖고와 negative로 설정한다. 이렇게 전체 단어 집합보다 훨씬 작은 단어 집합을 만들어놓고 마지막 단계를 이진분류 문제로 바꾸게 된다면 다중 클래스 분류 문제보다 연산량에 있어서 더 효율적이다.
▮GloVe(Global vectors for word representation)
Word2Vec의 한계점으로 고정된 윈도우 내의 단어만 고려하기 때문에 전체 corpus내에 동시 등장(co-occurrence)하는 정보를 반영하기 어렵다는 점이 있다. Glove는 Word2Vec과 같은 예측 기반의 방법론은 유지하되 단어의 동시 등장 여부를 추가로 고려하는 방법이다.
아래 표의 P(k|ice)는 ice라는 단어가 주어졌을 때 동시에 k라는 단어가 등장할 확률을 담고 있는 확률분포표이다.
1) solid는 steam보다 ice와의 관련성이 높기 때문에 등장확률 비율이 크다.
2) gas는 ice보다 steam과의 관련성이 높기 때문에 등장확률 비율이 작다.
3) water는 ice, steam 모두 관련성이 있기 때문에 등장확률 비율이 1에 가깝다.
4) fashion은 ice, steam 모두 관련성이 없기 때문에 등장 확률 비율이 1에 가깝다.
Glove는 임베딩된 중심단어 벡터와 주변 단어 벡터간의 내적 값이 동시 등장 확률의 로그값과 같도록 학습하게 된다.
Dense Embedding 방법론의 한계
Neural Language Model과 Word2Vec의 경우 고정된 윈도우 사이즈 내에 위치하지 않은 단어들은 고려하지 못한다.
GloVe의 경우 동시 등장 빈도행렬을 구축하기 때문에 모든 단어들의 문맥 정보를 담고 있지만 단어 수가 많아지면 계산 복잡도가 커진다는 문제점이 있다.
세 방법론의 공통적인 문제점으로는 Lookup Table을 기반한 임베딩 연산을 진행하기 때문에 한 단어당 하나의 임베딩 벡터와 맵핑이 될 수밖에 없어 문맥에 따른 단어의 의미 차이를 고려하지 못한다는 점이다. (ex. play: 놀다 / 연주하다)
C. Character Embeddings
Word Embedding은 문법적,의미적 정보를 잡아낼 수 있다. 그러나 품사태깅이나 개체명 인식 같은 태스크에서는 단어 내부의 형태학적 정보 또한 매우 유용하다.
단어는 개별 문자의 결합이기 때문에 Character Embedding(문자 임베딩)은 미등재 단어(unknown word) 문제에 자연스럽게 대처할 수 있다.
D. Contextualized Word Embeddings
각 단어가 각각 다른 문맥에서 등장했을 때 그 차이를 반영해서 문맥별로 다른 임베딩 벡터를 생성하는 방법론이다.
ELMo (Embeddings from Language Model)
ELMo는 RNN 계열의 sequential한 임베딩을 다룬 모델이다. Neural Language Model과 같이 이전 시퀀스들이 주어졌을 때, 다음에 등장할 단어를 예측하는 language model task를 수행한다.
모든 시퀀스 내에서의 단어들을 고려하기 위해 순방향 언어 모델과 역방향 언어 모델을 개별적으로 구성해서 서로 가중치를 공유하지 않는다.
같은 단어라고 하더라도 문장 시퀀스에 따라 다른 임베딩 벡터를 생성하는 과정은 아래와 같다.
1) 아래 그림에서 처럼 각 LSTM layer 마다 hidden state를 도출한다.
2) 순방향, 역방향의 각 벡터를을 concat한 후 각 layer별 가중치를 곱해준다.
3) 각 층의 가중합한 벡터를 모두 더해준다.
3) 벡터의 크기를 결정하는 파라미터를 곱하여 최종 representation 벡터를 생성한다.
Transformer
이전까지는 RNN 계열의 모델들이 순차적(sequential)으로 입력 시퀀스를 받아서 연산을 처리하는 방식이었다.
Transformer은 self-attention이라는 구조에서 기반한 Multi-Head Attention을 통해 병렬적인 연산 처리를 가능케하였다.
Transformer는 원래 임베딩 자체를 위한 모델이 아닌 Seq2Seq task(ex. 기계 번역)을 위한 모델로 제안되었는데 LSTM을 뛰어넘는 좋은 성능을 기록하면서 Transformer을 이용해 사전 훈련된 언어 모델을 학습하는 시도가 등장하였다.
BERT
Transformer의 Encoder 구조만을 사용하여 비지도 기반의 사전 학습 task(Maksed LM, Next Sentence Prediction)을 수행한다. 시퀀스 내 모든 단어 간 관계를 고려한 임베딩 벡터를 생성하게 된다.
사전 학습 이후에는 수행하고자 하는 downstream task에 맞게 fine-tuning을 진행한다.
1) BERT input embedding
1. 단어보다 더 작은 단위로 쪼개는 서브워드 토크나이저를 이용하여 토큰화를 수행한다.
2. Transformer에서는 Positional Encoding이라는 방법을 통해서 단어의 위치 정보를 표현했다. (Positional Encoding : sin함수와 cos함수를 사용하여 위치에 따라 다른 값을 가지는 행렬을 만들어 이를 단어 벡터들과 더하는 방법). BERT에서는 이와 유사하지만, 위치 정보를 사인 함수와 코사인 함수로 만드는 것이 아닌 학습을 통해서 얻는 Position Embedding이라는 방법을 사용한다.
3. BERT는 QA 등과 같은 두 개의 문장 입력이 필요한 task에 적용하기 때문에 문장 구분을 위해서 Segment Embedding이라는 또 다른 임베딩 층을 사용한다. 첫번째 문장에는 Sentence 0 임베딩, 두번째 문장에는 Sentence 1 임베딩을 더해주는 방식이며 임베딩 벡터는 두 개만 사용한다.
- WordPiece Embedding : 실질적인 입력이 되는 워드 임베딩. 임베딩 벡터의 종류는 단어 집합의 크기로 30,522개
- Position Embedding : 위치 정보를 학습하기 위한 임베딩. 임베딩 벡터의 종류는 문장의 최대 길이인 512개
- Segment Embedding : 두 개의 문장을 구분하기 위한 임베딩. 임베딩 벡터의 종류는 문장의 최대 개수인 2개
2) BERT의 Pre-training(사전 학습)
1. Masked Language Model (MLM)
입력 텍스트의 15%의 단어를 랜덤으로 마스킹(Masking)한 후 해당 단어들을 예측하는 task
1. Next Sentence Prediction
두 문장이 실제 이어지는 문장인지 아닌지를 [CLS] 토큰의 위치의 출력층에서 이진 classifier을 추가한다. [CLS] 토큰은 BERT가 분류 문제를 풀기 위해 추가된 특별 토큰이다.
위의 그림에서 나타난 것과 같이 Masked Language Model과 Next Sentence Prediction은 따로 학습하는 것이 아닌 loss를 합하여 학습이 동시에 이루어진다.
3) BERT의 Word Embedding vector 생성
BERT의 경우 ELMo와 같이 대량의 unlabled text corpus를 가지고 위에서 소개한 2가지의 task를 통해 사전학습 진행한다.
대량의 데이터를 가지고 사전학습을 수행하였기 때문에 새로운 text input이 들어왔을 때 단어들간의 관계를 잘 고려한 word representation vector 값을 반환한다.
[CLS]라는 벡터는 초기에는 임베딩 layer를 지난 단순한 임베딩 벡터이지만, BERT layers를 지난 후에는 [CLS], I, love, you라는 단어 벡터들을 모두 참고한 후에 문맥 정보를 가진 벡터가 된다.
BERT Layer는 Transformer의 인코더 구조를 갖고 있고 총 12개의 BERT Layer를 통과하여 Word Embedding vector를 반환한다.
Neural Language Model ,Word2Vec, GloVe의 경우 단일 은닉층으로 구성되어있기 때문에 Shallow한 반면 Transformer, ELMo, BERT는 Deep한 구조의 네트워크를 갖고 있다.
또한 Neural Language Model ,Word2Vec, GloVe의 경우 input으로 주어지는 text에 특화된 임베딩 벡터를 생성한 반면
Transformer, ELMo, BERT는 대량의 text corpus를 사용해 사전학습을 수행하였기 때문에 최대한 다양한 문맥 하에서 word representation vector을 생성할 수 있다.
(Word2Vec, GloVe도 사전학습은 가능하지만 다의어의 특성을 반영할 수 없기 때문에 사전학습을 수행해도 효과가 없다.)
ELMo의 경우 RNN계열의 모델이기 때문에 Sequential한 연산처리를 통해 Embedding vector을 생성한 반면,Transformer, BERT의 경우는 Multi-head attention이라는 기법을 통해 병렬(Parallel)한 연산 처리가 가능하다.
Reference:
논문 : https://arxiv.org/pdf/1708.02709.pdf
'딥러닝 > 논문 리뷰(GitBook으로 이전)' 카테고리의 다른 글
당신이 좋아할만한 콘텐츠
-
[Paper Review] AEDA: An Easier Data Augmentation Technique for Text Classification 2022.10.10
-
[Paper Review] How good is your tokenizer? 2022.09.13
-
[Implementation] Sequence to Sequence Learning with Neural Networks 2022.07.26
-
[Paper Review] Sequence to Sequence Learning with Neural Networks 2022.07.23