[2단계] 데이터 전처리 (Preprocessing 및 파이썬 자연어처리 라이브러리 정리)
데이터 전처리 순서 (Preprocessing Step)
- 토큰화 (Tokenization)
- 문자열에서 단어로 분리시키는 단계
- 불용어 제거 (Stop word elimination)
- 전치사, 관사 등 너무 많이 등장하는 단어 등 문장이나 문서의 특징을 표현하는데 불필요한 단어를 삭제하는 단계
- 어간 추출 (Stemming)
- 단어의 기본 형태를 추출하는 단계
- 문서 표현 (Representation)
- 주어진 문서나 문장을 하나의 벡터로 표현하는 단계
- 단어들을 모두 인덱싱(indexing)하고 주어진 문서에 존재하는 단어의 빈도수를 사용하여 문서를 표현
자연어처리를 위한 Python 라이브러리 종류
1. KoNLPy (코엔엘파이) : http://konlpy-ko.readthedocs.io/ko/v0.4.3/#
- 한국어 자연어처리를 위한 대표적인 파이썬 라이브러리
- NLP (Natural Language Processing, 자연어처리)란? 텍스트(Text)에서 의미있는 정보를 분석, 추출하고 이해하는 일련의 기술 집합
- Twitter, Komoran, Mecab 등 다양한 형태소 분석기를 내장하고 있음
관련된 글
- 형태소 분석(태깅) 라이브러리 비교 : http://konlpy-ko.readthedocs.io/ko/v0.4.3/api/konlpy.tag/#konlpy.tag._twitter.Twitter
- KoNLPy 태깅 설명 : http://pinkwink.kr/1025
- KoNLPy 실습 (p42~) : https://www.lucypark.kr/docs/2015-pyconkr/#51
2. NLTK (Natural Language Toolkit) : http://www.nltk.org/
- 영어로된 텍스트의 자연어처리를 위한 대표적인 파이썬 라이브러리
- NLTK is a leading platform for building Python programs to work with human language data.
- It provides easy-to-use interfaces to over 50 corpora and lexical resources such as WordNet, along with a suite of text processing libraries for classification, tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for industrial-strength NLP libraries, and an active discussion forum.
3. Gensim : https://radimrehurek.com/gensim/
- 주로 Topic modeling, Corpus(말뭉치) 및 Word Embedding 모델을 지원해줌
- 한국어 및 다양한 언어를 지원해줌
- Gensim doc2vec 모델 예제 : http://kugancity.tistory.com/entry/4-doc2vec%ED%9B%88%EB%A0%A8%ED%95%98%EA%B8%B0
- Gensim doc2vec Tutorial (Radim) : https://rare-technologies.com/doc2vec-tutorial/
- Gensim doc2vec Tutorial : https://radimrehurek.com/gensim/models/doc2vec.html
전처리 과정
1. 토큰화 (Tokenization) : 단어를 떼어내는 단계
ex) I loved you. data-mining
= I / love / you 로 띄어쓰기나 개행을 기준으로 단어를 떼어내는 것을 말한다.
- 1-1) 단어를 띄어쓰기와 개행을 기준으로 단어를 떼어낸다. ex) I / loved / you. / data-mining
- 1-2) 문장 부호를 기준으로 한번 더 떼어낸다. ex) I / loved / you / . / data / - / mining
- 1-3) 문장 부호를 떼어 내는데 예외를 둔다. ex) I / loved / you / . / data-mining
파이썬 3.6 Tokenizer 가이드 : https://docs.python.org/3/library/tokenize.html
파이썬 2.7 Tokenizer 가이드 : https://docs.python.org/2.7/library/tokenize.html
2. 불용어 제거 (Stop word elimination) : 불필요한 단어들을 제거하는 단계
- 2-1) 모든 단어를 소문자화한다.
- 2-2) 불용어 사전을 검색하여 불용어를 삭제한다.
- 2-3) 전제 말뭉치(corpus)에서 n번 이상 등장하지 않는 단어를 삭제한다.
- why? 별로 중요한 단어라고 생각하지 않기 때문에
- 단어를 기본형으로 표현하여 같은 단어가 표현형 때문에 다른 단어로 인덱싱(indexing)되는 일 없도록 한다.
- 이때, 다양한 알고리즘을 사용하는데, 기본형으로부터 단어들을 자동으로 파생시켜서 리스트를 만들고 매칭을 시키기도 한다.
- https://datascienceschool.net/view-notebook/118731eec74b4ad3bdd2f89bab077e1b/
4. 문서 표현 (Representation)
- word2vec
- doc2vec
- 단어와 단어에 대한 인덱스가 표시된 사전
- 단어 자체를 사용하여 문서를 표현하면 비효율적이다.
- 문서 집합에 있는 문서 전체를 읽어가면서 토큰화, 불용어 제거 등의 순서를 진행하여 사전을 구축한다.
- 불용어, 어간추출 등의 비적용/부분적용이 가능하다. (선택적)
- ex) 사전 파일 (line 번호를 단어 index로 간주)
뉴스 제목 = 한글 + 영어 + 한자 + 특수문자
from konlpy.corpus import kobill # Docs from pokr.kr/bill files_ko = kobill.fileids() # Get file ids doc_ko = kobill.open('1809890.txt').read()
Tokenize
from konlpy.tag import Twitter; t = Twitter()
tokens_ko = t.morphs(doc_ko)
import nltk ko = nltk.Text(tokens_ko, name='대한민국 국회 의안 제 1809890호') # For Python 2, input `name` as u'유니코드'
print(len(ko.tokens)) # returns number of tokens (document length) print(len(set(ko.tokens))) # returns number of unique tokens ko.vocab()
ko.count('초등학교') # Counts occurrences
ko.concordance('초등학교')
ko.similar('자녀')
ko.similar('육아휴직')
en.collocations()
from konlpy.tag import Twitter; t = Twitter() tags_ko = t.pos("작고 노란 강아지가 페르시안 고양이에게 짖었다")
print(len(test_data[0])) # ncols: 3
# 형태소(POS) 분석을 하고, Tokenizing 한다.
- Q. 꼭 형태소/품사를 나눠야하는가?
데이터가 정말 충분하다면, 어절 단위로도 분석이 가능하지만 데이터가 적으므로 형태소로 나누는 것이 필요하다.
품사를 태깅해둔다면 동음이의어를 구분할 수 있다.
# '0')]
# 말뭉치(Corpus)가 어떤 특징을 가지고 있는지 Training Data의 Token 모으기
Doc2vec 예제
tagged_test_docs = [TaggedDocument(d, [c]) for d, c in test_docs]
# doc_vectorizer.save('doc2vec.model')
해당 예제는 https://www.lucypark.kr/courses/2015-dm/text-mining.html 를 참고하여 만들어졌습니다.
참고 문서
- Doc2vec : https://medium.com/@mishra.thedeepak/doc2vec-in-a-simple-way-fa80bfe81104
- CNN으로 문장 분류하기 : https://ratsgo.github.io/natural%20language%20processing/2017/03/19/CNN/
- 세종 말뭉치 : http://konlpy-ko.readthedocs.io/ko/v0.4.3/data/#kkma-system-dictionary
- https://www.slideshare.net/healess/python-tensorflow-ai-chatbot
- RNN : http://aikorea.org/blog/rnn-tutorial-2/
- TEXT Classification : http://arkainoh.blogspot.kr/2017/09/python.text.classification.html
- https://ratsgo.github.io/natural%20language%20processing/2017/03/08/word2vec/
- http://newsight.tistory.com/212
- http://www.engear.net/wp/doc2vec-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0/
'◼︎ 개발 > 뉴스 카테고리 추천 시스템 만들기' 카테고리의 다른 글
3단계) 모델 학습 수행 ( Training ) (0) | 2017.12.08 |
---|