웹사이트 검색

감정 분석을 위해 신경망을 훈련시키는 방법


저자는 Write for DOnations 프로그램을 선택했습니다.

소개

텍스트 마이닝 및 자연어 처리와 밀접한 관련이 있는 감정 분석은 서면 리뷰에서 정성적 평가를 추출합니다. 많은 사람들이 일반 대중에게 영화가 얼마나 좋은지 평가하기 위해 영화 리뷰를 읽습니다. 영화에 숫자나 별점을 부여하는 것이 양적 성공 또는 실패를 나타내지는 않지만 영화 리뷰 모음은 이러한 영화에 대한 질적 관점을 제공합니다. 텍스트 영화 리뷰는 시청자가 영화의 좋은 요소와 나쁜 요소라고 생각하는 것을 식별할 수 있습니다. 리뷰를 보다 심층적으로 검토하면 영화가 리뷰어의 기대에 부응하는지 종종 드러납니다. 감정 분석은 주제에 대한 리뷰어의 관점 또는 리뷰의 전반적인 양극성을 평가하는 데 사용할 수 있습니다.

감정 분석을 수행하려면 작가(또는 평론가)가 주어진 주제(이 경우 영화 ). 의견 마이닝의 하위 도메인인 감정 분석은 정형, 반정형 또는 비정형 텍스트 데이터에서 특정 주제에 대한 감정과 의견을 추출하는 데 중점을 둡니다. 다른 의견 마이닝 모델과 마찬가지로 감정 분석을 사용하여 브랜드 및 제품 의견을 모니터링하고 고객 요구 사항을 이해할 수 있습니다. 감정 분석은 텍스트의 양극성(긍정적, 부정적 또는 중립적)에 초점을 맞추고 검토자의 특정 감정과 감정(모델이 정의한 화남, 행복, 슬픔 등), 긴급성, 심지어 의도(관심이 있든 없든).

이 자습서에서는 keras를 사용하여 영화 리뷰의 감정을 예측하는 신경망을 구축합니다. 모델은 50,000개의 영화 리뷰가 포함된 IMDb(International Movie Database) 리뷰 데이터 세트를 사용하여 리뷰를 두 가지 범주(긍정적 또는 부정적)로 분류합니다. 이 자습서를 마치면 딥 러닝 모델을 만들고 신경망을 훈련시켜 감정 분석을 수행하게 됩니다.

전제 조건

  • RAM이 8GB 이상인 Ubuntu 22.04 서버 인스턴스 1개. 이 서버에는 초기 서버 설정 가이드에 따라 설정할 수 있는 sudo 권한과 방화벽이 구성된 루트가 아닌 사용자가 필요합니다.\n
  • Python 3, pip 및 Python venv 모듈이 서버에 설치되어 있으며 Python 3 설치 및 프로그래밍 환경 설정 방법에 대한 자습서의 1단계와 2단계를 따라 설정할 수 있습니다.\n
  • Jupyter 노트북이 원격 서버에 설치되어 실행 중입니다. 원격 서버에서 Jupyter 노트북을 설치, 실행 및 연결하는 방법으로 설정할 수 있습니다.\n
  • Jupyter Notebook에 액세스하는 데 사용할 최신 웹 브라우저입니다.\n
  • 기계 학습 및 딥 러닝 모델에 대한 근본적인 이해. 기계 학습 소개에서 자세히 알아보십시오.\n

1단계 - Jupyter 노트북 환경 준비

Jupyter Notebook은 대화형 계산 환경을 제공하므로 명령줄 터미널에서 Python이 아닌 딥 러닝 모델을 실행하는 데 자주 사용됩니다. Jupyter Notebook을 사용하면 명령과 출력이 하나의 노트북에 나타나므로 분석 프로세스를 개발하는 동안 생각을 문서화할 수 있습니다.

Jupyter 노트북에서 이 자습서를 따르려면 새 노트북을 열고 이 단계에서 수행할 필수 종속 항목을 설치해야 합니다.

