Skip to content

패스트캠퍼스, 자연어처리를 위한 머신러닝, 수업관련 포스트 입니다.

Notifications You must be signed in to change notification settings

lovit/fastcampus_textml_blogs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 

Repository files navigation

패스트캠퍼스, 자연어처리를 위한 머신러닝, 수업관련 포스트입니다.

강의노트, 실습 데이터, 실습 코드는 각각 다음의 repository 에 올려두었습니다.

1 일차

  • 품사 판별, 형태소 분석, 그리고 미등록단어 문제에 대한 글 입니다. (링크)

  • Java 로 구현된 Komoran 을 Jupyter notebook 의 python 에서 이용하기 위한 과정입니다. (링크)

  • Java 로 구현된 Komoran 을 Python package 로 만드는 과정과 Java, Python 간의 변수 호환에 대한 내용입니다 (링크)

  • 텍스트 데이터를 KoNLPy 를 이용하여 term frequency matrix 로 만드는 과정입니다. (링크)

  • Logistic regression 의 이론설명 입니다. (링크)

2 일차

  • 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 를 손쉽게 만들 수 있습니다. (링크)

3 일차

  • 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 의 원리와 코드입니다 (링크)

4 일차

  • 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 을 연습할 수 있습니다. (링크)

5 일차

  • 시각화 패키지인 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 가 안정적인 성능을 보여줍니다 (링크)

6 일차

  • 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 을 만드는 과정입니다. (링크)

7 일차

  • 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 성질을 이용한 인덱서의 원리와 이를 구현하는 과정에 대한 이야기 입니다 (링크)

8 일차

  • 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 와의 관계 및 작동 원리에 대한 내용이 기술되어 있습니다 (링크)

9 일차

  • Convolutional Neural Network 에 관련된 포스트를 작성할 예정입니다.

10 일차

  • Sequence to sequence 에 적용된 attention 부터 Transformer 와 BERT 까지, NLP 에서 이용된 attention mechanism 을 정리하였습니다 (링크)

About

패스트캠퍼스, 자연어처리를 위한 머신러닝, 수업관련 포스트 입니다.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published