* Environment : Ubuntu 18.04, Python 3.8.3
* Dataset : Korean Wikipedia
토크나이저의 방식은 크게 두가지 방식으로 볼 수 있다. Word piece 혹은 subword segmentation으로 한 단어를 세부 단어로 분리하는 방식과 형태소 분석 방식이 있다. 영어를 기반으로 발전되었기에 word piece 방식이 다양하고 속도측면에서 빠르지만, 한국어의 특성상 형태소 분석 방식이 좀 더 적합하기는 하다. 그래서 두가지 tokenizing 방식에 대해 (미루고 미루던) 비교 실험을 진행해보았다!
간략하게 정리하자면, 공개된 패키지 기반으로 각 방식마다 알려진 것은 표에 정리해두었다.
Word piece | Morphology |
BPE (ACL 2015, Neural Machine Translation of Rare Words with Subword Units) BERT WordPiece (Google, 2018) Sentencepiece (Google, 2018) |
Khaiii (Kakao, 2018) Hannanum (KAIST 최기선 교수님 연구실, 1999) Kkma (SNU 이상구 교수님 연구실, 2009) Komoran (Shineware, 2016) Mecab (2018) Okt (2017) |
1) Morphology (형태소 분석)
* 사용한 Package : KoNLPy (Hannanum, Kkma, Komoran, Mecab, Okt), Khaiii
Example) 칙 코리아, 스티브 바이, 제프 벡등의 유명 음악가들과 연주한 바 있다.
Hannanum : 칙/코리아/스티브/바/이/,/제프/벡등/의/유명/음악가들/과/연주/하/ㄴ/바/있/다/.
Kkma : 칙/코리아/,/스티브/바이/,/저/의/프/벡등/의/유명/음악가/들/과/연주/하/ㄴ/바/있/다/.
Komoran : 칙 코리아/,/스티브 바이/제프 벡/등/의/유명/음악가/들/과/연주/하/ㄴ/바/있/다/.
Mecab : 칙/코리아/,/스티브/바이/,/제프/벡/등/의/유명/음악가/들/과/연주/한/바/있/다/.
Okt : 칙/코리아/, /스티브/바이/,/제프/벡등/의/유명/음악가/들/과/연주/한/바/있다/./\n
Khaiii : 칙/코리아/,/스티브/바이/,/제프/벡등/의/유명/음악가/들/과/연주/하/ㄴ/바/있/다/.
-> 조금씩 결과에서 차이가 나타나는 것을 확인할 수 있다!
- 로딩 시간
Hannanum | Kkma | Komoran | Mecab | Okt | Khaiii | |
Loading Time (sec) |
0.4185 | 0.0110 | 1.5994 | 0.0005 | 0.0041 | 0.0028 |
-> Mecab < Khaiii < Okt < Kkma < Hannanum < Komoran
- 분석 시간
* Sampled 10, 100, 1000, 10000 sentences
-> Mecab < Khaiii < Komoran < Okt < Hannanum < Kkma
분석 품질, 로딩시간, 분석 시간 모두 다 고려해보았을때 Mecab이 가장 좋은 성능을 보여준다. 무엇보다 분석 시간에서 압도적으로 빠르다!
한국어 형태소 분석기에 관해 검색해보았을때, 주로 mecab으로 분석하는 것은 이런 이유가 있었기 때문 아닐까 싶다! 🤔
2) Subword segmentation / Word piece
* Package : Huggingface Tokenizers
Example) 칙 코리아, 스티브 바이, 제프 벡등의 유명 음악가들과 연주한 바 있다.
CharBPE : 칙</w>/코/리아</w>/,</w>/스티/브</w>/바이</w>/,</w>/제프</w>/등의</w>/ 유명</w>/음악/가들과</w>/연주/한</w>/바</w>/있다</w>/.</w>
Byte level BPE : 칙/코/리아/,/스티/브/바이/,/제프/벡/등의/유명/음악가들과/연주/한/바/있다/./\n
BERT Wordpiece : 칙/코/##리아/,/스티/##브/바이/,/제프/[UNK]/유명/음악/##가/##들과/ 연주/##한/바/있다/.
Sentencepiece : ▁칙/▁코/리아/, /▁스티/브/▁바/이/,/▁제프/▁등의/▁유명/▁음악/가/ 들과/▁연주/한/▁바/▁있다.
-> 분석 결과는 동일하나 subword를 나타내는 방식이 각기 방법마다 달랐다
- 로딩 및 학습시간
형태소 분석기는 공통적으로 sejong corpus 기반으로 되어있는 것과 다르게, Word piece 방식은 input에 따라 모델을 만들어서 학습하고, 그것을 기반으로 tokenization을 진행한다. 좀 더 input을 달리하며 사용하고자하는 데이터에 맞게 tokenization을 할 수 있다는 장점이 있다. (형태소 분석기 중 추가적으로 사전 추가도 가능한 분석기도 있긴하다.)
CharBPE | Byte level BPE | BERT Wordpiece | Sentencepiece | |
Loading Time (sec) |
0.0001 | 0.0069 | 0.0073 | 0.0183 |
Training Time (sec) |
1.1387 | 1.9840 | 1.1990 | 1.4621 |
-> CharBPE < Bert WordPiece < SentencePiece < ByteLevelBPE
- 분석 시간
* Sampled 10, 100, 1000, 10000 sentences
-> SentencePiece < Bert WordPiece < CharBPE < ByteLevelBPE
분석시간에서 sentencepiece가 가장 빨라 요즘 많이 사용하나 싶기도 하다 🤔
앞으로 데이터 전처리 작업 중에서 tokenization으로는 Mecab과 Sentencepiece 두 가지를 사용하여, 추후 BERT 학습까지 한 후의 결과를 비교해볼 것 같다!
👇🏼 비교 분석 실험과 관련한 코드와 결과는 아래의 github에 올려두었습니다 😊
https://github.com/Sunkyoung/Compare-tokenizer
Sunkyoung/Compare-tokenizer
Tokenizer 비교 실험. Contribute to Sunkyoung/Compare-tokenizer development by creating an account on GitHub.
github.com
Reference :
https://github.com/huggingface/tokenizers
huggingface/tokenizers
💥Fast State-of-the-Art Tokenizers optimized for Research and Production - huggingface/tokenizers
github.com
KoNLPy: 파이썬 한국어 NLP — KoNLPy 0.5.2 documentation
KoNLPy: 파이썬 한국어 NLP KoNLPy("코엔엘파이"라고 읽습니다)는 한국어 정보처리를 위한 파이썬 패키지입니다. 설치법은 이 곳을 참고해주세요. NLP를 처음 시작하시는 분들은 시작하기 에서 가볍게
konlpy.org
https://github.com/kakao/khaiii
kakao/khaiii
Kakao Hangul Analyzer III. Contribute to kakao/khaiii development by creating an account on GitHub.
github.com
https://iostream.tistory.com/144
한국어 형태소 분석기 성능 비교
korean-tokenizer-experiments 형태소 분석기 비교실험 환경하드웨어 (MacBook Pro Mid 2015)소프트웨어데이터실험 내용실행 시간 비교로딩 시간형태소 분석 시간문장 분석 품질 비교띄어쓰기가 없는 문장자�
iostream.tistory.com
'Dev > Research' 카테고리의 다른 글
Tensorflow mirrored strategy 사용하여 2개 GPU로 BERT fine-tuning 학습하기 (2) | 2020.06.05 |
---|---|
2개의 GPU로 BERT SQuAD2.0 fine-tuning training 하기 (0) | 2020.05.21 |
댓글