Google tensorflow certification 08
Google Tensorflow Certification 08
Category 4 - 자연어처리 (NLP)
자언어 전처리(Nature Language Preprocessing)
Step 1. 토큰화(Tokenizer) : 자연어를 단위로 쪼갠다.(문장 단위, 단어 단위, 알파벳 단위 등…)
Step 2. 치환 : 토큰을 숫자(인덱스)로 치환한다.
Step 3. 길이 맞추기 : 기준이 되는 길이로 문장을 자르거나 0을 붙혀서 길이를 맞춘다.
모델링 레이어(추가)
Embedding Layer : 차원을 감소시켜주는 레이어. 단어의 관계도 파악하기 수월
기존값을 넣어주면 차원의 저주에 빠져서 값이 0에 수렴함
RNN(Recurrent Neural Network, 순환 신경망) : 순서(시간)을 반영하는 레이어
문장이 길어지면 Gradient 소실이 발생
LSTM(Long-Short Term Memory) : RNN의 단점을 개선한 레이어
장기-단기 기억을 모두 활용해서 Gradient 소실을 최소화.
-
many to one 기법
-
many to many 기법
Bidirectional Layer : 단어를 예측할 때 양방향에서 예측할 수 있게 해주는 레이어
실습(Sarcasm)
Step 1. Import
import json
import urllib
import tensorflow_datasets as tfds
import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Embedding, LSTM, Dense, Bidirectional, Flatten
from tensorflow.keras.models import Sequential
from tensorflow.keras.callbacks import ModelCheckpoint
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
Step 2. Preprocessing
# 전처리할 데이터 로드
url = 'https://storage.googleapis.com/download.tensorflow.org/data/sarcasm.json'
urllib.request.urlretrieve(url, 'sarcasm.json')
with open('sarcasm.json') as f:
datas = json.load(f)
전처리(preprocessing) 요구 조건
- image(x), label(y)를 분할
# 빈 리스트에 분할시키기
sentences = []
labels = []
for data in datas:
sentences.append(data['headline'])
labels.append(data['is_sarcastic'])
# Train data set / Validation data set 분할
training_size = 20000
train_sentences = sentences[:training_size]
train_labels = labels[:training_size]
validation_sentences = sentences[training_size:]
validation_labels = labels[training_size:]
# Tokenizer Setting
vocab_size = 1000 # Vocab(던어) 개수
oov_tok = "<OOV>" #Out Of Vocab(빈도수 기준 단어 개수를 넘는 것들)은 <OOV>토큰으로 표시
# 토큰화
tokenizer = Tokenizer(num_words=vocab_size, oov_token='<OOV>')
tokenizer.fit_on_texts(train_sentences) # 딕셔너리로 반환(key = 단어, vlaue = 숫자)
댓글남기기