ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CS : BERT (2/2)
    Computer Science/ML, DL 2021. 4. 9. 22:32
    728x90

     

     

     

     

    이전 글 : kxmjhwn.tistory.com/270?category=1196626

     

    Knowledge : BERT (1/2)

    NLP NLP = Natural Language Processing 자연어(=우리가 일상적으로 사용하는 말)의 의미를 분석하여 컴퓨터가 처리할 수 있도록 처리하는 것을 말한다. Transformer 1. Transformer는 Self-Attention이라는 기법..

    kxmjhwn.tistory.com

     

     

    Example

     

     

    [공모전] 119 신고 도움 서비스, 119NER

    00:00 오프닝 영상 00:26 서비스 정의 및 필요성 01:35 시스템 구성 및 구현 과정 03:06 기대 효과 03:45 시연 영상 04:32 앞으로의 계획 작품 요약 119 소방 신고 접수 시, 신고자의 음성 내용을 분석하

    kxmjhwn.tistory.com

     


     

     

    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

    댓글

kxmjhwn@gmail.com