참고: 원격 서버에서 자습서를 따르는 경우 포트 전달을 사용하여 로컬 컴퓨터의 브라우저에서 Jupyter 노트북에 액세스할 수 있습니다.

터미널을 열고 다음 명령을 입력합니다.

  1. ssh -L 8888:localhost:8888 your_non_root_user@your_server_ip

서버에 연결되면 출력에서 제공하는 링크로 이동하여 Jupyter 노트북에 액세스합니다. 이 튜토리얼의 나머지 부분에서는 이 터미널을 열어 두십시오.

전제 조건에서 서버에 Jupyter Notebook 환경을 설정합니다. 서버에 로그인한 후 가상 환경을 활성화합니다.

  1. source ~/environments/my_env/bin/activate

그런 다음 Jupyter Notebook 애플리케이션을 실행하여 애플리케이션을 시작합니다.

  1. jupyter notebook

실행하고 연결하면 브라우저에서 사용자 인터페이스에 액세스하게 됩니다. 새로 만들기 드롭다운 메뉴에서 Python3(ipykernel) 옵션을 선택하면 제목 없는 Python 노트북이 있는 새 탭이 열립니다. 이 파일에서 코드를 실행할 것이므로 파일 이름을 neural_network.ipynb로 지정합니다.

그런 다음 브라우저 Jupyter Notebook의 첫 번째 셀에서 pip를 사용하여 데이터 처리에 필요한 종속 항목을 설치합니다.

!pip install numpy
!pip install tensorflow

numpy 종속성은 선형 대수에서 배열을 조작하는 데 사용됩니다. 이 튜토리얼에서는 다음 함수를 호출하여 IMDb 데이터 세트를 배열 형식으로 조작하는 데 사용할 것입니다.

tensorflow 종속성을 사용하면 Python에서 딥 러닝 모델을 학습하고 배포할 수 있습니다. tensorflow를 설치하면 TensorFlow 위에서 실행되는 keras도 설치되며 TensorFlow와 사용자 사이에 추상화 수준을 도입하여 딥 러닝 모델을 빠르게 개발할 수 있습니다. 이 자습서에서는 전체 감정 분석 교육 및 배포 프로세스에 tensorflowkeras를 사용합니다.

Jupyter Notebook에 두 개의 명령을 추가한 후 실행 버튼을 눌러 실행합니다.

Jupyter Notebook은 각 종속성이 다운로드되고 있음을 나타내는 실행 출력을 제공합니다. 새 입력 셀은 이 출력 아래에서 사용할 수 있으며 여기에서 다음 코드 줄을 실행할 수 있습니다.

종속성 다운로드가 완료되면 가져옵니다. 다음 셀에 다음 줄을 추가하고 실행을 누릅니다.

import numpy as np
from keras.utils import to_categorical
from keras import models
from keras import layers

참고: 이러한 명령을 실행할 때 TensorFlow 및 TensorRT 라이브러리에 대한 경고가 표시될 수 있습니다. 일반적으로 Tensorflow는 CPU, GPU 및 TPU와 함께 작동합니다. 경고 오류는 설치된 TensorFlow 버전이 프로세스 속도를 높일 수 있는 AVX 및 AVX2 작업을 사용할 수 있음을 나타냅니다. 이 경고는 오류가 아니라 TensorFlow가 추가 속도를 위해 CPU를 활용한다는 참고입니다.

keras 도구 설치에는 IMDB 데이터베이스가 내장되어 있습니다. 데이터 세트에는 50/50 학습/테스트 분할이 있습니다. 이 자습서에서는 신경망의 과잉 훈련을 방지하기 위해 80/20 분할을 설정합니다. 따라서 다운로드 후 데이터를 데이터와 대상에 병합하여 나중에 자습서에서 80/20 분할을 수행할 수 있습니다. 다음 줄을 새 셀에 추가하고 실행을 누릅니다.

from keras.datasets import imdb
(training_data, training_targets), (testing_data, testing_targets) = imdb.load_data(num_words=10000)
data = np.concatenate((training_data, testing_data), axis=0)
targets = np.concatenate((training_targets, testing_targets), axis=0)

