ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [09.06] NLP - Bag of Words & Word Embedding
    네이버 부스트캠프 AI Tech 2기 2021. 9. 14. 14:27
    반응형

    🗣 Introduction → NLP!!

    학문 분야와 최근 발전 동향

    [NLP 분야]

    NLU : 컴퓨터가 주어진 단어나 문장, 글을 이해하는 Understanding

    NLG : 자연어를 상황에 따라 적절히 생성하는 Generation

    대표적인 학회 : ACL, EMNLP, NAACL

    분야

    • Language Modeling : 현재 문장, 문단 일부로 다음 단어를 예측하는 모델
    • Machine Translation : 기계 번역
    • Question Answering : 질의 응답
    • Document Classification : 문서 분류
    • Diaglog Systems
    • Etc.

    1. Low-Level Parsing

    어떠한 문장이 있을때, 각 단어들을 정보 단위로 생각할 수 있다. 여기서 이런 단어들을 토큰 이라고 부른다. 주어진 문장을 이런 단어(토큰) 단위로 쪼개나가는 과정을 Tokenization이라고 부른다. 이로써, 하나의 문장은 이런 토큰들의 연속인 Sequence로 볼 수 있다. 하나의 단어에서 어미의 변화로 다양한 의미가 바뀌게 된다.(예를 들어, 맑은, 맑고, 맑지만 등등) 이런 어미의 변화가 있음에도 하나의 뜻을 의미한다는 것을 컴퓨터가 이해할 수 있어야하고, 이런 의미 변화를 없애고 고유의 의미만 남겨 어근을 추출하는 것을 Stemming이라고 한다.

    2. Word and Phrase Level

    Named Entity Recognition 같은 고유 명사를 인식하는 작업, Part-of-Speech 는 단어들이 문장 내에서 어떤 품사나 성질(형태소)인지 알아내는 Task이다. Noun-Phrase Chunking, Dependency Parsing, Coreference resolutoin 등등

    3. Sentence Level

    Sentiment Anaylsis 같은 문장의 감정을 분석하는 Task, Machine Translation 같은 기계 번역 등등

    4. Multi-Sentence and Paragraph Level(다수 문장, 문단 단위)

    Entailment Production 은 두 문장간의 논리적 내포, 모순 관계를 예측한다. Question Answering은 독해기반의 질의 응답이다. Dialog System은 챗봇과 같은 대화를 할 수 있는 기술, Summarization은 예를 들어 뉴스 문서를 자동으로 한줄로 정리해주는 기술이다.

    5. Text Mining(학회 : KDD, The WebConf, WSDM, CIKM, ICWSM)

    어떠한 문서의 데이터나 문장에서 insights를 도출하거나 유용한 정보들을 추출하는 작업이 있을 수 있고, Document Clustering 같이 (ex. topic modeling) 문서 군집화를 통해 세부적인 요소들을 분석하고 요구하는 것들이 어떠한 것들이 있는지 자동으로 빠르게 추출해낼 수 있다. 빅데이터 분석에 기반한 Computational Social Science 같이 SNS 에서 어떤 신조어, 내용들이 있는지 분석하고 사람들의 여러 insights를 발견하는데 사용될 수 있다.

    6. Information Retrieval(학회 : SIGIR, WSDM, CIKM, RecSys)

    구글이나 네이버에 사용하는 검색 기술을 연구하는 분야이다. 이미 검색 기술은 많이 성숙하다고 할 수 있다. 하지만, 검색의 새로운 분야로 추천 시스템이 있는데, 사용자의 정보를 토대로 유용한 정보를 추천해주는 시스템들이 있을 것이다. 이분야는 상업적으로도 임팩트가 크고 많이 활용되는 분야이다.

    발전 과정

    CV 분야와 더불어 가장 발전하고 있는 분야이다. 자연어 처리 분야는 조금 느리지만, 현재까지 꾸준히 발전해오고 있다.

    머신러닝 딥러닝은 숫자 형태의 데이터를 필요로하기 때문에, 주어진 텍스트를 단어 단위로 분류하고 각 단어특정 Dimension(차원 벡터)로 표현하게 된다. 이를, Word - Embedding이라고 부르게 된다.

    단어들을 연속적인 벡터 형태로 나타낼 때, 이는 특정 순서를 통해 나열된 것으로 볼 수 있고 일종의 Sequence를 따른다고 볼 수 있다. 즉, Sequence는 순서 정보를 포함하기 때문에 같은 단어를 다르게 조합해도 뜻이 다르다는 것을 기계가 인식할 수 있어야 한다. 이런 Sequence 데이터를 처리하는데 특화된 모델로써 RNN이 딥러닝의 핵심 모델로 자리잡았다. 그리고 LSTM, GRU로 진화했다.

    최근에는 Google에서 'Attention is All you need' 라는 논문이 나오게 되면서, 기존에 RNN 기반의 모델을 Self-Attention이라고 부르는 모듈로 대체할 수 있는 Transformer가 나오게 되었다.

    현재 대부분 자연어 처리 모델은 이 Transformer 모델을 기반으로 하고 있다. 이 Transformer는 처음 기계 번역을 위해 고안이 되었고, 성능이 월등히 좋기 때문에 현재는 CV, 시계열 예측, 신약 개발 등등 다양한 분야에 활발히 적용되어 성능 향상을 이끌고 있다. 과거에는 NLP에서 다양한 Task 별로 특화된 모델들이 개발되어 왔지만, 현재는 Self-Attention모듈을 을 기반으로해 모델을 쌓아나가고 이 모델을 대규모 Text 데이터를 통해 자가지도 학습을 통해 학습하고 사전에 학습된 모델을 큰 구조 변경 없이, Transfer Learning을 진행했을때, 기존 모델들보다 월등히 높은 성능을 보이고 있는 것이 현 추세이다.

    이런 자가지도 학습을 통해 Pre-Trained 모델의 예시로 , BERT, GPT1, 2, 3 등등이 나오게 되었고 이는 인공지능에 범용적으로 적용할 수 있도록 발전하였다. 하지만, 엄청난 양의 데이터를 학습시키기 위해서는 대규모 Resource가 필요하다. 그래서 소수의 대기업에서만 활발히 연구가 진행되고 있다.

    Bag of Words

    목적 : 단어를 벡터로 표현하는 방법, 문장을 벡터로 표현하는 방법을 공부하자!

    (Bag of Words는 단어 표현에 있어 one-hot-encoding을 이용한다. 그리고 단어의 등장 순서에 고려하지 않는 아주 간단한 방법이다.)

    단어를 숫자형태로 표현하자!

    1. 주어진 문장들에서 단어를 추출해 일종의 단어 사전을 만든다.(중복 제거)

    1. 각각의 단어를 One-Hot Vector로 표현한다.
      • WordEmbedding과는 달리 어떤 단어쌍간에 거리가 √2 이다.(유클라디안 거리)
      • 내적값, Similarity는 0이다. (의미는 상관없이 동일한 관계로 표현된다는 것을 의미한다.)
    2. → 각각의 단어를 범주형 변수로 볼 수 있고, one-hot vector 형태로 표현할 수 있다.

    1. 하나의 문장/문서를 one-hot vector의 합으로 표현할 수 있다.
    2. → 각 문장에 있는 단어들의 One-hot vector를 다 더해서 문장을 하나의 Vector로 표현하고 문장과 문단을 표현할 수 있게되고 이를 Bag of Words Vector라고 부른다.

    Naïve Bayes Document Classification

    가정 : 하나의 문서 d(document)와 c 개의 분류 class 들(Document의 종류들일 것)이 있다.

    가장 위의 조건부 확률 P(c|d) 는 문서가 각 클래스에 속할 확률로 표현할 수 있고, 이런 조건부 확률 분포는 가장 높은 확률을 가지는 클래스 c 를 통해 선택할 수 있다.

    다시 Bayes Rule에 대해서 나타낸다. P(d) 는 문서 d 가 뽑힐 확률을 의미한다. d 라는 문서가 고정된 하나의 문서이기 때문에, 상수값으로 볼 수 있다. 그리고 이 상수값은 argmax 연산에서 무시할 수 있게 된다. 그래서 최종적인 수식이 탄생한다.

    P(d|c) : 특정한 카테고리 c 가 고정이 되었을 때, 문서 d 가 나타날 확률이다.

    P(d) = P(w1, w2 .... wn | c) 로 다시 표현된다. (문서 d는 word1 → wordn 까지 동시에 나타나는 동시 사건으로 볼 수 있다. c가 고정되어 있는 경우 각 단어가 나타날 확률이 독립이라고 가정할 수 있다면, 각 단어가 나타낼 수 있는 확률을 모두 곱한 형태로 나타낼 수 있다.

    Example

    결과 : 둘중에 어느 확률 값이 더 큰지 판단하고 이를 통해서 최종 Class를 예측할 수 있게 된다.

    (추가 : P(c), P(w|c) 이런 파라미터 추정 방식은 MLE라고 부르는 수식의 유도 과정을 통해 도출이 된다.)

    Word Embedding

    : 자연어가 단어를 정보의 기본단위로 해서, 문장을 단어들의 연속이라고 보고 각 단어들을 특정 차원으로 이루어진 공간의 하나의 점, 좌표를 나타내는 벡터로 변환해주는 기술

    과정

    텍스트 데이터 셋을 학습 데이터로 주고 좌표 공간의 차원수 dimension 수를 사전에 정해두고 Word Embedding 의 입력으로 주게되면, 학습이 완료된 이후 해당하는 좌표 공간 상에서 학습 데이터에서 나타난 각 단어의 최적의 좌표값, 벡터 표현형출력으로 내준다.

    기본 아이디어

    비슷한 의미를 가지는 단어가 벡터 공간 상에 비슷한 위치의 점으로 매핑되도록 함으로써 단어들의 의미상의 유사도를 잘 반영한 벡터 표현을 다양한 자연어처리 Task에 제공해주는 역할을 한다.

    Word2Vec

    : 비슷한 의미를 가지는 단어들을 비슷한 좌표공간으로 표현해주기 위해서 Word2Vec 이라는 알고리즘을 활용하는데, 같은 문장에서 나타난 인접한 단어들 간에 의미가 비슷할 것이라는 가정을 사용한다.

    한 단어가 주변에 등장하는 단어들을 통해 그 의미를 알 수 있을 것이다. 학습 데이터를 바탕으로 하나의 단어 주변에 나타나는 단어들의 확률 분포를 예측하게 된다. 구체적으로 하나의 단어를 입력으로 주고 주변 단어들은 숨겨놓은 채 이를 예측하는 방식으로 Word2Vec이 학습하게 된다.

    "Cat" 이라는 단어 주변에서는 "meow", "fleas" 같은 단어들이 높은 확률로 나타난다는 것을 알 수 있다.

    모델 구조와 학습 방식

    1. 주어진 문장을 Tokenization을 진행한다.
    2. Unique 한 단어들을 가지고 사전을 구축한다.
    3. 사전의 각 단어들은 사전의 Size 만큼의 Dimension을 가지는 One-Hot Vector 형태로 이루어진다.
    4. Sliding Window라는 기법을 통해, 한 단어를 중심으로 앞 뒤로 나타난 Word들과 입력 Word 로 구성하게 된다. (Window Size : 3 → 앞 뒤로 한단어 씩만 그래서 쌍이 2개 생긴다. 무슨 말이냐면, I Study math라는 문장에서 중심 단어가 Study라고할때, (I, Study), (Study, math) 이렇게 두개의 쌍이 생길 것이다. )
    5. 이렇게 쌍으로 만들어진 단어 조합들을 학습 데이터로 구성할 수 있게 된다.
    6. 이런 많은 입력 단어 쌍들에 대해 예측 Task를 수행하는 2 Layer Neural Network를 구성한다. 각 단어가 사전 Size만큼에 해당하는 Dimension의 One-Hot Vector로 나타나기 때문에, 입력 Layer와 출력 Layer의 노드 수는 Dimension만큼이 된다. Hidden Layer의 Node 수는 사용자가 정하는 Hyperparameter로 정할 수 있게 된다.

    아래 사진은 강의를 듣고 나서, 직접 다시 상기 및 정리하면서 글을 쓰겠다.

    우선, "I study math."라는 문장이 주어질때, Vocabulary에는 Unique하게 단어가 들어가니 총 3개의 단어가 들어갈 것이고, Dimension또한 3일 것이다. 그렇다면, Input, Output Layer또한 Vocabulary Dimension과 동일한 3일 것이다. Hidden Layer 같은 경우 위에 예시를 보면 2로 설정해 놓은 것을 볼 수 있다.

    Window Size 만큼 쌍을 만든다고 했다. (I, study), (study, I), (study, math), (math, study) 이렇게 pair 가 생기는 것을 알 수 있다. 이중 (study, math) 만으로 예시를 설명한다.

    Input으로 들어가는 것은 study일 것이다. 이는 one-hot vector로 표현되어 있고, output은 math이고 이또한 one-hot vector로 표현되어 있을 것이다. 두개의 W1, W2 parameter를 학습해야하는데, 기본적으로 W1의 shape은 (hidden layer dimension, vocabulary dimension) 일 것이고, W2 는 (vocabulary dimension, hidden layer dimension)일 것이다. 그래야 곱셈이 가능하다.

    재밌는 점은 input data는 one-hot vector이다보니 W1과 연산을 할때, 해당 index부분만 취하면 된다. 여기를 embedding layer라고 부른다고 한다. 실제로 연산을 할때도 전부 계산하는 것이 아닌 index 부분의 column만 취한다고 한다.

    softmax layer를 거쳐 확률분포 값을 나타낼 수 있도록 바꾸어준다. 그리고 최종적으로 output 단어인 math의 one-hot vector와 ground truth 비교하고 다시 학습이 진행된다. softmax를 거치기 이전에 ground truth 의 output 단어의 index 부분은 양의 무한대로 갈수록 좋고 나머지는 -무한대로 갈 수록 학습이 잘 진행된다고 볼 수 있다. 아래는 Weight Matrix의 inut vector와 output vector이다. 여기서 drink라는 단어의 output vector와 juice라는 단어의 input vector는 강한 유사성을 지닌다고 볼 수 있게 됩니다.

    여기서 어느 것을 최종적인 Word Embedding을 사용할지 상관은 없지만, 보통은 Input Vector 즉, W1을 선택한다고 한다.

    학습된 Word2Vec은 단어들의 의미론적 관계를 Vector 공간에 잘 학습한 것을 알 수 있다.

    신기한 점은 2차원으로 Vector를 축소해서 표현했을때, 벡터의 연산으로 단어들 사이의 비슷한 특성을 지닌다는 사실을 알 수 있다.

    Word2Vec을 통한 흥미로운 Task → Intrusion Detection : 여러 단어들이 주어질때, 이중 나머지 단어들과 가장 상이한 단어를 찾아내는 Task이다. 단어별로 나머지 단어들과 유클라디안 거리를 계산하고 그 거리들을 평균 값을 내고, 그 평균 거리가 가장 큰 단어를 고르면 된다.

    GloVe

    : 이 모델과 Word2Vec 모델과의 가장 큰 차이점은 각 입력, 출력 쌍들에 대해서 학습 데이터에서 두 단어가 한 윈도우에서 총 몇번 동시에 등장했는지에 대해서 사전에 계산을 하고 → Pij 이다. 입력 Word의 임베딩 벡터 ui^T와 출력벡터 vj의 내적 값이 log(Pij)의 값에 가까워질 수 있도록 새롭게 fitting시키는 loss 함수를 취하게 된다.

    Word2Vec 같은 경우에는 Word Embedding이 학습이 진행될 수록 커지도록 되는 것이라면, GloVe 같은 경우에는 미리 동시에 등장하는 단어쌍들의 횟수를 계산하고 log 를 사용해서 ground truth로 사용해서 중복되는 계산을 줄여주는 것이 특징이다.

    반응형
Designed by Tistory.