일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 부스트캠프 AI테크
- BOXPLOT
- Numpy
- pivot table
- 표집분포
- Python
- 정규분포 MLE
- VSCode
- python 문법
- type hints
- subplot
- 카테고리분포 MLE
- ndarray
- Operation function
- Comparisons
- boolean & fancy index
- Python 특징
- scatter
- groupby
- 최대가능도 추정법
- dtype
- namedtuple
- seaborn
- Numpy data I/O
- Python 유래
- 딥러닝
- linalg
- 가능도
- unstack
- Array operations
- Today
- Total
또르르's 개발 Story
[16] NLP 종류 / Bag-of-Words / Word Embedding 본문
1️⃣ NLP 종류
NLP는 Natural language processing의 약자로 사람들이 일상적으로 쓰는 언어를 뜻합니다.
NLP는 컴퓨터가 주어진 단어나 문장, 긴 문단을 이해하는 Nautral Language Understanding (NLU)와 자연어를 생성하는 Nautral Language Generating (NLG)로 구성됩니다.
1) Natural language processing
- Low-level parsing
- Tokenization : 토큰화 ( token이라 불리는 단위로 나누는 작업을 뜻함)
token의 개념은 의미, 단어 등 여러 가지로 사용될 수 있습니다. - Stemming : 다양한 의미변화를 없애고 그 의미만을 보존하는 단어의 어근을 추출하는 것
언어는 어미의 변화가 변화무쌍합니다. 예를 들어,
하늘이 맑다
하늘이 맑은데
하늘이 맑지만
하늘이 맑고
다양하게 변할 수 있습니다.
이러한 수많은 어미의 변화 속에서도 그 단어들이 모두 같은 변화를 나타낸다는 것을 컴퓨터가 이해할 수 있어야 합니다.
- Tokenization : 토큰화 ( token이라 불리는 단위로 나누는 작업을 뜻함)
- Word and pharse level
- NER : 단일 단어 혹은 여러 단어로 이루어진 고유명사를 인식하는 task
- POS : Word들이 문장 내에서의 품사(부사, 형용사, 명사)나 성분이 무엇인지 알아내는 task
- Noun-phrase chunking
- Dependency parsing
- Coreference resolution
- NER : 단일 단어 혹은 여러 단어로 이루어진 고유명사를 인식하는 task
- Sentence level
- Sentimentation analysis : 가진 문장이 긍정 또는 부정인지 예측하는 task
ex) I like movie - 긍정, I hate movie - 부정, This movie is not bad - 부정 아님 - Machine translation : 번역
어순을 고려하는 것이 중요
- Sentimentation analysis : 가진 문장이 긍정 또는 부정인지 예측하는 task
- Multi-sentence and paragraph level
- Entailment prediction : 두 문장 간의 논리적인 내포 혹은 모순 관계를 예측
"어제 John이 결혼을 했다" , "어제 최소한 한 명은 결혼을 했다"
두 문장 간에는 첫 문장이 참인 경우에 두 번째 문장은 자동으로 참입니다.
하지만 "어제 한 명도 결혼하지 않았다"는
"어제 John이 결혼을 했다"와 양립할 수 없는 논리적으로 모순관계를 가지게 됩니다. - Question answering
ex) Google에서 예전에 문장이 들어간 정보만 찾아주었다면, 질문의 의도를 정확히 파악하고 검색 결과를 정확히 나타내 주는 것 - Dialog systems
ex) 챗봇과 같이 대화를 수행 - Summarization
ex) 주어진 문장 (뉴스 등)을 한 줄 형태로 요약
- Entailment prediction : 두 문장 간의 논리적인 내포 혹은 모순 관계를 예측
2) Text Mining
- 빅데이터 분석과 연관
텍스트 및 문서 데이터에서 유용한 정보를 추출합니다. - Document clustering (Topic modeling, 문서 군집화)
다른 의미이지만 비슷한 의미를 가지는 keyword를 그룹핑해서 분석해야 되는데 이 것을 자동화해서 사용하는 기법 - Social science와 연관
SNS, Media data 등에서 사람들의 성향을 파악할 수 있습니다.
3) Information retrieval (정보 검색)
- 구글이나 네이버에서 사용되는 검색 기술을 주로 연구하는 분야
- 추천 시스템으로 진화
2️⃣ Bag-of-Words
1) Bag-of-Words
Bag-of-Words는 Text mining 분야에서 딥러닝이 적용되기 이전에 많이 활용되던 단어 및 문서를 어떤 숫자 형태로 나타내는 가장 간단한 기법입니다.
- STEP 1 : 사전에 unique word를 등록

- STEP 2 : One-hot vector로 encoding

- STEP 3 : Bag-of-Words vector (The sum of one-hot vectors)로 나타냄

One-hot vectors의 합을 Bag-of-words vector라고 부르는 이유는 vocabulary 상에 존재하는 각 word별로 bag를 준비하고 특정 문장에서 나타난 word들에 순차적으로 bag에 넣어준 후, 최종적으로 각 차원에 해당하는 word들의 수를 세서 최종 vector로 나타내기 때문입니다.
2) NaiveBayes Classifier
이런 Bag-of-Words vector를 정해진 category 또는 Class로 분류하는 작업을 NaiveBayes Classifier라고 합니다.
NaiveBayes Classifier를 구하는 식은 아래와 같습니다.
- : class 개수
- : document
- : document가 주어졌을 때, 해당 class 가 속해있을 확률
- : 문서 가 뽑힐 확률
가 가장 높은 값을 가졌을 때 그때의 를 택하는 방법입니다. Bayes Rule을 사용했습니다.

