AI/Models

HuggingFace 모델 A to Z (1) - 기본 구조와 흐름

hundredeuk2 2022. 11. 29. 23:51
728x90

HuggingFace

Condition : Model : "bert-base-cased", Sentence : "Paris is the [MASK] of France."

 

다양한 Task와 실험을 하기 위해 기본 BERT모델을 어떻게 사용하는지 내맘대로 무식하게 알아 보았다.

우선 BERT의 기본 구조는 다음과 같다.

 Sentence를 받아 Tokenize하여 Embedding하여 BERT의 Attention모듈에 넣어준다. 그것을 "bert-base-cased"모델 기준으로 12개를 걸쳐 Task에 맞게 Layer로 뽑아내는 것이 전체적인 흐름이다. 

 따라서 우리가 우리 입맛에 맞게 변동 시킬 수 있는 부분은 총 3가지라는 것이다. 

  1. Tokenizer
  2. Embedding
  3. Classifier Layer

위 3가지 모두 차례대로 무식하게 분해해서 분석할 것이지만 지금은 큰 흐름을 파악하고 넘어가기 위해 내일의 나에게 책임을 전가하겠다.

Tokenizer로 Embedding 벡터를 만들어 줄 때 필요한 요소는 다음과 같다.

Token Embeddings, Segment Embeddings, Position Embeddings 총 3가지이다. 하지만 transformer 라이브러리 중 Tokenzier를 통해 나오는 인자들은 다음과 같다.

input_ids, token_type_ids, attention_mask이다. 각각이 무엇을 의미하는 지는 또다시 내일의 내가 책임지겠다. 우선 이렇게 변형 후 모델 인풋값으로 넣어주면 된다.

 

모델 선언은 다음과 같이 하면 모델의 구조를 파악할 수 있다.

뭐가 엄청 많아보이지만 사실 크게 3가지 레이어로 구성되어 있다.

  1. embeddings
  2. encoder(12개)
  3. pooler

임베딩을 거쳐 12개의 BERT Attention Encoder를 지나 Pooler layer를 거치게 되면 어떤 Task인지 간 사용가능한 Last Hidden State 벡터값이 나오게 된다!