Open danbi5228 opened 11 months ago
assign roles -s 1208 -c 1 2 3
0 | 1 | 2 | |
---|---|---|---|
member | 주선미 | 한단비 | 김유리 |
chapter | 1 | 2 | 3 |
실전 프로젝트에서는 직접 전처리를 해야함
이번에는 텐서플로 연산만 사용해서, 전처리를 모델 자체에 포함시킨 방법
그리고 전처리 함수를 만듦
각 리뷰에서 처음 300 글자만 남김, 훈련 속도를 높임 (처음 한두 문장에서 리뷰가 긍정적인지 아닌지 판단할 수 있기 때문에 성능에 크게 영향을 미치지 않음)
그 다음 정규식을 사용해서
태그를 공백으로 바꾸고, 문자와 작은 따옴표가 아닌 다른 모든 문자를 공백으로 바꿈
그리고 패딩 토큰 "
가장 많이 등장하는 단어는 다음 세 개
단어에 대한 ID를 확인해보면 다음과 같음
그리고 encode_words() 함수로 앞에서 만든 table 활용하여 단어를 인코딩
첫 번째 층은 단어 ID들을 임베딩으로 변환하는 Embedding 층
나머지 부분은 간단함, GRU 층 두 개로 구성되고 두 번째 층은 마지막 타임 스텝의 출력만 반환
출력층은 시그모이드 활성화 함수를 사용하여 영화에 대한 긍정적인 감정을 표현하고 있는지 추정 확률을 출력
그리고 모델을 컴파일한 후 몇 번의 에포크 동안 훈련
mask_zero=True
로 설정
K = keras.backend
inputs = keras.layers.Input(shape=[None])
mask = keras.layers.Lambda(lambda inputs: K.not_equal(inputs, 0))(inputs) z = keras.layers.Embedding(vocab_size + num_oov_buckets, embed_size)(inputs)
z = keras.layers.GRU(128, return_sequences=True)(z, mask=mask)
z = keras.layers.GRU(128)(z, mask=mask)
outputs = keras.layers.Dense(1, activation="sigmoid")(z) model = keras.Model(inputs=[inputs], outputs=[outputs]) # 이후 몇 번의 에포크를 훈련하면 리뷰 긍부정 판단을 꽤 잘함
- 주의) LSTM과 GRU층은 엔비디아의 cuDNN 라이브러리에 기반한 최적화된 GPU 구현을 가지고 있는데 마스킹을 지원하진 않음.
마스킹을 사용하면 이 층들이 훨씬 느린 기본 구현을 사용하고, 최적화된 구현을 사용하려면 매개변수들을 기본값으로 지정해줘야 함
- 마스킹을 지원하는 모든 층은 supports_masking 속성 값이 True 임
- 마스킹을 지원하는 사용자 정의 층을 구현하려면 call 메서드에 mask 매개변수를 추가해야 함
- TensorBoard() 콜백을 사용하면 텐서보드에 학습된 임베딩을 시각화할 수 있음
- 특정 목표에 맞는 단어 임베딩 학습을 하기보다는 사전 훈련된 임베딩을 재사용하는 방향으로 검토하는 것을 권장
nnlm-en-dim50
문장 임베딩 모듈 버전 1을 감성 분석 모델에 사용import tensorflow_hub as hub
model = keras.Sequential([
hub.KerasLayer("https://tfhub.dev/google/tf2-preview/nnlm-en-dim50/1", dtype=tf.string, input_shape=[], output_shape=[50],
keras.layers.Dense(128, activation="relu"),
keras.layers.Dense(1, activation="sigmoid")
])
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
모듈 이름은 문장 인코더 (문자열을 입력으로 받아 하나의 벡터로 인코딩)
두 개의 Dense
층을 추가해 감성분석모델을 만듦
hub.KerasLayer
층은 기본적으로 훈련되지 않으나, trainable=True
로 설정하면 작업에 맞게 미세조정 가능
IMDb 리뷰데이터셋 다운로드
datasets, info = tfds.load("imdb_reviews", as_supervised=True, with_info=True)
train_size = info.splits["train"].num_examples
batch_size = 32
trian_set = datasets["train"].batch(batch_size).prefetch(1)
history = model.fit(train_set, epochs=5)
TF 허브 모듈 URL 마지막 부분에서 필요한 버전 지정 -> 새 버전의 모듈이 릴리스되더라도 모델에 영향 x
url을 웹 브라우저에 입력하면 모듈에 관한 문서를 볼 수 있음
TFHUB_CACHE_DIR
환경변수에 원하는 디렉토리를 지정하면, 파일을 고정 디렉터리에 다운로드할 수 있음