dukim's blog

[WK06-Day025][21.09.06.Mon] Level-2 NLP U-Stage 시작, Intro to NLP, BoW, W2V 본문

Boostcamp AI Tech 2th

[WK06-Day025][21.09.06.Mon] Level-2 NLP U-Stage 시작, Intro to NLP, BoW, W2V

eliza.dukim 2021. 9. 6. 23:21

Intro

  • Level 2 - NLP Domain 첫 날
  • 팀 빌딩 : 11조 SmilingFace

학습 내용

Intro to NLP

관련 학문 분야

  • Natural Language Processing
    • 주요 컨퍼런스: ACL, EMNLP, NAACL
    • 처리 수준에 따라
      • Low-level parsing
        • Tokenization, Stemming
      • Word and phrase level:
        • NER, POS tagging, Noun-Phrase Chunking, Dependency Parsing, Coreference Resolution
      • Sentence level:
        • Sentiment Analysis, Machine Translation
      • Multi-sentence and paragraph level
        • Entailment prediction, Question Answering, Dialogue Systems, Summarization
  • Text mining
    • 주요 컨퍼런스: KDD, The WebConf(WWW), WSD, CIKM, ICWSM
    • Text 또는 Document data로부터 유용한 정보 추출
    • 문서 군집화(e.g. topic modeling)
    • 사회과학과 연관된 연구주제
  • Information retrieval
    • 주요 컨퍼런스: SIGIR, WSDM, CIKM, RecSys
    • 사회과학과 연관된 연구주제

Bag-of-Words

  • 각 단어를 one-hot 벡터로 표현
  • 문장 또는 문서는 각 단어 벡터의 단순 합으로 표현
  • 단어와 단어 사이의 의미관계 표현 불가(어떤 단어 쌍이든지 거리는 $\sqrt{2}$, 코사인 유사도는 0)

NaiveBayes Classifier

  • MAP(Maximum A Posteriori): 각 클래스에 대하여 사후확률을 최대화 하는 클래스로 분류
  • 문서를 d, 클래스를 c라 할 때, 문서 d가 주어졌을 때 이것이 클래스 c로 분류될 확률 $C_{MAP} = \rm{argmax}_{c \in C} P(c|d)$을 바로 알 수 없음
  • 따라서 파악 가능한 확률로 바꾸어 계산하기 위해 베이즈 정리를 이용해 $\rm{argmax}_{c \in C} \frac{P(d|c)P(c)}{P(d)}$로 나타낸다.
  • 위 식에서 분모는 상수이므로 최대값 탐색에는 무시해도 되는 값. 따라서 $\rm{argmax}_{c \in C} P(d|c)P(c)$로 간소화하여 나타낼 수 있다.
  • 참고: MAP vs. MLE: https://process-mining.tistory.com/126
  • 각 문서 d가 단어 w로 구성이 된다고 할 때 어떤 문서가 클래스 c로 분류될 확률은 조건부 독립 가정하에 단순히(naive) 각 문서 내 단어들의 등장확률의 곱으로 표현할 수 있음
  • $P(d|c)P(c) = P(w_1, ..., w_n | c)P(c) \rightarrow P(c)\prod_{w_{i} \in W} P(w_i | c)$

Word Embedding: Word2Vec, GloVe

Word Embedding

  • 단어들을 특정한 차원 상의 한 점으로 나타내는 기술
  • 이 자체가 ML/DL 기술, 텍스트 데이터셋을 학습데이터로 주고, 좌표 공간의 차원 수를 지정하면, 해당 차원 상에서 나타난 최적의 벡터를 얻게됨
  • 비슷한 의미의 단어가 좌표 공간 상에 비슷한 위치의 점으로 매핑되게 하여 단어 간의 의미상 유사도를 잘 반영한 임베딩을 얻게 함
  • 의미를 잘 반영한 벡터를 학습해두면 이후 다른 태스크에서 성능을 올릴 수 있는 여건을 제공하게 됨

