안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Master.M'입니다. 현재 저는 '초등학생도 이해하는 자연어 처리'라는 주제로 자연어 처리(NLP)에 대해 포스팅을 하고 있습니다. 제목처럼 진짜 핵심 내용을 쉽게 설명하는 것을 목표로 하고 있으니 자연어 처리(NLP)에 입문하고 싶은 분들은 많은 관심 부탁드립니다. 이번 시간에 알아볼 내용은 'BERT(Bidirectional Encoder Representations from Transformers)' 입니다.
BERT
- 구글에서 공개한 사전 훈련된 모델로 Transformer로 구성. Transformer(encoder-decoder)와 다르게 encoder으로만 구성.
- Transformer encoder는 문장을 양방향(Bidirectional) 으로 읽을 수 있음.
- Word2Vec과 같이 문맥(context)이 없는 임베딩 모델과 달리 BERT는 문맥을 고려한 임베딩 모델이여서 성능이 높음.
문맥 고려의 유무 차이
1. He got bit by Python.
2. Python is my favorite progamming language.
1번 문장에서의 "Python"은 뱀을, 2번 문장에서의 "Python"은 프로그래밍 언어를 가르긴다. 이는 Transformer의 "Self Attention"이라는 기법을 통해 알 수 있다. (자세한 사항은 아래 글 참조)
https://codingopera.tistory.com/43
임베딩(embedding)
- 토큰 임베딩(token embedding): 문장을 토큰화해 토큰들을 추출. 문장 시작 부분에 [CLS], 문장 끝 부분에 [SEP] 새 토큰 추가.
ex) I love you. I love ice-cream. -----------> [[CLS], I, love, you, [SEP], I, love, ice-cream, [SEP]]
토큰 임베딩: [E[CLS], EI, Elove, Eyou, E[SEP], EI, Elove, Eice-cream, E[SEP]]
- 세그먼트 임베딩(segment embedding): 문장을 구분하는 데 사용. 문장마다 다른 임베딩 토큰을 부과해 구별.
ex) I love you. I love ice-cream. -----------> [[CLS], I, love, you, [SEP], I, love, ice-cream, [SEP]]
세그먼트 임베딩: [ EA, EA, EA, EA, EA, EB, EB, EB, EB ]
- 위치 임베딩(position embedding): 문장 안에서 단어의 위치를 구분.
ex) I love you. I love ice-cream. -----------> [[CLS], I, love, you, [SEP], I, love, ice-cream, [SEP]]
위치 임베딩: [ E0, E1,E2, E3, E4, E5, E6, E7, E8 ]
- 최종 임베딩
최종 임베딩 = 토큰 임베딩: [E[CLS], EI, Elove, Eyou, E[SEP], EI, Elove, Eice-cream, E[SEP]]
+
세그먼트 임베딩: [ EA, EA, EA, EA, EA, EB, EB, EB, EB ]
+
위치 임베딩: [ E0, E1, E2, E3, E4, E5, E6, E7, E8 ]
워드피스 토크나이저
- 어휘 사전 이외단어(OOV: Out Of Vocabulary)를 효과적으로 처리하기 위해, 개별 단어를 하위 단어(subword)로 분할.
- 어휘 사전에 있는 단어가 나올때 까지 단어를 계속 분할.
ex) pretraining -----------> pre, ##train, ##ing ("##"는 하위 단어를 의미)
사전학습
- 마스크 언어 모델링(MLM: Masked Language Modeling): 주어진 전체 단어의 15%를 무작위로 마스킹하고 이를 예측하도록 학습. 80 10 10% 규칙을 적용.
- 15%중 80%의 토큰을 마스크 토큰으로 교체. ex) [[CLS], I, love, you, [SEP], I, [MASK], ice-cream, [SEP]]
- 15%중 10%의 토큰을 임의의 토큰으로 교체. ex) [[CLS], I, love, you, [SEP], I, good, ice-cream, [SEP]]
- 15%중 나머지 10%의 토큰은 어떠한 변경도 하지 않음. ex) [[CLS], I, love, you, [SEP], I, love, ice-cream, [SEP]]
- 다음 문장 예측(NSP: Next Sentence Prediction): 두 문장을 입력하고 두 번째 문장이 첫 번째 문장의 다음 문장인지 예측. 이 때 inNext와 notNext의 비율은 50%대 50%.
- isNext: 이어지는 문장. ex) She cooked pasta. It was delicious.
- notNext: 이어지지 않는 문장. ex) She cooked pasta. l love you.
지금 까지 저희는 'BERT'에 대해 알아보았습니다. 도움이 되셨나요? 만약 되셨다면 구독 및 좋아요로 표현해 주시면 정말 많은 힘이 됩니다. 궁금한 사항 혹은 앞으로 다루어 주었으면 좋을 주제가 있으시면 댓글 남겨주시면 감사하겠습니다. 저는 '코딩 오페라'의 'Master.M'이었습니다. 감사합니다.
(참조: 구글 BERT의 정석)
'자연어처리(NLP)' 카테고리의 다른 글
T5: Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer 논문리뷰 (0) | 2023.02.01 |
---|---|
BERTSUM: Text Summarization with Pretrained Encoders 논문 리뷰 (0) | 2023.01.30 |
4-3. Transformer(Positional Encoding) [초등학생도 이해하는 자연어처리] (0) | 2022.12.16 |
4-2. Transformer(Multi-head Attention) [초등학생도 이해하는 자연어처리] (2) | 2022.12.14 |
4-1. Transformer(Self Attention) [초등학생도 이해하는 자연어처리] (10) | 2022.12.13 |