1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | import numpy as np import pandas as pd import matplotlib.pyplot as plt from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.preprocessing.sequence import pad_sequences from google.colab import drive drive.mount('/content/drive') data = pd.read_csv('/content/drive/My Drive/spam.csv', encoding='latin1') # pandas 데이터 셋 전처리 - 필요한 컬럼만 남긴다 del data['Unnamed: 2'] del data['Unnamed: 3'] del data['Unnamed: 4'] data['v1'] = data['v1'].replace(['ham', 'spam'], [0, 1]) # 데이터 셋 정리 X_data = data['v2'] Y_data = data['v1'] # 문장 전처리 과정 - 토큰화 후 정수 인코딩 tokenizer = Tokenizer() tokenizer.fit_on_texts(X_data) seq = tokenizer.texts_to_sequences(X_data) word_to_index = tokenizer.word_index # 문장 전처리 과정 - padding vocab_size = len(word_to_index) + 1 max_len = 0 for s in seq: tmp_len = len(s) if max_len < tmp_len: max_len = tmp_len pad_data = pad_sequences(seq, maxlen = max_len) # train set, test set 만들기 num_data = len(X_data) num_train = int(num_data * 0.8) num_test = num_data - num_train train_X = pad_data[:num_train] train_Y = Y_data[:num_train] test_X = pad_data[num_train:] test_Y = Y_data[num_train:] from tensorflow.keras.layers import SimpleRNN, Embedding, Dense from tensorflow.keras.models import Sequential # RNN 모델 구상 model = Sequential() model.add(Embedding(vocab_size, 32)) model.add(SimpleRNN(32)) model.add(Dense(1, activation='sigmoid')) # RNN 훈련 구상 model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc']) history = model.fit(train_X, train_Y, epochs=5, batch_size=64, validation_split=0.2) | cs |
자연어처리는 데이터 전처리가 제일 어려운 것 같다.
물론 이 정도 실습은 간단한 축에 속하지만..
아쉬운건, 훈련이 완료된 모델에 예제 하나만 넣어서 결괏값을 추출하고 싶은데
어떻게 해야하는지를 모르겠다.
전체적으로 무난했던 실습이다
'기계학습 > 자연어 처리 머신러닝' 카테고리의 다른 글
IMDB 실습 - LSTM 모델 (0) | 2020.02.12 |
---|---|
LSTM 실습 - 로이터 뉴스 분류기 (0) | 2020.02.12 |
공부정리 (0) | 2020.02.02 |
글자레벨 번역기 코드 - 딥러닝을 이용한 자연어처리 입문 (0) | 2020.01.31 |
GRU, ELMO - 딥러닝을 이용한 자연어처리 입문 (0) | 2020.01.28 |