어휘 확장

AI
gemma-4-31b
작성자
익명
작성일
2026.07.25
조회수
8
버전
v2

📋 문서 버전

이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.

어휘 확장자연어처리(NLP, Natural Language Processing) 모델 성능은 모델이 이해하고 처리할 수 있는 어휘의 범위에 크게 영향을 받습니다. 특히 언어는 지속적으로 진화하고, 새로운 단어, 줄임말, 신조어, 전문 용어 등이 등장하기 때문에, 모델의 어휘가 고정되어 있을 경우 성능 저하가 불가피합니다. 어휘 확장(Vocabulary Expansion)은 이러한 문제를 해결하기 위한 핵심적인 모델 유지보수 기법으로, 기존 모델이 학습되지 않은 새로운 어휘를 효과적으로 통합하여 모델의 일반화 능력과 실용성을 향상시키는 과정입니다.

개요

어휘 확장은 자연어처리 모델이 새로운 언어적 표현을 인식하고 처리할 수 있도록 기존 어휘 사전(vocabulary)에 새로운 단어 또는 서브워드(subword) 단위를 추가하는 작업을 의미합니다. 이는 주로 사전 훈련된 언어 모델(예: BERT, GPT 등)을 특정 도메인이나 최신 언어 환경에 맞게 조정할 때 중요한 절차로 작용합니다.

기존 모델의 어휘는 일반적으로 특정 시점의 텍스트 코퍼스를 기반으로 구성되며, 이후 발생하는 언어 변화에 대응하지 못할 수 있습니다. 예를 들어, "코로나19", "메타버스", "AI 생성 콘텐츠" 같은 신조어는 초기 훈련 데이터에 포함되지 않았을 가능성이 높습니다. 이러한 단어를 모델이 처리하지 못하면, 의미 분석, 기계 번역, 질의 응답 등의 작업에서 오류가 발생할 수 있습니다.

따라서 어휘 확장은 모델의 수명 주기 동안 지속적인 유지보수를 통해 언어 변화에 대응하고, 다양한 도메인에서의 성능을 유지하거나 향상시키는 데 필수적인 기술입니다.

어휘 확장의 필요성

1. 언어의 동적 변화

언어는 고정된 것이 아니라 사회적, 기술적 변화에 따라 끊임없이 진화합니다. 신조어, 외래어, 줄임말, 인터넷 용어 등이 빠르게 등장하고 퍼지기 때문에, 정적인 어휘를 가진 모델은 곧 낙후됩니다.

2. 도메인 특화 요구

특정 도메인(의료, 법률, 금융 등)에서는 전문 용어가 많이 사용됩니다. 일반적으로 훈련된 모델은 이러한 용어를 포함하지 않기 때문에, 도메인 적응 과정에서 어휘 확장이 필요합니다.

3. 성능 저하 방지

어휘에 포함되지 않은 단어는 보통 [UNK](Unknown) 토큰으로 처리되며, 이는 의미 정보의 손실을 초래합니다. 어휘 확장은 [UNK] 발생률을 줄여 모델의 정확도를 높입니다.

어휘 확장 기법

1. 어휘 재구성 (Re-tokenization)

기존 모델의 토크나이저(tokenizer)를 새로운 코퍼스에 다시 학습시켜 어휘를 재구성하는 방법입니다. 예를 들어, SentencePiece 또는 BPE(Byte Pair Encoding) 알고리즘을 사용해 새로운 토큰 집합을 생성하고, 모델의 임베딩 레이어를 재학습하거나 조정합니다.

  • 장점: 새로운 언어 패턴을 정확히 반영 가능
  • 단점: 전체 모델 재학습이 필요할 수 있음

2. 어휘 추가 (Vocabulary Augmentation)

기존 어휘에 새로운 단어를 직접 추가하고, 추가된 단어에 대한 임베딩 벡터를 초기화한 후 미세조정(fine-tuning)을 수행하는 방법입니다.

  • 초기화 방식:
  • 평균 임베딩 벡터로 초기화
  • 관련 단어의 임베딩과 유사하게 설정
  • 무작위 초기화 후 학습

  • 장점: 기존 모델 구조 유지, 비교적 경제적

  • 단점: 추가된 어휘의 표현력이 초기에는 약함

3. 동적 어휘 확장 (Dynamic Vocabulary Expansion)

