국문과 유목민

[일일리포트] Day 33 (NLP Basic) 본문

IT 견문록/2022_부스트캠프 AITech 3기(100일)

[일일리포트] Day 33 (NLP Basic)

논곰 2022. 3. 7. 23:59

해당 일일리포트에서는 네이버 커넥트에서 진행하는 '부스트캠프 AI Tech 3기'에서 배운 내용을 다루고 있습니다. 저작권 이슈 때문에 관련 자료를 올릴 수는 없기에 핵심 이론과 코드를 요약해서 올리고 있기에 내용이 부족할 수 있습니다.

▶ Today I Learned (핵심 요약 정리)

NLP Task

- Low-level parsing:

  • Tokenization
  • Stemming(어근 추출)

- Word and phrase level:

  • Named entity recognition(NER): 고유명사 인식 task
  • Part-of-speech(POS) tagging: 품사 알아내는 task
  • Noun-phrase chunking, dependency parsing, coreference resolution

- Sentence level

  • Sentiment analysis, Machine translation

- Multi-sentence and paragraph level

  • Entailment prediction: 두 문장 간 논리적 T/F구분
  • Question Answering: 질문 답변, 키워드에 해당하는 문서를 찾고, 독해를 통해 질문을 이해하고 정답을 제시
  • Dialog systems: 대화 시스템
  • Summarization: 요약

- Text mining: 빅데이터와 연관된 기법

  • Topik modeling, clustering Analysis, computational social science(키워드를 기반으로 한 사회현상 분석 가능)
  • DataMining 학계: major conference: KDD, The WebConf, WSDM, CIKM, ICWSM

- Informal Retrieval

검색 기능에서 활용됐지만, 이미 검색 엔진의 경우 많은 발전이 있어 추가적인 발전이 더딘 상태였다. 하지만 '추천시스템'에 사용

Trends of NLP

  • Word embeding: 각 단어를 vector화 하는 방법. Word2Vec와 GloVe방법을 사용.
  • RNN-family models(LSTMs, and GURs): NLP의 메인 architecture
  • Transformer: RNN을 대체하는 self-attention 구조가 나오게 된다. Transformer는 기계번역을 위해 나왔었다.
  • Self-supervised training: 문장에서 특정 단어를 가려놓고, 가린 단어가 무엇인지 맞추면서 학습하는 것 (문법적인, 의미론적인 방법 학습)
  • pre-trained model: BERT, GPT-3가 존재한다.
  • artificial general inteligence: BigModel을 활용한 AI 사용성 향상

Bag of Words

주어진 문장(문서)의 단어를 이용해 one-hot vector형태로 만드는 작업. 이렇게 나온 vector를 BoW Vector라고 한다.

  • Step1. Constructing the vocabulary containing unique words(문장에 나온 단어를 등록한다)
  • Step2. Encoding unique words to one-hot vectors (Categorical 분포를 one-hot벡터로 만든다(1과 0으로))
    • word embeding에서 단어의 쌍은 $\sqrt{2}$의 거리를 갖고, word의 유사도는 0으로 의미 상관없이 공통으로 설정된다.

Naive bayes classifier

one-hot벡터를 특정 class로 구분하는 대표적인 방법이다. 조건부 확률을 이용해서 문서 d에서 클래스 c를 분류해내는 방법이다. 여기서 문서 d는 우리가 구하려고하는 고정된 값이기 때문에 '상수'로 볼 수 있다. 따라서 operation 상에서 무시가 가능하므로 최종 식이 아래와 같이 나올 수 있다.
$$\begin{matrix}C_{MAP} &=& argmax_{c\in C} P(c|c)\\
&=& argmax_{c\in C}\frac{P(d|c)P(c)}{P(d)} \\
&=& argmax_{c\in C}P(d|c)P(c) \end{matrix}$$
$$ P(d|c)P(c) = P(w_1, w_2,... ,w_n|c)P(c) \rightarrow P(c)\prod_{w_i\in W}P(w_i|c)$$
- $P(d|c)$: 클래스 c가 고정되었을 때 문서 d가 나올 확률, 각 단어($.., w_n$)가 등장할 확률이 독립이라고 가정할 수 있다면, 각 단어의 확률을 모두 곱한 값으로 나타낼 수 있다.
- $P(c)$:클래스 c가 나타날 확률
'각 클래스가 나타날 확률P(c)'과 '특정 클래스가 고정되어 있을 때 각각의 word가 나타날 확률P(d|c)'을 추정함으로써, 나이브베이즈 classifier에서 필요로 하는 파라미터를 모두 추정할 수 있다. (이러한 확률 계산은 MLE와 연관이 되어있음)
> BoW사전에 없는 단어가 나오면 0이 곱해지기 때문에 regularization task가 추가적으로 적용된다.

