데이터 과학 Data Science/자연어처리 NLP
[NLP] Tokenization
허니비 honeybee
2022. 12. 29. 16:24
1.Tokenization
Tokenization 은 왜 할까? 단어들은 (특히 한국어는) 하나의 어간으로만 이루어져있지 않다. 보통 접사가 붙거나 두개 이상의 어근이 합쳐지며 파생되는 형태로 생성되기 때문에 우리는 단어나 문장을 분석 전에 먼저 분절시켜줄 필요가 있다.
예를 들어, "한국의 김치찌개" 는 각각 한국/의/김치/찌개 로 분리할 수 있다.
이렇게 딥러닝을 시키기 전의 분절은 단어의 결합으로 이루어진 단어를 쪼개서 희소성을(sparesness) 낮추고, 띄어쓰기도 통일시킬 수 있다. (한국어의 띄어쓰기는 정말 제각각이다..)
영어의 경우는 NLTK 를 이용해 comma 등의 후처리만 하면 됨 (띄어쓰기가 이미 잘 되어있음)
2. 형태소 분석 / 품사 태깅
형태소 분석은 앞서 말한 것 처럼 문장이나 단어들을 토큰화 시켜서 품사들을 태깅해 주는 것이다. 그런데, 한국어의 경우 토큰화 방법에 따라서 단어의 분리도, 추출되는 품사도 다를 수 있기 때문에 내가 하려는 분석에 적절한 특수성을 가진 라이브러리를 사용하는 것이 중요하다고 볼 수 있다.
한국어 형태소 분석을 위한 POS Tagger 에는 KoNLPy, Mecab 등 여러가지 라이브러리가 있는데, 라이브러리별 특성을 잘 파악해 이용하도록 하자.
3. 간단한 라이브러리 써보기
Konlpy 의 라이브러리 두 가지를 써봤다. Okt 가 실행속도는 더 빨랐음. 간단한 분석을 한다면 결과값이 단순히 나오는 분석기를 써도 될 것 같다
!pip install konlpy
from konlpy.tag import Komoran
komoran = Komoran()
text = "세비는 사과를 먹지"
pos = komoran.pos(text)
print(pos)
#[('세비', 'NNP'), ('는', 'JX'), ('사과', 'NNG'), ('를', 'JKO'), ('먹', 'VV'), ('지', 'EC')]
-----------------------------------------------------------
from konlpy.tag import Okt
okt = Okt()
text = "세비는 사과를 먹지"
okt = okt.pos(text)
print(okt)
#[('세비', 'Noun'), ('는', 'Josa'), ('사과', 'Noun'), ('를', 'Josa'), ('먹지', 'Verb')]
728x90
반응형