이제 실습을 해봅시다!
책에는 영화를 보고 남긴 리뷰를 학습하는 것으로 나와 있는데 저는 내일 보러갈 '엘리멘탈'의 리뷰를 가져와보겠습니다.
#리뷰
docs = ['기대 안 하고 봤는데도 재미 없어요', '제 기준엔 좀 지루했어요', '생각보다 스토리도 넘 뻔하고 루즈해요', '음악이 별로였어요. 방해하는 느낌', '너무 유치하다.'
'완전 감동적이고 소재가 특이해서 짱 좋았어요', '시간 가는줄 모르고 봤어요', '잘봤습니다', '재밌게 잘 봤습니다. 추천합니다!', '너무너무 감동적이고 재미있게 봤습니다!!']
#긍정: 1, 부정: 0
classes = array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1])
리뷰 10개를 가져오고 긍정은 1, 부정은 0으로 놓습니다.
#토큰화
token = Tokenizer()
token.fit_on_texts(docs)
print(token.word_index)
x = token.texts_to_sequences(docs)
print('\n리뷰 텍스트, 토큰화 결과:\n', x)
토큰화를 해서 출력해주고
확인하면 이렇게 나옵니다. 각각 가지고 있는 토큰의 개수가 다른데 학습 데이터의 길이가 같아야 하므로 길이를 똑같이 맞춰주는 패딩(padding)을 거쳐주겠습니다.
#패딩
padded_x = pad_sequences(x, 6)
print('\n패딩 결과:\n', padded_x)
마지막으로 단어 임베딩과 딥러닝 모델을 만들어 보겠습니다.
#임베딩 단어 수
word_size = len(token.word_index)+1
#모델
model = Sequential()
model.add(Embedding(word_size, 8, input_length=6))
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)
print("\n Accuracy: %.4f" %(model.evaluate(padded_x, classes)[1]))
출력 결과는
이렇습니다.
밑은 전체 코드입니다.
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
from tensorflow.keras.utils import to_categorical
from numpy import array
#리뷰
docs = ['기대 안 하고 봤는데도 재미 없어요', '제 기준엔 좀 지루했어요', '생각보다 스토리도 넘 뻔하고 루즈해요', '음악이 별로였어요. 방해하는 느낌', '너무 유치하다.',
'완전 감동적이고 소재가 특이해서 짱 좋았어요', '시간 가는줄 모르고 봤어요', '잘봤습니다', '재밌게 잘 봤습니다. 추천합니다!', '너무너무 감동적이고 재미있게 봤습니다!!']
#긍정: 1, 부정: 0
classes = array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1])
#토큰화
token = Tokenizer()
token.fit_on_texts(docs)
print(token.word_index)
x = token.texts_to_sequences(docs)
print('\n리뷰 텍스트, 토큰화 결과:\n', x)
#패딩
padded_x = pad_sequences(x, 6)
print('\n패딩 결과:\n', padded_x)
#임베딩 단어 수
word_size = len(token.word_index)+1
#모델
model = Sequential()
model.add(Embedding(word_size, 8, input_length=6))
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)
print("\n Accuracy: %.4f" %(model.evaluate(padded_x, classes)[1]))
'프로그래밍 > 인공지능' 카테고리의 다른 글
RNN - LSTM 활용 (0) | 2023.07.31 |
---|---|
순환 신경망(Recurrent Neural Network) (0) | 2023.07.30 |
NLP - 원-핫 인코딩, 단어 임베딩 (0) | 2023.07.23 |
자연어 처리(Natural Language Processing) - 토큰화 (0) | 2023.07.23 |
CNN - 은닉층 추가 (0) | 2023.07.22 |