반응형

최신모델 State of the art Models

Transformers

  • BERT랑 GPT의 기반이 되는 네트워크
  • Seq2seq 모델을 약간 보정하기 위해 나온 것
  • Seq2seq model에서는 전체 Context 가 한번에 넘겨가지는 못하고, Attention이 있다고 하더라도 굳이 하나씩 보지말고 전체를 한번에 볼 수 있을까? 해서 만든 것이 Transformers Network

 

Seq2seq model

  • seq2seq 모델은 인코더-디코더 구조로 되어있음
  • 인코더는 입력 시퀀스를 하나의 벡터 표현으로 압축하고, 디코더는 이 벡터 표현을 통해서 출력 시퀀스를 생성

 

Seq2seq model

 

그렇다면 Attention으로 RNN을 보정하지 않고, 인코더 디코더안에 Attention을 넣어버린다면??
→ 트랜스포머 네트워크

 

 

Transformers Network

  • 트랜스포머 하나에 인코더와 디코더가 다 들어가있음 → 전체 입력이 트랜스포머 하나에 다 들어감

 

 

→ lstm이 느려서 그냥 인코더, 디코더 안에 Attention을 넣어버림

 

 

Transformers Network

  • 논문 (Attention is all you need. Vaswani et al. 2017) → 꼭 읽어봐야함
  • 구글 연구 팀이 공개한 딥러닝 아키텍쳐로 뛰어난 성능으로 주목 받았음
  • GPT, BERT 등의 모델의 기본 모델로 활용되고 있음

→ 인코더에도 디코더에도 임베딩을 전체를 넣어버리고, 인코더에서 애초에 Attention을 활용해서 인코더 전체에 대한 Self-Attention을 보고, 디코더에서도 디코더 전체에 대한 Self-Attention을 알아서 한번 본 다음에 인코더 디코더를 합친 Attention을 가지고 뭔가 하나를 분류하는 거

→ 인코더 디코더를 Layer를 여러개를 쌓을 때 층을 위에 계속 올린다

 

인코더 : 셀프 어텐션을 거치고 FeedForward 신경망(DNN)을 거쳐서 디코더로 보내줌

ADD : 원래값과 Attention을 거친 값을 넣어서 합한다음 Norm을 해준다 (Overfitting이 줄어듬)

FFNN (Feed Forward Network) : DNN - 매 token마다 아웃풋이 나옴

residual connection : FFNN을 안거치고 바로 ADD로 이동하는 부분

 

Transformers Network의 구조를 숙지해야 자연어처리를 할 수 있음

 

Positional Encoding

  • Transformer는 한번에 입력하다보니 lstm처럼 순서를 알수가 없음
    → lstm같은 경우에는 순서까지 고려되서 모델 생성이 되는데 트랜스포머 네트워크는 순서를 알수 없어서 순서를 알려주려고 하는 부분이 포지셔널 인코딩
  • 트랜스포머는 단어 입력을 순차적으로 받는 방식이 아니므로, 단어의 위치 정보를 다른 방식으로 알려줄 필요가 있음
  • 각 단어의 임베딩 벡터에 위치 정보들을 더하여 모델 입력으로 사용하며, 이를 포지셔널 인코딩이라 함

→ 위치가 2의 배수일 때는 sin 함수, 위치가 홀수일 때는 cos 함수를 해서 값을 더해줌

 

→ 포지셔널 인코딩에는 이와 같은 함수를 활용하여 위치 정보를 생성

 

 

셀프 어텐션 (Self Attention)

  • Key, Value, Query 값이 모두 같은 경우

멀티헤드 어텐션 (Multi-head Attention)

  • multi-head는 어텐션을 head 개수만큼 병렬로 수행하는 방법

트렌스포머의 어텐션 3가지

  • 3가지의 어텐션이 활용됨
  • Encoder Self-Attention : Query = Key = Value

 

각 attention은 multi-head attention이 적용이 되어 있음 !! 실제 transfomer의 attention은 dot product attention이 적용되어 있어서 그냥 matrix 곱셈 연산 정도만 수행한다고 생각하쟈

 

 

https://github.com/jadore801120/attention-is-all-you-need-pytorch/blob/master/transformer/Models.py

→ 트랜스포머 모델 구현하는 소스코드

 

 

 

GPT

  • (Improving language understanding by generative pre-training. Radford, Alec, et al. 2018)
  • Transformer의 디코더를 적층한 모델
  • 디코더를 활용하여, 생성 모델에 적합
  • Transformer를 활용한 pre-trained model의 시초

 

GPT 학습 방식

  • 일반적인 Language Model(언어 모델) 학습 방식을 활용하여, 대용량 코퍼스를 활용한 비지도 학습