는 특정 확률분포를 나타내며, 상수로 나타낼 수 있기 때문에 무시할 수 있습니다.
를 아래 식과 같이 표현할 수 있습니다.
이때, 를 단어들의 Sequence 로 표현할 수 있으며,
가 고정되어 있고 이 모두 독립이라고 가정했을 때, 곱의 형태로 표현할 수 있습니다.

예를 들어, 아래와 같은 document와 class가 존재할 때, "Classification task uses transformer"라는 문장의 class 를 구하는 문제입니다.

Class의 확률분포 는 다음과 같습니다.
(각각의 class는 2개, 2개로 등장을 할 수 있기 때문에 1/2, 1/2)

이제 각각의 Class에 대해 Word의 확률분포를 구합니다.
CV Class에서는 task는 한 번만 등장했기 때문에 1/14로 추정할 수 있습니다. (14는 CV Class의 총 word 수)
하지만, NLP Class에서는 task가 두 번 등장했기 때문에 2/10로 추정할 수 있습니다. (10은 NLP Class의 총 word 수)
나머지 확률도 구하면 아래 표와 같습니다.

각 word가 독립적이라고 가정했을 때, document " “Classification task uses transformer"는 어떤 Class에 속하는지 추론할 수 있습니다.

3️⃣ Word Embedding
Word Embedding은 각 단어들을 vector로 변환해주는 기법입니다.
Word Embedding에서 중요한 점은 비슷한 의미를 가지는 word가 좌표상에서 비슷한 위치의 vector로 mapping 되도록 표현해야 합니다.
ex) cat, kitty는 short distance / cat, hamburger는 far distance
1) Word2Vec

Word2Vec은 word embedding 방법 중 가장 대표적인 방법입니다.
Word2Vec은 비슷한 문맥의 단어들은 비슷한 의미를 가진다는 가정을 가집니다.
예를 들어, 아래 두 개의 문장이 있습니다.
The cat purrs.
The cat hunts mice.
cat은 "The", "purrs" / "This", "hunts", "mice"와 높은 관련성을 가진다는 것을 알 수 있습니다.
따라서 cat 주변에 나타나는 단어들의 확률분포를 예측할 수 있습니다.

Word2Vec 알고리즘은 다음과 같은 순서로 동작합니다.
- STEP 1 : Sentence tokenization 수행
ex) Sentence : "I study math." - STEP 2 : Unique 한 단어들만 모아서 vocabulary 생성
ex) Vocabulary : {"I", "study", "math"} - STEP 3 : One-hot vector로 변경
ex) "study" [0,1,0] - STEP 4 : Sliding window를 사용해서 한 word를 중심으로 앞 뒤로 나타난 각각의 word와 입출력 단어 쌍을 구성
ex) I => (I, study)
study => (study, I), (study, math)
math => (math, study) - STEP 5 : 입출력 단어 쌍들에 대해 예측 task를 수행하는 neural network 생성
입력은 one-hot vector로 들어가게 됩니다.
hidden layer의 개수는 hyper parameter(사용자가 정함)
만약, Input vector가 [0,1,0]이면 => hidden layer는 2개 => ouptut layer는 3개 형태로 나올 수 있습니다.

Word2Vec은 유사한 word끼리 유사한 방향을 보입니다.
즉, vector의 방향은 비슷한 관계성을 보인다는 것을 알 수 있습니다.
- Man -> Woman
- Uncle -> Aunt
- King -> Queen
위의 vector들 모두 다 남성과 여성의 관계를 나타낼 때 같은 방향을 보이는 것을 알 수 있습니다.

2) Glove
Glove의 특징은 입출력 단어 쌍들에 대해서 학습 데이터의 두 단어가 한 윈도우 내에서 총 몇 번 동시에 등장했는지를 사전에 미리 계산합니다. 이를 통해, 동일한 단어 쌍에 대한 훈련을 반복적으로 하는 것을 피합니다.
따라서 Glove는 새로운 Loss function을 사용합니다.
입력 word의 embedding된 vector 와 출력 word의 embedding vector 의 내적 값과,
한 윈도우 내에서 동시에 몇 번 나타났는가를 나타내는 에 값을 취해서,
와 의 값이 최대한 가까워질 수 있도록 loss function 사용합니다.

Glove 모델을 통해 vector들의 방향을 따져봤을 때 비슷한 관계를 가지는 단어들은 비슷한 모양을 가진다는 것을 알 수 있습니다.

'부스트캠프 AI 테크 U stage > 이론' 카테고리의 다른 글
[18] Sequence to Sequence with Attention (0) | 2021.02.17 |
---|---|
[17] RNN, LSTM, GRU 정리 (2) (0) | 2021.02.16 |
[15] Generative Models (0) | 2021.02.05 |
[14-1] Transformer 이해하기 (1) (0) | 2021.02.04 |
[14] RNN, LSTM, GRU 정리 (1) (0) | 2021.02.04 |