따라서 데이터 전처리가 완료되면 다음 구조를 갖게 됩니다.
1. 토큰화
2. CLS/SEP
3. 마스크 제로 패딩
전처리가 완료되었으므로 이제 모델을 생성합니다. 모델은 사전 훈련된 버트(pre-trained BERT)를 이용할 예정이므로 트랜스포머 블록에 대한 입력 값과 완전연결층(밀집층)을 정의합니다(은닉층은 트랜스포머 블록 사용).
코드 10-62 모델 생성
def build_model(max_len=512):
input_word_ids = tf.keras.layers.Input(shape=(max_len,),
dtype=tf.int32, name='positional_ids') ------ 입력층에서 사용할 input_word_ids 정의
input_segment_ids = tf.keras.layers.Input(shape=(max_len,),
dtype=tf.int32, name='segment_ids') ------ 입력층에서 사용할 input_segment_ids 정의
input_mask = tf.keras.layers.Input(shape=(max_len,),
dtype=tf.int32, name='input_mask') ------ 입력층에서 사용할 input_mask 정의
pooled_output, sequence_output = bert_layer([input_word_ids,
input_mask,
input_segment_ids]) ------ 버트 계층의 입력 값으로 앞서 정의한 input_word_ids, input_segment_ids, input_mask 사용
clf_output = sequence_output[:, 0, :]
output = tf.keras.layers.Dense(1, activation='sigmoid')(clf_output) ------ 출력층(완전연결층) 정의
model = tf.keras.Model(inputs=[input_word_ids, input_mask, input_segment_ids],
outputs=output) ------ ①
model.compile(optimizer=RMSprop(lr=2e-6),
loss='binary_crossentropy',
metrics=['accuracy'])
return model
model = build_model(max_len=160)
model.summary()