이 셀은 IMDb 데이터 세트를 가져오고 훈련 데이터를 테스트 데이터와 조인합니다. 기본적으로 데이터 세트는 training_data, training_targets, testing_datatesting_targets로 분할됩니다.

Jupyter 노트북에는 활동 로그가 표시되며 데이터 세트를 다운로드하는 데 몇 분 정도 걸립니다.

Output
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb.npz 17464789/17464789 [==============================] - 0s 0us/step

이 단계에서는 패턴, 가정 및 테스트 이상에 대해 이 데이터 세트를 조사할 수 있도록 Jupyter Notebook 환경을 준비했습니다. 다음으로 전체 데이터 세트에 대해 탐색적 데이터 분석을 수행합니다.

2단계 - 데이터 세트 분석

이제 데이터 세트를 평가하여 이 데이터로 모델을 교육하는 방법을 식별합니다. 데이터 세트에 대한 탐색적 데이터 분석을 수행하면 데이터 세트의 기본 구조가 명확해집니다. 이 프로세스는 쉽게 눈에 띄지 않는 경향, 패턴 및 관계를 드러낼 수 있습니다. 이 정보는 실수를 감지하고, 가정을 폭로하고, 주요 변수 간의 관계를 이해하는 데 도움이 될 수 있습니다. 이러한 통찰력은 결국 적절한 예측 모델의 선택으로 이어질 수 있습니다.

이 데이터 세트의 첫 번째 작업은 출력 유형과 고유 단어 수를 검색하는 것입니다. 이 정보를 얻으려면 새 셀에서 다음 행을 실행하십시오.

print("The output categories are", np.unique(targets))
print("The number of unique words is", len(np.unique(np.hstack(data))))

이 셀은 데이터세트의 고유한 감정 수(긍정적 [1] 또는 부정적 [0])와 리뷰에 사용된 고유한 단어의 수를 인쇄합니다.

다음 출력이 인쇄됩니다.

Output
The output categories are [0 1] The number of unique words is 9998

이 출력의 첫 번째 줄은 영화가 양수(1) 또는 음수(0)로 레이블 지정되었음을 나타냅니다. 두 번째 줄은 데이터 세트에 9998개의 고유 단어가 있음을 나타냅니다.

다음으로 영화 리뷰의 평균 단어 길이와 단어의 표준 편차를 확인합니다. 이렇게 하려면 새 셀에서 다음 코드 줄을 실행합니다.

length = [len(i) for i in data]
print("The Average Review length is", np.mean(length))
print("The Standard Deviation is", round(np.std(length)))

이 셀은 데이터 세트에 대한 평균 검토 길이와 표준 편차를 인쇄합니다.

Output
The Average Review length is 234.75892 The Standard Deviation is 173

이 평가는 평균 리뷰 길이가 234단어이고 표준 편차가 173임을 나타냅니다.

다음으로 새 셀에서 다음 행을 실행하여 데이터 세트의 요소(첫 번째 색인)를 인쇄합니다.

print("Label:", targets[0])
print(data[0])

데이터 세트의 첫 번째 요소에 대한 영화 리뷰-라벨 쌍이 인쇄됩니다.

Output
Label: 1 [1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 4468, 66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 2, 9, 35, 480, 284, 5, 150, 4, 172, 112, 167, 2, 336, 385, 39, 4, 172, 4536, 1111, 17, 546, 38, 13, 447, 4, 192, 50, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 4613, 469, 4, 22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 1247, 4, 22, 17, 515, 17, 12, 16, 626, 18, 2, 5, 62, 386, 12, 8, 316, 8, 106, 5, 4, 2223, 5244, 16, 480, 66, 3785, 33, 4, 130, 12, 16, 38, 619, 5, 25, 124, 51, 36, 135, 48, 25, 1415, 33, 6, 22, 12, 215, 28, 77, 52, 5, 14, 407, 16, 82, 2, 8, 4, 107, 117, 5952, 15, 256, 4, 2, 7, 3766, 5, 723, 36, 71, 43, 530, 476, 26, 400, 317, 46, 7, 4, 2, 1029, 13, 104, 88, 4, 381, 15, 297, 98, 32, 2071, 56, 26, 141, 6, 194, 7486, 18, 4, 226, 22, 21, 134, 476, 26, 480, 5, 144, 30, 5535, 18, 51, 36, 28, 224, 92, 25, 104, 4, 226, 65, 16, 38, 1334, 88, 12, 16, 283, 5, 16, 4472, 113, 103, 32, 15, 16, 5345, 19, 178, 32]

