BERT
Google의 AI 실험 버전인 Bard 사용해 보기
Bard는 창의적이고 유용한 파트너로서, 상상력을 마음껏 발휘하고 생산성을 높이며 아이디어를 실현하도록 도와줍니다.
bard.google.com
1. 사전 훈련된 언어 모델
대규모 데이터로 사전에 이미 만들어두는 것
데이터가 조금 있다면 사전 훈련된 언어 모델을 사용해 모델의 성능을 금방 높일 수 있음.
레이블이 없는 방대한 데이터로 사전 훈련된 모델을 가지고, 레이블이 있는 다른 작업(Task)에서 추가 훈련과 함께 하이퍼파라미터를 재조정하여 이 모델을 사용하면 성능이 높게 나오는 기존의 사례들을 참고
-> 파인튜닝
임베딩 층(Embedding layer)을 랜덤 초기화하여 처음부터 학습하는 방법.
방대한 데이터로 Word2Vec 등과 같은 임베딩 알고리즘으로 사전에 학습된 임베딩 벡터들을 가져와 사용하는 방법
-> 하나의 단어가 하나의 벡터값으로 맵핑 단어가 문맥을 고려하지 못하는 (다의어, 동음이의어) 문제 발생
=> 해결방법: BERT
2.양방향 언어모델 = 마스크드 언어 모델

초록색 LSTM 셀은 순방향 언어 모델로 <sos>를 입력받아 I를 예측하고, 그 후에 am을 예측합니다. 그런데 am을 예측할 때, 출력층은 주황색 LSTM 셀인 역방향 언어 모델의 정보도 함께 받고있습니다. 그런데 am을 예측하는 시점에서 역방향 언어 모델이 이미 관측한 단어는 a, am, I 이렇게 3개의 단어입니다. 이미 예측해야하는 단어를 역방향 언어 모델을 통해 미리 관측한 셈이므로 언어 모델은 일반적으로 양방향으로 구현하지 않습니다.

언어의 문맥이라는 것은 실제로는 양방향입니다. 텍스트 분류나 개체명 인식 등에서 양방향 LSTM을 사용하여 모델을 구현해서 좋은 성능을 얻을 수 있었던 것을 상기해봅시다. 하지만 이전 단어들로부터 다음 단어를 예측하는 언어 모델의 특성으로 인해 위의 그림과 같은 양방향 언어 모델을 사용할 수 없으므로, 그 대안으로 ELMo에서는 순방향과 역방향이라는 두 개의 단방향 언어 모델을 따로 준비하여 학습하는 방법을 사용했던 것입니다. 이와 같이 기존 언어 모델로는 양방향 구조를 도입할 수 없으므로, 양방향 구조를 도입하기 위해서 2018년에는 새로운 구조의 언어 모델이 탄생했는데 바로 마스크드 언어 모델입니다.
3.문맥을 반영한 임베딩(Contextual Embedding)

입력 : 임베딩 층(Embedding layer)를 지난 임베딩 벡터
모든 단어들은 768차원의 임베딩 벡터가 되어 BERT의 입력으로 사용
출력 : 문장의 문맥을 모두 참고한 문맥을 반영한 임베딩

[CLS] 벡터 : BERT의 초기 입력으로 사용되었을 입력 임베딩 당시에는 단순히 임베딩 층(embedding layer)를 지난 임베딩 벡터였지만, BERT를 지나고 나서는 [CLS], I, love, you라는 모든 단어 벡터들을 모두 참고한 후에 문맥 정보를 가진 벡터가 됩니다.
4.BERT의 서브워드 토크나이저 : WordPiece
단어보다 더 작은 단위로 쪼개는 서브워드 토크나이저를 사용
준비물 : 이미 훈련 데이터로부터 만들어진 단어 집합
(1) 토큰이 단어 집합에 존재한다.
=> 해당 토큰을 분리하지 않는다.
(2) 토큰이 단어 집합에 존재하지 않는다.
=> 해당 토큰을 서브워드로 분리한다.
=> 해당 토큰의 첫번째 서브워드를 제외한 나머지 서브워드들은 앞에 "##"를 붙인 것을 토큰으로 한다.
ex1)
embeddings 입력 -> OOV 문제가 발생 -> 해당 단어를 더 쪼개려고 시도 : 단어 집합에 있는 것을 기준으로 쪼개기 (em, ##bed, ##ding, #s) ->
## : 단어의 중간부터 등장하는 서브워드를 의미하는 특수문자
ex2)
she likes playing 입력 -> playing이라는 단어가 없음 -> 단어 집합에 잇는 것을 기준으로 쪼개기 play, ##ing
ex3)
| 경희대학교 | 경희 ##대학교 |
| 경희씨 | 경희 #씨 |
| 건국대학교 | 건국 ##대학 ##교 |
| 대학 | 대학 |
| 대학교 | 대학 ##교 |
| 대학생 | 대학 ##생 |
| 대학원 | 대학 ##원 |
5.포지션 임베딩(Position Embedding)

위치 정보를 위한 임베딩 층(Embedding layer)을 하나 더 사용
위치 정보를 사인 함수와 코사인 함수로 만드는 것이 아닌 학습을 통해서 얻는 포지션 임베딩(Position Embedding)
BERT에서는 문장의 최대 길이를 512로 하고 있으므로, 총 512개의 포지션 임베딩 벡터가 학습
6. BERT의 사전 훈련(Pre-training)
BERT의 사전 훈련 방법은 크게 두 가지로 나뉩니다. 첫번째는 마스크드 언어 모델이고, 두번째는 다음 문장 예측(Next sentence prediction, NSP)입니다.
(1) 마스크드 언어 모델(Masked Language Model, MLM)
인공 신경망의 입력으로 들어가는 입력 텍스트의 15%의 단어를 랜덤으로 마스킹(Masking)합니다.
인공 신경망에게 이 가려진 단어들을(Masked words) 예측하도록 합니다.
더 정확히는 전부 [MASK]로 변경하지는 않고, 랜덤으로 선택된 15%의 단어들은 다시 다음과 같은 비율로 규칙이 적용됩니다.
80%의 단어들은 [MASK]로 변경한다.
Ex) The man went to the store → The man went to the [MASK]
10%의 단어들은 랜덤으로 단어가 변경된다.
Ex) The man went to the store → The man went to the dog
10%의 단어들은 동일하게 둔다.
Ex) The man went to the store → The man went to the store

