4. l 딥러닝과 챗봇
TensorFlow
머신러닝과 딥러닝을 위한 고성능 수치 계산 라이브러리
Data Flow Grape를 사용하여 수치를 계산함
한 개 이상의 CPU 또는 GPU를 사용하며, 파이썬 기반으로 동작함
Data Flow Grape
노드(Operation)과 엣지(Tense)들의 형태로 연산되어 동작하는 방식
1. Tensorflow basic
158
5. l 딥러닝과 챗봇
TensorFlow 설치
TensorFlow 실습
$ sudo apt-get install python-pip python-dev
# Ubuntu/Linux 64-bit, CPU only, Python 3.5
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.11.0rc0-cp35-c
p35m-linux_x86_64.whl
# Ubuntu/Linux 64-bit, GPU enabled, Python 3.5
# Requires CUDA toolkit 7.5 and CuDNN v5. For other versions, see "Install from sources" below.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.11.0rc0-cp35-c
p35m-linux_x86_64.whl
$ sudo pip install --upgrade $TF_BINARY_URL
1. Tensorflow basic
159
6. l 딥러닝과 챗봇
TensorFlow 문법
Placeholder : 데이터의 형태만 지정하고 실제 데이터는 실행 단계에서 입력받도록 하는 방법
Tensor : Python의 Array 같은 개념
Rank : 차원 수
Shape : Array의 element 개수
Type : tensor의 타입
1. Tensorflow basic
160
11. 2. Word vector representation
l Word Representations : 단어를 수치화된 방식으로 표현
Bag of Words Model
one-hot encoding 방법을 적용
단어집합 내에서 각각의 단어가 엄청난 벡터로 표현됨
사전이 [감자, 딸기, 사과, 수박] 이라면 사과를 표현하는 벡터는 [0, 0, 1, 0] 이 되는 방식
단어가 본질적으로 다른 단어와 어떤 차이점 즉, 문맥에 대한 정보를 활용하지 못함
Word Embedding
원하는 차원을 가지는 하나의 벡터로 표현
수많은 corpus에서 딸기를 표현하는 벡터는 [0.4, -0.11, 0.55. . . . 0.1, 0.02]이 되는 방식
Co-occurrence Matrix with SVD
word2vec (Google)
Global Vector Representations (GloVe) (Stanford)
165
12. l Word Representations : 단어를 수치화된 방식으로 표현
Co-occurrence Matrix with SVD
단어를 중심으로 window size만큼의 주변 단어 출현 횟수를 계산하여 벡터를 표현하는 방법
Co-occurrence Matrix
[‘나는 너를 좋아한다.’, ‘나는 자는 것을 좋아한다.’, ‘나는 여행을 즐긴다.’]
Window size가 1인 co-occurrence Matrix
각 행들이 단어의 벡터로 사용
단어의 개수가 많아지면, 벡터가 엄청 커지게 됨(단어 수 만큼)
나는 너를 좋아한다 자는 것을 여행을 즐긴다
나는 0 1 0 1 0 1 0
너를 0 0 1 0 0 0 0
좋아한다 0 0 0 0 0 0 0
자는 0 0 0 0 1 0 0
것을 0 0 1 0 0 0 0
여행을 0 0 0 0 0 0 1
즐긴다 0 0 0 0 0 0 0
2. Word vector representation
166
13. l Word Representations : 단어를 수치화된 방식으로 표현
SVD (Singular Value Decomposition)
고차원의 벡터의 활동성이 높은 축은 유지하면서 차원을 축소하는 기법
2. Word vector representation
167
14. l Word Representations : 단어를 수치화된 방식으로 표현
Co-occurrence Matrix with SVD (실습)
Corpus : I like deep learning. I like NLP. I enjoy flying.
2. Word vector representation
168
15. l Word Representations : 단어를 수치화된 방식으로 표현
Co-occurrence Matrix with SVD (실습)
문제점
단어의 수만큼 Co-occurrence Matrix가 커짐 [시간복잡도 : O(𝑚𝑛#
)]
새로운 텍스트 데이터를 사용할 경우 다시 계산해야 됨
2. Word vector representation
169
16. l Word Representations : 단어를 수치화된 방식으로 표현
Word2Vec
단어의 벡터 표현을 위해 다양한 방법들을 적용하여 최적화 해낸 패키지
한 단어에 대해 근처(전후 5-10단어 정도)에 출현하는 다른 단어들(맥락)을 인공신경망에 학습 시킴
연관된 의미의 단어들은 문서 상에서 비슷한 맥락에서 출현할 가능성이 높기 때문에 학습을 반복해 나가는 과정에서 두
단어는 점차 가까운 벡터를 지니게 됨
2. Word vector representation
170
17. l Word Representations : 단어를 수치화된 방식으로 표현
Word2Vec 설명
토큰 동해물 과 백두산 이 마르고 닳도록
인덱싱 2130 3925 312 49 1222 50
2. Word vector representation
171
18. l Word Representations : 단어를 수치화된 방식으로 표현
Glove : 구글에서 발표한 단어를 표현하는 방법
Word2vec와 Glove 차이점
Word2Vec는 예측 기반의 모델
문맥 단어로부터 예측하려고 하는 타겟 단어의 확률을 향상시키는 방향으로 접근
Glove는 빈도 기반의 모델
co-occurence matrix에서 차원을 축소시키는 벡터를 구하는 방향으로 접근
Marco saw a furry little wampimuk hiding in the tree.
Word2vec:
$
%
#
%
&
%
%
%
%
%
&
%
#
%
$
%
GloVe:
$
%
$
&
$
#
$
$
$
$
$
#
$
&
$
%
2. Word vector representation
172
19. l Word Representations : 단어를 수치화된 방식으로 표현
gensim Word2Vec
2. Word vector representation
173
20. l Word Representations : 단어를 수치화된 방식으로 표현
gensim Word2Vec
2. Word vector representation
174
23. l CNN(Convolutional Neural Network)
특징점(중요한 부분은 가져가고 불필요한 부분은 제거)하여 학습하는 인공신경망
CNN은 Convolution Pooling, ReLUs Layer, Fully Connected로 구성되어 있음
3. Deep Learning
177
24. l CNN(Convolutional Neural Network)
목표 : X라는 이미지가 있을 때, X로 분류되고 O라는 이미지가 있을 때 O로 분류하는 것
전통적인 방법 픽셀의 위치로 비교하게 되면 아래 그림과 같은 것은 동일하게 분류하기 힘듦
3. Deep Learning
178
25. l CNN(Convolutional Neural Network)
아래와 같이 다양한 상황에서도 분류를 할 수 있어야 함
CNN은 학습 이미지를 조각마다 비교함으로써, 특징들을 감지하고 저장해놓음
1 -1 -1
-1 1 -1
-1 -1 1
-1 -1 1
-1 1 -1
1 -1 -1
1 -1 1
-1 1 -1
1 -1 1
3. Deep Learning
179
26. l CNN(Convolutional Neural Network)
Convolution Layer
필터 1번의 Convolutional하면 다음과 같이 계산을 진행함
3. Deep Learning
180
27. l CNN(Convolutional Neural Network)
Convolution Layer
연속적으로 x 이미지를 넣으면 다음과 같이 값이 표현이 됨 (1일수록 일치, 0일수록 불일치)
3. Deep Learning
181
28. l 딥러닝과 챗봇
Convolution Layer (CNN)
새로운 x가 들어왔을 때, 이미지에 필터를 곱해버리면 output이 생성
3. Deep Learning
182
29. l 딥러닝과 챗봇
Pooling (CNN)
Convolution Layer의 결과에서 Window size만큼을 가져와 max값을 선택
3. Deep Learning
183
30. l 딥러닝과 챗봇
ReLus (CNN)
입력 값이 0보다 크면, 입력 값을 반환하고 0보다 작거나 같으면 0을 반환
마이너스 값을 제거하기 위해 사용
3. Deep Learning
184
32. l 딥러닝과 챗봇
Fully Connected Layer (CNN)
Backpropagation
은닉층에서 사용되는 가중치의 값을 오류가 낮게끔 가중치를 수정해 나가는 방법
Right answer Actual answer Error
X 1 0.92 0.08
O 0 0.51 0.49
Total 0.57
3. Deep Learning
186
33. l 딥러닝과 챗봇
Convolutional Neural Networks for Sentence Classification
이미지의 픽셀 대신 word2vec 또는 glove와 같은 word embedding을 통해 나온 값을 input 값으로 넣어 학습시키는 CNN
n
k
h
n : 문장에 나오는 단어의 개수, k : word embedding 차원, h : 필터 윈도우 사이즈
3. Deep Learning
187
34. l Word2Vec + CNN Text Classifier
- 데이터를 전처리한다.
- 학습 셋과 테스트셋을 분리한다.
- word2vec embedding 결과를 학습 셋의 전처리 단계에 적용한다.
- cnn을 돌리면서 labeling 결과에서 축소되는 방향으로 학습시킨다.
3. Deep Learning
188
35. l Word2Vec + CNN Text Classifier
3. Deep Learning
189
36. l Word2Vec + CNN Text Classifier
3. Deep Learning
190
37. l Word2Vec + CNN Text Classifier
3. Deep Learning
191
38. l Word2Vec + CNN Text Classifier
3. Deep Learning
192
39. l Word2Vec + CNN Text Classifier
3. Deep Learning
193
40. l Word2Vec + CNN Text Classifier
3. Deep Learning
194
41. l Word2Vec + CNN Text Classifier
3. Deep Learning
195
42. l Word2Vec + CNN Text Classifier
3. Deep Learning
196
43. l RNN
현재 입력에 대한 결과를 과거 정보를 고려하여 학습함
Sigmoid함수로 thnh, ReLU를 사용(첫번째 hidden state는 0으로 초기화)
3. Deep Learning
197
44. l RNN
Truncated BPTT or Vanishing Gradient
- 단어를 유추하기 위한 문맥이 가까울 때는 학습이 잘되지만, 멀어질수록 문맥 학습이 안됨
- The clouds are in the sky에서 sky라는 단어는 The clouds are in the만 보더라도 유추 가능함
- I lived in France for 10 years. Therefore, I speak French well에서 French를 유추하기 위해서는 프랑스가 필요함
3. Deep Learning
198
45. l LSTM
조건 게이트의 연산을 통해 RNN의 단기 기억 능력을 향상시킨 인공신경망(1000단계까지)
- Input gate, forget gate, Output gate로 구성됨
3. Deep Learning
199
46. l LSTM
Forget gate
- 나는 스티브 잡스를 좋아한다. 그는 애플의 창업주이다. (스티브 잡스를 유지하여 그 라는 것을 생성해낼 수 있음)
- 입력 데이터와 전 데이터를 보고 과거 데이터들를 셀에 유지할지 저장할지를 진행함 (0이면 제거, 1이면 유지)
Input gate
- 어떤 새로운 정보를 셀 상태에 저장하고 선택함
- 새로운 후보 값들의 벡터를 만들고 갱신할 값이라면 연산을 통해 합침
- 나는 스티브 잡스를 좋아한다. 그는 애플의 창업주이다. (스티브 잡스를 셀 상태에 저장)
3. Deep Learning
200
47. l LSTM
Output gate
- 과거 셀 상태를 현재 업데이트 된 셀 상태로 결정
- 나는 스티브 잡스를 좋아한다. 그는 애플의 창업주이다. (스티브 잡스, 그 업데이트)
3. Deep Learning
201
49. l Generative sentence
4. Generative model
N-gram
문장 전체를 길이 N의 Sub-String으로 나누는 방법
어절 단위의 N-Gram으로 분할
ex) 나 이대나온 여자야
- unigram(1-gram) : {나, 이대나온, 여자야}
- bigram(2-gram) : {나 이대나온, 여자야}
- trigram(3-gram) : {나 이대나온 여자야}
음절 단위의 N-Gram으로 분할
Ex) 나 이대나온 여자야
- unigram(1-gram) :
{나,이,대,나,온,여,자,야}
- bigram(2-gram) : {나, 이대, 대나, 나온,
여자, 자야}
- trigram(3-gram) : {나, 이대나, 대나온,
여자야}
203
50. l Generative sentence
4. Generative model
N-Gram 확률
A단어 다음에 B단어가 나올 확률 : 조건부 확률
𝑃 𝐴 𝐵 =
𝑃 𝐴, 𝐵
𝑃 𝐵
𝑃 𝐴, 𝐵 = 𝑃 𝐴 𝐵 𝑃(𝐵)
P(A, B, C, D) = 𝑃 𝐴 𝑃 𝐵 𝐴 𝑃 𝐶 𝐴, 𝐵 𝑃(𝐷|𝐴, 𝐵, 𝐶)
uni-gram
bi-gram
N-gram
직전의 사건에 의해서만 영향을 받는다고 가정한다면, Markov Assumption
204
51. l Generative chatbot (MCMC)
4. Generative model
N-Gram 확률 결과
목적: 기존 가사 데이터를 이용하여 가사 생성 모델 제안
N-gram 확률을 연속적으로 이어붙여
MCMC(Markov chian Monte-carlo) 기반의
문장 생성 챗봇 제작
𝑃 𝐶|𝐴, 𝐵 =
𝐴, 𝐵 단어 다음에 등장했던 𝐶 단어의 빈도 수
𝐴, 𝐵 단어 다음에 등장했었던 단어의 빈도수의 합
𝑃 𝐶|𝐴, 𝐵 × 𝑃 𝐷 𝐵, 𝐶 …
205