subword Tokenization
학습데이터에서 보지 못했던 새로운 단어가 나타난다면?
example
- train data: low, new, newer
- test data: lower
이러한 케이스에서는 low, new, er로 train data를 잘 분리할 수 있었으면 lower라는 단어를 잘 추론할 수 있었을 것임.
subword tokeniztion algorithms
- Byte-Pair Encoding
- WordPiece
- Unigram language modeling
subword tokenization의 두가지 구성 요소
- token learner: 말뭉치에서 vocabulary를 만들어 냄.
- token segmenter: 새로운 문장을 토큰화함
Byte Pair Encoding
-
vocabulary를 단일 문자들의 집합으로 초기화
-
말뭉치에서 연속적으로 가장 많이 발생하는 두개의 기호들을 찾는다.
-
두 기호를 병합하고 새로운 기호로 vocabulary에 추가한다.
-
말뭉치에서 그 두 기호들을 병합된 기호로 모두 교체한다.
-
2, 3, 4 과정을 k번의 병합이 일어날 때까지 반복한다.
-
최종적으로 vocabulary를 리턴한다.
참고할 점
- 기호 병합은 단어 안에서만 이루어 진다.
- 이것을 위해 단어 끝을 나타내는 "_"를 단어 끝에 추가한다.
- 그리고 각 단어를 문자단위로 쪼갠다.
Wordpiece
- 기호들의 쌍을 찾을 때 빈도수 대신에 가능도를 최대화 시키는 쌍을 찾는다.
Unigram
- 확률 모델을 사용함
- 학습 데이터 내의 문장을 관측 확률 변수로 정의
- Tokeniztion을 잠재 확률 변수로 정의한다.
- 데이터의 주변 우도를 최대화시키는 tokenization을 구한다.(EM, viterbi알고리즘 사용) wordpiece는 greedy하게 가능도를 향상