GPT는 꽤 괜찮은 성능을 보여줬지만 전반적으로 성능이 엄청 좋지는 않음,, 기존의 모델들 보다는 우수한 성능을 내는것도 있고, 모자란 것도 있고, 비슷한 것도 있음

 

 

 

BERT

  • (BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. Devlin et al. 2018)
  • Transformer의 인코더를 적층해서 맨 뒤에 Layer 하나만 붙임 (Fine-Tuning)
  • 잘 만들어진 BERT 언어모델 위에 1개의 classification layer만 부착하여 다양한 NLP task를 수행
  • 영어권에서 11개의 NLP task에 대해 state-of-the-art (SOTA) - 전부 최신성능 달성 !!

 

 

→ 인코더를 쌓고나서 원래 BERT는 Mask LM이랑 NSP 두가지를 학습을 했었는데 BERT Fine-Tuning은 여기에다가 Layer를 하나만 추가를 함,,

→ 원래 트랜스포머 인코더가 12개가 안에 적층이 쌓여있음! 근데 여기에다가 분류를 할때는 Classification Layer를 하나 추가해주고, 기계독해를 할때는 정답의 위치를 출력하는 Layer 추가해주고, 개체명인식은 각 토큰마다 벡터가 나오기 때문에 각 토큰마다 tagging 을 하도록 Layer를 추가함

 

BERT 학습 방식

BERT 이전의 GPT는 기존의 Language Model(언어 모델)을 그대로 학습을 함 → 각 토큰 순서대로 예측을 함

 

반응형

 

MLM (Masked Language Model)

  • 무슨 토큰이 나와야 할지 분류 !
  • 입력 문장에서 임의로 토큰을 masking 한 후에, 해당 토큰을 맞추는 학습

→ 토큰 하나하나 학습을 안하니까 학습 속도도 빠르고, 인코더를 사용하니까 lstm처럼 이전 토큰에 대한 연산을 기다리지 않아도 된다. lstm 층을 많이 쌓으면 엄청 느린데 BERT는 훨씬 빠르다.

→ 층을 아무리 쌓아도 lstm만큼 느려지지 않음

 

BERT에서는 Transformer Incoder를 기본적으로 12개 층을 쌓아서 만들었음

 

 

 

NSP (Next Sentence Prediction)

  • 두 문장이 주어졌을 때, 두 문장의 순서를 예측하는 방식
  • 순서가 맞는지 틀렸는지를 학습함
  • 학습데이터를 문서단위로 입력할 때 문서에서 다음 문장을 가지고 왔을 때는 1, 문장의 순서를 랜덤으로 바꾸고 가지고 올 때는 0으로 학습

→ Bi-classification만 학습을 하기 때문에 학습속도가 빠름

 

 

 

BERT vs GPT vs ELMo

  • BERT - 구글에서 만듬
    • MLM학습으로 인하여, 동시에 연산이 가능 → 속도가 빨라짐
  • GPT - OpenAI에서 만듬
    • Transformer의 디코더만 사용 - 언어모델 사용
    • LM(언어모델) 학습으로 인하여 결국 lstm처럼 앞의 토큰 예측이 끝나야 다음 토큰 예측 가능
      → BERT보다 속도는 훨씬 느림

 

BERT 이후의 모델들

  • BERT랑 RoBERT랑 차이가 별로 없음, 학습 파라미터 갯수(Size)가 똑같음
    → BERT는 GPU를 기준으로 V100을 8대를 12일동안 학습함, RoBERT는 1024개의 GPU를 붙여서 하루만에 학습함
    → 학습을 하면서 데이터를 정말 많이 늘렸고, NSP 을 빼고 학습을 함
  • DistilBERT : BERT에서 뭔가를 없앤것
    → BERT가 네트워크 Layer수를 많이 쌓으면서 많이 느린 문제 때문에 Layer를 12개를 사용하는데 Layer를 줄여서 속도를 빠르게 만듬
    → 다른거는 똑같음 (모델 사이즈를 줄임 110 → 66)
    → 성능이 조금 떨어졌지만 속도가 빨라짐
  • XLNet (permutation??순열??) 학습방법을 바꿈
    • BERT의 MLM 학습에서는 masking된 토큰이 여러개일 때, 하나의 토큰을 예측할 때 다른 토큰도 masking 되어있다.
    • XLNet 학습방법 - 처음 앞에 있는 토큰을 예측할 때는 두개의 토큰이 다 masking 되어 있지만 , 뒤의 토큰을 예측할 때는 앞에서 예측한 결과를 받아와서 활용함
    • LSTM이나 GPT 처럼 순서가 생기는 문제때문에 학습 속도가 느려짐

 

최신 모델들

 

 

최신모델 실습

https://github.com/huggingface/transformers

→ transformer기반의 최신 모델들의 쉽게 사용할 수 있도록 제공하는 라이브러리

→ transformers 라이브러리 쓸 때는 pytorch 사용하는 것을 권장

 

