Adventure Time - Finn 3
본문 바로가기
AI/ML

BERT(1)

by hyun9_9 2026. 5. 2.

들어가기 전...

transformers 패키지

사전학습된 최첨단 모델들을 쉽게 다운로드하고 훈련시킬 수 있는 API와 도구를 제공

huggingface 란

Hugging Face는 자연어 처리(NLP), 컴퓨터 비전(CV), 음성 처리 등 다양한 머신 러닝 모델을 쉽게 사용하고 배포할 수 있도록 지원하는 오픈소스 플랫폼이자 커뮤니티입니다.

특히, 대규모 언어 모델(LLM) 및 전이 학습(Transfer Learning) 프레임워크를 중심으로 한 도구와 서비스를 제공합니다.

Hugging Face는 데이터 과학자, 연구자, 엔지니어들이 머신 러닝 모델을 쉽게 활용하고, 학습시키고, 배포할 수 있도록 도와주는 라이브러리와 클라우드 서비스를 제공합니다. 가장 유명한 라이브러리는 Transformers이며, 이는 NLP 및 다양한 AI 작업에 널리 사용됩니다.

 

 

pip install transformers
# https://huggingface.co/docs/transformers/index
#  최첨단 사전 학습된 모델을 쉽게 다운로드하고 학습할 수 있는 API와 도구를 제공

 

1. BERT 개요

BERT는 트랜스포머를 이용하여 구현됨,

위키피디아와 BooksCorpus와 같은 레이블이 없는 텍스트 데이터로 사전 훈련된 언어모델

 

BERP의 성능이 높은 이유

레이블이 없는 방대한 데이터로 사전 훈련된 모델을 가지고 레이블이 있는 다른 작업에서 추가훈련과 함꼐 하이퍼파라미터를 재조정하여 이 모델을 사용하면 성능이 높게 나오는 기준의 사례들을 참고 하였기 때문

 

 

파인 튜닝 Fine-tuning

다른 작업에 대해서 파라미터 재조정을 위한 추가 훈련 과정을 파인 튜닝이라고 한다.

스팸 분류을 예를 들면

이미 위키피디아 등으로 사전학습된 BERT 위에 분류를 위한 신경망을 한층 추가 한다.

이 경우 비유하자면 BERT가 언어 모델 사전 학습 과정에서 얻은 지식을 활용할 수 있으므로 스팸 메일 분류에서 보다 더 좋은 성능을 얻을 수 있다

 

2. BERT의 크기 (BERT-Base, BERT-Large)

BERT의 기본 구조는 트랜스포머의 인코더를 쌓아올린 구조

  • 'Base 버전' 에서는 총 12개,
  • 'Large 버전'에서는 총 24개를 쌓았습니다

Large버전은 Base 버전보다 d_model의 크기나 셀프 어텐션 헤드의 수가 더 크다.

트랜스포머 인코더 층의 수를 L , d_model의 크기를 D , 셀프 어텐션 헤드의 수를 A라고 하였을 때 각각의 크기는 다음과 같다.

  • BERT-Base : L=12, D=768, A=12 : 110M개의 파라미터
  • BERT-Large : L=24, D=1024, A=16 : 340M개의 파라미터

3. BERT의 문맥을 반영한 임베딩(Contextual Embedding)

BERT는 문맥을 반영한 임베딩을 사용함

BERT의 연산을 거친 후 출련 임베딩은 문장의 문맥을 모두 참고한 문맥을 반영한 임베딩이 된다.

  • [CLS]라는 벡터는 BERT의 초기 입력으로 사용되었을 입력 임베딩 당시에는 단순히 임베딩 층(embedding layer)를 지난 임베딩 벡터였지만,
  • BERT를 지나고 나서는 [CLS], I, love, you라는 모든 단어 벡터들을 '모두 참고'한 후에 문맥 정보를 가진 벡터가 됩니다.

BERT가 문맥을 반영한 출력 임베딩을 얻게 되는 이유=> 셀프 어텐션

BERT는 트랜스포머 인코더를 12번 쌓음

 

4. BERT의 서브워드 토크나이저 : WordPiece

BERT는 단어보다 더 작은 단위로 쪼개는 서브워드 토크나이저를 사용

BERT가 사용한 토크나이저는 WordPiece 토크나이저

서브워드 토크나이저 기본 아이디어

 - 자주 등장하는 단어는 그대로 단어 집합에 추가

 - 자주 등장하지 않은 단어의 경우에는 더작은 단위인 서브워드로 분리되어 서브워드들이 단어 집합에 추가

이렇게 단어 집합이 만들어지고 나면 이단어 집합을 기반으로 토큰화를 수행

 

BERT에서 토큰화 수행방식

1. 토큰이 단어 집합에 존재한다 - > 해당 토큰을 분리하지 않는다.

2. 토큰이 단어 집합에 존재하지 않는다. -> 해당 토큰을 서브 워드로 분리한다.

-> 해당 토큰의 첮번째 서브워드를 제외한 나머지 서브워드들은 앞에 ## 을 붙인 것을 토큰으로 한다.

  1. [예시]
  • embeddings 단어가 입력으로 들어왔을때
  • BERT의 단어 집합에 해당 단어가 존재하지 않는다면
  • 서브워드 토크나이저가 아니라면 OOV 문제 발생
  • 서브워드 토크나이저의 경우 해당 단어를 더 쪼개려고 시도합니다
  • 만약, BERT의 단어 집합에 em, ##bed, ##ding, ##s라는 서브 워드들이 존재한다면
    • embeddings는 ==> em, ##bed, ##ding, ##s로 분리됩니다.
  • 여기서 ## 은 이 서브워드들은 단어의 중간부터 등장하는 '서브워드'라는 것을 알려주기 위해 단어 집합 생성 시 표시해둔 기호입니다.
  • 이런 표시가 있어야만 em, ##bed, ##ding, ##s를 다시 손쉽게 embeddings로 복원할 수 있을 것입니다.

'AI > ML' 카테고리의 다른 글

KoBERT를 이용한 네이버 영화 리뷰 분류하기  (0) 2026.05.08
BERT (2)  (0) 2026.05.03
BERT - 발전흐름  (0) 2026.05.01
트랜스포머 가계도  (0) 2026.04.30
디코더 (Decoder) 구조  (0) 2026.04.29