-
CS : BERT (2/2)Computer Science/ML, DL 2021. 4. 9. 22:32728x90
이전 글 : kxmjhwn.tistory.com/270?category=1196626
Example
- 다음 프로젝트에서 사용한 기술을 예로 하여 설명한다.
- URL : kxmjhwn.tistory.com/239?category=1121129
1. Input Dataset Load
- input dataset의 형식은 다음과 같다.
- input dataset에 대한 pre-processing을 수행하는 함수, preprocessing_input() 함수는 다음과 같다.
- 문장 앞, 뒤에 CLS, SEP 토큰을 부착한다.
- Tokenizing을 한다.
- Embedding을 한다.
- Padding을 한다.
- Attention Mask를 생성한다.
- preprocessing_input() 함수를 거친 결과는 다음과 같다.
- input_ids : embedding 결과를 가지는 list
- attention_masks : input_ids 요소 중, 0에 대한 값은 0, 나머지는 1로 설정한 list
- tokenized_text : input dataset에 대해, 문장 시작과 끝에 CLS, SEP 토큰을 부착하고 tokenized한 결과 list
2. Target Dataset Load
- target dataset의 형식은 다음과 같다.
- target dataset에 대한 pre-processing을 수행하는 함수, preprocessing_target() 함수는 다음과 같다.
- preprocessing_target() 함수 안의 별도로 구현한 (a)부분에 대해 설명하자면 다음과 같다.
- convert_target_to_string() :각각의 토큰으로 list에 저장되어 있는 target data를 하나의 문자열로 변환
- searching_boundary() : 개체명이 나타나는 부분이 어디인지 알아내기 위한 indexing 작업
- tagging_label() : 계산한 각 input토큰의 시작점과, 실제 개체명의 출현 범위를 비교하며 토큰에 대한 태그 부착
- append_CLS_SEP() : 결과에 input dataset과 마찬가지로 앞, 뒤에 태그 부착
- preprocessing_target()의 결과는 다음과 같다.
- 기본적인 전처리를 마친 target dataset에 대해, embedding과 padding 작업을 진행한다.
- input dataset의 embedding 처리 시 사용했던 함수를 그대로 사용하게 되면, embedding은 잘 적용되지만, 프로젝트의 방향성과 맞지 않았다.
- 이유는, 우리는 '개체명 인식'이 주 목적이었고, 때문에 각각의 개체명마다 고유의 embedding 값이 필요했다.
- 때문에, 다음과 같은 dictionary 구조를 활용하여, embedding과 padding을 진행하였다.
3. Modeling
- 준비된 dataset을 tensor 자료구조로 변환한다.
- 변환 후 dataloader로 묶는다.
- BERT model을 불러온다.
4. Training
- 학습 과정의 코드는 다음과 같다.
- 순서
- batch만큼의 data를 epoch 횟수만큼 다음 과정을 반복한다.
- batch에서 data 추출 -> Forward() -> loss 추출 -> Backward() -> gradient 추출 및 weight 업데이트
- Forward (순전파) : model의 입력층부터 출력층까지 순서대로 parameter들을 계산하고 저장하는 과정
- Backward (역전파) : Forward 이후, parameter들에 대한 gradient를 반대 방향으로 계산하는 과정
- 위 두 과정은 상호 의존적인 과정이다.
- Gradient Clipping
- '안정적인' 학습을 위해 수행하는 과정
- gradient가 너무 크다면, learning rate를 아주 작게하여 해결할 수 있지만, 훈련 속도가 매우 느려질 것이다.
- 즉, gradient 값에 따라 learning rate를 적절히 조절해줄 필요가 있는데, 이를 위해 수행하는 과정이 gradient clipping이다.
- 만약, optimizer를 Adam으로 할 경우, 즉 동적인 학습률을 가지는 optimizer를 사용할 경우에는 gradient clipping 과정을 거치지 않아도 되지만, 안전장치로 적용하는 것은 문제없다.
5. Validation
- validation dataset을 통해 '검증'과정을 거친다.
- validation dataset 역시 동일한 전처리 과정을 거친다.
- validation dataset의 input list을 custom한 model에 넣어 forward()를 수행한다.
- 모델을 통과한 결과가 담긴 list와 validation dataset의 target list를 비교하여 정확도를 계산한다.
728x90'Computer Science > ML, DL' 카테고리의 다른 글
CS : Deep Learning (2/2) (0) 2021.04.10 CS : YOLO v5 (0) 2021.04.09 CS : BERT (1/2) (0) 2021.04.07 CS : Deep Learning (1/2) (0) 2021.04.06