서브워드 토크나이징

하영영·2023년 11월 6일

🎯 졸작 준비자료

목록 보기
10/10

이번 졸작에서 사용한 기법!

Subword Tokenizing

- SentencePiece

: 구글에서 제공하는 비지도학습 기반의 토크나이저
/ 텍스트를 서브워드 또는 문자 수준으로 분해하는 것
/ 1. 작동방식(BPE, Unigram) 둘 모두 지원

  • 토큰화 및 정규화 라이브러리



1. 작동방식

  • BPE(Byte-Pair Encoding)
    : 우선 모든 단어를 문자(cahracter) 단위로 분해한다.
    그 다음 전체 데이터에서 가장 빈도가 높은 문자의 쌍(pair)을 찾아서 하나의 토큰으로 합치는 과정을 반복함.
    데이터 내에서 빈번하게 등장하는 문자의 쌍을 빠르게 합치므로 고빈도 서브워드를 효과적으로 학습 할 수 있음.
  • Unigram Language Model Tokenizer
    : 가능한 모든 서브워드 집합을 생성한 후, 통계적인 방법으로 가장 가능성이 낮은 토크나이저를 최적화한다.


2. OOV 처리

  • 처음부터 서브워드 혹은 문자 수준으로 텍스트를 분해하므로, OOV 문제에 대해 내재적으로 강건하게 동작한다.
    즉, 훈련 데이터에 없던 새로운 단어가 등장해도 이 단어를 구성하는 서브워드로 분해하여 처리할 수 있다.


3. 졸작에선 어떤 방식을 사용하였나?

  • --model_type = -> 이부분에 뭘 썼느냐에 따라 옵션이 달라짐.
  • 나는 BPE를 사용하였다.

  • 초기에는 문자 레벨에서 시작하여 빈도수가 높은 문자열 조합을 찾아 합쳐 나가는 방식으로 동작한다.
    ex) "사람들과"는 초기에 "사-", "람", "들", "과"와 같이 분리되지만
    데이터 셋 내에서 해당 문자열 조합이 빈번하게 등장하면 "사람들과"라는 하나의 토큰으로 합쳐질 수 있다.
    (단어 등장 빈도수에 따라 동적으로 토큰화가 된 것)
  • 방대한 TXT 데이터(NSMC(네이버 영화 리뷰 데이터))를 SentencePiece에 제공하여 모델을 학습
    -> 모델을 사용하여 MBTI 관련 학습 데이터의 토큰들을 서브워드 단위로 토크나이징


4. BPE 알고리즘을 사용하여 서브워드 분리

  • 자연어 처리에서의 BPE는 서브워드 분리(subword segmentation) 알고리즘

  • : 기존에 있던 단어를 분리한 후, 글자(charcter) 단위에서 점차적으로 단어 집합(vocabulary)을 만들고, 가장 많이 등장하는 유니그램을 하나의 유니그램으로 통합


    1) 초기 단어 집합 생성
    원본 훈련데이터로부터 각 단어들의 빈도수 카운트

    단어출현 빈도수
    low5
    lower2
    newest6
    widest3

    2) 개별 문자단위로 분리

    단어출현 빈도수
    l o w5
    l o w e r2
    n e w e s t6
    w i d e s t3

    (초기단어집합)
    l o w e r n s t i d

    3) 가장 빈도수가 높은 유니그램의 쌍을 하나의 유니그램으로 통합 1회)

    단어출현 빈도수
    l o w5
    l o w e r2
    n e w e s t6
    w i d e s t3

    에서

    lo = 7
    ow = 7
    es = 9

    es가 9로 가장 빈도수가 높으므로
    es부터 묶어줌

    1회 - es = 9

    단어출현 빈도수
    l o w5
    l o w e r2
    n e w es t6
    w i d es t3

    2회 - est = 9

    단어출현 빈도수
    l o w5
    l o w e r2
    n e w est6
    w i d est3

    3회 - lo = 7

    단어출현 빈도수
    lo w5
    lo w e r2
    n e w est6
    w i d est3

    4회 - low = 7

    단어출현 빈도수
    low5
    low e r2
    n e w est6
    w i d est3

    5회- newest화 widest의 빈도수가 높으므로 계속 붙여줌...

    4) 최종

    단어출현 빈도수
    low5
    low e r2
    newest6
    widest3



    #vocabulary update!

    l o w e r n s t i d
    es est lo low
    ne new newest
    wi wid widest





5. 정리

동작 순서

  1. 초기 단어 집합 생성 (NSMC)
    공백을 기준으로 기존에 있던 단어를 분리

  2. 글자(charcter) 단위로 분리

  3. 점차적으로 단어 집합(vocabulary)을 만들고
    가장 많이 등장하는 유니그램을 하나의 유니그램으로 통합
    '유니그램' : 병합 과정을 통해 생성된 각각의 토큰



토크나이징 VS 서브워드 분리
토크나이징(Tokenizing)은 일반적으로 텍스트를 더 작은 단위인 토큰으로 나누는 과정을 말합니다. 이 토큰은 단어, 구두점, 문자 등이 될 수 있으며, 이 과정은 주로 자연어 처리에서 데이터를 전처리하는 데 사용됩니다. 토크나이징은 대상 텍스트를 어떻게 나눌 것인가(예: 공백 기준으로 단어 분리, 구두점 분리 등)에 초점을 맞춥니다.


서브워드 분리(Subword segmentation)토큰을 더 작은 의미 단위로 나누는 과정을 특히 말합니다. 예를 들어, "unhappiness"라는 단어를 "un", "happy", "ness"와 같이 의미를 가진 더 작은 단위로 나눌 수 있습니다. 서브워드 분리는 특히 희귀 단어나, 새로운 단어에 대해 모델이 더 잘 일반화할 수 있도록 돕는데 유용합니다.











profile
NLP 공부중

0개의 댓글