또르르's 개발 Story

[Stage 2 - 04] BERT MASK & 단일 문장 분류 본문

[P Stage 2] KLUE/프로젝트

[Stage 2 - 04] BERT MASK & 단일 문장 분류

또르르21 2021. 4. 16. 11:41

 1️⃣ Goal

 

  • [BaseLine 작성] (추가 : 4/12, 새로운 Baseline code)

  • [Data Processing]

    - Exploratory Data Analysis (추가 : 4/12, 기간 : 4/12 ~ )


    - Cross-validation 사용 (추가 : 4/12)

    - 데이터 불균형 해소 (추가 : 4/12)

    - 한국어 전처리 (추가 : 4/13, 기간 : 4/13 ~ 4/13 )

    - 새로운 tokenizer 사용 (추가 : 4/12, 기간 : 4/13 ~ ) 

    - 형태소 분류기 -> BERT wordpiece (추가 : 4/13)

    - [ENT][/ENT] tag를 추가해서 train 돌리기 (추가 : 4/14)

  • [Model]

    - BERT 모델 사용 (추가 : 4/12, 기간 : 4/14 ~ )

    - GPT 모델 사용 (추가 : 4/12)

    - ELECTRA 모델 사용 (추가 : 4/12)

    - KoBERT 모델 사용 (추가 : 4/12)

  • [Training]

    - 앙상블 시도 (추가 : 4/12)

    - Hyperparameter 변경 (추가 : 4/12)

    - Learning Schedular 사용 (추가 : 4/12)

    - 좋은 위치에서 Checkpoint 만들기 (추가 : 4/12)

    - NNI (Auto ML) 사용 (추가 : 4/12)

  • [Deploy]

    - Python 모듈화 (추가 : 4/12)

 

 

 

 

2️⃣ Learning

1) 한국어 BERT 모델 학습하기 (Next Sentecne Prediction, Mask 방법)

dororo21.tistory.com/135

 

[Stage 2 - 이론] 한국어 BERT 모델 학습하기

한국어 BERT 모델을 학습하기 위해서 다음과 같은 방법을 사용했습니다. 한국어 Wiki corpus HuggingFace BERT WordPiece Tokenizer 다음 문장을 예측 DataSet (Text Dataset For Next Sentence Prediction) Speci..

dororo21.tistory.com

 

2) BERT를 활용한 단일 문장 분류

dororo21.tistory.com/136

 

[Stage 2 - 이론] BERT를 활용한 단일 문장 분류

BERT를 활용해서 단일 문장 분류를 수행합니다. 네이버에서 발표한 영화 감정분류 데이터셋 HuggingFace BERT BERT Tokenizer 1️⃣ 설치 huggingface의 transformers를 설치합니다. !pip install transformers hu..

dororo21.tistory.com

 

3) 의존구문 분석

dororo21.tistory.com/134

 

[Stage 2 - 이론] 의존 구문 분석

1️⃣ 의존 구문 분석 의존 구문 분석은 단어들 사이의 관계를 분석하는 task입니다. 1) 특징 지배소 : 의미의 중심이 되는 요소 의존소 : 지배소가 갖는 의미를 보완해주는 요소 (수식) 어순과 생

dororo21.tistory.com

 

4) 학습과정

https://www.edwith.org/bcaitech1

 

5) 범용 VS 도메인 모델

도메인 특화 task의 경우, 도메인 특화된 학습데이터만 사용할 때 성능이 더 좋습니다.

 

 

3️⃣ Main Task

 

없음.

 

 

4️⃣ Sub Task

1) Tokenizer에서 sentence 1, sentence 2를 주는 방법

 

tokenizer에서 Sentence를 이어붙이는 방법에는 여러가지가 있습니다.

 

  • Sentence 1 + '[SEP]' + Sentence 2

하지만 다음과 같이 sentence가 길어질 때는 tokenizer의 첫 번째, 두 번째 parameter를 사용할 수 있습니다.

 

  • entity01 [SEP] entity02 [SEP] 전체문장

 

아래와 같이 tokenizer에서 concat_entity, list(dataset['sentence'])를 첫 번째 parameter와 두 번째 parameter에 넣어서 사용할 수 있습니다.

 

 

원래는 tokenizer에 하나의 parameter에만 넣어서 사용했지만, 두 개의 parameter에 sentence가 들어가 있는 것을 보고 혼란이 와서 찾아보았습니다.

 

아래 코드와 같이 encode에는 text와 text_pair로 구성되어 있어서 두 개의 parameter에 동시에 넣는 것이 가능합니다.

text와 text_pair는 [SEP]로 나눠서 들어갑니다. (text[SEP]text_pair)

 

 

 

2) Truncation 방법

Tokenizer에서 Truncation을 사용할 때 총 4가지의 값을 넣어줄 수 있습니다.

 

  • True 혹은 'longest_first' : sentence 1과 sentence 2 중 더 긴 문장을 자름

  • 'only_first' : sentence 1을 무조건 자름

  • 'only_second' : sentence 2를 무조건 자름

  • False 혹은 'do_not_truncate' : 자르지 않음

 

https://huggingface.co/transformers/main_classes/tokenizer.html

 

 

5️⃣ Evaluation

 

Data processing Model Training Time Accuracy
4/13 -
EDA
-
    1h -
4/13     -
new baseline
code
-
30m 59.3000%
4/14   -
KoBERT
-
-
epoch : 20
max_len = 128
batch_size = 32
-
23m 72.0000%

 

1) 차후 목표

  • Baseline code 최적화하기
  • BERT에 entity layer 추가해서 사용해보기
  • tokenizer를 자유자재로 다루기

 

Comments