강의노트, 실습 데이터, 실습 코드는 각각 다음의 repository 에 올려두었습니다.
- 강의 노트 : https://github.com/lovit/textmining-tutorial
- 실습 데이터 : https://github.com/lovit/textmining_dataset
- 실습 코드 : https://github.com/lovit/python_ml4nlp
-
품사 판별, 형태소 분석, 그리고 미등록단어 문제에 대한 글 입니다. (링크)
-
Java 로 구현된 Komoran 을 Jupyter notebook 의 python 에서 이용하기 위한 과정입니다. (링크)
-
Java 로 구현된 Komoran 을 Python package 로 만드는 과정과 Java, Python 간의 변수 호환에 대한 내용입니다 (링크)
-
텍스트 데이터를 KoNLPy 를 이용하여 term frequency matrix 로 만드는 과정입니다. (링크)
-
Logistic regression 의 이론설명 입니다. (링크)
-
soynlp 의 설치 / word extractor / tokenizer / noun extractor 사용법에 관한 포스트입니다. (링크)
-
단어 추출 방법 중 하나인 cohesion 과 이를 이용한 L-tokenizer 의 구현 과정입니다. (링크)
-
단어 추출 방법 중 하나인 Accessor Variety 와 Branching Entropy 의 설명입니다. (링크)
-
단어 추출 기법의 단어 점수를 이용하는 MaxScoreTokenizer 의 구현 과정입니다. (링크)
-
Google translator 에도 쓰이는 unsupervised tokenizer 인 word piece model 의 설명입니다. (링크)
-
토크나이저와 document representation 에 관련된 내용입니다.어절의 왼쪽 부분음절만 취하는 토크나이저를 이용해도 문서의 정보가 어느 정도 표현됩니다. (링크)
-
통계 정보를 이용하여 데이터 기반으로 명사를 추출하는 soynlp.noun.LRNounExtractor_v1 의 설명입니다. (링크)
-
앞선 명사 추출기의 단점을 분석하고, 이를 보완한 soynlp.noun.LRNounExtractor_v2 의 개발 과정입니다. (링크)
-
한국어의 용언 (부사, 형용사)는 어근과 어미 형태소로 구성된 단어입니다. 원형 "하다" 동사는 어미가 변화하여 "하라고, 했는데" 처럼 그 형태가 변합니다. 이와 같은 용언을 활용하는 conjugator 를 구현하는 과정입니다. Conjugator 는 lemmatizer 의 반대 과정입니다. (링크)
-
한국어의 용언 (부사, 형용사)는 어근과 어미 형태소로 구성된 단어입니다. "했는데" 처럼 활용된 용언의 원형을 복원하는 lemmatizer 에 대한 설명과 개발 과정입니다. (링크)
-
형태소의 품사 태깅이 되어 있는 말뭉치가 있을 경우, 데이터 기반으로 lemmatizer 나 conjugator 를 손쉽게 만들 수 있습니다. (링크)
-
Hidden Markov Model (HMM) 을 이용하여 말뭉치의 패턴을 학습하는 품사 판별기 (형태소 분석기) 의 작동 원리와 모델의 구조적 문제점들 입니다. (링크)
-
Hidden Markov Model (HMM) 을 기반으로 하는 형태소 분석기의 형태소 분석 함수를 만드는 과정입니다 (링크)
-
Conditional Random Field (CRF) 를 이용하여 말뭉치의 패턴을 학습하는 품사 판별기 (형태소 분석기) 의 작동 원리와 HMM 기반 모델과의 차이점들 입니다 (링크)
-
scipy.sparse 에 구현된 sparse matrix 에 대한 내용과 이를 다룰 때 주의해야 할 점들 입니다. (링크)
-
Point Mutual Information 을 numpy 를 이용하여 구현하는 내용입니다. Matrix handling 연습을 할 수 있습니다. (링크)
-
평상시 '폭우'라는 단어가 0.1 % 등장하는데, 오늘의 뉴스에서 1 % 등장하였다면 '폭우'의 키워드 점수는 1% / (1% + 0.1%) 로 정의할 수 있습니다. 단어의 출현 빈도 비율을 이용한 키워드 추출 방법의 구현 과정 입니다. (링크)
-
Logistic regression 에 L1 regularization 을 더하면 키워드를 추출할 수 있습니다. (링크)
-
(word, context) co-occurrence 를 계산한 뒤, PMI 를 적용하면 단어의 문맥적 유사도를 표현할 수 있습니다. Co-occurrence 정보를 이용하여 semantics 을 표현하는 방법에 대하여 정리한 "From frequency to meaning, Vector space models of semantics (Turney & Pantel, 2010)" 논문의 리뷰입니다. (링크)
-
(word, context) co-occurrence matrix 에 PMI 를 적용한 뒤, SVD 를 적용하면 Negative sampling 을 이용하는 Skip-gram 의 word vector 와 동일한 값을 얻을 수 있다는 내용의 논문, "Neural Word Embedding as Implicit Matrix Factorization (Levy & Goldberg, 2014)"의 리뷰입니다. (링크)
-
한국어 용언의 원형을 표현형으로 변환하는 (가다 -> 갔는데) conjugation 의 원리와 코드입니다. (링크)
-
한국어 용언의 표현형을 원형으로 변환하는 (갔는데 -> 가다) lemmatization 의 원리와 코드입니다 (링크)
-
Sequential labeling 에 자주 이용되었던 Conditional Random Field (CRF) 는 potential function 이 적용된 logistic regression 입니다. (링크)
-
Conditional random field 를 이용한 한국어 띄어쓰기 교정기를 만들 수 있습니다. (링크)
-
Conditiaonal random field 를 이용한 한국어 띄어쓰기 교정기는 공격적인 띄어쓰기 교정을 하는 경향이 있습니다. 이 현상의 원리와 이를 보완하기 위한 휴리스틱 한국어 띄어쓰기 교정 알고리즘의 개발 과정입니다. (링크)
-
Decision tree (DT)에 대한 설명과 DT 가 text classification 에 적합하지 않은 이유에 대한 설명입니다. (링크)
-
Scikit-learn 에서 제공하는 Decision tree 에 학습된 rules 을 텍스트로 옮기는 과정입니다. 이를 손쉽게 도와주는 packages 들은 존재합니다. 하지만 직접 구현해 봄으로써 tree traversal 을 연습할 수 있습니다. (링크)
-
시각화 패키지인 Seaborn 의 튜토리얼 입니다 (링크)
-
시각화 패키지인 Bokeh 의 튜토리얼 입니다 (링크)
-
Word2Vec 과 Doc2Vec 의 학습 원리 및 역사에 대하여 정리한 글입니다. (링크)
-
Word2Vec 이 학습하는 word representation space 에 대하여 이해를 하기 위한 연구인 "All-but-the-top: simple and effective postprocessing for word representations (ICLR 2018)" 의 리뷰와 이에 대한 해석입니다. (링크)
-
Glove 는 Word2Vec 과 더불어 가장 많이 이용되는 word embedding 방법 중 하나입니다. Word2Vec 과의 차이점에 대한 글입니다 (링크)
-
Word2Vec 은 학습 때 보지 못했던 단어에 대해 word vector 를 알 수 없으며, infrequent words 에 대한 word vectors 도 학습이 잘 되지 않습니다. 이러한 단점을 보완하기 위하여 FastText 가 제안되었습니다. 이는 subword embedding 을 이용한 word embedding 방법으로, 미등록 단어와 infrequent words 에 대하여 frequent words 와의 형태적 유사성을 고려한 word vector 를 추정하여 줍니다. (링크)
-
Gensim Word2Vec 은 embedding vector 에 단어 빈도수 정보가 포함되어 있으며, infrequent words 는 embedding vector 가 잘 학습되지 않기도 합니다. Gensim Word2Vec 학습 시 min_count 설정에 대한 팁과 후처리를 통하여 질 좋은 embedding vector 를 고르는 방법입니다 (링크)
-
t-SNE 는 벡터 시각화를 위하여 가장 많이 이용되는 임베딩 방법입니다. t-SNE 에서 가장 중요한 패러매터인 perplexity 의 역할과 설정 기준에 대한 글입니다 (링크)
-
MDS, LLE, ISOMAP 의 설명과 t-SNE 까지 포함한 네 종류의 임베딩 방법 간의 시각화 성능 비교 실험입니다. 시각화를 위한 임베딩에서는 네 알고리즘 중 t-SNE 가 안정적인 성능을 보여줍니다 (링크)
-
Topic modeling 에 관련된 포스트를 작성할 예정입니다.
-
Topic modeling 에 이용되는 대표적인 알고리즘인 Latent Dirichlet Allocation (LDA) 의 학습 결과를 시각화하여 설명하는 pyLDAvis 의 사용법 및 pyLDAvis 가 학습하는 정보에 관련된 설명입니다 (링크)
-
pyLDAvis 는 LDA 외에도 임의의 토픽 모델링 결과를 모두 시각화 할 수 있습니다. NMF 와 k-means 의 결과를 LDAvis 를 이용하여 시각화 하는 내용입니다 (링크)
-
Named Entity Recognition (NER) 을 위하여 Conditional Random Field (CRF) 는 이전부터 이용되었으며, 해석의 측면에서 여전히 좋은 모델입니다. CRF 를 이용한 NER model 을 만드는 과정입니다. (링크)
-
Random projection 의 설명과, 이를 이용한 Locality Sensitive Hashing 의 원리 입니다. (링크)
-
bag-of-words model 처럼 고차원의 sparse vector 로 표현된 데이터의 k-means 에는 Euclidean distance 보다는 Cosine distance 를 이용하는 것이 좋습니다. 그리고 Cosine distance 를 이용하는 k-means 를 Spherical k-means 라 합니다. 이에 대한 설명과 패키지 사용법에 대한 글 입니다 (링크)
-
k-means 를 학습하여 얻은 centroid vector 에 keyword extraction 방법을 적용하면 데이터 기반으로 clustering labeling 을 할 수 있습니다. (링크)
-
Sparse data 에 대해서는 k-means++ 과 같은 initializer 는 효과적이지 않습니다. Dissimilarity 에 대한 정의가 어려운 sparse data 상황에서의 효율적인 k-means initialization 방법입니다. (링크)
-
앞서 k-means 의 cluster labeling 방법도 살펴 보았습니다. pyLDAvis 를 이용하면 cluster label 의 결과 및 시각화를 할 수 있습니다. (링크)
-
Levenshtein distance 와 이를 변형하는 방법입니다. 한글의 초/중/종성을 분리하여 이를 기준으로 string distance 를 계산하는 방법도 포함하고 있습니다. (링크)
-
Inverted index 를 이용하면 Levenshtein distance 가 가까울 가능성이 있는 단어 후보만을 추린 뒤, 이에 대해서만 실제 거리 계산을 하는 효율적인 오탈자 교정기를 만들 수 있습니다 (링크)
-
수업 때 자세한 설명은 하지 않았습니다만, LSH 와 같은 hash function 을 이용하는 방법 외에도 다양한 nearest neighbor search 를 위한 인덱서들이 있습니다. 한 예로, network 의 small-world phenomenon 성질을 이용한 인덱서의 원리와 이를 구현하는 과정에 대한 이야기 입니다 (링크)
-
Graph 로 표현된 데이터에서 centrality 기반으로 중요한 마디를 찾을 수 있습니다. 대표적인 알고리즘인 PageRank 와 HITS 에 대한 설명입니다. (링크)
-
PageRank 는 Python 의 dict 를 이용하여 구현할 수도 있고, scipy.sparse 를 이용할 수도 있습니다. 두 종류의 구현 방식에 따른 속도 비교 입니다 (링크)
-
PageRank 를 이용하면 토크나이저를 이용하지 않으면서도 단어, 키워드를 추출할 수 있습니다. 토크나이저를 이용하지 않는 한국어 키워드 추출기인 KR-WordRank 의 구현 과정에 대한 포스트와 이 결과를 Word cloud 로 시각화하는 과정입니다. (링크: KR-WordRank), (링크: Word cloud)
-
KR-WordRank 에 핵심 문장 추출 기능을 추가하였습니다. 이 과정에서 좋은 핵심 문장의 조건에 대해서도 고민하였습니다. 개발 과정과 TextRank 와의 요약문 품질 평가과정을 정리하였습니다 (링크)
-
TextRank 는 PageRank 를 이용하여 키워드와 핵심 문장을 선택하는 전통적인 extractive summarization 방법 중 하나입니다. 이를 구현하는 과정 및 문장 간 유사도를 변화 시켰을 경우의 품질 변화 등의 내용을 정리하였습니다. (링크)
-
Shortest path 를 찾는 알고리즘 중 하나인 포드 알고리즘의 원리 및 구현 과정 입니다 (링크)
-
Shortest path 를 찾는 알고리즘 중 하나인 포드를 이용하여, 간단한 HMM 기반 품사 판별기를 만드는 과정입니다. 자세한 디테일보다는 HMM 과 shortest path 와의 관계 및 작동 원리에 대한 내용이 기술되어 있습니다 (링크)
- Convolutional Neural Network 에 관련된 포스트를 작성할 예정입니다.
- Sequence to sequence 에 적용된 attention 부터 Transformer 와 BERT 까지, NLP 에서 이용된 attention mechanism 을 정리하였습니다 (링크)