관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

텍스트를 위한 인공 신경망 5 - 순환 신경망으로 IMDB 리뷰 분류하기 3 : 단어 임베딩 사용하기 및 단원 마무리하기 본문

인공지능/딥러닝

텍스트를 위한 인공 신경망 5 - 순환 신경망으로 IMDB 리뷰 분류하기 3 : 단어 임베딩 사용하기 및 단원 마무리하기

huenuri 2024. 12. 18. 09:50

이어서 단어 임베딩을 사용하는 방법에 대해서 공부해 보겠다. 이것만 하면 2단원 학습은 마치게 된다.


 

 

 

 

 

단어 임베딩 사용하기

 

순환 신경망에서 틱스트를 처리할 때 즐겨 사용하는 방법은 단어 임베딩이다. 단어 임베딩은 각 단어를 고정된 크기의 실수벡트로 바꾸어 준다.

 

 

 

 

 

이런 오류가 떠서 코드를 이처럼 수정했다. 경고 메시지 Argument input_length is deprecated는 Embedding 레이어에서 input_length를 명시할 필요가 없다는 뜻이다. TensorFlow 및 Keras의 최신 버전에서는 입력 데이터의 길이를 자동으로 인식한다.

 

그다음 SimpleRNN 층과 Dense 층은 이전과 동일하다.

 

 

 

하지만 출력 결과 0으로 나온다. model2.summary() 결과에서 Output Shape가 '?'로 표시되고 Param #가 0인 이유는 모델이 아직 입력 데이터의 크기를 인식하지 못했기 때문이다.

Keras 모델은 입력 데이터가 실제로 모델에 전달될 때 비로소 레이어의 출력 크기와 파라미터 수를 계산한다. 즉, 모델이 아직 빌드되지 않은 상태라는 뜻이다. 이 상태를 "unbuilt"라고 한다.

 

해결 방법

모델을 명시적으로 빌드하거나 첫 번째 레이어에 Input 객체를 추가해 입력 크기를 고정하면 해결된다.

방법 1 : Input 객체 사용 (권장)

Input() 객체를 사용해서 입력 크기를 명시하면 모델이 즉시 빌드된다.

 

 

 

방법 2 : 모델 빌드 명시

build() 메서드를 사용해 모델을 명시적으로 빌드할 수도 있다.

model2.build(input_shape=(None, 100))  # 입력 배치 크기와 시퀀스 길이 지정
model2.summary()

 

 

 

 

 

책에서는 31번째에서 끝났는데 내가 실행한 코드는 26번째에서 끝났다. 난 원-핫 인코딩을 사용하지 않았기 때문에 그런 것 같다. 

 


 

 

 

 

 

단원 마무리 및 확인 문제 풀기

 

 

 

 

 

 


 

 

 

 

 

학습을 마치고

앞 절에서 배웠던 순환 신경망의 개념을 실제 모델을 만들어 보면서 구체화해 보았다. 텐서플로와 케라스는 완전 연결 신경망, 합성곱 신경망뿐 아니라 다양한 순환층 클래스를 제공하기 때문에 손쉽게 순환 신경망을 만들 수 있다.

이번 절에서는 순환 신경망의 MNIST 데이터셋으로 생각할 수 있는 유명한 IMDB 리뷰 데이터셋을 사용했다. 이 작업은 리뷰의 감상평을 긍정과 부정으로 분류하는 이진 분류 작업이다.

 

두 가지 모델을 훈련했다. 먼저 입력 데이터를 원-핫 인코딩으로 변환하여 순환층에 직접 주입하는 방법을 사용했다. 두 번째는 정수 시퀀스를 그대로 사용하기 위해 모델 처음에 Embedding 층을 추가했다. 단어 임베딩은 단어마다 실수로 이루어진 밀집 텍터를 학습하기 때문에 단어를 풍부하게 표현할 수 있다.

 

정말 어려운 공부를 마쳐서 감사하다. 오늘 새벽 5시부터 공부를 시작해서 2단원까지 5시간 가까이 한 끝에 겨우 마칠 수 있었다. 언어지능 생각보다 어려운 것 같다.