본문 바로가기
AI_basic/Deeplearning

[Deeplearning Part.7-1] 자연어 처리와 Word Embedding

by hits_gold 2022. 1. 22.
반응형

NLP란

 NLP란 자연어 처리란 뜻으로, 자연어 생성(Meaning ->Text)과 자연어 이해(Text -> Meaning) 두 가지를 포함하는 영역입니다.

 

NLP의 영역

  • 감정 분석(Sentiment Analysis)
  • 요약(Summarization)
  • 기계 번역(Machine Translation)
  • 질문 응답(Question Answering)

 


 

문자를 숫자로 표현하는 법

 Token과 vocabulary

Tokenization 예시

 각 Token별로 indexing했을 때 문제점

  1) feature engineering의 label encoding처럼 별 의미 없을 듯??

  2) 학습한 말뭉치에 없는 Token이 나온다면?? -> OOV(Out-Of-Voca)

 

 OOV문제를 줄이기 위해 큰 기업의 연구에서는 말뭉치(Corpus)를 잘 or 크게 만들어 공개하기도 함

 

1. Character based tokenization

Character based tokenization

    장점

      1) Token Vocabulary 크기가 줄어든다.

      2) 모든 글자를 표현할 수 있다. (사실상 OOV가 없어짐)

    단점

      1) 표현법에 대한 학습이 어렵다

 

2. n-gram Tokenization

띄어쓰기 기준의 n-gram Tokenization

 합성곱연산의 필터적용으로 생각하면, n이 윈도우 크기, stride는 1로 고정

 

     장점

       1) 연속적으로 자주 쓰이는 언어를 잡아낼 수 있음 (ex. "this is")

     단점

       1) 쓸모없는 조합이 많이 생성된다.

       2) Token이 과하게 커진다.

 

3. BPE(Byte Pair Encoding)

BPE 예시

자주 나오는 데이터의 연속된 패턴을 치환하는 방식!

 

 BPE 진행 방식

   1) 단어 횟수를 기록한 사전을 만든다

   2) 연속된 2개의 글자의 수를 세 가장 많이 나오는 조합을 찾는다

   3) 정해 놓은 횟수만큼 2~3번 반복한다.

 

 


Word Embedding

  워드 임베딩(Word Embedding)은 단어를 벡터로 표현하는 방법이다!

  1) 원-핫 인코딩

one hot encoding

  2) Frequency-based Method

Bag of Words

    the, a , an 자주 나오는 단어에 대한 해결법 -> TF - IDF (단어 빈도수 X 단어의 역빈도수)

idf (Inverse Document Frequency)

    그래도 Frequency-based Method는 단어의 순서 즉 맥락을 무시한다는 점에서 새로운 문장을 생성하는 Task에서는 사용하기 어렵다!

 

 


   

Word2vec

  이름 그대로 word를 벡터(숫자형태)로! -> "Token의 의미는 주변 Token의 정보로 표현된다"라고 가정

즉, 단어는 맥락으로 결정된다

 

 

Word2vec - CBOW

 

CBOW모델의 분산표현/ Word Embedding Vector

CBOW 특징

    1) 각 단어들을 원-핫 인코딩한다.

    2) 맥락의 크기에 따라 입력계층 수가 정해진다.(위 예시는 앞 뒤 한 단어씩 선택해 입력계층이 2개!)

    3) W_in을 공유한다(W_in은 모두 같다)

    4) 서로 다른 입력계층에서 들어온 값들은 평균되어 은닉층에 전달된다

 

 

Word2vec의 개선

  1. 과다한 메모리와 계산량

Voca 크기가 100만일 때 CBOW

   

    Embedding layer

Embedding layer의 순전파와 역전파

   위 그림의 dW는 W와 크기가 같은 영행렬이다. 근데 한 번에 들어온 여러 idx에 중복이 있다면?

 

Embedding layer 역전파

dW에 할당이 아닌 +를 해야 중복된 idx의 미분값들이 가중치 업데이트 시 모두 반영될 수 있음

 

  2. 은닉층-출력층 행렬곱과 Softmax 계산

 

     다중분류이기 때문에 일어나는 문제점이다!! 다중분류를 이진분류로 바꿔서 간단하게 생각해보면

다중분류를 이진분류로 생각해보기

 

      확률값을 뽑을 때 정답인 say에 대한 건 무조건 뽑아야되는 것 같은데.. 나머지는 모두 다 가지고 가야되나?

 

  Negative sampling

      (정답인 경우의 이진분류 + 샘플링된 정답이 아닌 경우)로 충분히 학습할 수 있다!

 

따라서 위 그림처럼 정답인 경우와 샘플링된 정답이 아닌 경우들에 대해서만 은닉층-출력층 사이에 Embedding 계층을 사용하고, softmax를 sigmoid로 대체한다!

 

 Negative sampling기법

  -> 모든 단어가 균일한 확률로 sampling되면, 우연히 희소한 단어가 sampling되었을 때 학습결과가 나빠질 것이다

  -> 따라서 말뭉치에서 각 단어의 출현 횟수 확률분포로 sampling한다

 

   -> 확률분포에 0.75를 제곱해 확률이 낮은 단어의 확률을 살짝 더 높인다

 

skip gram 모델

 

CBOW와 반대로 단어로부터 맥락을 예측한다!

  -> CBOW 한 윈도우를 한 번 학습하지만, Skip-gram은 한 단어로 Context Token을 모두 예측하는 방식이라 학습 횟수가 더 많아 느리다

  -> 하지만 CBOW처럼 분산표현을 평균내는 부분이 없어 희소한 단어에 더 좋은 성능을 보여준다

  

 


Pre-trained Word Embedding

 

GloVE

  - 기존의 표현법에서 사용한 문서 내 모든 단어의 통계 정보와 Word2vec의 Local Context Window 정보를 동시에 사용하는 모델링

 

fasttext

  - 1개의 word에 대한 vector로 n-gram character에 대한 vector 평균을 사용

 

BERT

  - 문맥에 따라 단어의 Embedding Vector가 바뀔 수 있는 Contextual Embedding 사용

 

 

 

 모델링 방법들 뿐만 아니라 "잘 만들어 놓은 큰 Corpus" 역시 중요하기 때문에 큰 기업이 만든 Pre-trained Word Vector를 가져다 쓰는 것이 NLP연구를 하는 데 꼭 필요한 요소이다!

 

 

 

 

 

반응형