Word Embedding

단어를 벡터로 표현할 수 있게 변화시키는 방법이다. 비슷한 의미를 가진 단어가 좌표공간에서 유사한 거리에 위치하게 함으로써 컴퓨터가 단어의 의미를 쉽게 이해할 수 있게 한다. 대표적으로 Word2Vec방법과 GloVe 방법이 있다. 두 방법 모두 성능이 비등비등하게 나온다.

Word2Vec

워드 인베딩 중 가장 유명한 알고리즘으로 같은 문장에서 나타난 단어들의 유미가 의사한 경우 거리를 가깝게 설정한다. 한 단어가 주변에 등장하는 단어를 통해서 의미를 유추할 수 있다는 아이디어에서 출발했다. 특정 단어가 등장할 때, 다음에 어떤 단어가 나올 확률이 높은지 계산한다.

  • 히든 레이어의 수는 하이퍼 파라미터 세팅값이다. 워드임베딩을 수행하는 차원 수와 동일한 값으로 설정하게 된다.
  • $W_1$과 $W_2$의 행렬곱 연산을 통해서 유사도를 구하게 된다.
  • 내적에 기반한 유사도는 최대한 작게 만들도록 입력 단어의 워드임베딩과 출력단어의 워드 임베딩을 조금씩 조절해가면서 학습을 진행하는 것이 word2Vec모델의 핵심이다.
  • softmax함수의 입력값을 logit이라고 한다.

[참고 사이트] Word2Vec 시각화: https://ronxin.github.io/wevi/

wevi

Training data (context|target): Presets: Update and Restart Update Learning Rate Next 20 100 500 PCA

ronxin.github.io

Property of Word2Vec

- vec[queen] - vec[king] = vec[woman] - vec[man]: '여성 - 남성'으로 변화 (Korean word2vec도 존재)
- Word instrusion detection: 각 단어별 유클리디안 distance를 모든 단어와 계산해서 평균을 취하고 비교를 해 문장에서 가장 관련이 없는 단어를 찾는 방법
- Word2Vec은 이외에도 다양한 task에서 사용이 가능하다.

  • Machine Translation: 각 언어별 좌표 유사도를 통해 번역 기법 향상
  • Sentiment Analysis: 단어의 긍부정 결정
  • Image Captioning: 주어진 이미지의 상황을 이해해 자연어 형태로 설명하는 task에도 word2vec 활용가능

[참고 사이트2] Korean Word2Vec: http://w.elnn.kr/search

GloVe(Global Vectors for Word Representation)

입출력 단어쌍의 등장횟수를 미리 계산하고, 입출력 벡터의 내적값에 대한 grountruth로 활용해 해당 단어쌍의 빈도수와 최대한 유사하게 나타날 수 있게 계산하는 방법이다. GloVe사이트에 가게 되면 Pre-trained된 모델을 받아서 활용할 수 있다.

  • 중복되는 계산을 줄여 word2vec보다 적은 데이터에도 활용가능하며 더 빠르게 연산을 할 수 있다. 추천시스템의 가장 기초적인 이론에 활용된다.

$$J(\theta) = \frac{1}{2}\sum_{i,j=1}^{W}f(P_{ij})(u_i^Tv_j)-log(P_{ij})^2$$

  • $u_i^Tv_j$: 입력 벡터와 출력벡터

▶Review(생각)

이번 주 부터 Level2가 시작이 되었는데, 이번 주 마스터님은 카이스트 주재걸 교수님이셨다. 교수님의 명성만으로도 기대가 됐었는데 실제 수업은 기대보다 더 좋았다. 지금까지 애매했던 개념들이 착착 정리되는 느낌이었다. 물론, 잘 이해가 안되는 개념의 경우 몇 번 씩 돌려서 들으면서 이해할 때도 있었다. 하지만 여러 번 들어도 설명이 애매한 강의가 있는 반면, 제대로 듣기만 하면 무조건 이해가 되는 강의였다. 그래서 이번 강의에 대한 내용을 잘 정리해두면 후에도 꽤나 도움이 될 것 같다.
추가적으로 오늘 기본과제1을 풀었는데, tokenizer와 word embedding을 라이브러리를 사용하지 않고 구현하는 task였다. 해당 과제를 수행하면서 tokenizer와 embedding에 대해 어떤 식으로 구현되는지에 대해 확실히 이해할 수 있었다. 한 가지 아쉬운 점은 tokenizer를 regular expression으로 하려고 시도했는데 계속 오류가 발생해서 결국 반복문으로 했다는 것이다. 나중에 질문해서 해결방법을 찾아봐야겠다.

Comments