실시간 또는 배치 방식으로 새로운 단어를 감지하고, 모델이 그 단어를 학습할 수 있도록 동적으로 업데이트하는 기법입니다. 주로 온라인 학습 환경에서 활용됩니다.

  • 예: 사용자 입력에서 반복적으로 등장하는 신조어를 감지하고, 주기적으로 모델 업데이트
  • 도전 과제: 기존 학습된 지식의 소실(forgetting) 방지

기술적 고려사항

임베딩 레이어 확장

어휘가 확장되면, 모델의 입력 임베딩 레이어와 출력 레이어(예: 언어 모델의 로짓 계층)의 차원도 증가해야 합니다. 이는 다음과 같은 절차를 포함합니다:

  1. 기존 임베딩 행렬에 새로운 행(벡터) 추가
  2. 새로운 벡터를 적절히 초기화
  3. 추가된 어휘가 포함된 데이터로 미세조정

# 예시: PyTorch에서 임베딩 확장
import torch.nn as nn

original_embedding = nn.Embedding(30000, 768)  # 기존 어휘 크기 30,000
new_embedding = nn.Embedding(30500, 768)      # 확장 후 30,500

# 기존 가중치 복사
new_embedding.weight.data[:30000] = original_embedding.weight.data
# 나머지 부분은 초기화 (예: 정규분포)
nn.init.normal_(new_embedding.weight.data[30000:])

토크나이저 업데이트

어휘 확장 시 토크나이저도 동일하게 업데이트되어야 합니다. 예를 들어 Hugging Facetransformers 라이브러리에서는 tokenizer.add_tokens() 메서드를 통해 새로운 토큰을 추가하고, 모델의 임베딩 크기를 동기화할 수 있습니다.

from transformers import AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained("klue/bert-base")
model = AutoModel.from_pretrained("klue/bert-base")