이 출력은 긍정(1)으로 표시된 데이터 세트의 첫 번째 리뷰와 전체 텍스트를 정수 인덱스로 제공합니다. 기본적으로 텍스트 리뷰는 정수 기반 단어 인덱스 목록으로 숫자 인코딩 형식으로 제공됩니다. 리뷰의 단어는 전체 데이터 세트에서 나타나는 빈도에 따라 인덱싱됩니다. 예를 들어 데이터에서 두 번째로 많이 사용되는 용어는 정수 2로 인코딩됩니다.

다음에는 텍스트 리뷰를 읽을 수 있도록 사전을 검색하여 단어 색인을 다시 원래 단어로 매핑합니다. 새 셀에서 다음 줄을 실행합니다.

index = imdb.get_word_index()
reverse_index = dict([(value, key) for (key, value) in index.items()])
decoded = " ".join( [reverse_index.get(i - 3, "#") for i in data[0]] )
print(decoded)

이 코드 블록은 숫자 형식을 읽을 수 있는 텍스트로 디코딩합니다. get_word_index() 함수를 사용하여 IMDb 데이터세트의 인덱스에 대한 dict 매핑 단어를 검색합니다. 그런 다음 reverse_index 변수는 단어 색인을 뒤집은 후 색인을 단어에 매핑하는 사전을 보유합니다. dict() 함수는 데이터 값을 키-값 쌍으로 저장하는 사전을 만듭니다. 코드의 마지막 두 줄은 데이터 세트의 첫 번째 시퀀스를 디코딩하고 인쇄합니다.

get_word_index() 함수를 사용하면 다음과 같은 결과를 받게 됩니다.

Output
# this film was just brilliant casting location scenery story direction everyone's really suited the part they played and you could just imagine being there robert # is an amazing actor and now the same being director # father came from the same scottish island as myself so i loved the fact there was a real connection with this film the witty remarks throughout the film were great it was just brilliant so much that i bought the film as soon as it was released for # and would recommend it to everyone to watch and the fly fishing was amazing really cried at the end it was so sad and you know what they say if you cry at a film it must have been good and this definitely was also # to the two little boy's that played the # of norman and paul they were just brilliant children are often left out of the # list i think because the stars that play them all grown up are such a big profile for the whole film but these children are amazing and should be praised for what they have done don't you think the whole story was so lovely because it was true and was someone's life after all that was shared with us all

get_word_index() 함수는 이 리뷰에 대한 숫자 데이터를 읽을 수 있는 단어로 디코딩하고 인식할 수 없는 모든 단어를 #로 바꿉니다.

이 단계에서는 각 검토가 어떻게 준비되었는지 검토하면서 데이터 세트를 평가했습니다. 이 정보를 사용하여 이제 훈련할 데이터를 준비합니다.

3단계 - 훈련을 위한 데이터 준비

이 단계에서는 교육용 데이터 세트를 준비합니다. 딥 러닝 모델은 일반적으로 훈련된 데이터에서 개발됩니다.

이 데이터를 준비할 때 보다 정확한 모델 결과로 이어지는 귀중한 통찰력을 얻을 수 있도록 정확한 방식으로 형식을 지정합니다. 데이터 준비를 위한 몇 가지 기술에는 기능 선택(모델과 관련된 기능 선택), 기능 엔지니어링(인코딩 방법을 사용하여 데이터 세트의 변수를 유용한 기능으로 변환) 및 분할이 포함됩니다. 데이터 세트를 훈련 및 테스트 세트로 변환합니다.

