NLP 과정
텍스트 전처리, 피처 벡터화, 텍스트 분석
과정 | 내용 | 라이브러리 |
---|---|---|
텍스트 전처리 | 텍스트 정규화 : 클랜징, 토큰화, 필터링(Stop words) 피처벡터화 : BOW, 희소행렬, Count/TF-IDF |
NLTK |
한글 텍스트 처리 | 형태소, 형태소 분석기(okt), Word2Vec(Skip-gram, CBOW), toji.model활용 Word2Vec모델활용(위키디피아한국어) |
KoNLPy 설치, Gensim 설치 |
감성분석 | 네이버 영화평점 감성분석 : 150k, 200k dataset IMDB 영화평감성분석 : 지도학습, 비지도학습 ML(지도), NLTK WordNet, VADER(비지도) IMDB 신경망 모델(임베딩학습) |
DT, LR, RF, SVM, KNN GridSearchCV, Pipeline Keras |
텍스트분류 | 20뉴스그룹 : 텍스트 정규화, 피처벡터화, ML 학습/평가 네이버뉴스 : TF-IDF 사전 활용, MLP 학습/평가 |
DP,LR, RF, SVM, KNN Pipeline GridSearchCV 결합 Keras |
토픽 군집화 유사도 |
토픽모델링(20 뉴스 그룹) : 연관도 높은 Word 추출 문서 군집화, 군집 별 핵심단어(Opininon Review Dataset) 문서 유사도 측정 : 코사인 유사도(Opinion Review Dataset) |
LDA Clustering, clustercenters Cosine_similarity |
자연어 처리 python 라이브러리
1. NLTK
- 파이썬의 대표적이 자연어 처리 라이브러리
- 방대하 데이터 세트와 서브 모듈을 가지고 있으며 NLP의 거의 모든 영역을 커버
2. NKoNLPy
- 우리나라 한글에 특화된 자연어 처리 라이브러리
- 단어 품사 별 분류 : hannanum, kkma, okt, komoran, mecab
3. Gensim
- 문서 사이의 유사도를 계산, 텍스트 분석을 돕는 라이브러리(Word2Vec 제공)
- 토픽 모델링(Topic Modeling) 분야에서 가장 두각
- Word Enbedding : word2Vec
4. Spacy
- 연구보다는 생산용으로 고안된 고급 NLP를 위한 오픈 소스 라이브러리. 심도 깊은 데이터마이닝 가능
기계가 자연어를 이해하는 방법
'apple'은 사과인가, 회사인가
- 사람은 문장의 컨텍스트(Contest)를 통해 이해
- 기계는 단어를 수치적으로 표현해야 이해
- 이를 Word Embedding 이라고 표현
- 텍스트를 숫자로 표현하는 것은 같은 문자라고 하더라도 다른 수치로 표현
'the cat sat on the mat'을 기계가 이해하려면
- [the, cat, sat, on, mat] 단어별 분류 후 One hot encoding을 통해 0, 1로 표현
- 'cat'은 [0, 1, 0, 0, 0, 0], 'the'의 경우 [1, 0, 0, 0, 0, 0] 으로 나타냄
단어를 사전을 사용하여 매핑하고 이를 벡터로 변환
- 벡터화를 시켜 숫자로 표현하면 분류나 회귀 등의 다양한 분석이 가능
자연어 관련 용어
용어1 | 용어2 | 내용 |
---|---|---|
Corpus | 말뭉치 | 텍스트(문서)의 집합 |
Token | 토큰 | 단어처럼 의미를 가지는 요소 |
Morphemes | 형태소 | 의미를 가지는 언어에서 최소 단위 언어학에서 일정한 의미가 있는 가장 작은 말의 단위로 발화 체 내에서 따로 떼어낼 수 있는 것을 의미. 즉 , 더 분석하면 뜻이 없어지는 말의 단위 |
POS | 품사 | |
Stopword | 불용어 | 조사, 접미사와 같이 자주 나타나지만 실제 의미에 기여하지 못하는 단어들 |
Stemming | 어간추출 | 어간만 추출하는 것을 의미 (running, runs, run->run) |
Lemmatization | 음소표기법 | 앞뒤 문맥을 보고 단어를 식별하는 것 |
텍스트 벡터화
1. One-hot encoding (Sparse representation)
- 단어를 벡터로 바꾸는 가장 단순한 방법은 단어에 번호를 매기고, 그 번호에 해당하는 요소만 1이고 나머지는 0을 갖는 벡터로 변경
- 총 5개의 단어가 있는데 '강아지'라는 단어에 2번을 매겼다고 하자. 그러면 '강아지'는 2번째 요소만 1이고 나머지는 모두 0인 5차원이 벡터로 표현된다.
N개의 단어가 있다면 각 단어는 한 개의 요소만 1인 N차원의 벡터로 표현
단점은 벡터 표현에 단어와 단어 간의 관계가 전혀 드러나지 않는다는 점
2. Word Embedding(Dense representation, distributes representation)
- 단어를 벡터로 바꿀 때, 좀 더 똑똑하게 바꿔서 벡터에 단어의 의미를 담을 수 있다면 어떨까?
- 비슷한 의미의 단어들은 비슷한 벡터로 표현이 된다면?
- 단어와 단어 간의 관계가 벡터를 통해서 드러날 수 있다면?
- 벡터 간의 덧셈 뺄셈이 해당하는 단어 간의 의미와 합과 의미의 차로 반영
- 자연어 처리의 경우 대상은 텍스트이고, 이 텍스트의 속성을 표현해 놓은 것이 데이터
- 각각의 속성을 독립적인 차원으로 표현하지 않고 우리가 정한 개수의 차원으로 대상을 대응시켜서 표현
- '강아지'란 단어는 [0.16, -0.50, 0.20, -0.11, 0.15] 라는 5차원 벡터로 표현
3. Dense Representation의 장점
- 적은 차원으로 대상을 표현. 차원이 높으면 차원의 저주(curse of dimensionality)라는 문제 발생
- 더 큰 일반화 능력(generalization power). '강아지'와 '멍멍이'가 서로 비슷한 벡터로 표현이 된다면 '강아지'에 대한 정보가 '멍멍이'에도 일반화
4. 아이디어
- predictive method란 지도학습을 통하여 맥락으로 단어를 예측하거나 단어로 맥락을 예측
- 이 예측 모델을 학습하면서 단어를 어떻게 표현해야 할 지를 배우게 되고, 이 과정에서 비슷한 단어가 비슷한 벡터로 표현