원본 자료) https://wikidocs.net/86649
서브워드 토크나이저
하나의 단어를 여러 서브워드로 분리해주는 것, 하나의 단어를 여러 서브워드로 분리해서 단어를 인코딩 및 임베딩하겠다는 의도를 가진 전처리 작업을 Subword Segmenation(서브워드 분리작업) 이라고 한다.
Ex1) birthplace = birth + place
Ex2) 경찰차 = 경찰 + 차
왜 분리할까?
기계에게 아무리 많은 단어를 학습시켜도, 세상의 모든 단어를 알려줄 수는 없다
→ 신조어와 단어 사이즈, 줄임말 등등의 한계등으로 인하여
기계가 모르는 단어가 등장하면 OOV(Out-Of-Vocabulary) 또는 UNK(Unknown Token)라고 표현한다
→ 모르는 단어로 인해 문제를 푸는 것이 까다로워지는 상황을 OOV Problem이라고 한다.
이를 해결하기 위해서 Subword Segmenation(서브워드 분리작업) 을 실행한다.
→ OOV나 희귀 단어, 신조어와 같은 문제를 완화시킬 수 있습니다.
대표적인 서브워드 토크나이저
- Sentencepiece
- BPE (Byte Pair Encoding)
- BPE를 활용한 WordPiece
BPE (Byte Pair Encoding)
1994년에 제안된 데이터 압축 알고리즘
→ 처음엔 서브워드 토크나이저랑 노상관이였다
BPE의 원리
연속적으로 가장 많이 등장한 글자의 쌍을 하나의 글자로 병합하는 방식을 수행
→ 이게 전부다. 진짜 진짜 엄청 심플하다
기본 원리 예시)
아래와 같은 문자열이 있을 때
aabcaab
가장 자주 등장하고 있는 글자의 쌍은 'aa'이다.
'aa’ → 'Z' 로 치환
결과: ZbcZb
Z=aa
가장 많이 등장하고 있는 글자의 쌍은 ‘Zb'이다.
'Zb' → 'Y' 로 치환
결과: YcY
Z=aa
Y=Zb
더 이상 병합할 글자의 쌍은 없으므로 BPE는 위의 결과를 최종 결과로 하여 종료
자연어 처리에서의 BPE (Byte Pair Encoding)
- 자연어 처리의 BPE는 기존의 원리 조금 변형된 형태이다.
- charcter(글자) 단위에서 vocabulary(단어)을 만들어 내는 Bottom up 방식이다.
- 훈련 데이터에 있는 단어들을 모든 글자(chracters) 단위로 단어 집합(vocabulary)를 만들고, 가장 많이 등장하는 유니그램을 하나의 유니그램으로 통합한다.
- BPE의 논문 : https://arxiv.org/pdf/1508.07909.pdf
💡 유니그램 (unigram) 이란??
unigram : 토큰 1개로 이루어진 연속된 시퀀스
bigram : 토큰 2개로 이루어진 연속된 시퀀스
N-gram : 토큰 N개로 이루어지 연속된 시퀀스
💡 N-gram이란??
자연어 처리 중 가장 기본적인 개념은 시퀀스를 만들어내는 작업이다.
보통 고정된 길이의 연속된 토큰(Token) 시퀀스를 N-그램(N-gram)이라고 한다.
💡 시퀀스란??
자연어 처리에서 시퀀스란 단어들이 2개 이상 묶여있는 것으로 이해하면 된다.
💡 bottom-up 방식
가장 작은 문제들부터 답을 구해가며 전체 문제의 답을 찾는 방식이다.
예시) 기존 방법의 문제점
Example) 훈련 데이터
# 단어 : 빈도수
low : 5, lower : 2, newest : 6, widest : 3
# vocabulary
low, lower, newest, widest
단어 집합(vocabulary) : 중복을 배제한 단어들의 집합을 의미
훈련 데이터의 단어 집합에는 'low', 'lower', 'newest', 'widest'라는 4개의 단어가 존재
하지만 테스트 과정에서 'lowest'란 단어가 등장한다면???
→ 기계는 이 단어를 학습한 적이 없으므로 OOV 문제가 발생한다.
→ 이를 해결하기 위해 BPE 알고리즘 사용
예시) BPE 알고리즘을 사용한 경우
1. 초기 상태
데이터의 모든 단어들을 글자(chracter) 단위로 분리
# 데이터
l o w : 5, l o w e r : 2, n e w e s t : 6, w i d e s t : 3
초기 단어 집합(vocabulary)은 글자 단위로 분리된 상태
# vocabulary
l, o, w, e, r, n, w, s, t, i, d
2. 작동 방식
💡 BPE의 특징 : 가장 빈도수가 높은 유니그램의 쌍을 하나의 유니그램으로 통합하는 과정을 몇 번 반복(iteration) 할지 사용자가 정함
여기서는 총 10회를 수행한다고 가정하자
1 회차)
- 빈도수가 9로 가장 높은 (e, s)의 쌍을 es로 통합합니다.
l o w : 5,
l o w e r : 2,
n e w es t : 6,
w i d es t : 3
# vocabulary update!
l, o, w, e, r, n, w, s, t, i, d, **es**
2 회차)
- 빈도수가 9로 가장 높은 (es, t)의 쌍을 est로 통합합니다.
l o w : 5,
l o w e r : 2,
n e w est : 6,
w i d est : 3
# vocabulary update!
l, o, w, e, r, n, w, s, t, i, d, es, est
3회차)
- 빈도수가 7로 가장 높은 (l, o)의 쌍을 lo로 통합합니다.
lo w : 5,
lo w e r : 2,
n e w est : 6,
w i d est : 3
# vocabulary update!
l, o, w, e, r, n, w, s, t, i, d, es, est, lo
3. 결과
이와 같은 방식으로 총 10회 반복하였을 때 얻은 결과
low : 5,
low e r : 2,
newest : 6,
widest : 3
# vocabulary update!
l, o, w, e, r, n, w, s, t, i, d, es, est, lo, low, ne,new, newest, wi, wid, widest
하지만 테스트 과정에서 'lowest'란 단어가 등장한다면???
→ BPE에서는 'lowest'가 OOV는 아니다.
→ 기계는 'lowest'를 글자 단위로 분할한다
→ 'l, o, w, e, s, t'가 된다
→ 기계는 단어 집합을 참고로 하여 'low'와 'est'를 찾아낸다
→ 'lowest'를 기계는 'low'와 'est' 두 단어로 인코딩
→ 'low'와 'est'는 둘 다 단어 집합에 있는 단어이므로 OOV가 아니다.
'AI > 머신러닝' 카테고리의 다른 글
[머신러닝] Batch(배치), Epoch(에포크), Iteration(반복) 개념 쉽게 정리 (feat. AWS batch) (0) | 2024.02.01 |
---|