본문 바로가기

machine learning56

Char based Text to CNN 한글 적용하기 Text의 각 Character들을 (한글로 치면 하나의 음절) 하나의 특징데이터로 삼고 CNN을 이용해서 분류작업을 해보기로 했다. 기본 Text to CNN에 대한 간략한 설명. http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/ 대략적으로 설명하자면 각각의 text내의 word 들을 vector로 변환한 후 해당 vector 값들을 나열해서 2차원 이미지 배열 처럼 만든다. 예를들어 I like coffee 라는 text가 있다면 I, like, coffee 이 단어들을 각각 3차원 벡터로 변환을 하고 ([1,0,0], [0,1,0], [0,0,1]) 변환된 벡터를 나열하면 3 * 3의 행렬이 생성된다... 2018. 4. 10.
[SCIKITLEARN] naive bayes를 이용해서 문서 분류 하기 Naive bayes를 이용해서 문서 분류를 해보자. Naive bayes는 bayes 정리의 일부분이다. 앞에 Naive라는 수식어가 붙은 이유는 몇 가지 Naive한 가정을 기반으로 정의된 이론이기 때문에 Naive bayes라고 불린다. 그렇기 때문에 우선 bayes 정리에 대해서 살펴보자.A라는 분류 항목을 가지는 p1(x,y) 이라는 확률 방정식과 B라는 분류 항목을 가지는 p2(x,y)라는 확률 방정식이 있다고 가정을 해보자. 아래와 같은 가정이 성립할 것이다.만약에 p1(x,y) > p2(x,y)이면, x, y는 A에 속한다.만약에 p1(x,y) < p2(x,y)이면, x, y는 B에 속한다.분류를 위해 우리는 p1과 p2의 확률을 계산할 수 있어야 하며, 이를 계산하기 위해서 조건부 확률을.. 2017. 12. 18.
[TENSORFLOW] seq2seq 기반 챗봇 만들기 2017/07/12 - [machine learning] - [TENSORFLOW] LSTM Dual encoder 기반 챗봇 만들기 지난 포스팅에 검색 기반 챗봇을 구현했다면 이번에는 generative model의 대표격인 seq2seq를 활용해서 챗봇을 만들어 보자. seq2seq의 대표적인 구조이다. encoder 부분에서는 입력 응답을 받아 하나의 hidden code 값으로 표현을 해주고 decoder 영역에서는 hidden code 값과 start tag를 받아 가장 적합한 결과 단어들을 추출해 준다. 여기서 train과 test의 모델이 각각 다르게 나타나는데, train의 경우에는 decoder의 output과는 별개로 훈련 셋이 input으로 들어가는데 반해 test 모델의 경우에는 d.. 2017. 7. 14.
[TENSORFLOW] Debugging TENSORFLOW DEBUGGING 방법에 대해 알아보자. 우선 TENSORFLOW는 lazy evaluation 방법으로 동작하기 때문에 debugging 해서 출력 값을 알아내기가 상당히 힘들다. 그래서 나는 python pudb package를 사용하였다. 우선 아래와 같이 pudb를 설치하자. $> pip3 install pudb 그 후에 debug 하고자 하는 소스 코드에 아래와 같이 입력해준다. import pudb pudb.set_trace() 위 코드가 입력된 후 코드를 실행시키면 아래와 같이 파란 화면이 뜨는 것을 확인할 수 있다. ctrl-x를 누르면 command 창으로 넘어갈 수 있고, 다시 ctrl-x를 누르면 code 창으로 넘어간다. code 창에서는 n을 누르면 step b.. 2017. 7. 13.
[TENSORFLOW] LSTM Dual encoder 기반 챗봇 만들기 해당 포스팅은 아래의 wildml 블로그에서 소개한 코드를 참조로 작성하였다. http://www.wildml.com/2016/04/deep-learning-for-chatbots-part-1-introduction/ 챗봇을 크게 검색 기반형 챗봇과 generative 챗봇으로 나눌 수 있다. 검색 기반은 일반적으로 후보 응답 셋들과 모델을 통해 예측된 결과 벡터와의 유사도를 구해 가장 유사도가 높은 결과 응답을 정답으로 나타내며, generative의 경우 기존 응답 셋을 활용하는게 아니라 유사도 높은 단어의 조합으로 새로운 응답 결과를 나타내는 방식을 말한다. 우리는 여기서 검색 기반형 챗봇에 대해 알아볼 것이며, 기본적인 모델의 구조는 아래와 같다. 위쪽의 c1,c2,ct에 질문 문장이 구성된 단어.. 2017. 7. 12.
[TENSORFLOW] Sharing variables tensorflow에서는 변수를 공유해서 쓸 수 있는 기능을 제공하고 있다. 가령 아래의 예제를 살펴보자. 아래의 예제는 relu function을 5개 생성하는 것이 목적인데, 생성 시에 threshold 파라미터를 함께 넘겨줘서 초기화를 진행하고 있다. def relu(X, threshold):with tf.name_scope("relu"):[...]return tf.maximum(z, threshold, name="max") threshold = tf.Variable(0.0, name="threshold")X = tf.placeholder(tf.float32, shape=(None, n_features), name="X") relus = [relu(X, threshold) for i in range.. 2017. 6. 16.
Doc2Vec doc2vec 방식이 생각보다 정말 간단해서 word2vec open source에 doc2vec 기능을 넣어보기로 했다. 우선 간략하게 doc2vec 방식을 설명하자면 아래의 그림과 같다. (DM 방식과 DBOW 방식이 있는데 일단 DM만 구현하기로 함..) DM은 distributed memory 방식이라고 해서 word 들을 학습할 때 각각의 학습 단계를 vector에 기억시키고 학습된 최종 vector를 해당 document의 vector라고 정의하는 방식이다. 구현은 정말 간단하다. 기존 존재하던 word2vec 코드에 paragraph 용 벡터 메모리를 하나 추가로 할당해준다.for(i = 0; i < (unsigned int)doc_count; i++){ for(j = 0; j < (unsi.. 2017. 5. 23.
[TENSORFLOW]RNN 어떤 특징에 대한 답을 학습시키는 것이 아니라 특징의 문맥도 학습시키자라는 개념에서 나온 것이 RNN이라고 할 수 있다. 예를 들어 노래를 부를 때 처음부터 부르면 노래를 부르기가 쉽지만 갑자기 중간부터 부르라고 하면 어떤 가사인지 생각나지 않는 경우가 있다. 이런 식으로 sequence 자체를 기억시키자는 개념에서 나온 것이 바로 RNN이다. 간단한 encoder - decoder diagram을 살펴보자.X(t)는 t시간에 들어온 입력 값, Win은 인코딩하기 위한 vector, Z(t)는 인코딩된 결과, Wout은 디코딩 하기 위한 vector, Y(t)는 t시간에서의 디코딩 결과 값이다. 이번에는 여기다가 시간 정보를 추가해 보자.t시간 뿐만 아니라 ...,t-2,t-1,....,t+1,t+2.... 2017. 5. 12.
[TENSORFLOW]CNN-Classification 2017/05/08 - [machine learning] - [TENSORFLOW] CNN-CONVOLUTION2017/05/09 - [machine learning] - [TENSORFLOW]CNN-MAXPOOLINGconvolution을 통해 각각 다른 관점에서의 이미지를 제공하고, maxpooling을 통해 정보의 차원을 낮춰 계산을 단순하게 했다면, 이제는 이 둘을 연결해서 실제로 이미지를 classification 해보자. 아래의 코드를 살펴보자. 이미지 전처리 함수와 convolution, maxpooling 함수는 이전 포스팅에서 충분히 다루었기 때문에 생략하겠다.model 함수를 보자.24x24 input 이미지에 64개의 5x5 마스크들을 필터링 한다. 이렇게 하면 24x24의 이미지가 .. 2017. 5. 11.