KT 에이블스쿨 39일차(1)

박기범·2023년 3월 27일
0

에이블스쿨

목록 보기
45/95
post-custom-banner

오늘부터 자연어처리에 대해 배우기 시작했습니다.



언어지능 딥러닝

텍스트 마이닝이란 텍스트 데이터로부터 유용한 정보를 추출하여 의사결정에 도움을 받을 수 있는 결과를 도출하는 행위를 의미합니다. 수학 자체도 어떻게 보면 기호를 사용하는 언어 체계이며 인산이 사용하는 언어 체계를 구체적으로 수치화하는 것이라 볼 수 있습니다. 딥러닝에서 전문성에 대해 분업화가 시작하면서 텍스트 마이닝이라는 단어가 없어지기 시작하면서 자연어 처리라는 말이 떠오르기 시작했습니다. 인간의 문법 규칙은 방대하기 때문에 컴퓨터가 학습을 하기에는 힘들다는 단점이 있었고 RNN을 통해 이런 문제를 해결하고자 자연어처리가 발전하고 있습니다.



RNN(Recurrent Neural Network)

과거의(정돈된) 정보와 현재의(raw) 정보를 동시에 고려하여 모델의 목적에 맞는 representation을 하여 새로운 특징(노드)를 만드는 고 이 행위를 반복하는 것이 RNN입니다.

히든 스테이트의 의미는 해당 시점의 히든레이어(RNN Layer)을 의미합니다.

똑같은 가중치를 재사용하면 일관된 규칙(시점은 차이가 있을 수 있음)으로 Feature을 representation할 수 있습니다.

Input의 shape는 [전체 데이터의 수 , 시점의 수, 각 시점마다 고려할 Feature의 수] 입니다.



실습시작

전처리는 다 되어있다고 가정하고 모델링부터 작성하겠습니다.

	#keras 초기화
    keras.backend.clear_session()

    # sequential 모델 선언
    model = keras.models.Sequential()

    #인풋레이어 만들기
    model.add(keras.layers.Input(shape=(20,1)))

    #히든 레이어 만들기
    model.add(keras.layers.SimpleRNN(16, activation='tanh', return_sequences=True))

    #히든 레이어 만들기
    model.add(keras.layers.SimpleRNN(32, activation='tanh', return_sequences=True))

    #flatten
    model.add(keras.layers.Flatten())

    #아웃풋 레이어
    model.add(keras.layers.Dense(1))

    #컴파일
    model.compile(loss='mae', optimizer='adam')

해당 코드를 살펴보면 SimpleRNN를 통해 RNN층을 쌓아주고 있습니다. 근데 옵션으로 이제 return_sequences=True를 사용하고 있는 것을 확인할 수 있습니다. 해당 옵션은 True 혹은 False의 값을 줄 수 있는데 만약 위와 같이 True의 값을 주게 되면 모든 시점에서 제작한 특징 값들이 다음 레이어로 넘어간 다는 것을 의미합니다. 즉, RNN 다음 레이어는 모든 시점의 정보를 고려하게 됩니다. 만약 False라면 RNN이 제작한 정보 중 맨 마지막 시점(최신정보)만 다음 레이어가 고려하게 됩니다.

이렇게 True의 값을 주게 되어 금붕어 문제를 해결할 수 있습니다.

	model.summary()

해당 코드를 통해 모델의 구조를 살펴보면 아래와 같은 결과 값을 얻을 수 있습니다.

Flatten shape가 640이 나온 것은 이전 레이어에서 나온 20 * 32의 값 입니다. 맨 위의 simple_rnn (SimpleRNN)의 레이어를 보게되면 shape가 (None, 20, 16)인데 해당 결과를 분석하자면 20개의 시점을 모두 반영한 16개의 히든스테이트가 있기 때문에 이런 결과가 나왔습니다. 그 이유는 위에서 return_sequences=True를 했기 때문입니다. 만약 값을 False로 주게 된다면 맨 마지막 시점의 히든 스테이트만 영향을 끼치기 때문에 (None, 16)라는 결과가 나옵니다.



추가 용어 정리

RNN Layer를 Hidden Layer라고 하는데 시점별 정보를 언급하고 싶다면 Hidden State라고 하면 됩니다.

Dense는 앞에 있는 Layer로 부터 새로운 Feature를 생성합니다.

1epoch는 모든 Data를 한번씩 전부 이용하여 업데이트를 마친 것을 1 epoch라고 합니다.







자연처리를 배우는 나날이 기대가 됩니다.




※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.

profile
개발자가 되기 위한 한걸음
post-custom-banner

0개의 댓글