이 자습서에서는 데이터를 테스트 및 훈련 세트로 분할하고 데이터를 벡터화하여 기능 엔지니어링을 수행합니다.

다음 셀에서 다음 코드 줄을 실행하여 데이터 세트의 모든 리뷰를 벡터화합니다.

def vectorize(sequences, dimension = 10000):
    results = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1
    return results

data = vectorize(data)
targets = np.array(targets).astype("float32")

먼저 각 리뷰에 정확히 10,000개의 숫자가 포함되도록 각 리뷰를 벡터화하고 채웁니다. 이 프로세스를 통해 10,000단어보다 짧은 모든 리뷰는 0으로 채웁니다. 데이터 세트에서 가장 큰 리뷰가 대략 그 길이이고 신경망은 모든 입력이 동일한 크기여야 하기 때문입니다.

vectorize() 함수는 10000의 미리 설정된 차원과 배열의 두 가지 매개변수를 사용합니다. 이 함수는 0으로 채워진 새 배열을 반환한 다음 나머지 데이터를 인코딩하는 numpyzeros() 메서드를 호출합니다. 코드의 마지막 두 줄을 사용하여 데이터 세트에서 정의된 함수를 호출한 다음 데이터 세트의 대상 열을 32비트 부동 소수점 수로 변환합니다. 32비트 부동 소수점은 약 7자리 정밀도의 부동 소수점 숫자입니다. 대상 열을 32비트 부동 소수점 숫자로 변환하면 열의 정밀도와 딥 러닝 모델이 확장됩니다.

데이터 준비의 마지막 단계로 데이터를 교육 및 테스트 세트로 분할합니다. 훈련 세트에 40,000개의 리뷰를, 테스트 세트에 10,000개의 리뷰를 넣어 앞에서 설명한 80/20 분할을 제공합니다.

새 셀에서 다음 명령어를 실행하여 데이터세트를 분할합니다.

test_x = data[:10000]
test_y = targets[:10000]
train_x = data[40000:]
train_y = targets[40000:]

데이터 세트는 1:4 비율로 테스트 및 학습 세트로 분할되었으며, 학습 및 테스트 세트의 대상은 train_ytest_y로 저장되고 리뷰는 훈련 및 테스트 세트는 각각 train_xtest_y로 저장됩니다. 새 데이터로 모델을 테스트하고 평가하는 것 외에도 데이터 세트를 분할하면 알고리즘이 훈련 데이터를 너무 잘 모델링할 때 모델이 과적합되는 것을 방지할 수 있습니다.

이 단계에서는 데이터를 준비하고 데이터 세트를 학습 및 테스트 세트로 분리했습니다. 원시 데이터를 딥 러닝 모델에 사용할 수 있는 기능으로 변환했습니다. 훈련을 위해 준비된 데이터로 이제 딥 러닝 모델이 사용할 신경망을 구축하고 훈련합니다.

4단계 - 신경망 구축 및 훈련

이제 신경망을 구축할 수 있습니다.

빌드하려는 모델 유형을 정의하여 시작합니다. keras에서 사용할 수 있는 모델에는 Model Sequential API와 Functional API의 두 가지 유형이 있습니다. 이 자습서에서는 계층별로 모델을 생성할 수 있는 Sequential API를 사용합니다.

참고: 더 복잡한 딥 러닝 모델의 경우 Sequential API를 사용하면 계층을 공유하거나 여러 입력 또는 출력이 있는 모델을 생성할 수 없으므로 Functional API를 사용해야 합니다. 그러나 이 자습서에서는 Sequential API로 충분합니다.

새 셀에서 다음 명령을 실행하여 모델을 순차 모델로 설정합니다.

model = models.Sequential()

