본문 바로가기
Dev/Research

Tokenizer 비교 실험 (형태소 분석, word piece)

by 아임웬디 2020. 8. 6.

* 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

https://konlpy.org/ko/latest/

 

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

 

댓글