코드출처 : 모두의 딥러닝
import numpy as np
from numpy import array
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Flatten,Embedding
docs = ["너무 재밌네요","최고예요","참 잘 만든 영화예요","추천하고 싶은 영화입니다","한번 더 보고싶네요","글쎄요","별로예요","생각보다 지루하네요","연기가 어색해요","글쎄요 재미없어요"]
classes = array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0])
1. 토큰화
from tensorflow.keras.preprocessing.text import Tokenizer
token = Tokenizer()
token.fit_on_texts(docs)
print(len(token.word_index))
print(token.word_index)
20
{'글쎄요': 1, '너무': 2, '재밌네요': 3, '최고예요': 4, '참': 5, '잘': 6, '만든': 7, '영화예요': 8, '추천하고': 9, '싶은': 10, '영화입니다': 11, '한번': 12, '더': 13, '보고싶네요': 14, '별로예요': 15, '생각보다': 16, '지루하네요': 17, '연기가': 18, '어색해요': 19, '재미없어요': 20}
x = token.texts_to_sequences(docs)
print('리뷰 텍스트, 토큰화 결과: \n', x)
리뷰 텍스트, 토큰화 결과:
[[2, 3], [4], [5, 6, 7, 8], [9, 10, 11], [12, 13, 14], [1], [15], [16, 17], [18, 19], [1, 20]]
2. 패딩 (데이터 길이를 맞춤)
len_list = []
for i in range(len(x)):
len_list.append(len(x[i]))
print('문장 별 길이: ', len_list)
print('문장 최대 길이: ', np.max(len_list))
문장 별 길이: [2, 1, 4, 3, 3, 1, 1, 2, 2, 2]
문장 최대 길이: 4
padded_x = pad_sequences(x,4)
print('패딩결과: \n', padded_x)
패딩결과:
[[ 0 0 2 3]
[ 0 0 0 4]
[ 5 6 7 8]
[ 0 9 10 11]
[ 0 12 13 14]
[ 0 0 0 1]
[ 0 0 0 15]
[ 0 0 16 17]
[ 0 0 18 19]
[ 0 0 1 20]]
3. 테스트 데이터 만들기
test_docs = ["영화 재밌네요","올해 영화 중 최고예요","참 잘 만든 영화예요","추천하고 싶지 않은 영화입니다","두번 더 보고싶네요","글쎄요","아주 별로예요","생각보다 재미없네요","배우 연기가 어색해요","글쎄요 재미없어요"]
classes_test = array([1, 1, 1, 0, 1, 0, 0, 0, 0, 0])
from tensorflow.keras.preprocessing.text import Tokenizer
token_test = Tokenizer()
token_test.fit_on_texts(test_docs)
test_x = token_test.texts_to_sequences(test_docs)
print("\n리뷰 텍스트, 토큰화 결과:\n", test_x)
리뷰 텍스트, 토큰화 결과:
[[1, 3], [4, 1, 5, 6], [7, 8, 9, 10], [11, 12, 13, 14], [15, 16, 17], [2], [18, 19], [20, 21], [22, 23, 24], [2, 25]]
from tensorflow.keras.preprocessing.sequence import pad_sequences
test_padded_x = pad_sequences(test_x, 4)
4. 딥러닝 모델 적용
word_size = len(token.word_index) + 1
word_size
21
model = Sequential()
model.add(Embedding(26, 10, input_length=4))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(padded_x, classes, epochs=20)