참고: 이 시점에서 적절한 컴파일러 태그로 TensorFlow를 다시 빌드하라는 또 다른 TensorFlow 오류가 표시될 수 있습니다. 이 오류는 TensorFlow 2.x 패키지가 CPU와 GPU를 모두 지원하므로 TensorFlow가 GPU 드라이버를 찾고 있기 때문에 이전 오류 및 결과와 관련이 있습니다. 이 경고는 튜토리얼 결과에 영향을 미치지 않으므로 무시해도 됩니다.

레이어는 딥 러닝 모델의 기초를 형성하므로 다음으로 입력, 숨김 및 출력 레이어를 추가합니다. 그 사이에 모든 레이어에 dense를 사용하고 과적합을 방지하기 위해 dropout을 사용합니다.

새 셀에서 다음 줄을 실행하여 레이어를 추가합니다.

# Input - Layer
model.add(layers.Dense(50, activation = "relu", input_shape=(10000, )))
# Hidden - Layers
model.add(layers.Dropout(0.3, noise_shape=None, seed=None))
model.add(layers.Dense(50, activation = "relu"))
model.add(layers.Dropout(0.2, noise_shape=None, seed=None))
model.add(layers.Dense(50, activation = "relu"))
# Output- Layer
model.add(layers.Dense(1, activation = "sigmoid"))
model.summary()

허용 가능한 결과를 생성하기 때문에 숨겨진 레이어 내에서 relu 함수를 사용합니다. reluRectified Linear Unit을 의미하며, 음수 입력을 받거나 양수 값에 대한 값을 받으면 함수는 0을 반환합니다. 이 함수를 첫 번째 레이어에 추가하면 0을 반환하여 음수 값을 제거합니다. 이 자습서에서 relu 함수는 입력 레이어에 입력되는 모든 값이 신경 입력에 필요한 양수 값인지 확인합니다.

출력 레이어에서 01 값을 매핑하는 시그모이드 함수를 사용합니다. 출력이 양수(1) 또는 음수(0)이므로 시그모이드 함수는 출력 레이어가 < 코드>0 또는 <코드>1.

마지막으로 keras가 방금 구축한 모델의 요약을 출력하도록 할 것입니다.

방금 학습한 모델의 기능에 대한 요약을 받게 됩니다.

Output
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense (Dense) (None, 50) 500050 dropout (Dropout) (None, 50) 0 dense_1 (Dense) (None, 50) 2550 dropout_1 (Dropout) (None, 50) 0 dense_2 (Dense) (None, 50) 2550 dense_3 (Dense) (None, 1) 51 ================================================================= Total params: 505,201 Trainable params: 505,201 Non-trainable params: 0 _________________________________________________________________

다음으로 학습을 위해 모델을 컴파일하고 구성합니다. 평가 지표로 정확도를 사용합니다. 손실 함수는 훈련 중에 모델이 최소화해야 하는 양을 계산합니다. 실제 레이블과 예측 레이블 간의 교차 엔트로피 손실이 이진법(0 또는 1 ) 분류 신청.

모델을 컴파일하려면 다음 셀에서 다음 행을 실행하십시오.

model.compile(
optimizer = "adam",
loss = "binary_crossentropy",
metrics = ["accuracy"]
)

compile() 함수는 모델 아키텍처를 정의합니다. 이 정의에서 모델의 옵티마이저로 adam 알고리즘을 구현합니다. 이 알고리즘은 대략적인 1차 및 2차 모멘트를 기반으로 하는 경사 하강 방법입니다. 지표와 손실 매개변수는 매우 밀접하게 관련되어 있습니다. 지표 매개변수는 모델의 성능을 판단하는 방법을 정의하는 반면 손실 매개변수는 모델이 교육 중에 최소화하려는 양을 정의합니다. 여기에서 메트릭은 accuracy(모델이 올바르게 얻는 예측의 비율)이고 손실은 binary_crossentropy(레이블이 두 개뿐일 때 사용되는 레이블과 예측 사이의 메트릭)입니다. 클래스 [양수 1 및 음수 0]).

