Bype Pair Encoding
How to encode
1. Learn - BPE operation
1. 띄어씌기로 단어를 선정하고 캐릭터 레벨로 단어를 분리합니다.
현재 4개의 단어
가 있으며, :
뒤의 숫자는 횟수를 나타냅니다.
'l o w </w>': 5
'l o w e r </w>': 2
'n e w e s t </w>': 6
'w i d e s t </w>': 3
2. 가장 많이 나오는 Pair
를 찾고, 두 케릭터
를 바꿔줍니다.
best : ('e', 's')
vocab : {'l o w </w>': 5, 'l o w e r </w>': 2, 'n e w es t </w>': 6, 'w i d es t </w>': 3}
paris : dict_items([(('l', 'o'), 7), (('o', 'w'), 7), (('w', '</w>'), 5), ... ])
(e s)
조합이 가장 많이 나오므로, es
를 하나의 쌍으로 만들어 줬습니다..
3. Vocab 상태에서 다시 가장 많이 나오는 Pair를 찾습니다.
best : ('es', 't')
vocab : {'l o w </w>': 5, 'l o w e r </w>': 2, 'n e w est </w>': 6, 'w i d est </w>': 3}
paris : dict_items([(('l', 'o'), 7), (('o', 'w'), 7), (('w', '</w>'), 5), (('w', 'e'), 2), ...)])
(es t)
조합이 가장 많이 나오므로, est
를 하나의 쌍으로 만들어 줬습니다.
4. 반복.
이런 식으로 계속해나간다면, Vocab의 사이즈는 줄어들게 되고, 계속 새로운 Pair를 생성하게 됩니다.
3번까지 했을 경우, 초기 상태인
e l o n r w i s t
에서 다음 상태로 단어 사전이 확장됩니다.
e l o n r w i s t es est
2. Encoding
'l o w </w>': 5
'l o w e r </w>': 2
'n e w e s t </w>': 6
'w i d e s t </w>': 3
위의 예제에서, 초기 상태의 사전은 다음과 같습니다.
e l o n r w i s t
Learn BPE oepration을 10번 진행한다면, 각 operation마다 다음 단어들이 사전에 추가됩니다.
best :('e', 's') --> es
best :('es', 't') --> est
best :('est', '</w>') --> est</w>
best :('l', 'o') --> lo
best :('lo', 'w') --> low
best :('n', 'e') --> ne
best :('ne', 'w') --> new
best :('new', 'est</w>') --> newest</w>
best :('low', '</w>') --> low</w>
best :('w', 'i') --> wi
최종적으로 corpus에는 다음 단어들이 있습니다.
e l o n r w i s t es est est<\w> lo low ne new newest</w> low</w> wi
with Byte-Level Subwords
위의 방법의 단점은 영어에 적합한 character level이라는 것 입니다.
이 방법은 효율적이지만 unicode
를 필요로 하는 언어들에는 적용하기 어려운 구석이 있습니다.
이를 개선한 것이 Byte-Level subwords입니다. 해당 Operation을 Unicode Byte에 대해서 진행한 것 입니다.
References
- Neural Machine Translation of Rare Words with Subword Units https://arxiv.org/abs/1508.07909
- Neural Machine Translation with Byte-Level Subwords https://arxiv.org/abs/1909.03341
- https://www.youtube.com/watch?v=zjaRNfvNMTs
- https://wikidocs.net/22592
- https://fxnnxc.github.io/posts/2021/01/bpe/
'딥러닝 > 자연어(NLP)' 카테고리의 다른 글
Text Summarization 분야 탐색 (0) | 2021.02.05 |
---|---|
Transformer와 인간의 뇌 구조 (0) | 2021.02.03 |
[논문 리뷰] Very Deep Transformers for Neural Machine Translation (0) | 2021.01.25 |
Transformer 모델 학습은 생각보다 어렵다. (0) | 2021.01.19 |
나만의 자연어처리 공부방법 (0) | 2020.08.24 |