PageRank 나 HITS 같은 graph ranking 알고리즘은 natural language processing 에서 이용되기도 합니다. WordRank 는 일본어와 중국어의 unsupervised word segmentation 을 위하여 제안된 방법입니다. 하지만 이 알고리즘을 한국어에 그대로 적용하기는 어렵습니다. 한국어와 일본어, 중국어는 언어적 특성이 다릅니다. KR-WordRank 는 한국어의 특징을 반영하여 비지도학습 기반으로 한국어의 단어를 추출합니다. 그리고 단어 점수는 키워드 점수로 이용될 수도 있습니다. 즉, KR-WordRank 는 토크나이저를 이용하지 않으면서도 단어/키워드 추출을 비지도학습 기반으로 수행합니다.
Graph ranking algorithm. PageRank and HITS
Graph ranking 은 nodes 와 edges 로 구성된 networks 에서 중요한 nodes 를 찾기 위한 방법입니다. 대표적인 알고리즘인 PageRank 는 Google 의 초기 검색 엔진에 이용된 알고리즘으로 유명합니다. PageRank 를 이용하여 web page graph 에서 중요한 pages 를 찾은 뒤, 검색 결과를 출력할 때 그들의 우선 순위를 높입니다. PageRank 는 그 외에도 recommender system 이나 natural language processing 분야에서도 자주 이용되었습니다. 이 포스트에서는 대표적인 graph ranking 알고리즘인 PageRank 와 HITS 에 대하여 알아봅니다.
Term proportion ratio base Keyword extraction
키워드를 추출하는 방법은 다양합니다. 많은 키워드 추출 방법들은 saliency 와 distinctiveness 를 만족하는 단어를 키워드로 선택합니다. Lasso regression 을 이용하여 키워드를 추출할 수도 있습니다. 그러나 lasso regression 은 correlation 이 높은 단어들 중에서 중복된 단어를 제거하여 키워드를 선택합니다. 또한 regression parameters 를 학습해야 하기 때문에 계산 비용이 듭니다. Term frequency matrix 에 직관적인 공식만 적용해도 키워드를 추출할 수 있습니다. 이번 포스트에서는 가볍지만 파워풀한 키워드 추출 방법을 소개합니다.
Unsupervised tokenizers in soynlp project
soynlp 는 제가 작업하는 한국어 정보처리를 위한 비지도학습 기반 자연어처리 라이브러리 입니다. 현재 (ver 0.0.4) 세 가지 통계 기반 단어 추출 기법과 이를 이용하는 두 종류의 unsupervised tokenizers 를 제공합니다. WordExtractor 는 세 가지 단어 추출 기법인 Cohesion score, Branching Entropy, Accessor Variety 를 동시에 학습합니다. 학습된 통계 기반 단어 추출 기법들을 조합하여 Max Score Tokenizer 와 L-Tokenizer 를 만들 수 있습니다. 또한 규칙 기반으로 작동하는 Regex Tokenizer 도 제공합니다. 이에 대한 설명과 사용기입니다.
Uncertanty to word boundary; Accessor Variety & Branching Entropy
다양한 언어에서 미등록 단어를 데이터 기반으로 추출하려는 시도가 있었습니다. 중국어와 일본어는 띄어쓰기를 이용하지 않는 언어입니다. 자연어처리를 위해서는 문장에서 단어열을 인식해야 합니다. 이 문제를 word segmentation 이라 합니다. 중국어와 일본어는 한자어를 이용하는 표의문자이기 때문에 미등록단어를 알지 못하면 제대로된 segmentation 을 할 수 없습니다. 이를 해결하기 위하여 통계 기반으로 미등록 단어를 인식하기 위한 방법이 제안되었습니다. Accessor Variety 와 Branching Entropy 는 언어학자 Zelling Harris 의 단어 경계에 대한 가정을 직관적인 statistics 로 디자인한 단어 추출 기법입니다.
Cohesion score + L-Tokenizer. 띄어쓰기가 잘 되어있는 한국어 문서를 위한 unsupervised tokenizer
다양한 언어에서 미등록 단어를 데이터 기반으로 추출하려는 시도가 있었습니다. 단어는 연속으로 등장한 글자이며, 그 글자들은 서로 연관성이 높습니다. Characters 간의 co-occurrence 정보를 이용하면 단어를 찾을 수 있습니다. Cohesion score 는 한국어의 단어 추출을 위하여 character n-gram 을 이용합니다. 또한 한국어 어절의 구조인 L + [R] 특성을 함께 이용하면 간단한 unsupervised tokenizer 도 만들 수 있습니다.
Scipy sparse matrix handling
벡터는 행렬로 표현할 수 있습니다. Distributed representation 처럼 벡터의 대부분의 값이 0 이 아닐 경우에는 numpy.ndarray 와 같은 double[][] 형식으로 벡터를 저장합니다. Row 는 각 entity, column 은 벡터 공간에서의 각 차원에 해당합니다. 이와 반대로 sparse matrix 는 벡터의 많은 값들이 0 입니다. 대부분의 값이 일정하다면 그 값이 아닌 다른 값들만을 메모리에 저장하면 메모리를 효율적으로 이용할 수 있습니다. 데이터를 저장할 때도 마찬가지입니다. Sparse matrix 는 이를 위한 format 입니다. Format 이 array 가 아닌기 때문에 이를 잘 이용하기 위한 방법을 알아야 합니다. Python 의 scipy.sparse 라이브러리에는 sparse matrix format 들이 구현되어 있습니다. 이에 대하여 이야기합니다.
띄어쓰기가 되어있지 않은 한국어를 위한 토크나이저 만들기 (Max Score Tokenizer 를 Python 으로 구현하기)
Max Score Tokenizer 는 soynlp 에서 띄어쓰기가 잘 되어있지 않은 한국어 문장의 토크나이징을 위하여 단어 추출 방법과 함께 이용하는 unsupervised tokenizer 입니다. 이 포스트에서는 Max Score Tokenizer 의 컨셉과 개발 과정을 기술하였습니다.
Scikit-learn Logistic Regression fails for finding optima?
Scikit learn 의 logistic regression 이 더 좋은 solution 이 있음에도 이를 찾지 못할 수도 있다는 예시를 발견하였습니다. 이 실험을 통하여 어떤 solution 이 Softmax regression 의 더 좋은 solution 인지에 대한 논의도 함께 합니다.
Komoran, 코모란 형태소 분석기 사용 방법과 사용자 사전 추가 (Java, Python)
코모란 (KOrean MORphological ANalyzer) 은 자바로 구현된 한국어 형태소 분석기입니다. KoNLPy 에도 포함되어 있습니다. 지금은 version 3.x 가 공개되었고, KoNLPy 에는 version 2.x 가 포함되었습니다. 두 버전의 자바 사용방법과 version 3.x 를 Jupyter notebook 의 Python 환경에서 이용하도록 하는 방법을 기록하였습니다. 코모란이 제공하는 사용자사전 추가 기능을 Python 에서도 이용하는 방법도 포함되어 있습니다.