자연어 언어 모델
강의 자료 참고 : https://www.youtube.com/watch?v=zia49ZyKiX0&list=PL9mhQYIlKEhcIxjmLgm9X5BUtW5jMLbZD&index=2
언어 모델 (Language Model, LM)
모델(Model)이란?
어떤 상황이나 물체 등 연구 대상 주제를 도면이나 사진 등 화상을 사용하거나 수식이나 악보와 같은 기호를 사용해서 표현한 것
모델의 종류
- 일기예보 모델, 데이터 모델, 비즈니스 모델, 물리 모델, 분자 모델
모델의 특징
- 자연 법칙을 컴퓨터로 모사함으로써 시뮬레이션이 가능
- 이전 state를 기반으로 미래의 state를 예측할 수 있음 - (e.g. 습도와 바람 세기 등으로 내일 날씨 예측)
- 즉, 미래의 state를 올바르게 예측하는 방식으로 모델 학습이 가능함
언어 모델
"자연어의 법칙을 컴퓨터로 모사한 모델"
- 주어진 단어들로부터 그 다음에 등장한 단어의 확률을 예측하는 방식으로 학습 (이전 state로 미래 state를 예측)
- 다음의 등장할 단어를 잘 예측하는 모델은 그 언어의 특성이 잘 반영된 모델이자, 문맥을 잘 계산하는 좋은 언어 모델
- 가장 기본적인 모델 : Markov 확률 기반의 언어 모델
- 초기의 언어 모델은 다음의 단어나 문장이 나올 확률을 통계와 단어의 n-gram을 기반으로 계산
- 딥러닝 기반의 언어 모델은 해당 확률을 최대로 하도록 네트워크를 학습
-> 딥러닝으로 넘어올 때 앞에 구조를 신경망 구조로 바뀜
- Recurrent Neural Network (RNN) 기반의 언어 모델
- RNN은 히든 노드가 방향을 가진 엣지로 연결돼 순환구조를 이루는 (directed cycle) 인공신경망의 한 종류
- 이전 state 정보가 다음 state를 예측하는데 사용됨으로써, 시계열 데이터 처리에 특화
ex) RNN 언어 모델을 이용한 Application
- 마지막 출력은 앞선 단어들의 '문맥'을 고려해서 만들어진 최종 출력 vector -> Context vector
- 출력된 context vector 값에 대해 classification layer를 붙이면 문장 분류를 위한 신경망 모델
중요 : 앞 단어들의 문맥(내용)이 종합/들어간 context vector가 나온다.
-Encoder - Decoder
RNN을 통해서 잘 encoding 된 언어를 다시 decoding하여 해석 = 정보처리
- RNN 모델 기반의 Seq2Seq
- Encoder Layer : RNN 구조를 통해 Context vector 획득
- Decoder Layer : 획득된 Context vector를 입력으로 출력을 예측
ex) Seq2Seq Applications
- 음성 - > Encoding -> S2S -> Decoding -> Text
- 이미지 -> Encoding -> S2S -> Decoding -> 자세
- 텍스트 -> Encoding -> S2S -> Decoding -> 품사
- RNN의 구조적 문제점
- 입력 sequence의 길이가 매우 긴 경우, 처음에 나온 token에 대한 정보가 희석
- 고정된 context vector 사이즈로 인해 긴 sequence 에 대한 정보를 함축하기 어려움
- 모든 token이 영향을 미치나, 중요하지 않은 token도 영향을 줌
--> Attention 모델의 탄생
- Attention 모델
- 인간이 정보처리를 할 때, 모든 sequence를 고려하면서 정보처리를 하는 것이 아님
- 인간의 정보처리와 마찬가지로, 중요한 feature는 더욱 중요하게 고려하는 것이 attention의 모티브
- 기존 Seq2Seq에서는 RNN의 최종 output만 Context vector만을 활용
- Attention에서는 인코더 RNN 셀의 각각 output을 활용
- Decoder에서는 매 step마다 RNN 셀의 output을 이용해 dynamic하게 Context vector를 생성
- hidden state로 나온 output들을 Feed forward Layer를 거쳐 Score 얻어낸다.
- Softmax를 취해 Socre가 0~1로 변한다.
- 해당 값을 Attention weight로 결정
- Attention weight와 hidden state를 곱해서 Context vector 획득
- Decoder의 hidden state가 attention weight 계산에 영향을 줌
Attention = 딥러닝의 시각화가 가능해진다.
종합 : 디코더의 인풋으로 들어가는 context vector를 Attention weight를 통해 dynamic context vector를 획득
- 기존의 seq2seq의 encoder, decoder 성능을 비약적으로 향상
- 하지만, 여전히 RNN 순차적으로 연산이 이뤄짐에 따라 연산 속도가 느림
- RNN을 없애는건 어떨까? ===> Self-attention Mdel
- attention is all you need!
- RNN을 encoder와 decoder에서 제거
- RNN + attention에 적용 된 attention은 decoder가 해석하기에 가장 적합한 weight를 찾고자 노력
- Attention이 decoder가 아니라, input인 값을 가장 잘 표현할 수 있도록 학습하려면?
- ->자기 자신을 가장 잘 표현할 수 있는 좋은 embedding
- Self-attention 모델의 탄생
Self Attention
Query : 얻고자 하는 context vector
Key : Query와의 상관관계를 나타내고자 하는 대상
Value : Query와 Key의 상관관계 값
각 Output은 I study at school에 대한 값을 가지고 있다.
각각의 토큰들에 대한 Context 벡터들을 구할 수 있다.
BERT에는 Multi-head Self Attention 모델 활용
Self Attention를 여러개 동시에 수행을 한다. (병렬처리) -> 12개
각각의 self Attention에서 나온 값들을 컨켓 , Feed forward를 통해 최종 output이 획득
(최종적으로 자기 자신을 표현하는 vector 획득)
BERT에 적용된 Transformer 모델
- Transformer 모델은 multi-head attention으로 이루어진 encoder를 여러 층 쌓아서 encoding을 수행
BERT (Bi-directional Encoder Representations from Transformers)
- BERT는 bi-directional Transformer로 이루어진 언어모델
- 잘 만들어진 BERT 언어모델 위에 1개의 Classification layer만 부착하여 다양한 NLP task를 수행
- 영어권에서 11개의 NLP task에 대해 state-of-the-art (SOTA) 달성
BERT 모델 구조
Sentence를 Embedding을 하고 Transformer layer를 거치게 된다. Self Attention 여러개로 이루어져 있고 Transformer layer을 거쳐 최종적으로 인풋으로 나왔던 자기 자신을 표현하는 구조로 되어있다.
Bert는 Transformer의 Encoder만 사용해서 언어를 embedding한다.
데이터의 tokenizing
- WordPiece tokenizing (He likes playing -> He likes play ##ing
- 입력 문장을 Tokenizing하고, 그 token들로 'token sequence'를 만들어 학습에 사용
- 2개의 token sentence가 학습에 사용
- Byte Pair Encoding (BPE) 알고리즘 이용
- 빈도수에 기반해 단어를 의미 있는 패턴(Subword)으로 잘라서 tokenizing
BEP의 순서도 :
- 문장 입력
- 문장 토큰화
- Hcaracter 단위로 분리된 문서에서 가장 많이 등장하는 Bi-gram Pair를 찾고 합쳐주는 과정
- Iteration을 정해 놓고 주어진 횟수 만큼 수행
ex))
각 Character 별로 Tokenize 된 sentence를 가지고 있다.
이 sentence에서 중복을 제거 = vocab 후보
vocab 후보를가지고 다시 한번 입력된 문장을 tokenizing을 한다.
Bi-gram pair 을 생성 후 빈도수 조사
이렇게 Best Pair 부분이 두가지가 합쳐졌을 때 의미있어져서 합쳐진다.
그런 다음 다시 iteration을 돌면서 sentence가 tokenize 및 중복 제거 vocab 후보 업데이트
똑같이 Bi-gram Pair Count를 생성
같은 빈도로 정해져있으면 프로그래밍 도는 도중 가장 첫번째 값을 선택
##찰청을 병합
반복
- vocab의 생성은 정해진 iteration을 모두 수행 후 Tokenized Sentence를 Tokenize해서 생성(매 iteration 마다 Vocab을 생성하는 것이 아님)
BERT모델의 input
학습데이터의 문장을 가져오고 이때 앞에 [CLS]를 붙이고 [SEP]을 붙인다.
그리고 첫 문장에 80% 10% 10% 확률로 [Mask], 이상한 단어, 원래 단어를 넣는다.
버트소개 - sentence 2개를 넣을 때 출력은 input sentence를 예측하는 방식으로 학습이 이루어진다.