딥러닝/NLP

BERT 활용하기

eunsour 2022. 11. 19.
반응형

사전 학습된 BERT 모델 탐색

BERT를 처음부터 사전 학습 시키는 것은 계산 비용이 많이 든다. 따라서 사전 학습된 공개 BERT 모델을 다운로드해 사용하는게 효과적이다.

 

사전 학습된 모델은 BERT-uncasedBERT-cased 형식으로도 제공된다. BERT-uncased 에서는 모든 토큰이 소문자이지만 BERT-cased 에서는 토큰에 대해 소문자화를 하지 않은 상태로 학습을 진행한 모델이다. 대소문자를 보존해야 하는 개체명 인식(Named Entity Recognition)과 같은 특정 작업을 수행하는 경우 BERT-cased 모델을 사용해야 한다. 이와 함께 구글은 전체 단어 마스킹(WWM) 방법을 사용해 사전 학습된 BERT 모델도 공개했다.

 

사전 학습된 모델을 다음 두 가지 방법으로 사용할 수 있다.

  • 임베딩을 추출해 특징 추출기로 사용한다.
  • 텍스트 분류, 질의 응답 등과 같은 다운스트림 태스크에 맞게 파인 튜닝한다.

 

사전 학습된 BERT에서 임베딩을 추출하는 방법

I love Korea

먼저 문장을 토큰화하고 사전 학습된 BERT에 토큰을 입력해 각 토큰에 대한 임베딩을 반환한다. 또한 토큰 수준(단어 수준) 표현을 얻는 것 외에도 문장 수준의 표현을 얻을 수도 있다.

 

 

위의 데이터셋은 텍스트이므로 모델에 직접 입력할 수 없다. 따라서 먼저 텍스트를 벡터화해야 한다.

데이터셋의 첫 번째 문장을 워드피스 토크나이저를 사용해 토큰화하고 토큰(단어)를 얻는다.

tokens = [I, love, Korea]

 

토큰 리스트 시작 부분에 [CLS] 토큰을 추가하고 끝에 [SEP] 토큰을 추가한다.

tokens = [[CLS], I, love, Korea, [SEP]]

 

이와 같은 방법으로 학습셋의 모든 문장을 토큰화할 수 있다. 하지만 각 문장의 길이가 다양하듯이, 토큰의 길이도 다양하다. 따라서 모든 토큰의 길이를 동일하게 유지해야 한다. 데이터셋의 모든 문장에 대해 토큰의 길이를 7로 유지한다고 가정해보자. 이전 토큰 목록을 보면 토큰의 길이는 5가 된다. 토큰 길이를 7로 만들기 위해 [PAD] 라는 새 토큰을 추가하면 토큰은 다음과 같다.

tokens = [[CLS], I, love, Korea, [SEP], [PAD], [PAD]]

 

[PAD] 토큰 2개를 추가했으므로 이제 토큰의 길이는 7이 된다. 다음 단계는 [PAD] 토큰이 토큰의 길이를 맞추기 위해서만 추가될 뿐 실제 토큰의 일부가 아니라는 것을 모델이 이해하도록 하는 것이다. 이를 위해 우리는 어텐션 마스크를 이용한다. 다음과 같이 모든 위치에서 어텐션 마스크 값을 1로 설정하고 [PAD] 토큰이 있는 위치에만 0을 설정한다.

attention_mask = [1, 1, 1, 1, 1, 0, 0]

 

다음으로 모든 토큰을 고유한 토큰 ID에 매핑한다. 다음을 매핑된 토큰 ID라고 가정한다.

token_ids = [101, 1045, 2293, 3000, 102, 0, 0]

 

이제 사전 학습된 BERT 모델에 대한 입력으로 어텐션 마스크와 함께 token_ids 를 공급하고 각 토큰의 벡터 표현(임베딩)을 얻는다.

 

토큰을 입력으로 공급하면 인코더 1은 모든 토큰의 표현을 계산해 다음 인코더인 인코더 2로 보낸다. 인코더 2는 3으로 전송한다. 최종 인코더인 인코더 12는 문장에 있는 모든 토큰의 최종 표현 벡터(임베딩)을 반환하게 된다. 이 때 각 토큰의 표현 크기는 768이다.

 

‘I love Korea’ 문장에서 각 단어에 대한 표현을 얻는 방법을 확인했다. 그렇다면 전체 문장의 표현을 어떻게 얻을까?

 

문장 시작 부분에 [CLS] 토큰의 표현은 전체 문장의 집계 표현을 보유하게 된다. 따라서 다른 모든 토큰의 임베딩을 무시하고 [CLS] 토큰의 임베딩을 가져와서 문장의 표현으로 할당할 수 있다. 따라서 ‘I love Korea’ 문장의 표현은 [CLS] 토큰에 해당하는 \(R_{[CLS]}\) 의 표현 벡터가 된다.

 

유사한 방식으로 학습셋에 있는 모든 문장의 벡터 표현을 계산할 수 있다. 학습셋에 있는 모든 문장의 문장 표현을 얻은 후에는 해당 표현을 입력으로 제공하고 분류기를 학습해 감정 분석 작업을 수행할 수 있다.

 