→ transformer기반의 모델이 엄청 많음

→ GPT가 시초임

 

 

→ GPT2 생성모델 "A long time ago"를 넣었을때 뒤에 말이되는 문장을 넣어줌

 

 

!pip install transformers

from transformers import GPT2Tokenizer, GPT2Model

tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2Model.from_pretrained('gpt2')
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)

print(output)

결과

 

 

→ output이 숫자로 나오는데 나중에 반대로 다시 token으로 바꿔주면 끝 !!

→ token으로 바꿔주는 예제는 찾아보면 있을듯,,,

https://github.com/huggingface/transformers/tree/master/notebooks

→ colab으로 바로 실행할 수 있는 링크

 

https://github.com/huggingface/transformers/blob/master/examples/text-generation/run_generation.py

→ 서버가 셋팅이 되면 이걸 실행해봐도 됨

 

https://www.tensorflow.org/official_models/fine_tuning_bert

→ tensorflow를 활용해서 어떻게 해야하는지에 대한 설명부터 가이드가 다 있음

→ tensorflow를 활용해서 BERT 모델을 다운로드 받아서 BERT 모델을 가지고 어떻게 학습을 하는지까지 다 나와있음

→ colab에서 실행을 누르면 코드 그대로 colab으로 넘어옴 (colab은 번역이 안됨)

반응형
반응형

자연어란?

  • 자연어(Natural Language)는 사람과 사람이 일상 생활에서 서로 대화하는데 사용하는 언어를 뜻함

자연어 처리

  • 자연어의 의미를 분석하여 컴퓨터가 처리할 수 있도록 하는 일
  • 전처리를 위한 형태소 분석, 개체명 인식, 구문 분석부터 음성 인식, 내용 요약, 번역, 사용자의 감성 분석, 텍스트 분류 작업(스팸 메일 분류, 뉴스 기사 카테고리 분류), 질의 응답 시스템, 챗봇 등의 응용분야에 활용이 됨

 

전처리 이해

  • 토큰화

    • 주어진 데이터를 토큰(Token)이라 불리는 단위로 나누는 작업
    • 토큰이 되는 기준은 다를 수 있음(어절, 단어, 형태소, 음절, 자소 등)
  • 정제

    • 불필요한 데이터(Noise data)를 제거하는 작업
  • 정규화

    • 표현 방법이 다른 단어들을 통합시켜서 같은 단어로 만들어주는 작업
  • 문장 토큰화

    문장분리

  • 단어 토큰화

    구두점 분리, 단어 분리

    “Hello, World!” -> “Hello”, “,”, “World”, “!”

 

Task의 종류

  • Part-of-Speech 태깅
  • 형태소 분석(한글)
  • 개체명 인식
  • 구문 분석
  • 상호 참조
  • 감정 분석
  • 번역
  • 질의 응답
  • 기계 독해
  • 텍스트 생성
  • 텍스트 요약
  • 대화 시스템(챗봇)
  • 언어 모델

 

형태소 분석

  • 형태소
    • 의미가 있는 최소 단위
    • 문법적, 관계적은 뜻을 나타내는 단어 또는 단어의 부분
  • 단어를 구성하는 각 형태소를 분리하고 기본형 및 품사 정보를 추출

예시) 회사는 서울시 강남구에 위치하고 있습니다.

회사/NNP+는/JX 서울시/NNP 강남구/NNP+에/JKB 위치/NNG+하/XSV+고/EC 있/VX+습니다/EF+./SF

 

개체명 인식

  • 개체명
    • 사람이름, 회사이름, 지명, 영화제목, 날짜, 시간 등
  • 개체명 인식
    • 텍스트에서 개체명을 찾아서 태깅하는 것

예시) 회사는 서울시 강남구에 위치하고 있습니다. 회사<OG>, 서울시<LC>, 강남구<LC>

 

구문 분석

  • 문장을 이루고 있는 구성 성분으로 분해하고, 위계 관계를 분석하여 문장의 구조를 결정하는 것

 

기계 독해

  • 주어진 문서를 빠르게 이해하고 문서에 기반하여 질문에 대한 답을 찾아내는 기술

 

언어 모델(Language Model)

  • 언어라는 현상을 모델링하고자 단어 시퀀스(또는 문장)에 확률을 할당하는 모델
  • 언어모델이 주어지면, 확률분포를 가지고 단어의 시퀀스를 뽑을 수(sample) 있으며, 텍스트를 생성할 수 있다는 뜻으로 생성 모델이라고도 불림
  • 언어 모델을 만드는 방법은 통계를 활용하는 방법과, 인공 신경망을 이용한 방법이 있음
앞에 있는 입력을 가지고 뒤에 뭐가 나올지 예측하는 것
- BERT, GPT

언어모델의 예시

 

 

반응형

+ Recent posts