Data Science/자연어 처리

토큰화와 형태소 분석

Boxya 2025. 4. 10. 21:16

[KT] AIVLE SCHOOL 12일차

 

토큰과 토큰화

  • 토큰(token)
    • 문장의 가장 작은 단위를 토큰(token)이라 함. 문장은 여러 개의 토큰으로 구성
    • 토큰의 또 다른 이름들 : 단어(word), 형태소(morpheme), 서브 워드(sub word)
      • 별도의 언급이 없다면 용어 의미 차이에 크게 신경 쓰지 않아도 됨
  • 토큰화(tokenize)
    • 문장을 토큰 시퀀스로 나누는 과정

형태소 분석

  • 토큰화보다 더 깊은 분석을 수행
  • 단어를 구성하는 형태소(어근, 접사, 조사 등)를 식별하고 분류
구분 토큰화 형태소 분석
개념 문장을 일정한 단위(단어, 형태소 등)로 나누는 것 단어를 형태소 단위로 세분화하고 문법적 역할을 분석
한국어 ["나는", "학교에", "간다"] "나는/NP + 는/JX", "학교/NNG" + 에/JKN", "가/VV +  ㄴ다/EF"
영어 ["i", "am", "going", "to", "school". "."] 일반적으로 토큰화만으로 충분, 형태소 분석은 필요하지 않음

 


형태소 분석기

  • 한글
구분 KoNLPy Kiwi
(Korean Intelligent Word Identifier)
설치 konlpy  + Java 필요 kiwipiepy
속도 보통 빠름
정확도 보통 높음
품사 태깅 지원 O O
사전 추가 지원 X O
  • 영어
    • NLTK(Natural Language Toolkit)
      • NLTK는 교육 및 연구용으로 개발된 자연어처리(NLP) 라이브러리
      • 다양한 NLP 기능(토큰화, 품사 태깅, 형태소 분석, 파싱 등) 제공
      • 다만, 속도가 느리고 실무에서 사용하기에는 부족한 점이 많아 주로 학습용으로 활용됨
    • spacy
      • spacy는 빠르고 효율적인 NLP 처리를 위해 개발된 라이브러리
      • 딥러닝 기반 사전 학습 모델을 활용해 품사 태깅, 개체 명 인식(NER) 등의 고급 기능 제공
      • 속도가 빠르고 실무에서 대규모 NLP 작업에 적합, AI 및 데이터 분석 프로젝트에서 사용됨

서브 워드 단위 토큰화

  • 형태소 분석보다는 토큰화에 초점
  • BPE(Byte Pair Encoding)
    • GPT 모델에서 사용
    • 빈도 기반 토큰화 : 자주 등장하는 문자 쌍을 반복적으로 병합하면서 단어를 서브 워드 단위로 분해하는 기법
    • e.g. 'Encoding' -> 'Enc' + 'oding'
      • 초기 상태에서는 모든 단어가 개별 문자 단위로 존재 / ['E', 'n', 'c', 'o', 'd', 'i', 'n', 'g']
      • 데이터에서 자주 등장하는 문자 쌍부터 병합
        • En + c -> Enc
        • o + d -> od
        • i + n + g -> ing
      • 이후 Enc가 자주 등장하면 Enc은 하나의 단위로 등록
        • oding은 나머지 서브 워드 단위로 남게 됨
      • BPE가 훈련된 코퍼스에서 'Encoding'이라는 단어가 'Enc' + 'oding' 단위로 가장 많이 등장했을 것 -> 병합규칙
  • Wordpiece
    • BERT 모델에서 사용
    • 확률 기반 병합 방식 : 데이터에서 서브 워드 단위를 병합할 때, 확률 모델을 사용하여 가장 적절한 단위를 선택
    • BPE보다 정교한 사전 구축 가능

각 토큰에 번호표(인덱스) 붙이기

  • 사전(Vocabulary, Vocab)
    • 모델이 이해할 수 있는 단어 또는 서브 워드의 집합
    • 토큰화 된 단어는 사전의 단어들과 매칭되어 고유한 숫자(ID)로 변환됨
    • BERT, GPT, LLaMA, T5 등 모델마다 각자의 사전을 생성
      • 모델을 배포할 때, 사전 파일(e.g. vocab.txt, merges.txt)을 함께 제공
    • 사전 예시 : 보통 json 혹은 txt 형식으로 저장
      • [('!', 0), ('"', 1), ('#', 2), ('$', 3), ('%', 4), ('&', 5), ("'", 6), ('(', 7), (')', 8), ⋯]
  • Token Indexing
    • 토큰화를 한 다음 각 토큰에 인덱스를 지정해야 모델이 입력을 이해 가능
    • 이를 토큰 인덱싱(Token Indexing) 또는 정수 인코딩(Integer Encoding)이라고 함

'Data Science > 자연어 처리' 카테고리의 다른 글

RNN LM  (0) 2025.04.11
RNN(순환 신경망)과 LSTM  (0) 2025.04.11
임베딩 벡터  (0) 2025.04.11
자연어 처리  (2) 2025.04.10