[CLS] 토큰의 표현을 문장 표현으로 사용하는 것이 항상 좋은 생각은 아니다. 문장의 표현을 얻는 효율적인 방법은 모든 토큰의 표현을 평균화하거나 풀링하는 것이다.

 

 

예제

Ch 9. 파이썬스러운 객체

 

 


BERT의 모든 인코더 레이어에서 임베딩을 추출하는 방법

위에서 사전 학습된 BERT 모델에서 임베딩을 추출하는 법을 배웠다. 그리고 추출된 임베딩은 최종 인코더 계층에서 얻은 임베딩임을 확인했다. 그런데 항상 최종 인코더 레이어(마지막 계층의 은닉 상태)에서만 얻은 임베딩을 사용해야 할까, 아니면 모든 인코더 레이어(모든 은닉 상태)에서 얻은 임베딩도 고려해야 할까?

 

BERT 연구원들은 다른 인코더 레이어에서 임베딩을 가져오는 실험을 했다.

 

예를 들어, 개체명 인식 태스크의 경우 연구원은 사전 학습된 BERT 모델을 사용해 특징을 추출했다. 최종 인코더 레이어(최종 은닉 레이어)의 임베딩만 속성으로 사용하는 대신 다른 인코더 레이어(다른 은닉 레이어)의 임베딩을 속성으로 사용해 실험하고 다음과 같은 F1 점수를 얻었다.

 

 

위에서 볼 수 있듯이 마지막 4개의 인코더 레이어의 임베딩을 연결하면 F1 점수가 96.1%가 된다. 따라서 최종 인코더 레이어에서만 임베딩을 가져오는 대신 다른 인코더 레이어의 임베딩을 사용할 수도 있다.

 

 

예제 

Ch 9. 파이썬스러운 객체

 

 


다운스트림 태스크를 위한 BERT 파인 튜닝 방법

파인 튜닝은 BERT를 처음부터 학습시키지 않는다는 것을 의미한다. 그 대신 사전 학습된 BERT를 기반으로 태스크에 맞게 가중치를 업데이트하게 된다.

 

 

텍스트 분류

감정 분석을 수행하고 있다고 가정해본다. 감정 분석 태스크의 목표는 문장이 긍정적인지 부정적인지 분류하는 것이다.

 

‘I love Korea’ 라는 문장이 주어졌다고 하자. 먼저 문장을 토큰화하고 시작 부분에 [CLS] 토큰을 추가한 뒤 문장 끝에 [SEP] 토큰을 추가한다. 그런 다음 BERT 모델에 대한 입력으로 토큰을 입력하고 모든 토큰의 임베딩을 가져온다.

 

다음으로 다른 모든 토큰의 임베딩을 무시하고 \(R_{[CLS]}\) 인 [CLS] 토큰의 임베딩만 취한다. [CLS] 토큰을 포함하면 문장의 집계 표현이 유지된다. \(R_{[CLS]}\) 를 분류기 (소프트맥스 함수가 있는 피드포워드 네트워크)에 입력하고 학습시켜 감정 분석을 수행한다.

 

이러한 방식이 사전 학습된 BERT 모델을 파인 튜닝하는 것은 사전 학습된 BERT를 특징 추출기로 사용하는 것과 어떻게 다른 걸까?

 

위에서 문장의 임베딩 \(R_{[CLS]}\) 를 추출한 후 \(R_{[CLS]}\) 를 분류기에 입력하고 분류기를 학습해 분류를 수행한다는 것을 배웠다. 마찬가지로 파인 튜닝 중에 \(R_{[CLS]}\) 임베딩을 분류기에 입력하고 분류를 수행할 수 있다.

 

차이점은 사전 학습된 BERT 모델을 파인 튜닝할 때 분류기와 함께 모델의 가중치를 업데이트 한다는 것이다. 그러나 사전 학습된 BERT 모델을 특징 추출기로 사용하면 사전 학습된 BERT 모델이 아닌 분류기의 가중치만 업데이트하게 된다.

 

파인 튜닝 중에 다음 두 가지 방법으로 모델의 가중치를 조정할 수 있다.

  • 분류 계층과 함께 사전 학습된 BERT 모델의 가중치를 업데이트한다.
  • 사전 학습된 BERT 모델이 아닌 분류 계층의 가중치만 업데이트한다. 이렇게 하면 사전 학습된 BERT 모델을 특징 추출기로 사용하는 것과 같다.

 

감정 분석을 위한 BERT 파인 튜닝

네이버 영화 리뷰 데이터셋을 기반으로 한 감정 분석 태스크를 위해 사전 학습된 BERT를 파인 튜닝하는 방법을 살펴본다.

 

 

GitHub - eunsour/nlp-pretrained-model-paper-review

Contribute to eunsour/nlp-pretrained-model-paper-review development by creating an account on GitHub.

github.com

 

 

 

Reference

 
구글 BERT의 정석
저자 : 수다르산 라비찬디란
역자 : 전희원, 정승환, 김형준
출판 : 한빛미디어
발매 : 2021.11.03

 

 

 

반응형

댓글