프로젝트 Github: https://github.com/vg-rlo/aiffel-nlp-projects/tree/master/SetencePiece
네이버 영화 리뷰 감정 분류기
네이버 영화 리뷰 데이터를 바탕으로 긍정/부정으로 감정 분류를 하는 프로젝트입니다. 이전에는 단순히 Mecab과 같은 라이브러리를 활용해서 분류모델의 입력 데이터를 위한 토크나이징을 진행했습니다. 이번에는 Setencepiece를 활용해서 품사 태깅 데이터를 기반으로 토크나이저를 학습하고 저희 학습데이터에 부가적인 전처리 없이 분류 모델을 학습시켰습니다.
Tokenizer
Tokenizer의 종류
- 공백 기반: split 함수
- 형태소 기반: Konlpy(Mecab, Okt) 등..
- Subword 기반: Sentencepiece
Tokenizing에는 공백을 기반으로 하는 것과 형태소를 기반으로 하는 것으로 크게 두가지가 있습니다. 공백 기반 토큰화는 주로 영어에서 사용합니다. 영어는 공백을 기준으로 단어가 구분되기 때문입니다. 그리고 의미 또한 띄어쓰기(공백)을 기준으로 되기 때문에 공백 기반 토큰화를 자주 사용합니다. 그에 반해 한국어와 같은 경우 형태소 기반 토큰화를 주로 사용합니다. 한국어는 띄어쓰기를 기준으로 단어의 의미가 분리되지 않습니다. 띄어쓰기가 있더라도 같은 의미 범주로 묶이는 경우도 있습니다. 그리고 반대로 한국어는 밝히다/밝다 처럼 띄어쓰기로 구분되지 않지만 의미가 달라지는 경우도 있습니다. 그렇기 때문에 주로 형태소 기반 토큰화를 진행합니다.
대표적인 한국어의 형태소 기반 토큰화를 돕는 Tokenizer 즉, 형태소 분석기는 Konlpy가 있습니다. Konlpy 패키지에서도 Mecab, Okt 등이 있는데 일반적으로 Mecab의 성능이 좋습니다. 다른 형태소도 있지만 실험적으로 확인해보면 Mecab이 일반적으로 높은 성능을 유지합니다.
Sentencepiece의 장점
- OOV(Out-of-vocabulary) 문제에 대해 robust하다.
- 언어에 대해 중립적이다.
공백이나 형태소 기반 이외에도 저희가 가진 Corpus(말뭉치)를 기준으로 Tokenizer를 학습시킬 수도 있습니다. Subword 기반 Tokenizer에 해당하는 Setencepiece가 대표적인 예입니다. 정제되지 않은 말뭉치에서 추출해서 토큰화를 진행할 수 있습니다. Sentenpiece와 같은 Subword 기반의 Tokenizer는 새롭게 생성되는 단어에 대한 OOV(Out-of-vocabulary) 문제에 대해서도 robust하게 대처할 수 있습니다. 그리고 언어에 대한 정규표현식을 굳이 거치지 않고 진행해도 되어 언어에 대해 중립적입니다. 따라서 여러 언어가 섞인 문장을 처리하기에도 좋습니다.
Sentencepiece 간단 실습 블로그: keep-steady.tistory.com/7
Sentencepiece library Github: https://github.com/google/sentencepiece