Word Piece Embedding
Word Piece Model을 처음 BERT에서 보고 이게 뭔가 싶었다. 찾아보니 subword, 빈도수 이런걸로 뭐 구분한다는 것 같은데 한 번 알아보려고 했다.
논문을 읽기는 너무 길고 해서 word piece 부분만(논문의 4.1절) 살짝 봤다.
이 글을 보기전에 BPE라는 것에 대한 개념으로 다음 포스팅을 보는 것이 낫다.
결론!
논문을 읽기는 너무 길고 해서 word piece 부분만(논문의 4.1절) 살짝 봤다.
이 글을 보기전에 BPE라는 것에 대한 개념으로 다음 포스팅을 보는 것이 낫다.
- 즉 언어에 상관없이 tokenization을 하려고 하는 시도이다.
- 한국어, 일본어에 대한 문제를 해결하려고 하였고 이 방법은 BPE와 유사하다.
- 즉 rare words들을 처리하기 위함이다.
- 모델을 학습하기 전에 special word boundary symbol을 기존 word에 추가하고 decoding 때는 이를 이용하여 복원한다. (밑은 예시)
- Word: Jet makers feud over seat width with big orders at stake
- wordpieces: _J et _makers _fe ud _over _seat _width _with _big _orders _at _stake
- 즉 이게 뭐냐면, 띄어쓰기로 일단 word를 구분하는 걸 _로 구분하고 한 word 내에서 자주 발생하는 것으로 나눈다는 개념이다.(BPE 처럼)
- 즉 Jet이란 단어는 rare word라고 판단하여 J와 et로 나눈다는 것임. feud노 fe와 ud로 나눈다는 것!
- Wordpiece 모델은 data-driven 모델로 maximize the language-model likelihood 방법이다.
- 즉 주어진 데이터에 따라 모델이 달라진다는 말
- 그리고 LM 모델인데 ML(maximize likelihood)로 학습했다고 함.
- 정확한 프로세스는 ref2를 봐야하겠지만 추측으로는 BPE처럼 정해진 개수의 token으로 빈도수로 쪼갠다.
- 그 다음 이 token으로 RNN LM모델로 MLE 방법으로 학습한다.
- 결국 WPM inference 과정은 입력이 wordpiece로 쪼개지고 model의 출력으로 vector까지 나오는 과정을 말하는 것이 아닐까 싶음.
- 즉 데이터가 주어지고 원하는 tokens D가 주어지면 D개로 segmentation 하는 개념
- 이 방법은 BPE와 Ref2와 비슷하다고 함
- Ref2 방법은 단어의 양끝에 특수기호를 넣었다고 하는데, 여기서는 앞부분에만 추가하는 식
- 또한 기본 character 수를 줄였다(segment token 수를 줄였다는 거 같음). 서양 언어는 500개, 아시아는 좀 더 많이..
- 왜냐하면 very rare word로 인해 wordpiece vocab이 훼손되는 것을 막기 위하여 그랬다고 함.
- 그래서 총 vocab이 8k~32k 정도의 wordpiece가 최고의 BLUE 성능을 냄을 보였다.
- 즉 번역에서는 rare entity는 그냥 그대로 복사하는게 낫다.
- 따라서 어케보면 무한한 vocab을 처리할 수 있음
- 따라서 Wordpieces achieve a balance between the flexibility of characters and efficiency of words.
- 이 논문의 4.2절에서는 Mixed Word/Character Model 로 rare word 처리하는 것에 간략히 나와있는데 궁금하시면 보시는 거 추천.
- 생각해보면 유명한 Kim 방식대로 character로도 rare word는 처리 가능한데 그 방법은 너무 의미가 없는 character니까 character와 word의 중간 즉 subword로 쪼개는 방법들에 대한 연구들인 거 같다.
그리고 찾아보던 중, 블로그에서(BPE에서도 ref단 곳) wordpiece 와 sentencepiece와 같은 느낌으로 쓰는 것 같아서 찾아봤는데 sentence piece논문을 보면 이 또한 subword tokenizer을 도입한 개념이다.
SentencePiece implements two subword segmentation algorithms, byte-pair encoding (BPE) (Sennrich et al., 2016) and unigram language model (Kudo, 2018), with the extension of direct training from raw sentences. SentencePiece enables building a purely end-to-end system that does not depend on any language-specific processing.
즉 sentencepiece라는 것은 BPE와 Unigram LM을 붙여서 subword로 쪼개는 것을 의미한다. Wordpiece 또한 subword로 쪼개는 방법이라는 점에서 비슷한 느낌인 것 같고 정확하게는 동일하지 않은 것같음. (불확실하지만, WPM과 SPM의 차이는 어떻게 tokenizer하는 지 살짝 다른 것 같은데)
WPM 모델의 정확한 학습 방법은 논문의 5절을 참고하거나 ref2 을 봐야 할 것 같은데 시간되면 보겠음.. (강화학습하고 ML(maximize likelihood) loss를 사용하는 것이니 잘 아시는 분 혹시라도 있으면 댓글로좀 부탁!)
사실 WPM을 쓰려면 tensorflow 같은 곳에 내장되어 있기 때문에 실제 구현할 필요는 없고 모듈로써 그냥 사용하면 될 거 같고 개념만 알면 되지 않을까?
결론!
- 이 포스팅을 하기 전까진, WPM와 BPE가 같은건가? 아닌건가? 헷갈렸는데 둘 다 subword로 쪼개는 방법에 대한 연구이고 방법론이 살짝
다른 건가 봄.다름. - 단, WPM은 model을 말하는 것으로 token으로 쪼개고 vector까지 만들어주는 과정을 말하는 것을 학습하는 것 같고 BPE는 단순 token으로 쪼개는 것 까지 말하는 것 같다.
- 여기서 token으로 쪼개는 방법이 비슷한 것이고 기반은 자주 발생하는 식으로 묶는단 얘기
- BPE는 저렇게 word segmentation한 후, vector로 만들어주는 과정이 따로 필요한 것으로 생각됨.
- 일반적인 word2vec 같은 것을 써서 해도 될 듯하지만, BPE로 쪼개진 token에 해당하는 word2vec이 학습이 되어있어야함.
- 따라서 이러한 과정을 거친 것이 WPM 혹은 sentence piece model 인 듯 함.
- (사실 어차피 이렇게 학습한 것까지 library에서 제공을 해줄 듯..)
- 즉 word piece model, sentence piece model은 tokenizer+vector으로, 즉 tokenizer을 하고 그것으로 생긴 token이 vector로 매칭이 되는 것 까지이다.
- BPE는 count로 subword를 구하는 것이라 학습 방법이 아닌 segmentation의 개념이고 WPM, Sentence piece model은 의미 있는 tokenizer을 하기 위해 model을 학습하는 것 까지 포함한다고 이해하였다.
- BERT, MT-DNN에서는 wordpiece 썼었고 GPT2에서는 BPE을 이용한 UTF-8(정확히 먼지는 모르겠지만)을 이용한 것을 보면 무엇이 항상 좋은 건 아닌 것 같다.내가 이해한 결론은 BPE는 corpus을 많이 발생하는 unit으로 tokenizer을 하는 것이다.
- 여기서 UTF-8 머시기가 BPE로 쪼갠 것을 vector화 하는 과정??
추가 (2019.08.07)
- https://github.com/google/sentencepiece
- sentencepiece github인데 여기에 다음과 같은 것들을 기억해두면 더 좋을 것 같다.
- Note that BPE algorithm used in WordPiece is slightly different from the original BPE.
- 즉 WPM에서 BPE을 쓰는데, 기존 BPE와는 조금 다르다.
- SentencePiece is a re-implementation of sub-word units, an effective way to alleviate the open vocabulary problems in neural machine translation.
- SentencePiece는 open vocab 번역 문제를 sub-word를 이용하여 효과적으로 완화하는 것이다.
- SentencePiece supports two segmentation algorithms, byte-pair-encoding (BPE) [Sennrich et al.] and unigram language model [Kudo.]. Here are the high level differences from other implementations.
- SentencePiece는 BPE와 unigram language model을 두 가지 방법으로 segmentation을 한다.
- Unigram language model에 대한 간략한 설명
- 각 subword가 독립적으로 발생한다는 가정이다.
- pre-determined된 vocab으로 unigram 방식으로 LM을 학습하는 것
- 즉 위에서 말했듯 BPE로 subword를 구하고(pre-determined vocab) LM으로 이에 대한 vector을 학습하는 것이다.
- 논문을 보면 단순 LM은 아니고 Viterbi을 이용하는 등, 다른 과정이 더 있는 듯 하다.
추가 (2020.07.24)
- 최근 포스팅된 https://huffon.github.io/2020/07/05/tokenizers/에 설명이 깔끔이 되어 있다.
- 위 글을 읽어보시는 것을 추천하고 짧게만 요약하면
- BPE
- count 기반으로 token들을 합치면서 vocab, tokenizer을 구성하게 됨.
- WPM
- model의 확률 기반(language modeling)을 기반으로 token들을 합치면서 vocab, tokenizer을 구성하게 됨.
- 보통 여기서 tokenizer을 구성하는데 만드는 model은 쓰이질 않는 듯
- 즉 WPM으로 만들어진 tokenizer으로 token을 만든 후, vector화는 이제 본 모델에서 수행하는 식
- SentencePiece Model
- 위의 방식들은 공백을 처리하는데 문제가 생김.
- 따라서 공백을 하나의 char로 처리한 후, 위 방식을 적용
- 여기서 근데 BPE, WPM 대신 Unigram 방식을 적용할 수도 있음.
- Unigram
- BPE, WPM은 가장 작은 단위에서 부터 merge하면서 token이 생성되는 것
- Unigram 방식은 모든 단위에서 쓸모 있는 단위로 걸러내는 방식 (위의 링크 참조)
Reference
- Word Piece Model 논문: https://arxiv.org/pdf/1609.08144.pdf
- WPM에서 참고하라는 논문: Japanese and Korean voice search
- Sentence Piece 논문: http://aclweb.org/anthology/D18-2012
- https://huffon.github.io/2020/07/05/tokenizers/
LM 모델에서 LM이 뭐의 약자인가요? language modeling일 경우 뒤에 한글로 '모델'이 붙을 것 같진 않은데...
답글삭제language modeling의 약자로 썼습니다...말씀하신 것처럼 한글로 모델이란 말을 붙여줄 필요는 없는데 붙여서 포스팅을 했네요 ~
삭제게시글 잘 봤습니다! 2021년도 여전히 BERT 모델은 SOTA 인 거 같네요. 구글이 대단하네요...
답글삭제BERT을 기반으로 pretrained language model이 지금까지 엄청나게 발전되고 있죠! https://ai-information.blogspot.com/2019/04/universal-algorithm-pre-trained-model.html
삭제이 포스팅에서 걸어둔 링크들의 논문들만 다 읽어도 마스터할 수 있을거에요 ㅎㅎ
보고서 쓰면서 참고하고 있었는데 주인장이 rungjoo였네 ㅎㅎ 잘 보고 갑니다!
답글삭제bchan? 한병찬?
삭제