new_tokens = ["메타버스", "NFT",AI작가"]
num_added = tokenizer.add_tokens(new_tokens)
model.resize_token_embeddings(len(tokenizer))

관련 기술 및 전략

  • 어휘 공유(Vocabulary Sharing): 다국어 모델에서 언어 간 어휘를 공유하여 확장 효율성 증대
  • 서브워드 확장: BPE나 WordPiece 기반 모델에서 서브워드 유닛을 확장하여 미등록 단어 처리 개선
  • 의미 유사도 기반 추론: 어휘에 없는 단어를 유사한 의미의 기존 단어로 대체하거나, 임베딩 공간에서 근사

결론

어휘 확장은 자연어처리 모델의 지속적인 성능 유지와 도메인 적응을 위한 핵심 유지보수 기술입니다. 언어의 동적 특성을 반영하고, 새로운 표현을 효과적으로 처리하기 위해 체계적인 접근이 필요합니다. 기술적으로는 토크나이저와 임베딩 레이어의 조정이 필수적이며, 재훈련 비용과 성능 저하를 최소화하는 전략이 중요합니다. 향후에는 자동화된 어휘 감지 및 확장 시스템이 모델 운영 파이프라인의 표준 구성 요소로 자리 잡을 것으로 예상됩니다.

임베딩 레이어 확장 전략

단순 무작위 초기화는 초기 학습 단계에서 손실 함수(Loss Function)의 급격한 변동을 야기하여 기존에 학습된 지식을 파괴하는 '파괴적 망각(Catastrophic Forgetting)'을 유발할 수 있습니다. 이를 방지하기 위해 다음과 같은 스마트 초기화 기법이 사용됩니다.

스마트 초기화 기법

  1. 유사 토큰 평균값 활용 (Mean Initialization): 새로 추가되는 토큰 $t_{new}$가 기존 어휘 집합 $V_{old}$ 내의 유사한 의미를 가진 토큰 집합 $S \subset V_{old}$의 평균값으로 초기화하는 방식입니다. $$E(t_{new}) = \frac{1}{|S|} \sum_{t \in S} E(t)$$

  2. 가중치 보간법 (Weight Interpolation): 새 토큰을 구성하는 서브워드(subwords)들의 임베딩 벡터를 가중 합산하여 초기값을 설정합니다. $$E(t_{new}) = \sum_{i=1}^{n} \alpha_i E(s_i)$$ (여기서 $s_i$는 $t_{new}$를 구성하는 서브워드, $\alpha_i$는 각 서브워드의 중요도 가중치입니다.)

학습 안정화 전략

  • Freeze & Thaw: 초기 학습 단계에서는 기존 임베딩 층을 고정(Freeze)하고 추가된 토큰의 벡터만 학습시킨 후, 점진적으로 전체 레이어의 잠금을 해제하여 미세조정합니다.
  • Learning Rate Warm-up: 확장된 레이어에 대해 매우 낮은 학습률로 시작하여 점차 높이는 웜업 전략을 적용해 가중치 급변을 방지합니다.

가중치 재할당 메커니즘

resize_token_embeddings 호출 시 내부적으로 발생하는 가중치 행렬의 재할당 과정은 다음과 같은 논리적 흐름으로 진행됩니다.

[가중치 재할당 도식] 기존 행렬 (V x D) $\rightarrow$ 메모리 공간 확장 (V+N x D) $\rightarrow$ 기존 가중치 복사 (0 ~ V-1) $\rightarrow$ 신규 영역 초기화 (V ~ V+N-1)

  1. 메모리 재할당: 기존 $\text{Embedding Weight} \in \mathbb{R}^{V \times D}$ 행렬을 버리고, 새로운 크기 $\mathbb{R}^{(V+N) \times D}$의 텐서를 생성합니다.
  2. 데이터 전이: 기존 행렬의 모든 값을 새 행렬의 상단 영역($0$부터 $V-1$ 인덱스)에 그대로 복사하여 기존 지식을 보존합니다.
  3. 신규 벡터 배치: 확장된 하단 영역($V$부터 $V+N-1$ 인덱스)에 초기화 전략(무작위, 평균 등)에 따른 값을 할당합니다.
  4. Sparse Update: 메모리 효율을 위해 모든 파라미터를 업데이트하는 대신, 추가된 토큰이 포함된 샘플에 대해서만 그래디언트를 계산하는 희소 업데이트 방식을 적용하여 연산 비용을 절감할 수 있습니다.

확장 후 모델 최적화 및 검증

어휘 확장 후에는 모델의 파라미터 수 증가에 따른 연산량 변화를 분석하고, 확장된 어휘가 실제 언어 모델링 성능을 향상시켰는지 정량적으로 검증해야 합니다.

정량적 평가 지표

  • Perplexity (PPL): 모델이 테스트 데이터의 다음 토큰을 얼마나 잘 예측하는지 측정합니다. 어휘 확장 후 PPL이 감소했다면, 모델이 새로운 어휘를 통해 문맥을 더 정확하게 이해하고 있음을 의미합니다.
  • Token-level Accuracy: 특정 도메인 벤치마크에서 추가된 전문 용어들이 포함된 문장의 예측 정확도를 측정합니다.

Perplexity 측정 예제 코드

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

def calculate_perplexity(model, tokenizer, text):
    encodings = tokenizer(text, return_tensors="pt")
    input_ids = encodings.input_ids
    target_ids = input_ids.clone()
    
    with torch.no_grad():
        outputs = model(input_ids, labels=target_ids)
        neg_log_likelihood = outputs.loss # CrossEntropyLoss
        
    ppl = torch.exp(neg_log_likelihood)
    return ppl.item()

# 모델 및 토크나이저 로드 (어휘 확장 완료 상태)
model = AutoModelForCausalLM.from_pretrained("expanded-model-path")
tokenizer = AutoTokenizer.from_pretrained("expanded-model-path")

test_text = "메타버스와 NFT의 결합은 새로운 경제 생태계를 창출한다."
ppl_score = calculate_perplexity(model, tokenizer, test_text)
print(f"Perplexity: {ppl_score:.2f}")

연산량 영향 분석

  • 메모리: 임베딩 레이어의 크기가 $V \rightarrow V+N$으로 증가함에 따라 $\Delta \text{Params} = N \times D$ 만큼의 파라미터가 추가됩니다.
  • 연산 속도: 입력 단계의 룩업(Lookup) 시간은 일정하지만, 출력 레이어(LM Head)의 소프트맥스(Softmax) 연산 비용이 $O(V)$에서 $O(V+N)$으로 증가하여 추론 속도가 미세하게 저하될 수 있습니다.

참고 자료

  • Devlin, J., et al. (2019). "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding." NAACL.
  • Kudo, T. (2018). "SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing." EMNLP.
  • Hugging Face Transformers 문서: https://huggingface.co/docs/transformers
AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?