(initializer, update rules, grid size) Self Organizing Map (SOM) 은 1980 년대에 고차원 벡터 공간의 2차원 시각화를 위하여 제안된 뉴럴 네트워크 입니다. 오래된 방법이지만 살펴볼 점들이 충분히 많은 알고리즘입니다. 최근 고차원 벡터 시각화를 위해 이용할 수 있는 t-SNE 나 PCA 의 단점을 개선하는 방법을 찾던 중, SOM 을 개선하면 특정 목적에 맞는 훌륭한 시각화 방법을 만들 수 있겠다는 생각을 하였습니다. 성능을 개선하기 위해서는 우선 알고리즘의 작동 원리와 특징을 알아야 합니다. 이번 포스트에서는 SOM 을 직접 구현하며, 특징을 이해하고 잠재적 위험성을 알아봅니다.
Seaborn vs Bokeh. Part 2. Bokeh tutorial
Seaborn 이 matplotlib 을 바탕으로 통계 분석 결과의 시각화에만 집중한다면, Bokeh 는 그 외의 다양한 그림들을 그릴 수 있도록 도와줍니다. Bokeh 의 가장 큰 장점 중 하나는 interactive plots 을 그릴 수 있다는 점입니다. 특히 설명을 추가할 수 있는 hover tool 이나 두 개 이상의 차트가 서로 연동되어 작동하는 기능들은 효율적이고 직관적인 데이터 시각화가 가능하도록 도와줍니다. Part 2 는 Bokeh 의 사용법이며, 이 역시 official tutorials 을 바탕으로 알아두면 유용한 이야기들을 추가하였습니다. Bokeh 는 지원하는 기능이 많아서 official tutorials 을 모두 읽어보려면 시간이 조금 걸립니다. 이 튜토리얼에서는 데이터 분석 결과를 시각화 할 때의 관점에서 우선적으로 알면 좋은 기능들을 위주로 편집하였습니다.
Seaborn vs Bokeh. Part 1. Seaborn tutorial
Seaborn 과 Bokeh 는 파이썬에서 이용할 수 있는 plotting 도구들이지만, 둘은 각자 지향하는 목적이 다르며 서로가 더 적합한 상황도 다릅니다. 데이터 분석 결과의 시각화 목적에서 두 패키지가 지원하는 기능을 비교해 봄으로써 각자가 할 수 있는 일과 할 수 없는 일을 알아봅니다. 또한 이 튜토리얼은 두 패키지의 사용법을 빠르게 익히려는 목적에 제작하였습니다. Part 1 은 seaborn 의 사용법이며, official tutorial 를 바탕으로, 알아두면 유용한 이야기들을 추가하고 중복되어 긴 이야기들을 제거하였습니다.
Document vectors 와 word vectors 를 함께 시각화 하기 (Doc2vec 공간의 이해)
Doc2Vec 은 단어와 문서를 같은 임베딩 공간의 벡터로 표현하는 방법으로 알려져 있습니다. 하지만 대부분의 경우 단어와 문서는 공간을 나누어 임베딩 되는 경우가 많습니다. 그리고 단어 벡터와 문서 벡터 간의 상관성을 표현하는 그림을 그리기 위해서는 두 벡터 공간이 일치하는지를 반드시 따져봐야 합니다. 이번 포스트에서는 Doc2Vec 으로 학습한 문서와 단어 벡터를 2 차원의 그림으로 그리는 방법과 주의점에 대하여 알아봅니다. 이를 통하여 Doc2Vec 모델이 학습하는 공간에 대하여 이해할 수 있습니다.
NMF, k-means 를 이용한 토픽 모델링과 NMF, k-means + PyLDAvis 시각화
LDAvis 는 토픽 모델링의 한 방법인 Latent Dirichlet Allocation (LDA) 의 학습 결과를 시각화하는 목적으로 자주 이용됩니다. 하지만 LDAvis 는 임의의 토픽 모델링의 결과를 모두 시각화 할 수 있습니다. 이번 포스트에서는 LDA 외에 토픽 모델링에 이용되는 Nonnegative Matrix Factorization (NMF) 와 k-means 의 학습 결과를 LDA 의 학습 결과와 유사하게 변형한 뒤, LDAvis 를 이용하여 이를 시각화 하는 방법에 대하여 살펴봅니다.
KR-WordRank 를 이용한 핵심 문장 추출과 ROUGE 를 이용한 요약문 성능 평가
이전의 KR-WordRank 에는 토크나이저를 이용하지 않는 한국어 키워드 추출 기능만 있었는데, 최근에 KR-WordRank 에 핵심 문장을 추출하는 기능을 추가하여 KR-WordRank (1.0) 을 배포하였습니다. TextRank 는 핵심 문장을 선택하기 위하여 토크나이저를 이용하지만 (물론 이전 포스트에서 subword tokenizer 를 이용하면 된다는 점도 확인하였습니다), KR-WordRank 의 단어 가능 점수 (Ranking 값) 을 토크나이저의 재료로 이용하는 것은 어려웠습니다. 또한 TextRank 의 핵심 문장 선택의 논리에 동의되지 않는 부분이 있어서 이를 개선한 기능을 KR-WordRank 에 추가하였습니다. 이 포스트에서는 이에 대한 개발 과정 및 실험 결과를 정리합니다.
TextRank 를 이용한 키워드 추출과 핵심 문장 추출 (구현과 실험)
문서 집합을 요약하는 방법으로 키워드와 핵심 문장을 선택하는 extractive methods 를 이용할 수 있습니다. 이를 위해 가장 널리 이용되는 방법 중 하나는 2004 년에 제안된 TextRank 입니다. TextRank 는 word graph 나 sentence graph 를 구축한 뒤, Graph ranking 알고리즘인 PageRank 를 이용하여 각각 키워드와 핵심 문장을 선택합니다. 그리고 이들을 이용하여 주어진 문서 집합을 요약합니다. 그 뒤, TextRank 와 유사한 방법들이 여러 제안되었지만, 큰 차이는 없습니다. 이번 포스트에서는 TextRank 의 원리를 정리하고, TextRank 가 키워드와 핵심 문장을 추출하는 기준에 대한 직관적인 탐색도 해봅니다.
Reviews of sequential labeling algorithms (Sparse representation model)
Classifiers 는 input vector 가 주어지면 이에 해당하는 클래스를 분류합니다. 그런데 입력값이 벡터가 아니라 같은 시퀀스일 수 있습니다. 이때 가장 적절한 클래스를 시퀀스 들을 분류하는 문제를 sequential labeling 이라 합니다. 이를 위해 Hidden Markov Model (HMM) 도 이용되었습니다만, HMM 은 많은 문제점을 지니고 있습니다. 이후 Conditional Random Field (CRF) 와 같은 maximum entropy classifiers 들이 제안되었고, Word2Vec 이후 단어 임베딩 기술이 성숙하면서 Recurrent Neural Network (RNN) 계열도 이용되고 있습니다. 최근에는 Transformer 를 이용하는 BERT 까지도 sequential labeling 에 이용됩니다. 이번 포스트에서는 이 문제를 위하여 sparse representation 을 이용하는 알고리즘들에 대해서 살펴봅니다.
Attention mechanism in NLP. From seq2seq + attention to BERT
Word2Vec 을 제안한 Mikolov 는 “딥러닝을 이용한 자연어처리의 발전은 단어 임베딩 (word embedding) 때문이다”라는 말을 했습니다. 단어 간의 유사성을 표현할 수 있고, 단어를 연속적인 벡터 공간 (continuous vector space) 에서 표현하여 (embedding vector 만 잘 학습된다면) 작은 크기의 모델에 복잡한 지식들을 저장할 수 있게 되었습니다. Attention mechanism 도 단어 임베딩 만큼 중요한 발전이라 생각합니다. 2013 년에 sequence to sequence 의 문맥 벡터 (context vector) 를 개선하기 위하여 attention mechanism 이 제안되었습니다. 이는 모델이 필요한 정보를 선택하여 이용할 수 있는 능력을 주었고, 자연어처리 외에도 다양한 문제에서 성능을 향상하였습니다. 그리고 부산물로 모델의 작동방식을 시각적으로 확인할 수 있도록 도와주고 있습니다. 이번 포스트에서는 sequence to sequence 에서 제안된 attention 부터, self-attention 을 이용하는 언어 모델인 BERT 까지 살펴봅니다.
Word2Vec 과 Logistic Regression 을 이용한 (Semi-supervised) Named Entity Recognition
Named Entity Recognition 을 위하여 Conditional Random Field (CRF) 나 Recurrent Neural Network (RNN) 과 같은 sequential labeling 이 이용될 수 있습니다. 하지만 Richard Socher 의 강의노트에서 window classification 만으로도 가능하다는 내용이 있습니다. 또한 sequential labeling 알고리즘은 잘 구축된 학습 데이터가 필요하다는 단점도 있습니다. 이번 포스트에서는 학습 데이터셋이 전혀 없는 상황에서 한국어 Named Entity Recognizer 를 만드는 과정을 정리합니다. 이를 위하여 Word2Vec 으로 최소한의 seed set 을 구축하고, logistic regression 을 이용하여 window classification 을 하는 알고리즘을 만듭니다.