참고자료
[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
(아직 실습 코드를 완전히는 이해하지 못하였다 ㅠㅠㅠ pytorch에 좀 더 익숙해져야 할거같다..)
'Archive > 자연어처리' 카테고리의 다른 글
[NLP] N-gram, Word2Vec, Glove의 간단 개요. (0) | 2022.04.27 |
---|---|
[NLP] Word Embeddings - Basics (0) | 2022.04.25 |
[자연어] 트위터 문자 분류 문제를 통한 자연어 처리 실습(1) (0) | 2021.09.01 |
[밑딥2] CBOW 모델과 skip-gram 모델의 수식 이해 (0) | 2021.08.02 |
[밑딥2] 신경망에서의 단어 처리와 word2vec (0) | 2021.07.31 |