일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 이진탐색
- 주간회고
- 구현
- 백트랙킹
- 백준
- 알고리즘_스터디
- 그리디
- 단계별문제풀이
- Level2
- dp
- 그래프이론
- 다시보기
- dfs
- 정렬
- 알고리즘스터디
- python3
- 프로그래머스
- 파이썬 3
- 최단경로
- mrc
- 부스트캠프_AITech3기
- Level1
- Level2_PStage
- U_stage
- ODQA
- 다이나믹프로그래밍
- 기술면접
- 부스트캠프_AITech_3기
- 개인회고
- 이코테
- Today
- Total
국문과 유목민
[NLP] OVERVIEW (Word2Vec to Transformer) 본문
0. NLP OVERVIEW
자연어처리는 사전적인 의미로 '컴퓨터를 이용해 인간 언어의 이해, 생성 및 분석을 다루는 인공지능 기술'이라고 정의된다. 사실 컴퓨터의 자연어처리는 쉽게 정리하자면 다음과 같은 세 단계를 거쳐서 진행이 된다.
- Encoder를 이용해 자연어를 벡터 형태로 인코딩
- 메세지 전송
- Decoder를 이용해 벡터를 자연어로 디코딩
간단히 정리하자면 자연어처리의 연구는 "컴퓨터가 이해할 수 있게, 수학적으로, 어떻게 이쁘게 인코딩할 수 있는지"에 대한 방법을 연구하는 것으로 볼 수 있다. 왜냐하면 인코딩이 이쁘게 되면 디코딩을 통해 무엇이든지 할 수 있기 때문이다. 그렇다면 자연어를 어떻게 이쁘게 인코딩할 수 있을 지에 대해 알아보겠다.
1. 자연어 처리의 응용분야
대부분의 자연어처리는 '분류'의 문제이다. 그리고 '분류'를 하기 위해서는 자연어를 벡터화할 필요가 있다. 그리고 자연어를 벡터화 하는 과정을 '인코딩'이라고 한다.
2. 자연어 단어 임베딩
단어 '분류'를 위해선 데이터를 수학적으로 표현해야 한다. 먼저, 분류 대상의 특징(Feature)을 기준으로 특징을 파악한다.이를 Feature Extraction이라고 한다. 이렇게 추출한 분류 대상의 특징을 기준으로, 분류 대상을 그래프 위에 표현할 수 있다. 좌표 평면에 이쁘게 인코딩 되면 분류(Classification)는 쉽다.
그리고 컴퓨터로 분류를 수행하는 이유는 복잡한 문제들에 대해서는 분류 대상의 특징을 사람이 찾기 힘들기 때문이다. 따라서 이러한 특징을 사람대신 컴퓨터가 찾을 수 있게 하는 것이다. 그리고 이게 바로 '기계학습'의 핵심이다.
자연어를 좌표평면에 표현하기 위한 가장 간단한 방법으로는 one-hot encoding방식이 있다. 하지만 단어 벡터가 spase해서 단어가 가지는 '의미'를 벡터 공간에 표현이 불가능하다.
Word2Vec
One-hot Encoding방식의 한계를 개선하기 위해 나온 방법이 Word2Vec이다. Word2Vec은 단어가 가지는 의미 자체를 다차원 공간에 '벡터화'하는 것이 가능하다. 한 단어의 주변 단어들을 통해, 그 단어의 의미를 파악하는 방식으로 학습을 진행한다(Skip-gram). Word2Vec은 단어간 유사도 측정 및 관계 파악에 용이하다.
하지만 단어의 subword information무시하고, Out of Vocabulary(OOV)에서 적용이 불가능하다는 단점이 있다.
FastText
FastText는Word2Vec이 가지는 OOV문제를 해결하기 위해 나온 방법이다. 한국어는 다양한 용언 형태를 가지기 때문에 Word2Vec의 경우, 다양한 용언 표현들이 서로 독립된 vocab으로 관리하게 된다. 하지만 이렇게 되면 관리해야 하는 Vocab의 사이즈가 쓸데없이 커지게 되고, 각각 다른 단어로 관리하게 될 수 있다.
하지만 FastText는 기존 Word2vec과 유사하나, 주변 단어와 중심 단어를 나눌 때 단어를 n-gram으로 나눠 학습을 수행한다. 단어를 n-gram으로 분리를 한 후, 모든 n-gram vector를 합산한 후 평균을 통해 단어 벡터를 획득한다. 이때, 각 단어의 시작과 끝에 꺽쇠 <>를 붙여서 시작과 끝을 표시한다. 오탈자, OOV, 등장 홧수가 적은 학습 단어에 대해서 강세가 있다.
Word2Vec이나 FastText등의 워드 임베딩 방식은 동형어, 다의어 등에 대해선 embedding 성능이 좋지 못하다는 한계가 있다. 왜냐하면 주변 단어를 통해 학습이 이루어지기 때문에 '문맥'을 고려할 수 없었기 때문이다. 따라서 이를 개선할 수 있는 언어모델이 나오게 된다.
3. 언어모델
모델의 특징은 이전 state를 기반으로 미래의 state를 올바르게 예측하는 것이다. 즉, 미래의 state를 올바르게 예측하는 방식으로 모델을 학습할 수 있다. 언어 모델은 '자연어'의 법칙을 컴퓨터로 모사한 모델이다. 주어진 단어들로부터 그 다음에 등장한 단어의 확률을 예측하는 방식으로 학습힌다. 다음의 등장할 단어를 잘 예측하는 모델은 그 언어의 특성이 잘 반영된 모델이자, 문맥을 잘 계산하는 모델(소위 말하는 좋은 모델)이다.
Markov 기반의 언어모델
Markov Chain Model은 초기의 언어모델로, 이때의 모델은 통계와 단어의 n-gram을 기반으로, 다음 단어나 문장이 나올 확률을 최대가 되게 네트워크를 학습하는 모델이었다. 이러한 방식을 딥러닝 네트워크로 옮긴 게 RNN기반의 언어모델이다.
RNN 기반의 언어모델
RNN 모델은 Hidden Layer(노드)가 방향을 가진 엣지로 연결돼 순환구조를 이룬다. 이전 state 정보가 다음 state를 예측하는데 사용되며, 마지막 출력은 앞선 단어들의 '문맥'을 고려해서 만들어진다. 이렇게 만들어진 최종 출력 벡터는 Context Vector가 된다. 그리고 출력된 Context vector값에 대해 Classifcation Layer를 붙이면 문장 분류를 위한 신경망 모델을 만들 수 있다. 이전 state 정보가 다음 state를 예측하는데 사용되기 때문에, 시계열 데이터 처리에 특화되어 있다.
Sequence to Sequence (Seq2Seq)
Seq2Seq는 인코더와 디코더의 구조로 이루어진 모델이다. 해당 모델을 활용하면 다양한 NLP Task에서 활용을 할 수 있게 된다.
- Encoder layer: RNN구조를 통해 Context Vector를 획득
- Decoder layer: 된 Context Vector를 입력으로 출력을 예측
RNN 구조의 문제점도 존재한다. 입력 Sequence의 길이가 매우 긴 경우, 처음에 나온 token에 대한 정보가 희석된다. 또한, 고정된 Context vector 사이즈로 인해 긴 sequence에 대한 정보를 함축하기 어렵다. 그리고 모든 token이 영향을 미치게 되기에 중요하지 않은 token도 영향을 준다. 이러한 단점을 보완하기 위해 Attention 모델이 등장하게 된다.
Attention 모델
인간이 정보처리를 할 때, 모든 sequence를 고려하면서 정보처리를 하는 것이 아닌 것처럼 중요한 feature를 더욱 중요하게 고려하는 것이 Attention의 모티브이다.
Attention 모델은 최종 context vector만 고려하는 것이 아니라 문맥에 따라 동적으로 할당되는 encode의 Attention weight를 통해 dynamic context vector를 획득할 수 있었다. 이러한 방법을 통해 기존 seq2seq의 encoder, decoder 성능을 비약적으로 향상시킬 수 있었다.
하지만 여전히 RNN이 순차적으로 연산이 이뤄짐에 따라 연산 속도가 느리다는 한계가 있었다.
Self-Attention 모델 (Transformer)
Self-Attention구조로 넘어오면서, RNN 구조에서 존재하던 이전 state의 정보를 다음 state로 전달하는 구조를 없애고 모든 토큰들을 전부 연결하게 된다. 그렇게 Transformer모델이 나오게 된다. 기존 seq2seq 모델은 인코더 따로 디코더 따로 분리했지만, Transformer network는 하나의 네트워크 내에 Encoder와 Decoder를 합쳐져 있는 구조로 구성이 된다.
(Transformer에 대한 조금 더 구체적인 설명은 다음 포스팅 참고 [일일리포트] Day 37 (Transformer1) )
Transformer를 통해 BERT, GPT, ALBERT와 같은 모델들이 등장하게 되었다. 그리고 현재 이러한 모델들이 다양한 NLP Task에서 SOTA를 갱신하고 있다.
'IT 견문록 > 추가 학습 정리' 카테고리의 다른 글
[NLP] Chatbot Summary (0) | 2022.04.01 |
---|---|
[NLP] GPT 강의 정리 (Week 11) (0) | 2022.04.01 |
[git] .gitignore 사용법 (0) | 2022.03.23 |
[WandB] Huggingface라이브러리와 사용하기 (0) | 2022.03.23 |
[Vim] vi 에디터 단축기 정리 모음 (0) | 2022.01.23 |