일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 다중분류
- 밑바닥부터 시작하는 딥러닝
- 과적합
- andoriod with kotlin
- 경사하강법
- 보이스피싱
- 밑시딥2
- 예측선
- ESG 채권
- 코틀린
- 면접왕이형
- nlp
- 면접왕 이형
- MRC
- 모두의 딥러닝
- gradiant descent
- 베스트 모델
- 딥페이크
- 안드로이드
- 로지스틱 회귀법
- 밑시딥
- k겹 교차검증
- 선형회귀
- GPT-3
- 안드로이드 구조
- 경제신문스크랩
- 독서 #독서후기 #피로사회 #행동과잉 #긍정과잉
- ESG
- 뉴로 심볼릭
- 학습 자동 중단
- Today
- Total
Practice makes perfect!
Week9 (2) BERT 언어모델 본문
1) 강의 내용
이미지 Autoencoder
- encoder : 입력된 이미지를 압축된 형태로 표현
- decoder : 원본을 다시 복원
- compressed data는 입력 이미지에 대한 벡터값이 될 수 있음. (본인 스스로를 가장 잘 표현할 수 있게 학습된 모델이기 때문)
BERT
- self attention(transformer)를 사용한 모델
- 입력된 정보를 다시 입력된 정보로 representation하는 것을 목적으로 학습됨
- masking 기술을 사용해 어렵게 만든 문제를 해결하도록 함.
- BERT는 mask된 자연어를 원본 자연어로 복원하는 과정으로 학습
- GPT-2 는 원본 이미지를 특정 sequence로 자르고 모델이 그 next를 예측하는 것을 목적으로 학습
- sentence 2개를 input으로 받음
- 12개의 transformer layer가 all-to-all로 연결되어 있음
- [CLS]는 s1과 s2가 next sentence 관계인지 아닌지를 분류하기 위해 학습됨
- [CLS] 토큰의 출력 벡터가 s1과 s2를 포괄하고 있는 어떤 벡터로 녹아든다고 가정.
- [CLS] 토큰이 s1과 s2를 잘 표현하기 위해 토큰 위에 classification layer를 부착해서 pre-training 진행
데이터의 tokenizing
- WordPiece tokenizing
- He likes playing -> He likes play ##ing
- 입력 문장을 tokenizing하고, 그 token들로 ‘token sequence’를 만들어 학습에 사용
- 2개의 token sequence가 학습에 사용됨
> NLP 실험
GLUE dataset
- MNLI(두 문장의 관계 분류를 위한 데이터셋), QQP(두 질문이 의미상 같은지) 등..
- 언어 모델의 성능평가의 지표가 될 수 있음
- 단일 문장 분류(어떤 클래스인지), 두 문장 관계 분류(next sentence, 가설, 유사도 등), 문장 토큰 분류(각 토큰들의 output에 classifier 부착 -> 토큰이 어떤 레이블을 갖는지 분류. 객체명 인식기), 기계 독해 정답 분류(문서 내 정답 찾기)
> 한국어 BERT 모델
ETRI KoBERT
- 최초로 공개된 모델
- 형태소 단위로 먼저 분리 후 Word Piece tokenizer 적용 -> 한국어에 특화되게 만듦
SKT KoBERT
- Word Piece tokenizer 만 사용
- ETRI 보다는 성능이 조금 떨어짐.
- ETRI 형태소 분석기를 사용하지 않아도 된다는 점.
- 자소 (CV), 음절(Syllable), 형태소 (morpheme)
- Morpheme-aware Subword가 가장 성능이 좋았음
Advanced BERT model
- KBQA에서 가장 중요한 entity정보가 기존 BERT에서는 무시됨
- Entity linking을 통한 주요 entity추출 및 entity tag부착
- Entity embedding layer의 추가
- 형태소 분석을 통해 NNP와 entity우선 chunking masking
- word piece 단위로 한국어 corpus를 이용해 vocab을 만들 때, 30000개 정도로 하면 한자와 특수기호까지 포함되게 만들 수 있음
2) 피어세션
# vocab에 없는 단어 add_tokens로 추가!
added_token_num = tokenizer.add_tokens(["깟뻬뜨랑", "케쇽", "우뤼갸", "쳥쇼", "섀료"])
print(added_token_num) # 추가된 토큰 수
print(tokenizer.vocab_size) # add_tokens 전이랑 변화 x !
토큰을 추가했는데 tokenizer.vocab_size가 변경되지 않는 이유가 궁금해 질문했다.
tokenizer.vocab_size : Size of the base vocabulary (without the added tokens)
* pre-fix된 모델은 임베딩 레이어의 vocab이 고정되어 있기 때문에, vocab을 새롭게 추가했다면, 반드시 model의 embedding layer 사이즈를 늘려줘야 한다!
model.resize_token_embeddings(tokenizer.vocab_size + added_token_num)
'Study > AI Tech' 카테고리의 다른 글
Week 11 (1) MRC Intro (0) | 2021.10.12 |
---|---|
Week 10 (1) GPT 언어 모델 (0) | 2021.10.05 |
Week 9 (4) 한국어 언어 모델 학습 및 다중 과제 튜닝 (0) | 2021.10.01 |
Week9 (3) BERT 학습 (0) | 2021.09.29 |
Week 9 (1) 인공지능과 자연어 처리 (0) | 2021.09.27 |