해당 내용은 김기현의 자연어 처리 딥러닝 캠프 파이토치편을 읽으며 발췌 및 정리한 내용입니다.
2021.05.10 - [Study/NLP] - [NLP/자연어처리] 자연어 처리 전처리(1) - 코퍼스와 텍스트 정제
자연어 처리를 하려면 기본적으로 문장에 대한 분절이 이루어져야 한다. 책에서는 분절 이라고 하는데 우리가 많이 들어온 "토큰화(Tokenization)"라고도 한다. 사용하는 언어에 따라서 패키지가 조금씩 다른데, 영어는 기본적으로 띄어쓰기로 되어있고 규칙을 잘 따르고 있어 띄어쓰기만으로도 충분한 토큰화가 되기도 한다. 그래도 언어 모델을 더 용이하게 구성할 수 있도록 NLTK 또는 spaCy와 같은 패키지를 사용해서 토큰화 및 전처리를 수행한다.
1. spaCy tokenizer
spaCy 패키지를 사용하는 방법은 아래와 같다.
en_text = "A Dog Run back corner near spare bedrooms"
!python -m spacy download en_core_web_sm
import spacy
spacy_en = spacy.load("en_core_web_sm") ## 영어 토크나이징 모델 불러오기
def tokenize(en_text):
return [tok.text for tok in spacy_en(en_text)] ## spacy_en.tokenizer()써도 무방
print(tokenize(en_text))
>>> ['A', 'Dog', 'Run', 'back', 'corner', 'near', 'spare', 'bedrooms']
2. NLTK tokenizer
NLTK를 사용하는 방법은 아래와 같다.
!pip install nltk
import nltk
from nltk.tokenize import word_tokenize
nltk.download('punkt')
print(word_tokenize(en_text))
>>> ['A', 'Dog', 'Run', 'back', 'corner', 'near', 'spare', 'bedrooms']
결과의 차이를 보면, spaCy는 토크나이저를 사용하고 나면 list형태로 반환하는 것이 아니라 spaCy의 doc 형태로 반환하는 듯 하다. 그래서 일부러 리스트형태로 바꾸는 과정을 거친다. 그러나 NLKT는 토크나이징 후 list형태로 반환되어 spaCy와 같이 리스트로 변환하는 과정이 없어진다.
영어에 비해 한국어는 띄어쓰기가 제각각인 경우가 많고, 조사 접사등이 명사의 앞뒤애 붙는 경우가 많아 정규화 하는 의미로 표준화된 띄어쓰기를 적용하는 과정이 필요하다. 또한, 교착어로 접사를 어근에서 분리해주는 역할도 하므로 희소성문제를 해결한다. 한국어 토크나이징 패키지는 대표적으로 Mecab과 KoNLPy가 있다.
1. Mecab tokenizer
Mecab은 원래 일본어 형태소 분석용 오픈소스로 개발되었지만, 이를 한국어 형태소 분석기에 성공적으로 적용시켜서 많이 사용되고 있다. 설치 방법은 사람마다 조금씩 다른 것 같다. 나는 파이토치로 시작하는 전처리 입문의 예제를 따라했다. colab에서 Mecab을 설치하고 불러온다.
!git clone https://github.com/SOMJANG/Mecab-ko-for-Google-Colab.git
%cd Mecab-ko-for-Google-Colab
!bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)
kor_text = "사과의 놀라운 효능이라는 글을 봤어. 그래서 오늘 사과를 먹으려고 했는데 사과가 썩어서 슈퍼에 가서 사과랑 오렌지 사왔어"
from konlpy.tag import Mecab
tokenizer = Mecab()
print(tokenizer.morphs(kor_text))
>>> ['사과', '의', '놀라운', '효능', '이', '라는', '글', '을', '봤', '어', '.', '그래서', '오늘', '사과', '를', '먹', '으려고', '했', '는데', '사과', '가', '썩', '어서', '슈퍼', '에', '가', '서', '사과', '랑', '오렌지', '사', '왔', '어']
Mecab은 '의', '이','을','랑'와 같은 접사들까지 분절해주어 형태소 단위로 토크나이징을 진행한다.
2. KoNLPy
KoNLPy는 여러 한국어 형태소 분석기들을 모아놓은 랩핑 라이브러리를 제공한다. 파이썬으로 구성된 라이브러리를 제공하므로 시스템 연동및 구성이 용이할 순 있지만 내부 라이브럴리들은 각기 다른 언어로 이루어져 있어서 호환에 문제가 생기기도 한다. 대용량의 코퍼스를 처리할 때에는 Mecab에 비해 속도면에서 현저히 불리한 점이 있지만 설치 및 사용이 쉽고 다양한 라이브러리를 모아놓앗다는 장점 때문에 많이 이용되고 있다.
from konlpy.tag import Mecab
mecab = Mecab()
print(mecab.morphs(kor_text))
KoNLPy에는 Mecab이외에도 다양한 랩핑 라이브러리를 제공하므로 다양하게 사용해보는 것도 좋을 듯 하다.
'Study > NLP' 카테고리의 다른 글
[NLP/자연어처리] 자연어처리 전처리(4) - 토치텍스트(TorchText) (0) | 2021.05.13 |
---|---|
[NLP/자연어처리] 자연어 처리 전처리(3) - 단어집합(Vocabulary), 패딩 (4) | 2021.05.12 |
[NLP/자연어처리] 자연어 처리 전처리(1) - 코퍼스와 텍스트 정제 (0) | 2021.05.10 |
[NLP/자연어처리] 자연어처리와 딥러닝의 역사, 발전과정 (0) | 2021.05.10 |
[NLP/자연어처리] 자연어처리 관련 자료 모음 (1) | 2021.05.07 |