njs03332 / ml_study

3 stars 0 forks source link

2023/12/08 ~ 2024/01/04 #78

Open danbi5228 opened 10 months ago

danbi5228 commented 10 months ago
danbi5228 commented 10 months ago

assign roles -s 1208 -c 1 2 3

njs03332 commented 10 months ago
0 1 2
member 주선미 한단비 김유리
chapter 1 2 3
givitallugot commented 10 months ago

16.2 감성분석

실전 프로젝트에서는 직접 전처리를 해야함

이번에는 텐서플로 연산만 사용해서, 전처리를 모델 자체에 포함시킨 방법

danbi5228 commented 10 months ago

16.2.1 마스킹

임베딩 층이 입력과 크기가 같은 마스크 텐서(ID 0인 위치만 False, 나머지 True) 를 만들고

모델에 의해 이어지는 모든 층에 타임 스텝 차원이 유지되는 한 자동으로 전파됨

mask = keras.layers.Lambda(lambda inputs: K.not_equal(inputs, 0))(inputs) z = keras.layers.Embedding(vocab_size + num_oov_buckets, embed_size)(inputs)

GRU 층이 위의 마스크 텐서를 받음

z = keras.layers.GRU(128, return_sequences=True)(z, mask=mask)

시퀀스를 반환하지 않고 마지막 타임 스텝의 출력만 반환해서, Dense 층에는 마스크 텐서가 전달되지 않음

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() 콜백을 사용하면 텐서보드에 학습된 임베딩을 시각화할 수 있음
- 특정 목표에 맞는 단어 임베딩 학습을 하기보다는 사전 훈련된 임베딩을 재사용하는 방향으로 검토하는 것을 권장
njs03332 commented 10 months ago

16.2.2 사전훈련된 임베딩 재사용하기

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"])