Word2Vec

  • WordEmbedding 학습 방법 중 가장 유명한 방법 중 하나
  • 단어 자체의 의미를 파악하는 태스크, 또는 자연어를 단어 단위의 벡터로 나타내어 태스크의 입력으로 제공하는 형태로 활용
  • 가정: "You shall know a word by the compay it keeps" -J.R. Firth 1957
  • 학습 데이터를 바탕으로 특정 단어 주변에 나타나는 단어들의 확률 분포를 예측하게 됨
  • 학습 데이터셋 구성(CBOW 기준 설명)
    • e.g. "I study math" 문장 하나만으로 이뤄진 학습 셋
      • Window size 3: 앞 뒤로 1개 단어씩만을 봄 (input, target) -> (I, study), (study, I), (study, math)
  • input layer에서 입력 단어에 해당하는 vector 값이 output layer의 타겟 단어에 해당하는 vector의 값과 유사해지도록 학습됨(둘의 내적한 결과가 가장 큰 값을 갖도록 학습함)
  • 최종 embedding vector의 선정은 input layer와 output layer 둘 중 어느 쪽을 선택해도 상관 없지만 일반적으로 input layer에서 선택
  • 특징
    • 단어간의 의미론적 관계를 학습(e.g. vec[queen] - vec[king] = vec[woman] - vec[man])
    • example : 김원재님 블로그
  • Word Intrusion Detection
    • 여러 단어들이 주어져있을 때, 이 중 나머지 단어와 의미가 가장 상이한 단어를 찾아내는 task
    • 각 단어별로 나머지 단어와의 Euclidian Distance를 계산하여 평균을 낸 후, 그 값이 가장 큰 단어를 선택함
    • e.g. math shopping reading science <- shopping이 가장 무관한 단어
  • 활용
    • 기계 번역에서는 단어들 간에 서로 같은 의미를 가지는 단어들의 임베딩 벡터가 서로 정합(align)될 수 있도록 하여 번역 성능을 높여줌
    • 감정 분석에서도 각 단어들의 긍부정의 의미를 보다 용이하게 파악할 수 있도록하는 벡터 표현형을 제공

GloVe: Global Vectors for Word Representation

  • Word2Vec과의 차이점
    • 각 입력 및 출력 단어 쌍들에 대해서, 학습 데이터에서 그 두 단어가 한 윈도우 내에서 동시에 등장한 빈도를 사전에 계산하고, 아래 수식에서 입력워드의 임베딩 벡터 $u_i$, 그리고 출력워드의 임베딩 벡터 $v_j$ 간의 내적값이, 두 단어가 한 윈도우에서 얼마나 동시에 등장하는가에 대한 확률값에 로그를 씌운 값 $log P_{ij}$에 가까워지도록 하는 새로운 형태의 loss function을 사용
    • (Word2Vec은 특정 입출력쌍이 자주 등장하는 경우(e.g. (study, math) 쌍)에, 이런 데이터 샘플이 자연스럽게 빈번하게 학습됨으로써, 둘의 내적값이 커지도록 학습)
    • 단어 쌍의 내적값의 Ground Truth로써 단어 쌍의 등장 확률을 사용하므로 중복되는 계산을 줄여주어 학습이 W2V에 비해 빠르게 진행되며 보다 적은 데이터에 대해 잘 동작
    • 또한 GloVe 모델은 선형대수의 관점에서 추천시스템에서 많이 활용되는 알고리즘인 co-occurrence matrix의 lower rank matrix factorization task로도 이해할 수 있다.
    • 중요한 것은 Word2Vec과 GloVe 모두 주어진 학습데이터를 기반으로 word embedding을 학습하는 알고리즘이고, 실제 적용시 성능도 유사하게 나온다는 것

과제 수행 과정 / 결과물

  • 필수 과제 1 : spacy와 KoNLPy의 mecab 각각의 라이브러리의 함수를 사용하면 금방 풀리는 문제
  • 안영진 캠퍼님의 팁 : en모델은 spacy version 3.0이후 deprecated. en_core_web_sm을 사용한다. "영어(en)", "사용목적(core)", "훈련 데이터셋 출처(web)", "모델 크기(small)"을 의미.
    import spacy
    nlp = spacy.load('en_core_web_sm')
  • 선택 과제 1 : 그대로 실행해도 test accuracy 92%는 넘긴다. 그러나 좀 더 다양한 방법을 개인적으로 시도해볼 것

피어세션

  • 파이팅 넘치는 이유경 멘토님과의 멘토링 킥오프, 관심 분야의 연구를 하고 계신 분께 멘토링을 받게되어 기쁘다.
  • 멘토링과 피어세션 때 어떤 내용을 나누면 좋을 지에 대해서 이야기를 나누었다.
  • DST(Dialogue State Tracking)과 Transformer 서베이 논문을 다루기로 결정하고, 기타 취업 및 대학원 진학 관련 정보 또한 공유하기로 하였다.

회고

  • 새로운 팀과의 새로운 과정에서의 첫 날. 이것 저것 팀 빌딩을 하다보니 순식간에 지나갔다.
  • 이전 기수 캠퍼들의 특강이 있었다. 취업에 너무 목메거나 점수에 연연하지 말고, 적합한 태도와 실력을 갖춘 사람이 되어있으면 기회는 저절로 따라온다는 것이 핵심.
Comments