앞서 진행했던 코드와 동일합니다. 트윗 데이터에 대한 토큰화를 진행하려고 bert.bert_tokenization.FullTokenizer를 사용합니다.
코드 10-60 텍스트 토큰화
url = 'https://tfhub.dev/tensorflow/bert_en_uncased_L-24_H-1024_A-16/2'
bert_layer = hub.KerasLayer(url, trainable=True) ------ ①
FullTokenizer = bert.bert_tokenization.FullTokenizer
vocab_file = bert_layer.resolved_object.vocab_file.asset_path.numpy()
do_lower_case = bert_layer.resolved_object.do_lower_case.numpy()
tokenizer = FullTokenizer(vocab_file, do_lower_case)
① 버트 토크나이저에서 사용했던 예제와 차이는 trainable.True를 사용한다는 것입니다. 즉, 버트 임베딩을 이용하여 학습을 진행하겠다는 의미입니다.
train.csv 텍스트 데이터에 대한 전처리를 합니다.
코드 10-61 텍스트 전처리
def bert_encoder(texts, tokenizer, max_len=512):
all_tokens = []
all_masks = []
all_segments = []
for text in texts:
text = tokenizer.tokenize(text) ------ 입력 데이터를 토큰으로 변환
text = text[:max_len-2]
input_sequence = ["[CLS]"] + text + ["[SEP]"] ------ CLS/SEP 처리(버트에서 입력 값에 대한 임베딩을 위한 식별자)
pad_len = max_len - len(input_sequence) ------ 제로 패딩 적용
tokens = tokenizer.convert_tokens_to_ids(input_sequence)
tokens += [0] * pad_len
pad_masks = [1] * len(input_sequence) + [0] * pad_len
segment_ids = [0] * max_len
all_tokens.append(tokens)
all_masks.append(pad_masks)
all_segments.append(segment_ids)
return np.array(all_tokens), np.array(all_masks), np.array(all_segments)
train_input = bert_encoder(train_data, tokenizer, max_len=160)
train_labels = train_data.target.values