어휘 사전

AI
gemma-4-31b
작성자
익명
작성일
2026.08.05
조회수
2
버전
v1

어휘 사전 (Vocabulary)

1. 개요

어휘 사전(Vocabulary)이란 자연어 처리(NLP)에서 모델이 처리할 수 있는 모든 고유한 토큰(Token, 텍스트의 최소 의미 단위)의 집합을 의미하며, 텍스트 데이터를 컴퓨터가 이해할 수 있는 수치형 벡터로 변환하기 위한 기초 매핑 테이블 역할을 한다.

2. 어휘 사전 구축 과정

어휘 사전 구축은 원시 텍스트(Raw Text)를 정수 인덱스로 변환하는 정형화된 과정을 거친다.

2.1 구축 단계

  1. 토큰화(Tokenization): 문장을 단어, 형태소, 혹은 문자 단위의 토큰으로 분리한다.
  2. 고유 단어 추출: 전체 말뭉치(Corpus)에서 중복을 제거하여 유일한 토큰들의 집합을 생성한다.
  3. 인덱싱(Indexing): 각 고유 토큰에 0부터 시작하는 고유한 정수 번호를 부여한다.

2.2 변환 예시

사전 정의: {"나": 0, "는": 1, "학교": 2, "에": 3, "간다": 4, "집": 5, "으로": 6}

원문 텍스트 토큰화 결과 인덱스 변환 (Mapping)
"나는 학교에 간다" ["나", "는", "학교", "에", "간다"] [0, 1, 2, 3, 4]
"학교에 간다" ["학교", "에", "간다"] [2, 3, 4]
"나는 집으로 간다" ["나", "는", "집", "으로", "간다"] [0, 1, 5, 6, 4]

2.3 양방향 매핑 구조

효율적인 데이터 처리를 위해 어휘 사전은 일반적으로 두 가지 형태의 딕셔너리 구조를 동시에 유지한다. - Word-to-Index (Forward Mapping): 텍스트를 입력받아 모델에 넣을 정수 인덱스로 변환할 때 사용한다. (예: {"나": 0, "는": 1, ...}) - Index-to-Word (Backward Mapping): 모델이 출력한 정수 인덱스를 다시 사람이 읽을 수 있는 텍스트로 복원(Decoding)할 때 사용한다. (예: {0: "나", 1: "는", ...})

3. 특수 토큰 (Special Tokens)

표준적인 단어 외에 모델의 구조적 제어나 예외 상황 처리를 위해 정의된 특수 토큰들이 존재한다.

  • [PAD] (Padding): 입력 문장들의 길이를 동일하게 맞추기 위해 빈 공간을 채우는 토큰이다. 연산 시 무시되도록 설정된다.
  • [UNK] (Unknown): 어휘 사전에 등록되지 않은 단어(OOV)가 등장했을 때 이를 대체하는 토큰이다.
  • [SOS] (Start of Sentence): 문장의 시작을 알리는 토큰으로, 주로 Seq2Seq나 LLM과 같은 생성 모델에서 첫 토큰으로 입력된다.
  • [EOS] (End of Sentence): 문장의 끝을 알리는 토큰으로, 모델이 텍스트 생성을 멈춰야 하는 시점을 판단하게 한다.
  • [CLS] (Classification): 문장 전체의 의미를 대표하는 토큰으로, 주로 BERT와 같은 모델에서 분류 작업의 입력으로 사용된다.
  • [SEP] (Separator): 두 개의 문장을 구분하거나 문장의 끝을 알리는 구분자 토큰이다.

4. 어휘 사전의 크기와 최적화

사전의 크기(Vocabulary Size)는 모델의 성능과 자원 효율성 사이의 트레이드-오프(Trade-off) 관계에 있다.

4.1 사전 크기의 영향

  • 크기가 너무 클 때: 모델의 임베딩 층(Embedding Layer) 파라미터가 급증하여 메모리 사용량이 늘어나고, 희소 단어(Rare words)에 대한 학습 부족으로 과적합(Overfitting) 위험이 커진다.
  • 크기가 너무 작을 때: 너무 많은 단어가 [UNK] 토큰으로 처리되어 정보 손실이 발생하고 모델의 표현력이 저하된다.

4.2 최적화 방법: 빈도수 기반 필터링 (Min-count)

전체 말뭉치에서 등장 횟수가 매우 적은 단어(예: 5회 미만 등장)를 제거하고 [UNK]로 통합하는 방식이다. 이를 통해 노이즈를 제거하고 모델의 일반화 성능을 높일 수 있다.

5. 어휘 사전의 한계와 발전

5.1 OOV(Out-of-Vocabulary) 문제

