더북(TheBook)

먼저 np.max() 함수로 y_train의 종류를 구하니 46개의 카테고리로 구분되어 있음을 알 수 있었습니다(0부터 세기 때문에 1을 더해서 출력합니다). 이 중 8,982개는 학습용으로, 2,246개는 테스트용으로 준비되어 있습니다.

그런데 print(X_train[0])으로 기사를 출력해 보니 단어가 나오지 않고 [1, 2, 2, 8, 43…] 같은 숫자가 나옵니다. 이처럼 딥러닝은 단어를 그대로 사용하지 않고 숫자로 변환한 후 학습할 수 있습니다. 여기서는 데이터 안에서 해당 단어가 몇 번이나 나타나는지 세어 빈도에 따라 번호를 붙였습니다. 예를 들어 3이라고 하면 세 번째로 빈도가 높은 단어라는 의미입니다. 이러한 작업을 위해 tokenizer() 같은 함수를 사용하는데, 케라스는 이 작업을 이미 마친 데이터를 불러올 수 있습니다.

기사 안의 단어 중에는 거의 사용되지 않는 것들도 있습니다. 모든 단어를 다 사용하는 것은 비효율적이므로 빈도가 높은 단어만 불러와 사용하겠습니다. 이때 사용하는 인자가 바로 테스트셋과 학습셋으로 나눌 때 함께 적용했던 num_words=1000의 의미입니다. 빈도가 1~1,000에 해당하는 단어만 선택해서 불러오는 것입니다.

또 하나 주의해야 할 점은 각 기사의 단어 수가 제각각 다르므로 이를 동일하게 맞추어야 한다는 것입니다. 이때는 다음과 같이 데이터 전처리 함수 sequence()를 이용합니다.

from tensorflow.keras.preprocessing import sequence

# 단어의 수를 맞추어 줍니다.
X_train = sequence.pad_sequences(X_train, maxlen=100)
X_test = sequence.pad_sequences(X_test, maxlen=100)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.