더북(TheBook)

① 엘모는 텐서플로 허브에서 가져온 것으로, 케라스에서 사용하려면 변환이 필요합니다. 즉, 데이터 이동이 텐서플로 → 케라스가 되도록 하는 함수를 생성합니다. 참고로 tf.squeeze()는 텐서에서 크기가 1인 차원을 삭제합니다.

② 모델은 엘모를 이용한 임베딩층을 거쳐서 뉴런이 256개 있는 은닉층을 거칩니다. 또한, 출력층에서 뉴런을 두 개 가지며, 활성화 함수로는 소프트맥스를 사용하고 모델의 손실 함수는 크로스 엔트로피(categorical_crossentropy)를 사용합니다.

혼동 행렬을 이용하여 모델에 대한 평가를 진행합니다.

from sklearn import metrics
print(metrics.confusion_matrix(y_test, y_preds))
print(metrics.classification_report(y_test, y_preds))

다음은 모델 평가에 대한 출력 결과입니다.

Epoch 1/1
5000/5000 [==============================] - 531s 106ms/step - loss: 0.0969 - accuracy: 0.9660
[[495   3]
 [ 9   65]]
               precision    recall    f1-score    support

         ham        0.98      0.99        0.99        498
        spam        0.96      0.88        0.92         74
    accuracy        0.98                              572
   macro avg        0.97      0.94        0.95        572
weighted avg        0.98      0.98        0.98        572

정확도에 대한 결과가 98%로 나쁘지 않습니다. 하지만 주의해야 할 사항이 있습니다. 엘모 모델을 훈련시킬 때는 CPU 혹은 GPU를 과하게 사용할 수 있으므로 모델을 훈련시키기 전에 CPU 및 GPU에 대한 사용률을 고려해야 합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.