이제 모델을 훈련할 수 있습니다. 이렇게 하려면 32batch_size와 두 에포크만 사용합니다. 배치 크기는 신경망을 통해 전파될 샘플의 수이고 에포크는 전체 교육 데이터에 대한 반복입니다. 더 큰 배치 크기는 일반적으로 더 빠른 훈련을 의미하지만 때때로 더 느리게 수렴됩니다. 반대로 배치 크기가 작을수록 학습 속도는 느리지만 수렴 속도는 빨라집니다.

이제 입력을 입력에 매핑하기 위해 모든 매개변수를 올바른 값으로 가져오도록 모델 훈련을 시작합니다. 다음 셀에서 다음 줄을 실행합니다.

results = model.fit(
train_x, train_y,
epochs= 2,
batch_size = 32,
validation_data = (test_x, test_y)
)

.fit() 함수를 사용하여 모델을 훈련합니다. 이 함수는 데이터 세트에서 고정된 반복 횟수에 대해 딥 러닝 모델을 교육합니다. 이 함수는 두 가지 필수 매개변수를 사용합니다.

  • train_x는 입력 데이터를 나타냅니다.
  • train_y는 데이터가 훈련될 훈련 세트의 대상 데이터를 나타내며 다른 매개변수를 사용할 수 있습니다.

다른 매개변수에는 다음이 포함됩니다.

  • epochs(epoch가 제공된 전체 데이터에 대한 반복인 모델을 교육하는 epoch의 수).
  • batch_size(그레디언트 업데이트당 샘플 수).
  • validation_data(모델이 각 시대가 끝날 때 손실을 평가할 데이터).

이 코드는 2개의 에포크와 32의 배치 크기를 사용하여 모델을 훈련합니다. 즉, 전체 데이터 세트가 각 반복에서 사용되는 32개의 훈련 예제와 함께 신경망을 두 번 통과한다는 의미입니다. 유효성 검사 데이터는 test_xtest_y로 제공됩니다.

참고: 감정 분석 모델 교육은 RAM을 많이 사용합니다. 8GB RAM 서버에서 이 자습서를 실행하면 x의 할당이 사용 가능한 시스템 메모리의 10%를 초과합니다라는 경고가 표시될 수 있습니다. 이 경고가 발생하면 이 경고를 무시하고 자습서를 계속 진행할 수 있습니다. 훈련이 상당한 양의 여유 시스템 메모리를 사용하고 자습서의 나머지 부분에는 영향을 미치지 않는다고만 명시되어 있기 때문입니다.

이 단계에서는 딥 러닝 모델을 구축하고 준비한 데이터 세트에서 학습했습니다. 다음으로 이 단계에서 생성된 유효성 검사 데이터를 사용하여 다른 데이터 세트에 대해 모델의 성능을 평가합니다.

5단계 - 모델 평가

이 단계에서는 모델을 평가합니다. 모델 평가는 기계 학습 개선 및 개발 프로세스에 필수적입니다. 이 평가는 데이터를 나타내는 최상의 모델과 선택한 모델이 얼마나 잘 작동하는지 찾는 데 도움이 됩니다.

기계 학습 분류 모델에는 정확도, 정밀도, 재현율 및 F1 점수의 네 가지 기본 모델 평가 메트릭이 있습니다.

정확도는 모델이 올바른 예측의 일부를 평가하기 때문에 일반적으로 사용되는 성능 지표입니다. 정확도는 올바른 예측 수를 총 예측 수로 나누어 결정합니다. 이 자습서에서는 정확도를 사용하여 모델을 평가합니다.

이 모델의 맥락에서 정밀도는 예측된 긍정적인 영화 리뷰의 총 수에 대해 올바르게 예측된 긍정적인 영화 리뷰를 나타냅니다. 재현율은 데이터 세트에서 평가된 총 영화 리뷰 수로 올바르게 예측된 긍정적인 영화 리뷰의 구분입니다. Precision은 귀하의 모델이 긍정적으로 표시한 모든 영화 리뷰 중 실제로 긍정적인 리뷰는 몇 개입니까?라는 질문에 답합니다. 반대로 회상은 정말로 긍정적인 모든 영화 리뷰 중에서 몇 개를 긍정적으로 표시했습니까?라는 질문에 답합니다. F1 점수는 정밀도와 재현율 결과의 가중 평균입니다. 따라서 잘못 분류된 모든 리뷰를 고려합니다.

