인공 데이터는 머신러닝 알고리즘의 작동 원리를 이해하는데 도움이 됩니다. Scikit-learn 에서는 two moons, swiss-roll 등 유명한 인공 데이터를 만드는 함수를 제공합니다. 그러나 scikit-learn 에서 제공하는 함수는 머신러닝 알고리즘이 풀기 쉬운 단순한 모양의 데이터만을 만들기에 몇 개의 인공 데이터 생성 함수를 만들었습니다. 이 포스트에서 소개하는 인공 데이터를 만드는 함수들은 github 에 공개하였습니다.
Plotly 를 이용한 3D scatter plot
Plotly 는 Python 에서 data visualization 을 도와주는 패키지입니다. Bokeh 처럼 Java scrpit 기반으로 작동되는 시각화 웹을 Python 에서 이용할 수 있도록 도와줍니다. 3D scatter plot 을 그리기 위해 적절한 패키지를 찾던 중 Plotly 를 써보게 되었습니다. Swiss-roll data 를 이용한 3D scatter plot 의 quick starting 을 정리하였습니다.
soyspacing. Heuristic Korean Space Correction, A safer space corrector.
한국어 띄어쓰기 오류는 Conditional Random Field (CRF) 와 같은 sequential labeling algorithm 을 이용하여 교정할 수 있습니다. 사람들은 보통 여러 어절을 붙여씁니다. 띄어쓰기 오류는 ‘띄어써야 할 부분을 붙여쓰는 경우’ 입니다. 그런데 CRF 는 공격적으로 띄어쓰기를 교정하는 경향이 있습니다. 데이터 분석에서의 띄어쓰기 교정의 목적은 붙어있는 여러 어절을 분리하여 이후의 자연어처리 분석과정의 정확성을 높이는 것입니다. 공격적인 띄어쓰기는 이후의 분석을 더 어렵게 만듭니다. 이번 포스트에서는 안전지향적인 띄어쓰기 교정기를 소개합니다. 머신 러닝 알고리즘인 CRF 처럼 좌/우의 등장하는 글자를 features 로 이용하는 heuristic algorithm 입니다. 또한 데이터에 띄어쓰기 오류가 어느 정도 있어도 학습용으로 이용할 수 있음을 실험으로 확인합니다.
Conditional Random Field based Korean Space Correction
Conditional Random Field 는 logistic regression 을 이용하는 sequential labeling 용 알고리즘입니다. 한국어 띄어쓰기 교정 문제는 길이가 인 character sequence 에 대하여 ‘띈다 / 안띈다’의 label 을 부여하는 sequential labeling 문제입니다. 이번 포스트에서는 Python 의 pycrfsuite 를 이용하여 한국어 띄어쓰기 교정기를 구현하는 과정과, 그 과정을 거쳐 구현된 소프트웨어 (pycrfsuite_spacing)의 사용법을 이야기합니다.
From Softmax Regression to Conditional Random Field for Sequential Labeling
Conditional Random Field (CRF) 는 sequential labeling 문제에서 Recurrent Neural Network (RNN) 등의 deep learning 계열 알고리즘이 이용되기 이전에 널리 사용되던 알고리즘입니다. Conditional Random Field 는 Softmax regression 의 일종입니다. 그러나 a vector point 가 아닌, sequence 형식의 입력 변수에 대하여 같은 길이의 label sequence 를 출력합니다. 이를 위해서 Conditional Random Field 는 potential function 을 이용합니다. Potential function 은 다양한 형식의 sequence data 를 high dimensional Boolean sparse vector 로 변환하여 입력 데이터를 logistic regression 이 처리할 수 있도록 도와줍니다. 이번 포스트에서 다룰 내용은 Softmax regression 과 Conditional Random Field 와의 관계와 potential function 입니다. 더하여 Conditional Random Field 와 같은 문제를 풀기 위해 이용되던 Maximum Entropy Markov Model 에 대해서도 알아봅니다.
(Review) Neural Word Embedding as Implicit Matrix Factorization (Levy & Goldberg, 2014 NIPS)
NIPS 2014 의 “Neural Word Embedding as Implicit Matrix Factorization” 에서는 Word2Vec 과 같은 word embedding 이 학습하는 공간과 비슷한 word representation 을 얻는 방법을 소개합니다. Word - context matrix 에 Point Mutial Information (PMI) 을 적용한 뒤, PMI matrix 에 Singular Vector Decomposition (SVD) 를 적용하면 Word2Vec 과 비슷한 word embedding 공간이 학습됩니다. 이번 포스트에서는 이 논문을 리뷰하고, PMI + SVD 의 특징에 대해서 알아봅니다.
Implementing PMI (Practice handling matrix of numpy & scipy)
Point Mutual Information (PMI) 은 두 변수의 상관성을 측정하는 방법 중 하나입니다. 이를 구현하는 방법은 다양합니다. 간단한 개념이기 때문에 numpy 와 scipy 의 matrix handling 을 연습하기에 적절한 예제입니다. 이번 포스트에서는 numpy.ndarray 와 scipy.sparse 의 matrix 를 이용하여 PMI, PPMI 를 계산하는 함수를 구현합니다.
(Review) From frequency to meaning, Vector space models of semantics (Turney & Pantel, 2010)
From frequency to meaning: Vector space models of semantics (Turney & Pantel, 2010) 리뷰입니다. Neural machines 이 자연어처리 분야에서 이용되기 전, semantic 한 자연어처리를 위한 전통 방법들의 survey paper 입니다. 10 년 정도 된 논문이지만, semantic 한 작업의 원리를 이해하기에 정말 좋은 논문입니다.
Implementing PageRank. Python dict vs numpy
PageRank 는 대표적인 graph ranking 알고리즘입니다. 이전 포스트에서 Python 의 자료구조인 dict 를 이용하여 PageRank 를 구현하였습니다. 하지만 Python 의 불필요한 작업들 때문에 속도가 빠르지 않습니다. C 를 기반으로 구현된 numpy 를 이용하면 매우 빠른 PageRank 구현체를 만들 수 있습니다. 그러나 잘못 구현하면 out of memory 를 만나게 됩니다. 이번 포스트에서는 numpy 를 이용한 PageRank 의 구현에 관하여 이야기합니다.
Word cloud in Python
Word cloud 는 중요한 단어나 키워드를 직관적으로 보여주는 시각화 도구 입니다. 이번 포스트에서는 KR-WordRank 를 이용하여 키워드를 추출한 뒤, wordcloud package 를 이용하는 과정에 대한 quick starting 을 소개합니다.