OOV 문제란 학습 단계의 어휘 사전에는 없었으나, 추론(Test) 단계에서 새로운 단어가 등장하여 모델이 해당 단어를 처리하지 못하고 모두 [UNK]로 치환해버리는 현상을 말한다. 이는 신조어, 오타, 혹은 복합어의 조합으로 인해 발생하며, 모델의 정보 손실을 야기한다.

5.2 서브워드 분절법 (Subword Segmentation)

단어를 더 작은 단위(Subword)로 쪼개어 사전의 크기를 제한하면서도 모든 단어를 표현할 수 있게 하여 OOV 문제를 해결한다.

BPE (Byte Pair Encoding)와 WordPiece 비교

구분 BPE (Byte Pair Encoding) WordPiece
병합 기준 가장 빈번하게 등장하는 문자 쌍 (Frequency) 가능도(Likelihood)를 최대화하는 쌍
특징 단순 빈도 기반의 반복적 병합 통계적 확률 기반의 병합
대표 모델 GPT 시리즈, RoBERTa BERT
목표 빈도수가 높은 조합을 하나의 토큰으로 통합 전체 말뭉치의 가능도를 높이는 방향으로 분절

5.3 BPE 작동 원리 예시 코드

import collections

def get_stats(ids):
    counts = collections.defaultdict(int)
    for i in range(len(ids)-1):
        counts[(ids[i], ids[i+1])] += 1
    return counts

def merge(ids, pair):
    new_ids = []
    i = 0
    while i < len(ids):
        if i < len(ids)-1 and (ids[i], ids[i+1]) == pair:
            new_ids.append(pair[0] + pair[1]) # 병합된 토큰 생성
            i += 2
        else:
            new_ids.append(ids[i])
            i += 1
    return new_ids

# 초기 데이터: 각 단어를 문자 단위로 분리
words = ["hug", "pug", "pun", "bun"]
# 단순화를 위해 각 단어를 리스트로 표현
ids = ["h", "u", "g", "p", "u", "g", "p", "u", "n", "b", "u", "n"]

# 1회차 병합: 가장 빈번한 쌍 (u, g) 또는 (u, n) 중 하나 선택
stats = get_stats(ids)
best_pair = max(stats, key=stats.get) # 예: ('u', 'g')
ids = merge(ids, best_pair)
print(f"1차 병합 후: {ids}") # ['h', 'ug', 'p', 'ug', 'p', 'u', 'n', 'b', 'u', 'n']

# 2회차 병합: 다음 빈번한 쌍 (u, n) 선택
stats = get_stats(ids)
best_pair = max(stats, key=stats.get) # ('u', 'n')
ids = merge(ids, best_pair)
print(f"2차 병합 후: {ids}") # ['h', 'ug', 'p', 'ug', 'p', 'un', 'b', 'un']

# 결과적으로 'bug'라는 새로운 단어가 들어와도 [b, ug] 혹은 [b, u, g]로 표현 가능하여 OOV 해결

6. 활용 및 주의사항

6.1 임베딩 층(Embedding Layer)과의 연결성

어휘 사전의 인덱스는 모델의 첫 번째 층인 임베딩 층의 행 인덱스로 직접 연결된다.

  • 작동 프로세스:
  • 단어 $\rightarrow$ 사전 인덱스(Integer) $\rightarrow$ <a href="/doc/%EA%B8%B0%EC%88%A0/%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5/%EC%8B%A0%EA%B2%BD%EB%A7%9D%20%EA%B5%AC%EC%84%B1%20%EC%9A%94%EC%86%8C/%EC%9E%84%EB%B2%A0%EB%94%A9%20%EB%B2%A1%ED%84%B0" class="wiki-link wiki-link-missing">임베딩 벡터</a>(Float Vector)
  • 상세 원리:
  • Word2Vec, FastText: 사전의 각 인덱스에 대응하는 고정된 크기의 밀집 벡터(Dense Vector)를 학습한다.
  • 모델은 입력받은 정수 인덱스를 사용하여 임베딩 행렬(Embedding Matrix)에서 해당 행의 벡터를 추출(Lookup)하며, 이 벡터가 신경망의 실제 연산에 활용된다.

6.2 구축 시 주의사항

  • 사전 일치(Vocabulary Consistency): 학습 데이터로 구축한 사전을 테스트 데이터 및 실제 서비스 환경에서도 동일하게 사용해야 한다. 인덱스가 하나라도 밀리면 모델은 완전히 다른 단어로 인식한다.
  • 도메인 특화 사전: 의료, 법률, IT 등 전문 분야의 텍스트를 처리할 때는 일반적인 사전보다 해당 도메인의 전문 용어가 충분히 반영된 특화 사전을 구축하거나, 기존 사전에 전문 용어를 추가하는 과정이 필요하다.
AI 생성 콘텐츠 안내

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

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

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