더북(TheBook)

앞서 진행했던 코드와 동일합니다. 트윗 데이터에 대한 토큰화를 진행하려고 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
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.