'dog' 토큰이 [MASK]로 변경되어서 BERT 모델이 원래 단어를 맞추려고 하는 모습
출력층에 있는 다른 위치의 벡터들은 예측과 학습에 사용되지 않고, 오직 'dog' 위치의 출력층의 벡터만이 사용
BERT의 손실 함수에서 다른 위치에서의 예측은 무시
출력층에서는 예측을 위해 단어 집합의 크기만큼의 밀집층(Dense layer)에 소프트맥스 함수가 사용된 1개의 층을 사용하여 원래 단어가 무엇인지를 맞춤
(2) 다음 문장 예측(Next Sentence Prediction, NSP)
훈련에 문장이 두 개 들어간다.

입력으로 넣을 때에는 [SEP]라는 특별 토큰을 사용해서 문장을 구분
첫번째 문장의 끝에 [SEP] 토큰을 넣고, 두번째 문장이 끝나면 역시 [SEP] 토큰
두 문장이 실제 이어지는 문장인지 아닌지를 [CLS] 토큰의 위치의 출력층에서 이진 분류 문제 풀
[CLS] 토큰 :BERT가 분류 문제를 풀기 위해 추가된 특별 토큰
마스크드 언어 모델과 다음 문장 예측은 따로 학습하는 것이 아닌 loss를 합하여 동시에 학습
두 문장의 관계를 이해하는 것이 중요한 태스크 : QA(Question Answering)나 NLI(Natural Language Inference)
7.세그먼트 임베딩(Segment Embedding)

문장 구분을 위해서 BERT는 세그먼트 임베딩이라는 또 다른 임베딩 층(Embedding layer)을 사용
BERT는 총 3개의 임베딩 층이 사용됩니다.
WordPiece Embedding : 실질적인 입력이 되는 워드 임베딩. 임베딩 벡터의 종류는 단어 집합의 크기로 30,522개.
Position Embedding : 위치 정보를 학습하기 위한 임베딩. 임베딩 벡터의 종류는 문장의 최대 길이인 512개.
Segment Embedding : 두 개의 문장을 구분하기 위한 임베딩. 임베딩 벡터의 종류는 문장의 최대 개수인 2개.
Segment Embedding은 단순히 MASK를 사용할 때는 필요 없음. NSP를 할때만 필요하다.
8.파인 튜닝(Fine-tuning)하기
(1) 하나의 텍스트에 대한 텍스트 분류 유형(Single Text Classification)
이미 기존 벌트 모델에 날씨, 기온 더위와 부정적인 문장으로 구성된 문장들을 학습해서
처음 보는 “날씨가 더워서 짜증나” 문장을 입력 받으면 네거티브로 출력 될 수 있다.
(2) 하나의 텍스트에 대한 태깅 작업(Tagging)
단어의 개체를 인식할 수 있도록
기존의 벌트 모델을 불러와서 “나 현대자동차 들어갈거야” 같은 데이터로 훈련을 시킨다.
나 – 사람
현대자동차 – 기업
“나는 현대 엘리베이터 갈거야” 입력
현대엘리베이터에 현대자동차와 유사한 단어 현대가 들어가 있기 때문에
현대엘리베이터를 기업으로 인식
(3) 텍스트의 쌍에 대한 분류 또는 회귀 문제(Text Pair Classification or Regression)
두문장이 있다.
그는 지금 코딩을 한다. 그는 지금 프로그래밍을 하고 있다 -> 함의 관계
그는 지금 공부를 하고 있다. 오늘 날씨는 덥다 -> 모순 관계
(4) 질의 응답(Question Answering)
질문과 본문을 주어 학습
"강우가 떨어지도록 영향을 주는 것은?" 라는 질문이 주어지고,
"기상학에서 강우는 대기 수증기가 응결되어 중력의 영향을 받고 떨어지는 것을 의미합니다. 강우의 주요 형태는 이슬비, 비, 진눈깨비, 눈, 싸락눈 및 우박이 있습니다." 라는 본문이 주어졌다
정답은 "중력“
💡LSTM vs 트랜스포머 vs BERT
LSTM : 이전단어 정보를 바탕으로 다음 단어 예상
트랜스포머 : 사인 함수와 코사인 함수를 사용하여 위치에 따라 다른 값을 가지는 행렬을 만들어 이를 단어 벡터들과 더하는 방법
BERT : 위치 정보를 사인 함수와 코사인 함수로 만드는 것이 아닌 학습을 통해서 얻는 포지션 임베딩(Position Embedding)
'자연어처리(NLP) & CHAT GPT > NLP' 카테고리의 다른 글
| [NLP] GPT, KoGPT - 실습 (0) | 2023.08.22 |
|---|---|
| [NLP] Transformer, BERT - 실습 (0) | 2023.08.10 |
| [NLP] Seq2Seq - 실습 (0) | 2023.08.08 |
| [NLP] Seq2eq에서 BERT까지 (0) | 2023.08.07 |
| [NLP] 워드 임베딩(Word Embedding), RNN - 실습 (0) | 2023.08.05 |