최근 konlpy 사이트에 적혀 있는 형태소 분석기의 분석 속도와 실제로 느꼈던 kolnpy의 개별 형태소 분석기의 성능이 맞지 않는 것 같아서 비교적 용량이 많은 문장을 기반으로 형태소 분석기의 성능을 체크해보려고 합니다. 실험에 사용된 형태소 분석기는 총 3종인 코모란(Komoran), 꼬꼬마(Kkma), Okt(Open korean text)이며 꼬꼬마는 분석속도가 나쁜 것이 체감이 날 정도로 좋지 않지만 코모란과 okt의 분석 속도도 예상 밖인것 같아서 제대로 시간을 체크하고자 하였습니다. 공통코드 import urllib.request import time from konlpy.tag import Okt from konlpy.tag import Komoran from konlpy.tag impo..
데이터의 레이블(Label)들을 보면 숫자로 되어 있어서 그대로 사용할 수 있는 데이터가 있는 반면 대다수는 문자열 형태로 되어 있어서 한번 변환을 거쳐야 되는 경우가 많다. 레이블의 경우 의미가 없는 숫자보다는 문자형태로 되어 있어야 의미를 파악하기 쉽고 나중에 데이터를 검증하기도 용이하면 더 나아가 가시화(Visualization)등을 할 때에도 유리하다. 이 레이블을 숫자로 변경하는 방법은 우리가 직접 코드를 짜도 되고 크게 어려운 기술이 아니지만 이미 라이브러리(Library)가 존재하고 있는 상태이기 때문에 굳이 힘들게 짤 필요는 없을 것 같다. 이렇게 문자열 데이터를 숫자 형태로 레이블을 변환해주는 것을 레이블 인코딩이라고 하는데 사이킷런(scikit learn, sklearn)에서는 레이블 ..
현재 가장 많이 사용되는 딥러닝(Deep Learning) 기반의 분산 표현(distributed representation) 워드임베딩(Word Embedding, 자연어를 기계가 이해할 수 있는 숫자 벡터 값으로 변경하는 기술)은 Word2vec이라 할 수 있다. Word2Vec 임베딩 기술은 단순하지만 성능이 우수해서 많이 사용되는데 치명적인 문제점도 존재한다. 바로 주어지는 단어(Corpus, 말뭉치)를 기반으로 학습을 진행하며 존재하지 않던 단어를 던졌을 때 에러가 발생하는 등 만능적인 모습을 보여주지 않는다. 당연히 학습 안된 단어는 나오지 말아야 되는거 아니냐? 할 수 있겠지만 이 문제를 해결하기 위한 방식이 연구되고 있었고, 페이스북(Facebook)에서 이를 보완하는 언어 모델이 등장한다..
확률적 경사하강법은 대표적이고 인간에게 아담과 같은 존재인 경사 하강법(Gradient Descent, GD)에게서 파생된 최적화 알고리즘(Optimizer, 옵티마이저)이다. 일단 본 포스팅에 앞서 경사 하강법에는 Mini Batch Gradient Descent도 있지만 보통 mini batch를 SGD를 포함시켜서 mini batch의 특징도 SGD로 설명 하였다. 경사 하강법의 단점과 확률적 경사하강법의 원리 그러나 GD에게는 치명적인 단점이 있는데 바로 한스텝 내딛을 때마다 전체 데이터를 이용하는 단점이 있다. 이를 등산으로 비교하자면, 내가 한걸음 옮길 때마다 지도랑 나침반보고 갈길 정한다는 것과 같다. 대충 들어도 엄청 비효율적인것 같지만 반면에 성능자체는 꽤 괜찮게 나올 수 있다는 것도 대..
기계학습(Machine Learning, 머신러닝)과 딥러닝(Deep Learning)이 현재 이정도까지 수준까지 발전하기에는 수많은 사람들의 노력과 정교한 수학적 모델들이 계속 고도화되었으며 많은 사람들이 실제 프로젝트에 활용하면서 무엇이 어떤 상황에 좋고 나쁨을 피드백하거나 논문등으로 발표하기 때문일거라 생각한다. 머신러닝의 성능 개선법 머신러닝, 딥러닝의 성능을 좌우하는 녀석 중에 옵티마이저(Optimizer, 최적화)가 있는데 DB를 잘아는 사람들은 옵티마이저가 최소의 Cost로 결과를 찾아주는 것으로 알고 있을 것이다. 사실 DB와 머신러닝, 딥러닝에서 말하는 옵티마이저의 궁극적인 목적은 동일할 것이다. DB에서 최소의 코스트로 결과를 찾는 개념과 신경망의 모델이 실제 결과와 예측 결과의 차이를..
순환신경망(RNN)의 개념 순환신경망(Recurrent Neural Network, RNN)은 입력과 출력을 시퀀스(Sequence) 단위로 처리하는 모델이다. 여기서 시퀀스란 연관된 연속의 데이터를 의미하며, 시계열 데이터에 적합한 신경망 모델이라 할 수 있다. ex) 자연어 처리, 순서를 가지는 정보, 연속적인 시간 간격으로 배치된 데이터 심층 신경망(Deep Neural Network, DNN)의 경우 파라미터들이 모두 독립적이었으나, RNN의 파라미터들은 모두 공유하는 것이 특징이다. 장기 의존성 문제점 (Long-Term Dependency Problem) 일반적인 RNN의 경우 짧은 시퀀스를 처리할 경우 유리하며, 관련 정보와 그 정보를 사용하는 지점 사이 거리가 멀어지는 경우 학습 능력이 현..
EDA(Exploratory Data Analysis) 즉, 탐색적 데이터 분석을 제대로 하려면 파이썬의 numpy, pandas와 같은 라이브러리를 잘 활용해야 한다. 그 중에 pandas는 다양한 형태의 데이터를 매우 쉽게 확인할 수 있는 기능을 제공한다. 우선 이 포스팅을 진행하는데 사용한 데이터로 iris dataset을 활용했는데 header는 일단 직접 달았기 때문에 아래와 같이 파일을 다운로드 받아서 진행하면 유용할 것 같다. 데이터의 일부만 보여주자면 아래와 같이 생긴 녀석이다. sepal_length,sepal_width,petal_length,petal_width,class 1,5.1,3.5,1.4,0.2,Iris-setosa 2,4.9,3,1.4,0.2,Iris-setosa 3,4.7..
TF-IDF는 자연어처리에서 가장 기본적이고 가장 많이 활용하는 기술이라 할 수 있으며 그만큼 강력하며 쉽다. TF-IDF는 Term-Frequency와 Inverse Document Frequency의 약어로 되어 있으며, 문서에서 자주 등장하는 문서별 중요 단어에서 다른 문서에서 자주 등장하는 패널티를 빼는 역빈도를 구하여 최종 스코어를 구하게 된다. 이를 예로 들면, 편의점마다 많이 팔리는 물건을 조사하고 싶은데 단순히 매출로만 판단하게 되면 모든 편의점마다 담배가 1위로 올라설 것이다. 이렇게 다수가 나오는 패널티를 빼게 되면 결국 편의점마다 독특하게 등장하는 물건들이 있을 것이고, 이를 토대로 선호 물품과 해당 편의점 주변의 나이대 등을 간접적으로 알수도 있을 것이다. TF-IDF로 가장 많이 ..
머신러닝(딥러닝 포함)의 작업에 대해서 아직 많은 사람들이 어떤 부분들이 중요한지 모르며, 간혹 자신의 역할이 매우 작은것이라 생각해서 업무를 비하하는 사람들이 많다. 특히, 데이터 전처리의 경우 "전처리"라는 명칭 때문에 자신의 작업은 사소하고, 마치 축구에서 수비수의 역할과 같다 생각해서 일을 그만두고 모델러로 전향하는 경우가 많은데 정말 잘못된 생각이라 말을 하고 싶다. 머신러닝의 작업 플로우 데이터 수집 (Data Acquisition) 데이터 수집 이전에 데이터 설계, 데이터의 분석 등이 전제되어야 하겠지만 그 부분을 배제하고 개발단으로 설명을 하자면 제일 먼저 데이터를 수집해야 될 것이다. 자연어처리(NLP)의 경우 말뭉치를 만든다던지, 분석을 위한 기본 데이터(Raw Data) 뿐만 아니라 ..
Word2Vec로 구현할 수 있는 서비스는 무궁무진하다. 분류, 연관키워드와 같은 직접적인 서비스를 구현할 수도 있으며 최종 서비스를 위한 전처리 과정에서도 활용될 수 있다. 참고로 이 포스팅은 이전에 작성한 Word2Vec #2, 기본적인 모델 구현(생성)하기에서 만든 모델을 기반으로 설명이 이어진다. Word2Vec Source Code from gensim.models import Word2Vec model_okt = Word2Vec.load('word2vec_okt.model') 코모란 버전과 Okt 버전 모두 모델을 만들었지만, 이번 포스팅에서는 Okt 버전만 사용해보도록 한다. # 단어 벡터 확인 print('영웅 : ', model_okt.wv['영웅']) 벡터가 잘 뽑혔는지 확인하기 위해서..
우선 워드투벡터(Word2Vec)를 구현하기에 앞서 이 포스팅에 사용된 예제는 네이버 영화 리뷰 데이터이다. 네이버 영화 리뷰 데이터는 직접 github에 들어가서 데이터를 다운로드 받아서 특정 폴더에 저장한 후 사용하는 방법과 파이썬을 실행 하는것과 동시에 다운로드를 받는 2가지 방법이 존재한다. 여기서는 github에 있는 데이터를 파이썬을 실행할 때 접근하여 가져오는 방식을 사용하도록 한다. 네이버 영화 리뷰 데이터 e9t/nsmc Naver sentiment movie corpus. Contribute to e9t/nsmc development by creating an account on GitHub. github.com 위 링크에 들어가면 네이버 영화 리뷰에 대한 자세한 설명이 있으며, 샘플로..
Word2Vec를 이해하기 전에 우선 희소 표현과 분산 표현에 대한 이해를 하지 못했다면 아래의 포스팅을 보고 표현들의 개념을 익히길 권장한다. 희소 표현과 분산 표현, 차원의 저주 희소 표현과 분산 표현, 차원의 저주 희소 표현(Sparse Representation) 희소 표현(Sparse Representation)이란 데이터가 희소(부족)한 형태를 띄는 것을 말한다. 즉 대부분의 값이 0인 경우를 뜻하며, 원핫 인코딩(One Hot Encoding)이 대표적인 예.. needjarvis.tistory.com 워드투벡 혹은 워드투벡터는 분산 표현을 만들기 위해서 가장 많이 활용하는 강력하고 범용적인 단어 임베딩(Word Embedding) 모델이다. 구글(Google)에서 2013년에 발표했으며, ..