1. ELMo
Bank라는 단어는 Bank Account와 River Bank에서 전혀 다른 의미를 가진다. 그러나 Word2Vec이나 GloVe는 Bank라는 단어를 예를 들어 [0.2, 0.8, -1.2]와 같이 동일한 임베딩 벡터로 표현한다.
같은 표기의 단어라도 문맥에 따라서 다르게 단어 임베딩을 할 수 있다면 자연어 처리의 성능을 올릴 수 있을 것이다. 단어 임베딩 시 문맥을 고려하여 임베딩을 하겠다는 아이디어가 문맥을 반영한 워드 임베딩(Contextualized Word Embedding) 이다.
2. biLM(Bidirectional Language Model)의 사전 훈련
아래 그림은 다음 단어를 예측하는 작업을 수행하는 일반적인 단방향 RNN 언어 모델을 보여준다.
RNN 언어 모델은 문장으로부터 단어 단위로 입력을 받는데, RNN 내부의 은닉 상태는 time step이 지날수록 점점 업데이트되간다. 이는 결과적으로 은닉 상태가 문장의 문맥 정보를 점차적으로 반영한다고 말할 수 있다.
ELMo는 위의 그림처럼 순반향 RNN 뿐만 아니라, 반대 방향으로 문장을 스캔하는 역방향 RNN도 활용한다. 양쪽 방향의 언어 모델을 둘 다 학습하여 활용한다고 하여 이 언어 모델을 biLM이라고 한다.
ELMo에서 말하는 biLM은 기본적으로 Multi layer를 전제로 한다. 아래 그림은 은닉층이 2개인 순방향과 역방향 언어 모델을 보여준다.
이때 biLM의 각 시점의 입력이 되는 단어 벡터는 합성곱 신경망을 이용한 문자 임베딩(character embedding)을 통해 얻은 단어 벡터이다.
합성곱 신경망을 이용한 문자 임베딩은 이전 포스팅을 참고
2024.01.11 - [책/파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습] - 06 (3) 임베딩 - CNN
주의할 점은 양방향 RNN과 biLM은 다르다. 양방향 RNN은 순방향과 역방향 RNN의 은닉 상태를 연결하여 다음층의 입력으로 사용한다. 반면 biLM은 순방향과 역방향 언어모델이라는 두 개의 언어 모델을 별개의 모델로 보고 학습한다.
3. biLM의 활용
ELMo가 사전 훈련된 biLM을 통해 입력 문장으로부터 단어를 임베딩하기 위한 과정을 살펴본다.
'play'라는 단어를 임베딩 하기 위해 ELMo는 위 그림의 점선의 사각형 내부의 각 층의 결과값을 재료로 사용한다. 임베딩 층과 2개의 RNN 층이 있으므로 각 층의 결과값이란, 임베딩 출력과 각 층의 RNN 은닉 상태를 의미한다. 이 때 가져오는 값은 해당 time step의 출력값을 가져온다. 그리고 순방향과 역방향 언어 모델의 출력값을 연결하여 활용한다.
아래는 ELMo가 임베딩 벡터를 얻는 과정을 보여준다.
1. 각 층의 출력값을 연결한다.
2. 각 층의 출력값 별로 가중치를 준다.
3. 이를 모두 더한다.
4. 벡터의 크기를 결정하는 스칼라 매개변수를 곱한다.
이렇게 완성된 벡터를 ELMo representation이라고 한다. 이를 자연어 처리 작업에서 어떻게 활용할 수 있을까?
ELMo 표현을 기존의 임베딩 벡터와 함께 사용할 수 있다. GloVe와 같은 기존의 방법론을 사용한 임베딩 벡터를 준비했다고 가정하자. 이때 ELMo representation과 GloVe를 통해 얻은 임베딩 벡터를 연결하여 입력으로 사용할 수 있다. 이때 biLM의 가중치는 동결하고 위에서 사용한 $s_1, s_2, s_3, \gamma$는 훈련 과정에서 학습된다.
'Deep Learning > NLP' 카테고리의 다른 글
BERT (0) | 2024.02.07 |
---|---|
트랜스포머 (0) | 2024.01.11 |
어텐션 메커니즘 (0) | 2024.01.11 |
서브워드 토크나이저 (Subword Tokenizer) (0) | 2023.10.05 |