딥러닝/자연어(NLP)
Byte Pair Encoding 방법
Rudi
2021. 2. 2. 17:29
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/