이 자습서에서는 정확도를 사용하여 모델 성능을 평가합니다. 다음 셀에서 다음 코드 줄을 실행합니다.

scores = model.evaluate(test_x, test_y, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))

이 코드는 모델의 정확도 점수를 점수라는 변수에 저장하고 화면에 출력합니다. .evaluate 함수는 세 개의 매개변수를 사용합니다.

  • x_test: 테스트 데이터 세트의 기능 열입니다.
  • y_test: 테스트 데이터 세트의 대상 열입니다.
  • verbose: 상세 모드.

다음 출력은 정확도와 함께 인쇄됩니다.

Output
Accuracy: 86.59%

이 훈련된 모델의 정확도는 86.59%입니다.

이 정확도 점수는 이 모델이 리뷰가 10회 중 9회 정도 긍정적인지 부정적인지를 정확하게 예측한다는 것을 나타냅니다. 코드 작업을 계속하여 분류기가 더 정확하게 수행되도록 할 수 있습니다. 모델의 성능을 높이고 정확도를 높이려면 모델의 에포크 수 또는 배치 크기를 늘릴 수 있습니다.

딥 러닝 모델(및 머신 러닝 모델)은 제공하는 데이터만큼 강력합니다. 따라서 더 많은 데이터를 추가하여 모델의 정확도를 높이는 경우가 많습니다. 그러나 이 모델에 사용되는 데이터는 내장되어 있으며 수정할 수 없습니다. 이 경우 4단계에서 모델에 더 많은 레이어를 추가하거나 에포크(전체 데이터 세트를 신경망을 통해 전달하는 횟수) 수를 늘려 모델의 정확도를 향상시킬 수 있습니다.

에포크 수를 늘리려면 model.fit() 셀의 에포크 수를 2에서 로 바꿉니다. 3(또는 다른 숫자), 해당 셀과 다음 셀을 다시 실행합니다.

results = model.fit(
train_x, train_y,
epochs= 3,
batch_size = 32,
validation_data = (test_x, test_y)
)

epoch의 수가 증가하여 훈련 데이터가 신경망을 총 3번 거치게 되며, 모델은 데이터로부터 학습할 수 있는 추가 기회를 갖게 됩니다. model.evaluate() 함수를 다시 실행하면 정확도가 업데이트된 새 출력을 받게 됩니다.

이 단계에서는 정확도를 계산하여 구축한 모델을 평가했습니다. 초기 계산 후 에포크 수를 늘려 모델을 개선하고 정확도 점수를 재평가했습니다.

결론

이 자습서에서는 keras를 사용하여 영화 리뷰의 감정을 긍정적 또는 부정적으로 분류하도록 신경망을 훈련했습니다. Stanford University 연구원이 수집한 IMDb 감정 분류 데이터 세트를 사용했습니다. 데이터 세트에는 이진 감정 분류를 위해 미리 다운로드한 keras 데이터 세트 중 하나가 포함되어 있습니다. 훈련을 위한 25,000개의 고도로 편향된 영화 리뷰 세트와 테스트를 위한 또 다른 25,000개의 데이터 세트에 액세스할 수 있습니다. 감정 분석을 위한 대규모 신경망 모델을 개발하기 위해 이 데이터 세트를 검토했습니다.

이제 신경망을 구축하고 교육했으므로 자신의 데이터로 이 구현을 시도하거나 다른 인기 있는 데이터 세트에서 테스트할 수 있습니다. 다른 keras 데이터 세트로 실험하거나 다른 알고리즘을 시도할 수 있습니다.

keras 및 TensorFlow 경험을 구축하려면 Keras 및 TensorFlow를 사용하여 직원 유지를 예측하기 위한 딥 러닝 모델 구축 방법에 대한 자습서를 따르십시오.