본문 바로가기
Archive/자연어처리

[자연어] BERT 모델, 찍먹해보자.

by 다람이도토리 2021. 9. 6.
참고자료
[1] https://ebbnflow.tistory.com/151
[2] https://wikidocs.net/115055

BERT란?

구글에서 만든 NLP 처리 기술이다. BERT는 기본적으로 '사전 훈련 언어 모델'이다.

단어를 Embedding하는 것이 NLP에서 중요한 문제인데 대표적인 방법으로는

- TF-IDF Vectorizer
- Count Vectorizer
- Word2Vec

이런 것들을 예시로 들 수 있다.

TF-IDF, Count는 단어의 빈도수에 따른 단일 단어만 고려한다면, Word2Vec은 주변 단어, 즉 문맥을 고려할 수 있는 벡터화이다. 그러나 Word2Vec 역시 동음이의어 등에는 취약하다는 단점을 가지고 있다.

BERT는 다른 모델을 쓰기 전, 사전 훈련을 통해 성능을 더 좋게 만들어 줄 수 있다. 학습 과정을 살펴보면 다음과 같다.
Corpus -> BERT -> 원하는 데이터 -> ML/DL 모델 적용(RNN, LSTM) -> 분류, 예측 문제 풀이

특히, BERT의 경우는 이미 책이나 위키피디아 등의 데이터로 충분히 거대한 코퍼스를 정제하고, 임베딩되어있다. 

 

BERT의 구조 알아보기

BERT의 토큰화 : subword_tokenizer

BERT에서는 토큰에 없는 단어의 경우는 단어를 더 쪼개서 보려고 한다.

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') #Bert-base tokenizer
result = tokenizer.tokenize('This function is monotonically increasing and analytic')
print(result)
['this', 'function', 'is', 'mono', '##tonic', '##ally', 'increasing', 'and', 'analytic']
# 다음과 같이 monotonically는 토큰에 존재하지 않아 더 쪼개버렷다.

 

BERT Input

다음과 같이 3개의 임베딩 층으로 이루어져 있다.

- Token embeddings : 위에서 본 방식으로 토큰화를 진행한다.
- Segment embeddings : 토큰 시킨 단어를 다시 하나의 문장으로 구분한다.
- Position Embeddings : 단어의 위치 정보를 표현한다. 

사전학습

BERT의 사전학습은 크게 두 가지로 나뉜다.  Masked 언어 모델,  다음 문장의 예측.

Masked Language Model : 문장의 임의를 빈칸을 뚫어놓고, 해당 단어를 예측하게 한다.
Next Sentence Prediction : 문장의 순서 및 연관성을 예측하는 학습이다.

Remark. 사전학습된 BERT에 우리가 풀려고 하는 태스크의 데이터를 추가로 학습시킬 수 있다. 이를 파인 튜닝이라고 한다고 한다.

BERT 간단한 실습자료

github으로 대체한다. 

실습은 다음을 보면서 진행하였다.
https://zzaebok.github.io/deep_learning/nlp/Bert-for-classification/

https://github.com/SeongwonTak/TIL_swtak/blob/master/learning_BERT_intro.ipynb

 

GitHub - SeongwonTak/TIL_swtak: Today, I learned.

Today, I learned. Contribute to SeongwonTak/TIL_swtak development by creating an account on GitHub.

github.com

(아직 실습 코드를 완전히는 이해하지 못하였다 ㅠㅠㅠ pytorch에 좀 더 익숙해져야 할거같다..)