lime과 shap 실습을 위한 전처리
데이터를 다운받아 연다. 이 데이터는 영화평과 그 긍/부정을 표시한 것이다.
import pandas as pd
df = pd.read_csv('https://github.com/euphoris/datasets/raw/master/imdb.zip')
데이터를 분할한다.
from sklearn.model_selection import train_test_split
review_train, review_test, y_train, y_test = train_test_split(df['review'], df['sentiment'], test_size=0.2, random_state=42)
CountVectorizer
를 초기화한다.
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(max_features=1000, stop_words='english')
훈련용 텍스트를 단어 문서 행렬로 바꾸고, 같은 방식으로 테스트용 텍스트도 단어 문서 행렬로 바꾼다.
x_train = cv.fit_transform(review_train)
x_test = cv.transform(review_test)
전처리된 결과를 저장한다.
import joblib
joblib.dump(
{
'cv': cv,
'review_train': review_train,
'review_test': review_test,
'x_train': x_train,
'x_test': x_test,
'y_train': y_train,
'y_test': y_test
},
'tmi.pkl'
)
['tmi.pkl']
텐서플로로 텍스트의 긍/부정을 예측하는 간단한 모형을 만들어 학습시킨다.
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=[1000], activation='sigmoid')
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(x_train.toarray(), y_train.values, validation_split=0.2, epochs=30, callbacks=[tf.keras.callbacks.EarlyStopping(monitor='val_accuracy')])
모형을 저장한다.
model.save('simple-text-model.krs')